Информационный портал по безопасности » Админитстрирование » Системное администрирование » Мониторинг докер-хостов, контейнеров и контейнерных служб

 

Мониторинг докер-хостов, контейнеров и контейнерных служб

Автор: admin от 2-11-2016, 07:05, посмотрело: 815

Я искал self-hosted мониторинговое решение с открытым кодом, которое может предоставить хранилище метрик, визуализацию и оповещение для физических серверов, виртуальных машин, контейнеров и сервисов, действующих внутри контейнеров. Опробовав Elastic Beats, Graphite и Prometheus, я остановился на Prometheus. В первую очередь меня привлекли поддержка многомерных метрик и несложный в овладении язык запросов. Возможность использования одного и того же языка для графических изображений и уведомления сильно упрощает задачу мониторинга. Prometheus осуществляет тестирование по методу как черного, так и белого ящика, это означает, что вы можете тестировать инфраструктуру, а также контролировать внутреннее состояние своих приложений.



Почему выбор пал на Prometheus



  • Весь стек можно развернуть с использованием контейнеров.

  • Он создан для распределенных систем и инфраструктур.

  • Масштабируемый сбор данных, не зависящий от распределенного хранилища.

  • Гибкая система обнаружения сервисов (встроенная поддержка для Kubernetes, Consul, EC2, Azure).

  • Целевой экспортер для таких сервисов, как HAProxy, MySQL, PostgreSQL, Memcached, Redis и др.


Экосистема Prometheus огромна. Это означает, что можно найти метрические экспортеры для целого ряда систем, начиная от базы данных, MQ, HTTP-серверов до систем, связанных с аппаратными средствами, таких как IoT или IPMI. Тестирование по методу белого ящика также имеет отличное покрытие. Существуют клиентские библиотеки Prometheus для Go, Java, Python, Ruby, .NET, PHP и других языков программирования.


Начало работы с Prometheus и докером


Если вы хотите попробовать стек Prometheus, обратите внимание на репозиторий dockprom на GitHub. Можно использовать dockprom в качестве начальной точки мониторингового решения. Это позволит с помощью одной команды управлять целым стеком: Prometheus, Grafana, cAdvisor, NodeExporter и AlertManager.


Мониторинг докер-хостов, контейнеров и контейнерных служб


Установка


Скопируйте репозиторий dockprom на докер-хост, перейдите в директорию dockprom и запустите compose up:


$ git clone https://github.com/stefanprodan/dockprom
$ cd dockprom
$ docker-compose up -d

Контейнеры:



  • Prometheus (метрическая база данных) http://:9090

  • AlertManager (управление оповещениями) http://:9093

  • Grafana (визуализация метрик) http://:3000

  • NodeExporter (сборщик хостовых метрик);

  • cAdvisor (сборщик метрик контейнеров).


Если Gafana поддерживает аутентификацию, то сервисы Prometheus и AlertManager не имеют такой функции. При наличии базовой аутентификации для Prometheus и AlertManager вы можете удалить отображение портов из файла docker-compose и использовать NGINX как обратный прокси-сервер.


Установка Grafana


Перейдите на http://:3000 и авторизуйтесь, используя логин admin и пароль changeme. Вы можете изменить пароль с помощью Grafana UI или изменив файл user.config.


Из меню Grafana выберите пункт «Источники данных» (Data Sources) и кликните «Добавить источник данных» (Add Data Source). Чтобы добавить контейнеры Prometheus как источник данных, используйте следующие значения:



  • Имя: Prometheus

  • Тип: Prometheus

  • Url: http://prometheus:9090

  • Доступ: proxy


Теперь вы можете импортировать шаблоны панели управления из директории Grafana. Из меню Grafana выберите «Панель управления» и нажмите «Импорт».


