Не удается прочитать файловый поток журналов ввода

#docker #elasticsearch #centos7 #filebeat

Вопрос:

Я довольно новичок в докере и пытаюсь настроить ELK с помощью Filebeat. У меня есть контейнер для настройки файловой системы на машине 1, и я пытаюсь собрать журналы /mnt/logs/temp.log (которые не являются журналами контейнеров) в контейнеры ELK на машине 2. Вот моя конфигурация файловой системы:-

 filebeat.config:
  modules:
    path: ${path.config}/modules.d/*.yml
    reload.enabled: false

filebeat.autodiscover:
  providers:
    - type: docker
      hints.enabled: true
      hints.default_config:
        type: container
        paths:
          - /mnt/logs/temp.log

processors:
- add_cloud_metadata: ~

output.elasticsearch:
  hosts: '${ELASTICSEARCH_HOSTS:42.23.12.131:9042}'
 

Даже если я изменю конфигурацию filebeat.yml на приведенную ниже, она, похоже, не отправляет никаких журналов в ES:-

 filebeat.inputs:
- type: log
  paths:
    - /mnt/logs/temp.log

output.elasticsearch:
  hosts: ["42.23.12.131:9042"]
 

Может кто-нибудь, пожалуйста, помочь мне или указать мне на какие-либо статьи на сайте или документацию по этому поводу? Версия контейнера filebeat и ELK-7.14.0.

Редактировать: Файл docker-compose для ELK является:-

 version: '2.2'

services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.0
    volumes:
      - type: bind
        source: ./elasticsearch/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    environment:
      ES_JAVA_OPTS: "-Xmx512m -Xms512m"
      discovery.type: single-node
    ports:
      - "9200:9200"
      - "9300:9300"
    networks:
      - elk

  logstash:
    image: docker.elastic.co/logstash/logstash:7.14.0
    volumes:
      - type: bind
        source: ./logstash/config/logstash.yml
        target: /usr/share/logstash/config/logstash.yml
        read_only: true
      - type: bind
        source: ./logstash/pipeline.conf
        target: /usr/share/logstash/pipeline.conf
        read_only: true
    ports:
      - "5044:5044/udp"
      - "9600:9600"
    environment:
      LS_JAVA_OPTS: "-Xmx512m -Xms512m"
    networks:
      - elk
    depends_on:
      - elasticsearch

  kibana:
    image: docker.elastic.co/kibana/kibana:7.14.0
    volumes:
      - type: bind
        source: ./kibana/kibana.yml
        target: /usr/share/kibana/config/kibana.yml
        read_only: true
    ports:
      - "5601:5601"
    networks:
      - elk
    depends_on:
      - elasticsearch

networks:
  elk:
    driver: bridge

volumes:
  elasticsearch:
 

Комментарии:

1. хост 1 и хост 2 с докером-составляют файл конфигурации или другим способом ?

2. @YLR хост2, т. е. стек elk, настраивается с помощью docker-compose, тогда как хост1, т. е. контейнер filebeat, настраивается, следуя этой статье:- elastic.co/guide/en/beats/filebeat/current/…

3. Хорошо, не могли бы вы отправить наш файл docker-compose по вашему вопросу, похоже, что host1 (FB 1) не может видеть эластичный вне стека docker-compose

4. @YLR Добавлен в основной пост.

Ответ №1:

В вашем файле docker-compose просто эти порты доступны за пределами контейнера (учитывая, что порт 9042-это тот, который вы настроили на стороне elasticsearch) :

 ports:
  - "9200:9200"
  - "9300:9300"
 

Поэтому, если вы добавляете целевой порт 9042, он должен работать. Так что это должно выглядеть так :

 ports:
  - "9200:9200"
  - "9300:9300"
  - "9042:9042"
 

Если это не порт 9042, который вы настроили в своем elasticsearch, это означает, что вам необходимо изменить конфигурацию в своем агенте обмена файлами, чтобы иметь правильный порт (возможно, 9200).