Resumindo, o ElasticSource é uma base de dados open source utilizado para indexar logs e dados para análise. Kibana é uma interface visual para visualização do ElasticSource e o Serilog é um plugin para .net core para geração de logs.
Não vamos fugir, o ElasticSearch é cada vez mais popular é são vastos os exemplos e referências de uso na comunidade. Existem alguns motivos que aumentam essa aderência:
mkdir artigo
cd artigo
dotnet new mvc -n artigo-elastic -o src
cd artigo-elastic
code.
version: '3.1'
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:6.2.4
container_name: elasticsearch
ports:
- "9200:9200"
volumes:
- elasticsearch-data:/usr/share/elasticsearch/data
networks:
- docker-network
kibana:
image: docker.elastic.co/kibana/kibana:6.2.4
container_name: kibana
ports:
- "5601:5601"
depends_on:
- elasticsearch
networks:
- docker-network
networks:
docker-network:
driver: bridge
volumes:
elasticsearch-data:
docker-compose up -d
Digite no browser o endereço: http://localhost:9200 para acessar o Elasticsearch.
Digite no browser o endereço: http://localhost:5601 para acessar o Kibana.
Adicione os pacotes Nuget ao projeto
dotnet add package Serilog
dotnet add package Serilog.Sinks.ElasticSearch
dotnet add package Serilog.Extensions.Logging
dotnet restore
{
"Logging": {
"LogLevel": {
"Default": "Information",
"System": "Information",
"Microsoft": "Information"
}
},
"ElasticConfiguration": {
"Uri": "http://localhost:9200/"
}
}
using Microsoft.Extensions.Logging;
using Serilog;
using Serilog.Sinks.Elasticsearch;
…
public Startup(IConfiguration configuration, IHostingEnvironment hostingEnvironment)
{
var builder = new ConfigurationBuilder()
.SetBasePath(hostingEnvironment.ContentRootPath)
.AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
.AddJsonFile($"appsettings.{hostingEnvironment.EnvironmentName}.json", reloadOnChange: true, optional: true)
.AddEnvironmentVariables();
Configuration = builder.Build();
var elasticUri = Configuration["ElasticConfiguration:Uri"];
Log.Logger = new LoggerConfiguration()
.Enrich.FromLogContext()
.WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri(elasticUri))
{
AutoRegisterTemplate = true,
})
.CreateLogger();
}
…
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
/// ...
loggerFactory.AddSerilog();
/// ...
}
Para iniciar a visualização dos dados é necessários criar um indíce, acesse Management e defina o nome (ex: log20180926)
Em seguida selecione o campo timestastamp e clique em Create index pattern
Nesse momento já é possível visualizar os logs acessando a opção Discovery
Agora é com vocês, aprofunde seus estudos e divirta-se!