我已经使用nlog.config在我的应用程序(ASP.NET Core)上使用elasticsearch配置了nlog,如下所示:
<nlog xmlns="http://www.nlog-project.org/schemas/NLog.xsd"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
autoReload="true"
internalLogLevel="Trace"
internalLogFile="\\{ipmachine}\c\Log\internal-nlog.txt">
<extensions>
<add assembly="NLog.Targets.ElasticSearch"/>
</extensions>
<targets>
<target name="ElasticSearch" xsi:type="BufferingWrapper" flushTimeout="5000">
<target xsi:type="ElasticSearch"/>
</target>
</targets>
<rules>
<logger name="*" minlevel="Debug" writeTo="ElasticSearch" />
</rules>
</nlog>
在appsetting上是:"ElasticsearchUrl": "http://localhost:9200"
当我通过dotnet-run运行应用程序时,我在类似docker的码头上举起了麋鹿-https://github.com/deviantony/docker-elk
所有日志均已保存。
但是当我将我的应用程序添加到docker image时,它不起作用。
试图在docker-compose的相同网络上对其进行配置,我对链接也是如此。
...
elasticsearch:
...
networks:
- elk
...
myapp:
networks:
- elk
depends_on:
- elasticsearch
networks:
elk:
driver: bridge
即使在docker上检查elacticsearch的IP,并将appsetting更改为"ElasticsearchUrl": "http://172.21.0.2:9200"
然后我在docker-compose上添加了FileBeat:
filebeat:
image: docker.elastic.co/beats/filebeat:6.3.2
#command: "filebeat -e -c /etc/filebeat/filebeat.yml"
environment:
HOSTNAME: "my-server"
LOGSTASH_HOST: "localhost"
LOGSTASH_PORT: "5044"
volumes:
- "./filebeat/config/filebeat.yml:/etc/filebeat/filebeat.yml:rw"
使用filebeat.yml-
output:
logstash:
enabled: true
hosts:
- elk:5000
ssl:
certificate_authorities:
- /etc/pki/tls/certs/logstash-beats.crt
timeout: 15
filebeat:
prospectors:
-
paths:
- /var/log/syslog
- /var/log/auth.log
document_type: syslog
-
paths:
- "/var/log/nginx/*.log"
document_type: nginx-access
并且日志仍未保存在elasticsearch中。 它仅在我不通过Docker运行应用程序时有效。 我正在寻求建议。
我的端口:
答案 0 :(得分:1)
在appsetting上是:
"ElasticsearchUrl": "http://localhost:9200"
这对于容器网络是不正确的,此处的本地主机将仅与您的容器通信,而不与主机通信,而不与其他容器通信。使用用户创建的网络,并且撰写文件中的服务名称为elasticsearch
时,您需要连接到"ElasticsearchUrl": "http://elasticsearch:9200"
。
然后我在docker-compose上添加了FileBeat
我建议朝这个方向前进。从每个应用程序中删除日志处理,并集中所有容器日志的检索,将它们从docker引擎发送到Elastic。为此,只需让您的应用程序登录到stdout,而不是直接登录到Elastic。在群模式下,我在撰写文件的这一部分部署filebeat:
filebeat:
image: docker.elastic.co/beats/filebeat:${ELASTIC_VER:-6.2.4}
deploy:
mode: global
configs:
- source: filebeat_yml
target: /usr/share/filebeat/filebeat.yml
mode: 0444
- source: filebeat_prospector_yml
target: /usr/share/filebeat/prospectors.d/default.yml
mode: 0444
volumes:
- '/var/run:/host/var/run:ro'
- '/var/lib/docker:/host/var/lib/docker:ro'
我的filebeat.yml文件包含:
filebeat.config:
prospectors:
path: ${path.config}/prospectors.d/*.yml
reload.enabled: false
modules:
path: ${path.config}/modules.d/*.yml
reload.enabled: false
#processors:
#- add_cloud_metadata:
output.elasticsearch:
hosts: ['elasticsearch:9200']
username: elastic
password: changeme
然后将探矿者default.yml配置为从每个容器中提取日志:
- type: log
paths:
- '/host/var/lib/docker/containers/*/*.log'
json.message_key: log
json.keys_under_root: true
请注意,我使用的是配置,但是您可以轻松切换以将这些文件作为卷挂载到容器中。