Graylog не получает логи от Docker Swarm Services

Я новичок в Graylog и пытаюсь использовать Graylog в контейнере Docker, но журналы из других контейнеров не поступают в Graylog, и в веб-интерфейсе Graylog ничего не отображается ПОИСК.

Что мне делать, чтобы логи контейнеров поступали на Graylog?

Ниже я описываю свою попытку:

На одном хосте работает рой докеров только с одним узлом (самим собой).

Локальный IP этого хоста: 10.0.0.5.

Внутри папки у меня есть несколько файлов:

  • docker-compose.yml
  • Graylog.js

Содержание моегоdocker-compose.ymlявляется:

      version: "3.3"
networks:
  ambiente:
    external: true
services:
  # MONGO
  mongo:
    image: mongo:4.2
    networks: 
      - ambiente
    environment:
      - MONGO_INITDB_ROOT_USERNAME=root
      - MONGO_INITDB_ROOT_PASSWORD=drUqGGCMh
    volumes:
      - ./graylog.js:/docker-entrypoint-initdb.d/graylog.js:ro      
  # ELASTICSEARCH
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
    environment:
      - "http.host=0.0.0.0"
      - "discovery.type=single-node"
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m" 
    networks: 
      - ambiente
  # GRAYLOG
  graylog:
    image: graylog/graylog:4.1.0
    environment:
      - GRAYLOG_HTTP_EXTERNAL_URI=http://10.0.0.5:9000/
      # Pass is "admin"
      - GRAYLOG_ROOT_PASSWORD_SHA2=8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      - GRAYLOG_ELASTICSEARCH_DISCOVERY_ENABLED=true
      - GRAYLOG_MONGODB_URI=mongodb://graylog:vWGzncmBe9@mongo:27017/graylog
      - GRAYLOG_MESSAGE_JOURNAL_ENABLED=false      
    depends_on:
      - mongo
      - elasticsearch
    ports:
      - "9000:9000"
      - "12201:12201"
      - "1514:1514"
    networks: 
      - ambiente

The graylog.jsсодержание:

      graylog = db.getSiblingDB('graylog');
graylog.createUser(
  {
    user: "graylog",
    pwd: "vWGzncmBe9",
    roles: [
      { role: "dbOwner", db: "graylog" }
    ]
  }
);

На ХОСТЕ я создал файл/etc/docker/daemon.jsonс содержанием:

      {
  "metrics-addr" : "10.0.0.5:9323", 
  "experimental" : true, 
  "log-driver": "gelf",
  "log-opts": {
    "gelf-address": "udp://10.0.0.5:12201"
  }
}

После создания файла я перезапустил службу докеров и проверил этот статус:

      service docker restart
service docker status

Статус докер-сервиса АКТИВНЫЙ:

        Active: active (running) since Sat 2021-06-26 16:58:31 -03; 1min 2s ago

Затем я создал сеть Docker:

      docker network create -d overlay ambiente

А затем я деполировал стек:

      docker stack deploy graylog -c docker-compose.yml 

При запуске Graylog из веб-интерфейса системы/ввода я создал глобальный ввод, например:

bind_address:0.0.0.0
decompress_size_limit: 8388608
number_worker_threads: 12
override_source: порт: 12201
Recv_buffer_size: 262144

Спасибо за любую помощь!

1 ответ

Я только что нашел ответ после долгого времени в Google!

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

Вопрос был оdocker-compose.ymlфайл о портах серого журнала, поскольку я использовал протокол UDP:

Раньше (не работало), поскольку порты докеров по умолчанию относятся к протоколу TCP:

        ports:
      - "9000:9000"
      - "12201:12201"
      - "1514:1514"

Теперь (работает) порты докеров работают по протоколам TCP и UDP:

        ports:
      - "9000:9000"
      - "12201:12201"
      - "12201:12201/udp"
      - "1514:1514"
      - "1514:1514/udp"

Тестирование из любого контейнера:

      echo -n '{ "version": "1.1", "host": "example.org", "short_message": "A short message again", "level": 5, "_some_info": "foo" }' | nc -w1 -u 10.0.0.5 12201

и в веб-интерфейсе Graylog появится сообщение:

2021-06-27 18:27:48.185 +00:00 example.org Короткое сообщение!

Другие вопросы по тегам