Панель управления докера
Мониторинг докер-хостов, контейнеров и контейнерных служб


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



  • Время работоспособности сервера, процент простоя ЦПУ, количество ядер ЦПУ, доступная память, swap и хранилище.

  • График средней нагрузки системы, график выполненных и заблокированных IO-процессов, график прерываний.

  • График использования ЦПУ в режимах guest, idle, iowait, irq, nice, softirq, steal, system, user.

  • График использования памяти по распределению (использовано, свободно, буферы, кэшировано).

  • График использования IO (read Bps, read Bps and IO time).

  • График использования сети устройствами (входящий Bps, исходящий Bps).

  • Использование Swap и графики активности.


Панель управления контейнеров докера
Мониторинг докер-хостов, контейнеров и контейнерных служб


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



  • Общая нагрузка контейнеров ЦПУ, использование памяти и хранилища.

  • График используемых контейнеров, график нагрузки системы, график использования IO.

  • График использования контейнера ЦПУ.

  • График использования памяти контейнера.

  • График использования кэшированной памяти.

  • График входящего использования сети контейнеров.

  • График исходящего использования сети контейнеров.


На панели не представлены контейнеры, являющиеся частью стека мониторинга.


Панель управления мониторинговыми сервисами
Мониторинг докер-хостов, контейнеров и контейнерных служб


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



  • Время работы контейнера Prometheus, общее использование памяти мониторингового стека, фрагменты и серии памяти локального хранилища Prometheus.

  • График использования контейнера ЦПУ.

  • График использования памяти контейнера.

  • Графики сохраняемых фрагментов Prometheus и срочности сохранения.

  • Графики операций фрагментов Prometheus и продолжительности установления контрольных точек.

  • Графики процента использованных шаблонов Prometheus, целевых считываний и продолжительности считывания.

  • График запросов Prometheus HTTP.

  • График уведомлений Prometheus.


Контролировать использование памяти Prometheus можно присоединением фрагментов памяти локального хранилища. Можно изменять максимальное значение фрагментов в docker-compose.yml. Я настроил значение storage.local.memory-chunks до 100 000. Если вы мониторите 10 контейнеров, то Prometheus будет использовать около 2 Гб RAM.


Определение уведомлений


Я установил три файла конфигурации уведомлений:



  • Уведомления сервисов мониторинга targets.rules;

  • Уведомления хоста докера hosts.rules;

  • Уведомления контейнеров докера containers.rules.


Вы можете изменять правила уведомления и перезагружать их с помощью запроса HTTP POST:


curl -X POST http://<host-ip>:9090/-/reload

Уведомления сервисов мониторинга


Если один из целевых объектов (node-exporter и cAdvisor) не отвечает более 30 секунд, включите уведомление:


ALERT monitor_service_down
  IF up == 0
  FOR 30s
  LABELS { severity = "critical" }
  ANNOTATIONS {
      summary = "Monitor service non-operational",
      description = "{{ $labels.instance }} service is down.",
  }

Уведомление хоста докера


Если ЦПУ хоста докера находится под высокой нагрузкой более 30 секунд, включите уведомление:


ALERT high_cpu_load
  IF node_load1 > 1.5
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
      summary = "Server under high load",
      description = "Docker host is under high load, the avg load 1m is at {{ $value}}. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}.",
  }

Измените пороговое значение нагрузки в соответствии с количеством ядер ЦПУ.


Если память хоста докера заполнена, включите уведомление:


ALERT high_memory_load
  IF (sum(node_memory_MemTotal) - sum(node_memory_MemFree + node_memory_Buffers + node_memory_Cached) ) / sum(node_memory_MemTotal) * 100 > 85
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
      summary = "Server memory is almost full",
      description = "Docker host memory usage is {{ humanize $value}}%. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}.",
  }

Если хранилище хоста докера заполнено, включите уведомление:


ALERT hight_storage_load
  IF (node_filesystem_size{fstype="aufs"} - node_filesystem_free{fstype="aufs"}) / node_filesystem_size{fstype="aufs"}  * 100 > 85
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
      summary = "Server storage is almost full",
      description = "Docker host storage usage is {{ humanize $value}}%. Reported by instance {{ $labels.instance }} of job {{ $labels.job }}.",
  }

