Мониторинг Docker с помощью Zabbix Agent 2

Thank you for reading this post, don't forget to subscribe!

Установка Zabbix Agent 2

На хост, где кру­тят­ся Docker кон­тей­не­ры, кото­рые мы мони­то­рим, надо уста­но­вить Zabbix agent. Уста­нов­ка будет зави­сеть от систе­мы хоста, но в общем слу­чае это про­сто под­клю­че­ние нуж­но­го репо­зи­то­рия и уста­нов­ка через пакет­ный менеджер.

На момент напи­са­ния ста­тьи, послед­ней вер­си­ей Zabbix была 5.4, так что пока­зы­ваю, как уста­но­вить Zabbix Agent 2 имен­но этой версии.

Ubuntu 20:

Debian 10:

Centos 8 и дру­гие rpm-based дистрибутивы:

Дела­ем базо­вую настрой­ку аген­та. Добав­ля­ем в кон­фиг /etc/zabbix/zabbix_agent2.conf инфор­ма­цию о сер­ве­ре и име­ни хоста.

Пере­за­пус­ка­ем zabbix-agent2 и добав­ля­ем в автозагрузку.
# systemctl restart zabbix-agent2
# systemctl enable zabbix-agent2

Допол­ни­тель­но нам нуж­но доба­вить поль­зо­ва­те­ля zabbix, от име­ни кото­ро­го рабо­та­ет агент, в груп­пу docker, что­бы у него был доступ к docker.sock.

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

Теперь пере­хо­дим на сер­вер мони­то­рин­га Zabbix. Даль­ней­шая настрой­ка будет про­хо­дить там.

Настройка мониторинга Docker

Пер­вым делом зай­дём в кон­соль Zabbix сер­ве­ра и убе­дим­ся, что он кор­рект­но может заби­рать дан­ные о Docker с наблю­да­е­мо­го хоста. Для это­го вос­поль­зу­ем­ся ути­ли­той zabbix_get.
# zabbix_get -s 10.20.50.7 -k docker.info

Если полу­чи­те ошибку:

ZBX_NOTSUPPORTED: Cannot fetch data: Get http://1.28/info: dial unix /var/run/docker.sock: connect: permission denied.

Воз­вра­щай­тесь на хост с аген­том и docker и про­ве­ряй­те пра­ва досту­па поль­зо­ва­те­ля zabbix к соке­ту доке­ра. Выше я пока­зал, что надо сделать.

Если всё в поряд­ке с досту­пом, то пере­хо­ди­те в web интер­фейс сер­ве­ра мони­то­рин­га. Нам нуж­но доба­вить к наблю­да­е­мо­му хосту с Docker соот­вет­ству­ю­щий шаб­лон. Назы­ва­ет­ся он Docker by Zabbix agent 2.

Если у вас его нет, как это было у меня, то ска­чай­те све­жую вер­сию шаб­ло­на. Вам нуж­но выбрать файл template_app_docker.yaml и сохра­нить его исход­ный код в какой-то файл, что­бы потом импор­ти­ро­вать на сер­вер Zabbix. Не забудь­те ука­зать рас­ши­ре­ние yaml, ина­че импорт не заработает.

На этом соб­ствен­но настрой­ка мони­то­рин­га Docker завер­ше­на. Он уже зара­бо­тал. В шаб­лоне есть пра­ви­ла авто­об­на­ру­же­ния обра­зов и кон­тей­не­ров, кото­рые запус­ка­ют­ся каж­дые 15 минут. Что­бы уско­рить нача­ло сбо­ра дан­ных, вы може­те вруч­ную их запустить.

После это­го в эле­мен­тах дан­ных появят­ся кон­тей­не­ры и свя­зан­ные с ними айте­мы. В Послед­них дан­ных мож­но смот­реть мет­ри­ки по тэгу Application: Docker.

В шаб­лоне при­сут­ству­ют сле­ду­ю­щие триггеры:

  • Нет инфор­ма­ции о ста­ту­се служ­бы Docker.
  • Служ­ба Docker не запущена.
  • Изме­ни­лась вер­сия Docker.
  • В кон­тей­не­ре зафик­си­ро­ва­на ошиб­ка в статусе.
  • Кон­тей­нер оста­нов­лен с ошиб­кой в exitcode.

Так же в шаб­лоне есть сле­ду­ю­щие графики:

  • Коли­че­ство кон­тей­не­ров с раз­лич­ным статусом.
  • Раз­мер дис­ко­во­го про­стран­ства, зани­ма­е­мое раз­лич­ны­ми сущ­но­стя­ми (images, layers, conteiners, volumes).
  • Docker goroutines (не знаю, что это такое).
  • Коли­че­ство Images.
  • Сум­мар­ное потреб­ле­ние опе­ра­тив­ной памя­ти докером.
  • CPU, Memory usage, сете­вая ста­ти­сти­ка отдель­но по каж­до­му кон­тей­не­ру. Вот толь­ко я не понял, как вычис­ля­ет­ся мет­ри­ка по CPU. Она пред­став­ле­на в мил­ли­се­кун­дах. Это вычис­ля­е­мое зна­че­ние, кото­рое берет­ся из доке­ров­ско­го json со ста­та­ми, далее выде­ля­ет­ся jsonpath $.cpu_stats.cpu_usage.total_usage, пере­во­дит­ся в изме­не­ния в секун­ду и в завер­ше­нии исполь­зу­ет­ся ариф­ме­ти­че­ский мно­жи­тель 1.0E-9.