部署
Elasticsearch 官方地址 ,这里只需要装ES 和Kibana 。 Serilog 会直接把数据写入ES,绕开了 Logstash,所以不需要装Logstash
Elasticsearch 部署
1. 方便后面集群通信,先创建网络
docker network create elastic
2. 拉取镜像。
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.11.1
3. 启动容器
docker run --name es01 -e "ES_JAVA_OPTS=-Xms512m -Xmx512m" --net elastic -p 9200:9200 -itd -m 1GB docker.elastic.co/elasticsearch/elasticsearch:8.11.1
注意这里没有挂载,正常生产环境应该把config,data,plugin全部挂载出来
启动后默认会是https的,如果要关闭,修改elasticsearch.yml中一下配置,版本变化后可能配置不一样
# 如果之前启用了HTTPS,可能会有类似以下的设置 xpack.security.http.ssl.enabled: false
启动成功后查看日志(docker logs [容器名称]),会找到生产的密码,证书和token等信息,保存到本地,方便使用
如果后期忘记了密码和token,可以重新生成
重新生成token: docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana 重新生成密码:docker exec -it es01 /usr/share/elasticsearch/bin/elasticsearch-reset-password -u elasticx
会生成ca证书,这里可以考到本地计算机方便使用
docker cp es01:/usr/share/elasticsearch/config/certs/http_ca.crt .
如果需要部署集群,请查看上面的官方文档
启动成功后输入地址:https://ip:9200 。这里是https忽略浏览器的安全校验 ,输入 账号:elastic 密码:【上面启动生成密码】。成功后如下所示
Kibana 部署
1. 拉取 Kibana Docker 镜像。
docker pull docker.elastic.co/kibana/kibana:8.11.0
2. 启动 Kibana 容器
docker run --name kib01 --net elastic -p 5601:5601 -itd docker.elastic.co/kibana/kibana:8.11.0
这里生产环境需要把kibana.yml 挂载出来
访问 http://ip:5601 。最开始初始化需要输入Es启动时生成的token。注意,上面生成的token会有过期时间,如果过期了请重新生成token
输入后,查看 kibana 日志,会生成一个验证码,然后输入进去就行了
输入ES账号密码进行登录
代码实践
1. 引入nuget包
Serilog.AspNetCore Serilog.Sinks.Elasticsearch ###以下配置是为了扩展其他的,只需要上面两个包就行了 Serilog.Settings.Configuration Serilog.Sinks.Console Serilog.Sinks.Seq
2. 修改program.cs
builder.Host.UseSerilog(); Log.Logger = new LoggerConfiguration() .MinimumLevel.Verbose() //最小日志记录等级 .MinimumLevel.Override("Microsoft", LogEventLevel.Warning) //指定程序集最小记录级别 .MinimumLevel.Override("System", LogEventLevel.Warning) .ReadFrom.Configuration(Configuration) .Enrich.FromLogContext() .WriteTo.Elasticsearch(new ElasticsearchSinkOptions(new Uri("https://192.168.0.236:9200")) { //传送到ES中失败的日志会进入这里 FailureCallback = e => { Console.WriteLine("Unable to submit event " + e.MessageTemplate); }, EmitEventFailure = EmitEventFailureHandling.WriteToSelfLog | EmitEventFailureHandling.WriteToFailureSink | EmitEventFailureHandling.RaiseCallback, //FailureSink = new FileSink("./failures.txt", new JsonFormatter(), null), //如果日志发送不到ES则存放在这里 MinimumLogEventLevel = LogEventLevel.Information, ModifyConnectionSettings = conn => conn.ServerCertificateValidationCallback((sender, certificate, chain, sslPolicyErrors) => true) // 禁用证书验证 .ServerCertificateValidationCallback((sender, certificate, chain, errors) => true) // 禁用证书验证 .ServerCertificateValidationCallback((sender, certificate, chain, policyErrors) => true) // 禁用证书验证 .BasicAuthentication("elastic", "FyuSpCJMd2sX2iq27lKv"), // 如果启用了基本身份验证,这里要配置密码 //.CertificateFingerprint("94fd0d932dc79ed50523612ecc49225c91dde29f33c697b92f05357df6ace879"), //.ClientCertificate("./certs/http_ca.crt"),// 如果需要客户端证书 IndexFormat = "physicaltest-{0:yyyy.MM.dd}", //自动注册模板 AutoRegisterTemplate = true, //模板类型 AutoRegisterTemplateVersion = AutoRegisterTemplateVersion.ESv6, //自定义模板名称 //AutoRegisterTemplate = false, //CustomFormatter = new ElasticsearchJsonFormatter(renderMessage: true), //TemplateName="测试", }) .CreateLogger();
注意:如果开启了身份验证,一定要设置账号密码才能访问,本地使用了https+ip的形式,要禁用证书验证,否则数据发送不到ES上面,会进入FailureCallback
3. 测试代码
private IConfiguration _configuration; private readonly ILogger<ValuesController> _logger; public ValuesController(IConfiguration configuration, ILogger<ValuesController> logger) { _configuration = configuration; _logger = logger; } /// <summary> /// 测试日志 /// </summary> /// <param name="url"></param> /// <returns></returns> [HttpGet("GetTest")] public IActionResult GetTest() { _logger.LogError("这是一条测试消息Erro"); Log.Error("这是一条测试错误日志"); return Ok(); }
4. 查看效果
如果程序正常,会在界面上会自动创建索引在Stack Management =》Index Management 中查看索引,如果没有创建,看数据是否传到了ES中
在Discover中创建data view进行匹配对应的索引,查看日志
- Elasticsearch Logstash Serilog Kibana Linuxelasticsearch logstash serilog kibana elasticsearch logstash kibana平台 elasticsearch logstash windows kibana elasticsearch logstash kibana stack elasticsearch logstash kibana系统 elasticsearch username serilog sinks logstash kibana https beats elasticsearch docker kibana elasticsearch kibana elasticsearch索引kibana