Уведомления контейнеров докера


Если контейнер не отвечает в течение 30 секунд, включите уведомление


ALERT jenkins_down
  IF absent(container_memory_usage_bytes{name="jenkins"})
  FOR 30s
  LABELS { severity = "critical" }
  ANNOTATIONS {
    summary= "Jenkins down",
    description= "Jenkins container is down for more than 30 seconds."
  }

Если контейнер использует более 10 % ядер ЦПУ более 30 секунд, включите уведомление:


 ALERT jenkins_high_cpu
  IF sum(rate(container_cpu_usage_seconds_total{name="jenkins"}[1m])) / count(node_cpu{mode="system"}) * 100 > 10
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
    summary= "Jenkins high CPU usage",
    description= "Jenkins CPU usage is {{ humanize $value}}%."
  }

Если контейнер использует более 1,2 Гб RAM в течение 30 секунд, включите уведомление:


ALERT jenkins_high_memory
  IF sum(container_memory_usage_bytes{name="jenkins"}) > 1200000000
  FOR 30s
  LABELS { severity = "warning" }
  ANNOTATIONS {
      summary = "Jenkins high memory usage",
      description = "Jenkins memory consumption is at {{ humanize $value}}.",
  }

Настройка уведомлений


Сервис AlertManager отвечает за передачу уведомлений сервера Prometheus. AlertManager может посылать уведомления с помощью электронной почты, Pushover, Slack, HipChat и других систем, использующих интерфейс webhook.


Здесь вы можете просмотреть или выключить уведомления: http://:9093.


Получение уведомлений можно настроить в файле alertmanager/config.yml.


Чтобы получать уведомления через Slack, необходимо настроить интеграцию, выбрав «Исходящие сетевые привязки» на странице приложения.


Скопируйте Slack Webhook URL в поле api_url и определите канал Slack.


route:
    receiver: 'slack'

receivers:
    - name: 'slack'
      slack_configs:
          - send_resolved: true
            text: "{{ .CommonAnnotations.description }}"
            username: 'Prometheus'
            channel: '#<channel>'
            api_url: 'https://hooks.slack.com/services/<webhook-id>'

Расширение системы мониторинга


Чтобы покрыть больше одного хоста докера, панель управления Grafana Dockprom можно расширить.. Для контроля большего количества хостов нужно разместить нод-экспортер и контейнер cAdvisor на каждом хосте и указать сервер Prometheus для считывания.


Необходимо активировать стек Prometheus через дата-центр/зону и использовать характеристику интеграции, чтобы объединить все метрики в определенной копии программы Prometheus, которая будет представлять собой общий обзор инфраструктуры. Таким образом, если зона или копия программы Prometheus, задействованная в объединении зон, выйдет из строя, мониторинговая система будет доступна в оставшихся зонах.


Вы также можете сделать Prometheus более отказоустойчивым, запустив два идентичных сервера в каждой зоне. Если несколько серверов будут направлять уведомления в Alertmanager, это не приведет к появлению избыточных данных, так как Alertmanager выполняет дедупликацию.



Источник: Хабрахабр

Категория: Админитстрирование / Системное администрирование

Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Добавление комментария

Имя:*
E-Mail:
Комментарий:
  • bowtiesmilelaughingblushsmileyrelaxedsmirk
    heart_eyeskissing_heartkissing_closed_eyesflushedrelievedsatisfiedgrin
    winkstuck_out_tongue_winking_eyestuck_out_tongue_closed_eyesgrinningkissingstuck_out_tonguesleeping
    worriedfrowninganguishedopen_mouthgrimacingconfusedhushed
    expressionlessunamusedsweat_smilesweatdisappointed_relievedwearypensive
    disappointedconfoundedfearfulcold_sweatperseverecrysob
    joyastonishedscreamtired_faceangryragetriumph
    sleepyyummasksunglassesdizzy_faceimpsmiling_imp
    neutral_faceno_mouthinnocent