Получить имя хоста в Logstash, работающем в контейнере Docker

У меня есть настройка Logstash с контейнерами Docker, которая выглядит так:

Server A
    [Docker container]    Logstash
    [Docker container]    Elasticsearch
    [Docker container]    Kibana

Server B
    [Docker container]    My application
    [Docker container]    Logstash-forwarder

Logstash-forwarder на сервере B отправляет все журналы My application в Logstash на сервере A. Это работает хорошо, но каждое сообщение журнала имеет имя хоста контейнера Docker (которое является идентификатором контейнера), например:

host = 6c7f900f6b46

Поскольку Logstash-forwarder работает внутри контейнера Docker, имя хоста, которое он увидит (для себя), — это имя хоста внутри контейнера. Но это не очень полезно для меня. Как я могу использовать имя хоста Docker-host?


person Thomas Uhrig    schedule 12.05.2014    source источник
comment
Можете ли вы изменить свой журнал приложений, чтобы включить имя хоста, чтобы вы могли его найти?   -  person msound    schedule 12.05.2014
comment
Я думаю, что мог бы это сделать, но я не хочу. На самом деле у меня есть разные приложения, и это будет означать изменение конфигурации ведения журналов для всех из них, а также шаблонов grok, которые у меня уже есть. Я ищу более универсальный способ. Но спасибо!   -  person Thomas Uhrig    schedule 12.05.2014


Ответы (1)


Нет доступного API (начиная с Docker Remote API v1.11) для получить имя хоста Docker программно из контейнера.

Вы можете явно указать имя хоста контейнера при запуске контейнера, docker run --hostname=, или вы можете установить переменную среды с именем хоста Docker во время выполнения и передать это значение в свои журналы (docker --env=).

person Andy    schedule 12.05.2014
comment
Спасибо! Я иду с установкой имени хоста: -h $(hostname) - person Thomas Uhrig; 13.05.2014
comment
Это также возможно в docker-compose? - person adamsfamily; 21.03.2021