【问题标题】:Unable to connect docker container to logstash via gelf driver无法通过 gelf 驱动程序将 docker 容器连接到 logstash
【发布时间】:2017-05-18 14:37:22
【问题描述】:

大家好,我无法将服务器容器日志发送到我的 ELK 堆栈。没有输入发送到logstash,所以我无法设置kibana 索引来收集日志。我认为我的问题出在端口设置上。

这是 LAMP 堆栈的 docker-compose yml(仅服务器服务):

version: '3'

services:
  server:
    build: ./docker/apache
    links:
      - fpm
    ports:
      - 80:80 # HTTP
      - 443:443 # HTTPS
    logging:
      driver: "gelf"
      options:
        gelf-address: "udp://127.0.0.1:5000"
        tag: "server"

这是 ELK 堆栈的 docker-compose yml,基于 deviantony/docker-elk github project

version: '2'

services:

  elasticsearch:
    build: elasticsearch/
    volumes:
      - ./elasticsearch/config/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml
    ports:
      - "9200:9200"
      - "9300:9300"
    environment:
      ES_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk

  logstash:
    build: logstash/
    volumes:
      - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
      - ./logstash/pipeline:/usr/share/logstash/pipeline
    ports:
      - "5000:5000"
    environment:
      LS_JAVA_OPTS: "-Xmx256m -Xms256m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    build: kibana/
    volumes:
      - ./kibana/config/:/usr/share/kibana/config
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:

  elk:
    driver: bridge

【问题讨论】:

    标签: docker logstash docker-compose elastic-stack gelf


    【解决方案1】:

    我发现了错误,我必须在logstash服务端口定义中指定UDP协议。

    logstash:
      build: logstash/
      volumes:
        - ./logstash/config/logstash.yml:/usr/share/logstash/config/logstash.yml
        - ./logstash/pipeline:/usr/share/logstash/pipeline
      ports:
        - "5000:5000/udp"
      environment:
        LS_JAVA_OPTS: "-Xmx256m -Xms256m"
      networks:
        - elk
      depends_on:
        - elasticsearch
    

    【讨论】:

      【解决方案2】:

      您需要使用 gelf 输入插件。下面是一个正常运行的 compose 文件的示例:

      services:
        logstash:
          image: docker.elastic.co/logstash/logstash:5.3.1
          logging:
            driver: "json-file"
          networks:
            - logging
          ports:
            - "127.0.0.1:12201:12201/udp"
          entrypoint: logstash -e 'input { gelf { } } output { stdout{ } }'    
      

      你可以通过运行来测试它:

      docker run --log-driver=gelf --log-opt gelf-address=udp://127.0.0.1:12201 ubuntu /bin/sh -c 'while true; do date "+%d-%m-%Y %H:%M:%S:%3N"; sleep 1 ; done
      

      并在 logstash 容器上检查 docker 日志。

      【讨论】:

      • 当然我正在使用这个管道配置input { gelf { port => 5000 type => docker } } output { elasticsearch { hosts => "elasticsearch:9200" } } 但不起作用
      • 尝试输出到标准输出而不是弹性,所以你确定问题不在logstash和弹性之间,而是在logstash没有收到任何东西。我告诉你的配置对我有用,所以你可以用它来找出你的配置问题出在哪里。 logstash 的日志是怎么说的?
      猜你喜欢
      • 2020-02-09
      • 2020-03-28
      • 1970-01-01
      • 1970-01-01
      • 2016-09-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-12
      • 1970-01-01
      相关资源
      最近更新 更多