Как правильно вести логирование контейнеров в Docker?

Как оптимально предоставить пользователям информацию о контейнерах, перезапускающихся из-за Out Of Memory (OOM) на Linux-серверах с установленными Docker и не предоставляя SSH-доступ, используя Loki и Grafana? Возможно ли настроить promtail для экспорта логов в Loki с определенным шаблоном, чтобы решить данную проблему? Какие еще варианты существуют для решения этой задачи?
  • 19 февраля 2024 г. 9:48
Ответы на вопрос 3
Для правильного логирования контейнеров в Docker можно использовать различные методы, включая следующие:

1. Добавление опции --log-driver при запуске контейнера, чтобы указать драйвер логирования (например, json-file, syslog, journald, fluentd и т. д.).

2. Использование логгеров сторонних поставщиков, таких как Fluentd, Logstash, Splunk и другие, чтобы агрегировать и анализировать логи контейнеров.

3. Логирование с помощью сторонних инструментов мониторинга, таких как Prometheus, Grafana и Loki, для сбора и визуализации данных логов.

Чтобы оптимально предоставить пользователям информацию о контейнерах, перезапускающихся из-за OOM на Linux-серверах с установленными Docker, можно настроить promtail для экспорта логов в Loki с определенным шаблоном. Например, можно настроить фильтр, чтобы просматривать логи с определенным ключевым словом (например, "oom-kill"), и отправлять уведомления в Grafana или другую систему мониторинга.

Другие варианты для решения этой задачи включают настройку алертов с помощью инструментов мониторинга (например, Prometheus Alertmanager), автоматическое масштабирование ресурсов контейнеров с помощью Kubernetes Horizontal Pod Autoscaler или использование инструментов управления контейнерами, таких как Docker Swarm или Kubernetes, для лучшего контроля над работой контейнеров и ресурсами сервера.
Можно смотреть счётчик oom_kill в /proc/vmstat . Или вам нужна более подробная информация?
Можно генерить лог OOM-ов простой systemd-службой (честно взято из issue к moby про логирование docker events ) и выгружать из journald по имени, которым её назовёте. 
[Unit]
Description=Docker OOM Monitor Service

[Service]
Type=simple
ExecStart=/usr/bin/docker events --filter type=oom

[Install]
WantedBy=multi-user.target
Похожие вопросы