ASP.NET Core WebAPI无法向Docker部署的Elasticsearch写入Serilog日志问题排查求助
ASP.NET Core WebAPI无法向Docker部署的Elasticsearch写入Serilog日志问题排查求助
大家好,我最近碰到一个棘手的问题——我的ASP.NET Core Web API没法通过Serilog把日志写入到Docker部署的Elasticsearch中。Kibana里完全看不到任何相关数据,我查了Elasticsearch的索引,也找不到我配置的那个自定义索引,想请各位帮忙看看哪里出问题了。
已安装的NuGet包
我在项目里安装了以下两个Serilog相关的包:
Serilog.AspNetCore版本8.0.0Serilog.Sinks.Elasticsearch版本9.0.3
Docker环境配置
我用docker-compose部署了Elasticsearch、Logstash(其实不确定这个是不是必须的)和Kibana,docker-compose.yaml的内容如下:
version: '3.4' services: elasticsearch: image: elasticsearch:7.16.1 container_name: elasticsearch environment: discovery.type: single-node ES_JAVA_OPTS: "-Xms512m -Xmx512m" ports: - "9200:9200" - "9300:9300" healthcheck: test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"] interval: 10s timeout: 10s retries: 3 networks: - elastic logstash: image: logstash:7.16.1 container_name: logstash environment: discovery.seed_hosts: logstash LS_JAVA_OPTS: "-Xms512m -Xmx512m" volumes: - ./logstash/pipeline/logstash-nginx.config:/usr/share/logstash/pipeline/logstash-nginx.config - ./logstash/nginx.log:/home/nginx.log ports: - "5000:5000/tcp" - "5000:5000/udp" - "5044:5044" - "9600:9600" depends_on: - elasticsearch networks: - elastic command: logstash -f /usr/share/logstash/pipeline/logstash-nginx.config kibana: image: kibana:7.16.1 container_name: kibana ports: - "5601:5601" depends_on: - elasticsearch networks: - elastic networks: elastic: driver: bridge
排查情况
我进入Elasticsearch容器查看现有索引,执行了以下命令:
docker exec -it elasticsearch bash curl -XGET 'http://localhost:9200/_cat/indices'
返回的索引列表里没有我预期的custom-index-{0:yyyy.MM}:
green open .geoip_databases OPKgHw3hSNCmc4r0-ioqbw 1 0 41 0 39mb 39mb green open .apm-custom-link mrXi9BXyRC60MSlY94IorQ 1 0 0 0 226b 226b green open .kibana_7.16.1_001 Dth8t0rHTt2xCSgqL5JLQg 1 0 296 13 2.3mb 2.3mb green open .apm-agent-configuration NgOE1PhPSlS3gDcHL8I1fw 1 0 0 0 226b 226b green open .kibana_task_manager_7.16.1_001 YWW69XjBTQSr0mknnyKqoQ 1 0 17 795 177.8kb 177.8kb
ASP.NET Core项目配置
Program.cs中的Serilog初始化
... builder.Host.UseSerilog( (context, configuration) => configuration.ReadFrom.Configuration(context.Configuration) ); var app = builder.Build(); ...
appsettings.json中的Serilog配置
"Serilog": { "Using": [ "Serilog.Sinks.Console", "Serilog.Sinks.ElasticSearch" ], "MinimumLevel": { "Default": "Verbose", "Override": { "Microsoft": "Warning", "System": "Warning" } }, "WriteTo": [ { "Name": "Console" }, { "Name": "ElasticSearch", "Args": { "nodeUris": "http://elasticsearch:9200", "indexFormat": "custom-index-{0:yyyy.MM}", "autoRegisterTemplate": true } } ], "Enrich": [ "FromLogContext", "WithMachineName", "WithThreadId" ], "Properties": { "Application": "Drivers.WebApi" } }
备注:内容来源于stack exchange,提问作者Anders Juul
相关产品推荐
相关产品推荐

