Implementation of IdentityServerV3s IEventService using Serilogs ElasticSearchSink to push IdentityServerv3 events on a format useful for Kibana.
var elasticUri = new Uri("http://your.elasticsearch.instance/");
var options = new ElasticsearchSinkOptions(elasticUri);
var eventService = new ElasticSearchEventService(options);
Also support for custom mapping through the MappingConfigurationBuilder
class.
var configuration = new MappingConfigurationBuilder()
.DetailMaps(b => b
.For<AccessTokenIssuedDetails>(t => t
.Map(d => d.ClientId)
.Map("ScopeCount", d => d.Scopes.Count())
.MapRemainingMembersAsJson()
)
.DefaultMapAllMembers()
)
.AlwaysAdd("key", "value")
.AlwaysAdd("WeekDay", () => DateTime.Now.DayOfWeek)
.GetConfiguration();
var eventMapper = new DefaultLogEventMapper(configuration);
var elasticUri = new Uri("http://your.elasticsearch.instance/");
var options = new ElasticsearchSinkOptions(elasticUri);
var eventService = new ElasticSearchEventService(options, eventMapper);
where a simple implementation is
public class MyOwnPropertiesAdder : IAddExtraPropertiesToEvents
{
public IDictionary<string, string> GetNonIdServerFields()
{
return new Dictionary<string, string>{ { "SomeFieldName", "SomeValue" } };
}
}
This example adds SomeFieldName : "SomeValueIWantOnEveryEvent"
to every log statement sent to ElasticSearch.
PM> Install-Package IdentityServer3.ElasticSearchEventService
NuGet: https://www.nuget.org/packages/IdentityServer3.ElasticSearchEventService
- Thinktecture.IdentityServer3 - http://www.nuget.org/packages/Thinktecture.IdentityServer3/
- Serilog.Sinks.ElasticSearch - http://www.nuget.org/packages/Serilog.Sinks.ElasticSearch/
- Newtonsoft.Json - https://www.nuget.org/packages/Newtonsoft.Json/