ОШИБКА конвейера / вывода. go: 100 Не удалось подключиться к откату (asyn c (tcp: // logsta sh: 5044)) - ELK Filebeat. NET Core 3.1 Docker - PullRequest
0 голосов
/ 10 февраля 2020

У меня странная проблема, которую я не могу решить, так как моя проблема при поиске этой ошибки отличается. Люди, кажется, испытали это, когда пытались подключить Filebeat к Logstash.

Однако я пытаюсь записывать журналы напрямую на Elasticsearch, но я получаю Logstash ошибки, даже если я даже не раскручивает контейнер в Docker Compose ??

Main Docker Compose File:

version: '2.2'
services:
  filebeat:
    container_name: filebeat
    build:
      context: .
      dockerfile: filebeat.Dockerfile
    volumes:
      - ./logs:/var/log
    networks:
      - esnet
  elasticsearch:
    container_name: elasticsearch
    image: docker.elastic.co/elasticsearch/elasticsearch:7.5.2
    ports:
      - 9200:9200
      - 9300:9300
    environment:
      - discovery.type=single-node
      - cluster.name=docker-
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    networks:
      - esnet
  elastichq:
    container_name: elastichq
    image: elastichq/elasticsearch-hq
    ports:
      - 8080:5000
    environment:
      - HQ_DEFAULT_URL=http://elasticsearch:9200
      - HQ_ENABLE_SSL=False
      - HQ_DEBUG=FALSE
    networks:
      - esnet  
networks:
  esnet:

DockerFile для Filebeat

FROM docker.elastic.co/beats/filebeat:7.5.2
COPY filebeat/filebeat.yml /usr/share/filebeat/filebeat.yml
USER root
RUN chown root:filebeat /usr/share/filebeat/filebeat.yml
RUN chmod 644 /usr/share/filebeat/filebeat.yml
USER filebeat

Я пытаюсь прочитать json журналы, которые уже в формате Elasticsearch, поэтому после прочтения документации я решил попробовать и записать напрямую в Elasticsearch, что, по-видимому, допустимо в зависимости от приложения.

Мой Sample.json файл:

{"@ timestamp": "2020-02-10T09: 35: 20.7793960 + 00: 00", "level": "Information", "messageTemplate": " Значение i равно {LoopCountValue} "," message ":" Значение i равно 0 "," fields ": {" LoopCountValue ": 0," SourceContext ":" WebAppLogger.Startup "," Environment ":" Development "," ApplicationName ":" ELK Logging Demo "}}

My Filebeat.yml:

filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/log/*.json
  json.keys_under_root: true
  json.add_error_key: true
  json.message_key: log  

#----------------------------- Elasticsearch output --------------------------------

output.elasticsearch:
  hosts: ["elasticsearch:9200"]
  index: "sample-%{+YYYY.MM.dd}"

Как указано в заголовке этого сообщения, я получаю это сообщение в консоль:

filebeat | 2020-02-10T09: 38: 24.438Z ОШИБКА конвейера / вывода. go: 100 Не удалось подключиться к откату (asyn c (tcp: // logsta sh: 5044)): поиск logsta sh on 127.0.0.11:53: такого хоста нет

Тогда, когда я в конце концов пытаюсь визуализировать данные в ElasticHq, неизбежно ничего не появляется.

Пока попробовал использовать такие команды, как docker prune на всякий случай, если с Docker происходит что-то смешное.

Есть что-то, чего я пропускаю?

1 Ответ

1 голос
/ 10 февраля 2020

Вы неправильно настроили файл filebeat.yml. Посмотрите на эту ошибку:

Failed to connect to backoff(async(tcp://logstash:5044))

Filebeat пытается подключиться к logsta sh, потому что это конфигурация по умолчанию. Фактически, с одной стороны, вы показываете файл filebeat.yml, а с другой стороны, вы не смонтировали его в /usr/share/filebeat/filebeat.yml - посмотрите настройки громкости

  filebeat:
    container_name: filebeat
    build:
      context: .
      dockerfile: filebeat.Dockerfile
    volumes:
      - ./logs:/var/log
    networks:
      - esnet

Вы должны смонтировать его. Если вы попытаетесь скопировать его в контейнер docker с помощью dockerfile - зачем нужно заново изобретать колесо и добавлять сложность? - вы должны использовать root пользователя:

USER root

и добавить root пользователя к вашим услугам в docker -compose.yml:

user: root
...