Я хотел бы знать, как проще всего переслать журналы контейнера докеров на сервер ELK, пока решения, которые я пробовал после поиска в Интернете, вообще не работали.
В основном у меня есть образ докера, который я запускаю с помощью docker-compose, этот контейнер ничего не регистрирует локально (он состоит из разных служб, но ни один из них не является logstash или чем-то еще), но я вижу, как docker logs -tf imageName
или docker-compose logs
. Поскольку я запускаю контейнеры с помощью compose, я не могу использовать (или, по крайней мере, не знаю, как) --logs-driver
вариант докера.
Таким образом, мне было интересно, может ли кто-нибудь немного просветить меня относительно того, как, например, пересылать эти журналы в контейнер ELK.
Заранее спасибо,
С уважением
РЕШЕНИЕ:
Благодаря madeddie я смог решить свою проблему следующим образом, упомянув, что я использовал базовый ELK-stack-in-container, который madeddie предложил в своем сообщении.
Сначала я обновляю docker-compose.yml
файл моего контейнера, чтобы добавить записи для ссылки на ведение журнала, как сказал мне madeddie, я включил запись для каждой службы, фрагмент моего docker-compose выглядит так
version: '2'
services:
mosquitto:
image: ansi/mosquitto
ports:
- "1883:1883" # Public access to MQTT
- "12202:12202" #mapping logs
logging:
driver: gelf
options:
gelf-address: udp://localhost:12202
redis:
image: redis
command: redis-server --appendonly yes
ports:
- "6379:6379" # No public access to Redis
- "12203:12203" #mapping logs
volumes:
- /home/dockeruser/redis-data:/data
logging:
driver: gelf
options:
gelf-address: udp://localhost:12203
Во-вторых, мне пришлось использовать другой номер порта для каждой службы, чтобы иметь возможность пересылать журналы.
Наконец-то я обновил контейнер для лося docker-compose.yml
файл для сопоставления каждого порта обновления, где я отправлял свои журналы, на тот, который прослушивает logstash
logstash:
build: logstash/
command: logstash -f /etc/logstash/conf.d/logstash.conf
volumes:
- ./logstash/config:/etc/logstash/conf.d
ports:
- "5000:5000"
- "12202:12201/udp" #mapping mosquitto logs
- "12203:12201/udp" #mapping redis logs
Эта конфигурация и добавление записи gelf {}
в logstash.conf
чтобы он заработал, важно также правильно настроить IP-адрес службы докеров.
С уважением!
В Docker compose есть ключевое слово logging: источник
logging:
driver: syslog
options:
syslog-address: "tcp://192.168.0.42:123"
Так что, если вы знаете, куда двигаться дальше, дерзайте.
Если нет, я могу посоветовать вам изучить gelf
драйвер логирования для докера и плагин ввода logstash gelf
Если бы вы, например, использовали этот базовая настройка ELK-stack-in-container, вы должны обновить файл docker-compose и добавить порт - "12201:12201/udp"
в логсташ.
Отредактируйте logstash.conf
раздел ввода в:
input {
tcp {
port => 5000
}
gelf {
}
}
Затем настройте свои контейнеры для использования драйвера ведения журнала. gelf
(не системный журнал) и вариант gelf-address=udp://ip_of_logstash:12201
(вместо syslog-адреса).
Единственная магия, о которой вам нужно будет позаботиться, - это то, как Docker найдет IP-адрес или имя хоста контейнера Logstash. Вы можете решить это с помощью именования docker-compose, ссылок Docker или просто вручную.
Docker и ELK - мощные, гибкие, но, следовательно, большие и сложные звери. Приготовьтесь серьезно посвятить время чтению и экспериментам.
Не бойтесь задавать новые (и желательно очень конкретные) вопросы, с которыми вы столкнетесь при изучении всего этого.