Fluent-бит не может отправлять журналы в fluentd в докере из-за EADDRNOTAVAIL

Я пытаюсь настроить стек EFK с помощью fluent-bit на контейнерах докеров. Хотя я мог перенести журналы с fluent-bit на elasticsearch, когда я попытался интегрировать fluentd, у меня возникли проблемы с этим. Это точное сообщение об ошибке:

непредвиденная ошибка error_class = Errno :: EADDRNOTAVAIL error = "Адрес недоступен - bind (2) для \" fluent-bit \ "порта 24224"

Сервисы в моем файле docker-compose

  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:${TAG}
    ports:
      - '9200:9200'
      - '9300:9300'
    volumes:
      - type: bind
        source: ./config/elasticsearch.yml
        target: /usr/share/elasticsearch/config/elasticsearch.yml
        read_only: true
      - type: volume
        source: elasticsearch
        target: /usr/share/elasticsearch/data
    networks:
      - efk_1
  fluentd:
    image: fluent/fluentd:${FLBV}
    ports:
      - '24224:24224'
    volumes:
      - type: bind
        source: ./config/fluent.conf
        target: /fluentd/etc/fluent.conf
        read_only: true
    networks:
      - efk_1
    depends_on:
      - elasticsearch
  fluent-bit:
    image: fluent/fluent-bit:${FBITV}
    ports:
      - '2020:2020'
    volumes:
      - type: bind
        source: ./config/fluent-bit.conf
        target: /fluent-bit/etc/fluent-bit.conf
        read_only: true
      - type: bind
        source: ./sample_logs
        target: /var/log
    networks:
      - efk_1
    depends_on:
      - fluentd

Раньше я напрямую переносил журналы из fluent-bit в elasticsearch, как это, без конфигурации fluentd где-либо:

[SERVICE]
    Flush   2
    Log_Level   debug

[INPUT]
    Name    tail
    Path    /var/log/log.txt

[OUTPUT]
    Name    es
    Match   *
    Host    elasticsearch
    Port    9200

Это успешно отправило журналы в elasticsearch, но теперь я добавил fluentd между ними, поэтому fluent-bit отправит журналы в fluentd, который затем отправит в elasticsearch.

fluent-bit conf:

[SERVICE]
    Flush   2
    Log_Level   debug

[INPUT]
    Name    tail
    Path    /var/log/log.txt

[OUTPUT]
    Name    forward
    Match   *
    Host    fluentd

fluentd conf:

<source>
    @type forward
    bind fluent-bit
</source>

<match **>
    @type stdout
</match>

Это вызывает у меня ошибки, поскольку они не могут определить адрес, даже если они являются частью одной сети докеров.

Я получаю следующие ошибки:

fluent-bit_1 | [2019/11/06 10:31:02] [ошибка] [io] Ошибка TCP-соединения: fluentd: 24224 (в соединении отказано)

а также

fluentd_1 | 2019-11-06 10:31:02 +0000 [ошибка]: # 0 непредвиденная ошибка error_class = Errno :: EADDRNOTAVAIL error = "Адрес недоступен - bind (2) для \" fluent-bit \ "порта 24224"

Может ли кто-нибудь помочь мне узнать, где я делаю ошибку?


person megamind79    schedule 06.11.2019    source источник


Ответы (3)


Я думаю, ваша свободная конфигурация должна быть такой:

<source>
  type forward
  bind 0.0.0.0
  port 24224
</source>

<match fluent_bit>
  type stdout
</match>

Как в документации

Вероятно, у fluentd должен быть чистый IP, а не имя хоста в поле привязки.

См. проблему и описание ошибки.

person ozlevka    schedule 06.11.2019
comment
но поскольку я добавил оба в файл docker-compose, не будет ли он автоматически связывать правильный IP-адрес, если я добавлю имя службы? - person megamind79; 07.11.2019
comment
и изменение адреса привязки дало эту ошибку: ›fluent-bit_1 | [2019/11/07 05:17:11] [ошибка] [io] Ошибка TCP-соединения: 0.0.0.0:24224 (В соединении отказано) ›fluent-bit_1 | [2019/11/07 05:17:11] [ошибка] [out_fw] нет доступных восходящих подключений - person megamind79; 07.11.2019

Я создал следующую конфигурацию: docker-compose.yaml

version: "3.7"

services:
  fluentd:
    image: fluent/fluentd:v1.7.4-1.0
    ports:
      - '24224:24224'
    volumes:
      - type: bind
        source: ./config/fluent.conf
        target: /fluentd/etc/fluent.conf
        read_only: true
  fluent-bit:
    image: fluent/fluent-bit:0.14
    ports:
      - '2020:2020'
    volumes:
      - type: bind
        source: ./config/fluent-bit.conf
        target: /fluent-bit/etc/fluent-bit.conf
        read_only: true
      - type: bind
        source: /var/log/
        target: /var/log/
    depends_on:
      - fluentd

fluent.conf

<source>
  @type forward
  bind 0.0.0.0
  port 24224
</source>

<match test>
  @type stdout
</match>

fluent-bit.conf

[SERVICE]
    Flush   2
    Log_Level   debug

[INPUT]
    Name    tail
    Path    /var/log/syslog
    Tag     test

[OUTPUT]
    Name    forward
    Match   *
    Host    fluentd

В этих конфигах fluentd run и fluent-bit возможность отправлять syslog

person ozlevka    schedule 08.11.2019
comment
как это проверить? - person markhorrocks; 17.10.2020
comment
запустить docker-compose - person ozlevka; 18.10.2020

Конфигурация вашего fluentd должна быть привязана к 0.0.0.0 на входе и отправлять вывод на ES:

<source>
    @type forward
    port 24224
    bind 0.0.0.0
</source>

<match **>
    @type copy
    <store>
      @type               elasticsearch
      host                ${ELASTICSEARCH_URL}
      port                9200
    </store>
</match>

Возможно, даже измените свой вывод Fluent Bit:

[OUTPUT]
    Name    forward
    Match   *
    Host    0.0.0.0
    Port    24224

Если вы можете заставить это работать, то, возможно, измените настройки для вызова контейнера по имени и порту.

person Shōgun8    schedule 04.02.2020