gpt4 book ai didi

docker - 将日志从Docker上的应用程序发送到Elasticsearch

转载 作者:行者123 更新时间:2023-12-02 19:30:32 30 4
gpt4 key购买 nike

我已经使用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的 jetty 上养了一只麋鹿- https://github.com/deviantony/docker-elk

它的工作是所有日志都被保存。

但是当我将我的应用程序添加到docker image时它不起作用。

尝试在docker-compose的相同网络上配置它,我对link的配置也一样。
...
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运行应用程序时起作用。
我正在寻求建议。

我的港口:
  • 5000-logstash
  • 5601-kibana
  • 9200-elasticsearch
  • 9300-elasticsearch
  • 5044-filebeat
  • 最佳答案

    And on appsetting is : "ElasticsearchUrl": "http://localhost:9200"



    这对于容器网络是不正确的,此处的本地主机将仅与您的容器通信,而不与主机通信,而与其他容器通信。使用用户创建的网络,并且在撰写文件中使用服务名称 elasticsearch时,您需要连接到 "ElasticsearchUrl": "http://elasticsearch:9200"

    Then i added FileBeat on docker-compose



    我建议朝这个方向前进。从每个应用程序中删除日志处理,并集中所有容器日志的检索,将它们从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

    请注意,我使用的是配置,但您可以轻松切换该配置以将这些文件作为卷挂载到容器中。

    关于docker - 将日志从Docker上的应用程序发送到Elasticsearch,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51649717/

    30 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com