Яндекс

Связка Grafana + Zabbix

Связка Grafana + Zabbix

(1 Vote)

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

У нас есть статья, как поднять Zabbix, а так же Grafana с базой данных.

Так как предыдущего стенда под рукой нет, я собрал новый на docker контейнерах.

Стенд:
  • entnet-177
  • entnet-s03 (на нем docker контейнеры zabbix, grafana, database)

Docker контейнеры:
  • 1) zabbix-db (База данных postgresql для Zabbix)
  • 2) grafana-db (База данных postgresql для Grafana)
  • 3) zabbix-server (отдельно контейнер с zabbix-server)
  • 4) zabbix-web (отдельно контейнер с web для zabbix)
  • 5) grafana (сервер grafana)

Приложу свой docker compose (может кому пригодиться)

version: '3.8'

services:
  zabbix-db:
    image: postgres:15
    environment:
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: Qwerty12
      POSTGRES_DB: zabbix
    volumes:
      - zabbix_db_data:/var/lib/postgresql/data
    networks:
      - monitoring-net

  grafana-db:
    image: postgres:15
    environment:
      POSTGRES_USER: grafana
      POSTGRES_PASSWORD: Qwerty12
      POSTGRES_DB: grafana
    volumes:
      - grafana_db_data:/var/lib/postgresql/data
    networks:
      - monitoring-net

  zabbix-server:
    image: zabbix/zabbix-server-pgsql:alpine-7.0-latest
    ports:
      - "10051:10051"
    environment:
      DB_SERVER_HOST: zabbix-db
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: Qwerty12
      POSTGRES_DB: zabbix
    depends_on:
      - zabbix-db
    networks:
      - monitoring-net

  zabbix-web:
    image: zabbix/zabbix-web-nginx-pgsql:alpine-7.0-latest
    ports:
      - "8080:8080"
    environment:
      ZBX_SERVER_HOST: zabbix-server
      DB_SERVER_HOST: zabbix-db
      POSTGRES_USER: zabbix
      POSTGRES_PASSWORD: Qwerty12
      POSTGRES_DB: zabbix
    depends_on:
      - zabbix-server
      - zabbix-db
    networks:
      - monitoring-net

  grafana:
    image: grafana/grafana:latest
    ports:
      - "3000:3000"
    volumes:
      - grafana_data:/var/lib/grafana
    networks:
      - monitoring-net

networks:
  monitoring-net:
    driver: bridge

volumes:
  zabbix_db_data:
  grafana_data:
  grafana_db_data:

Как видим, наши grafana и zabbix благополучно работают. Стенд готов к работе. Теперь давайте на машину entnet-177 поставим zabbix-agent и добавим ее на zabbix сервере, чтобы собирать с нее данные.

Ставим zabbix-agent на машину

sudo apt install -y zabbix-agent

Теперь нужно сообщить нашему агенту куда отправлять данные. Для этого откроем конфиг /etc/zabbix/zabbix_agentd.conf

sudo vim /etc/zabbix/zabbix_agentd.conf

Найдем Server, ServerActive и заменим 127.0.0.1 на IP сервера zabbix
Server=ВАШ_IP_ZABBIX_SERVER
ServerActive=ВАШ_IP_ZABBIX_SERVER
Hostname=entnet-177

Сохраняем и перезапускаем zabbix-agent

sudo systemctl restart zabbix-agent

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

Monitoring -> Hosts -> Create host
или
Мониторинг -> Узлы сети - Создать узел сети
если у вас на русском.

После добавления, пройдет пару минут и наш хост стал зеленым (значит все хорошо, если горит серым и прошло пару минут, значит что-то пошло не так и синхронизации нет).

Для удобства, я создал группу узлов и назвал ее Docker.
Data collection -> Host groups -> Create host group
или
Сбор данных -> Группы узлов сети -> Создать группу узлов сети

Отлично, машина entnet-177 добавлена, данные собираются. По аналогии создадим узел entnet-s03 и добавим его в Docker.

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

На машине entnet-177 откроем конфиг с настройками zabbix-agent

sudo vim /etc/zabbix/zabbix_agentd.conf

Найдем строку с Include=/etc/zabbix/zabbix_agentd.conf.d/*.conf

Если она есть, то оставляем, если нету, допишем как выше показал.

Создаем кастомный конфиг

sudo vim /etc/zabbix/zabbix_agentd.conf.d/userparametr_docker.conf

В этот конфиг вставляем

UserParameter=docker.service.status.numeric, if systemctl is-active docker.service >/dev/null 2>&1; then echo 1; else echo 0; fi

Что он делает:

  1. Ключ: docker.service.status.numeric

  2. Логика:

    • Проверяет статус сервиса Docker через systemctl is-active

    • Если сервис активен (работает) → возвращает 1

    • Если сервис неактивен (остановлен) → возвращает 0

    • >/dev/null 2>&1 скрывает все выводы команды (stdout и stderr)

То есть синтаксис вот такой:

UserParameter=<уникальный_ключ>,<команда_в_терминале>

Сохраняем и перезапускаем службу zabbix-agent:

sudo systemctl restart zabbix-agent

Снова возвращаемся в zabbix и создадим новый элемент (item), чтобы он собирал эти данные.

В узлах сети (Hosts) находим нашу entnet-177, нажимаем на нее левую кнопку мыши, откроется список, ищем там Элементы данных (Items) -> Создать элемент данных

Заполняем как по образцу на скриншоте ниже.

  • Name: ваше название элемента;
  • Type: Zabbix agent (active);
  • Key: ваш ключ, который задали в файле директории /etc/zabbix/zabbix_agentd.conf.d;
  • Type of information: Numeric (unsigned) - тип информации, в нашем случае 0 или 1, значит Numeric.

Дальше я оставил все по умолчанию.

Сохраняем. Теперь у нас хост entnet-177 будет еще собирать статус службы docker. Аналогично проделываю операцию с entnet-s03, только на него еще создам триггер на срабатывание, если упадет служба. В данном стенде это бессмысленно, ведь тогда упадет весь докер, а вслед за ним zabbix, grafana и базы данных и настраивать триггер на entnet-s03 бесполезно. По этому я просто покажу для наглядности.

С триггером ничего сложного. Нажимаем добавить или Add, находим наш item, выбираем его, далее указывает при каком параметре срабатывать, в моем случае 0 - неактивно, 1 - активно, значит если элемент отдает 0, значит срабатывать.

Создал триггер так же на entnet-177 (на этой машине служба docker неактивна).

Отлично, триггер отрабатывает как надо. На этом наша настройка zabbix завершена, теперь перейдем к установки плагина и подключение к grafana.


Установка и настройка плагина Zabbix

Заходим на графана сервер. На главной, слева в меню находим Connections, переходим туда и нажимаем Add new connection.

Вбиваем в поисковике zabbix

Нажимаем Install

Далее необходимо включить плагин - Enable

Переходим в Home -> Connections -> Data sources

Ищем zabbix

Откроется страница с настройками

Заполняем данные:

  1. Connection
    • url: вставляем вашу ссылку на zabbix (так как у меня это контейнеры и в одной сети, по этому я просто пишу zabbix-web:8080/api_jsonrpc.php)
  2. Authentication
    • User: ваш_логин_от_zabbix
    • Password: ваш_пароль_от_zabbix
  3. Zabbix Connection
    • Auth type: API token

Советую создать отдельную учетную запись и разраничить ей права доступа на определенные группы хостов. В моем случае, я создал отдельного пользователя grafana-user, создал отдельную группу API, накинул права (у каждого индивидуально под его требования). Сгенерировал через Admin ключ API для пользователя grafana-user и указал на grafana-server в Auth type: здесь вставляем ключ API сгенерированный на zabbix.

На zabbix 7.0 версии, изменилось поле username, плагин подставляет по старому и по этому по логину и паролю работать не будет. Для работы плагина с новой версией, необходимо использовать только API ключ. По крайней мере на версии плагина 6.1.2

Заходим в Users -> API tokens 
или Пользователи -> API токены

создаем API

Копируем наш токен (запишите его, больше посмотреть его не получится, только удалить и создать новый).

Сохраняем и если все успешно, увидим следующее окно

В нашем списке появилась zabbix

В целом, установка и настройка завершена. Теперь давайте попробуем что нибудь нарисовать с данных из zabbix.


Рисуем дашборд на основе данных из Zabbix

Выбираем группу которую мы создавали Docker и выбираем хост entnet-177.

Теперь найдем наш кастомный элемент

Вот такие получились данные, мы можем построить графики на основе этих данных или выводить статичные данные. 

Посмотрим готовые шаблоны

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

Что-то не очень информативно. Можно запомнить, что 0 - это недоступно, а 1 - доступно, но мы же в айти, а значит будем править шаблон.

Добавим условие справа в меню, найдем Value mapping, добавим условия, что если 0 - то красный цвет фона, а если 1, то зеленый.

Смотрим результат

Отлично, уже лучше. Сразу информативней стало, что служба недоступна.

Давайте создадим дубликат, чтобы заново не заполнять только уже для машины entnet-s03.

Теперь отредактируем этот шаблон и изменим машину с entnet-177, на entnet-s03, так как у нас одинаковые названия элементов.

Служба сразу сменила цвет, как только выбрали машину entnet-s03

Теперь давайте выведем размер корневого раздела машины entnet-177, ведь видели проблему с местом на zabbix.

Так же давайте выведем таблицу со всеми проблемами с zabbix, но только для группы Docker.

Что-то похожее можно и на zabbix нарисовать, но не так информативно и гибче.

Бонусом, давайте еще мониторить температуру с процессора на машине entnet-s03, ведь это сердце нашего стенда. Установим пакет для отслеживания температуры.

sudo apt install -y lm-sensors

Запускаем его и даем разрешения необходимые (под разные цели, разные разрешения).

sudo sensors-detect

Готово, теперь можно всегда отслеживать в ручном режиме с помощью команды температуру

sensors

Создадим новый, кастомный элемент для отслеживания температуры на машине entnet-s03

sudo vim /etc/zabbix/zabbix_agentd.conf.d/userparametr_temp.conf

UserParameter=cpu.temp, sensors | awk '/Package id 0:/ {print $4}' | tr -d '+°C'
UserParameter=cpu.core0.temp, sensors | awk '/Core 0:/ {print $3}' | tr -d '+°C'

Создаем новый элемент на zabbix

Отлично, видим, что температура у нас собирается. Теперь вернемся на графану и выведем ее туда.

Создадим дубликат ранее созданной статус службы, изменим элемент и value mapping, настроим на range.

Теперь давайте посмотрим итоговый дашборд, который у меня получился.

На этом все. Как видите, ограничений нет, только ваша фантазия. Самое что главное, можно экспортировать шаблоны и импортировать на другие сервера. Удачи в построении своих дашбордов!

Добавить комментарий

Будьте взаимовежливы и корректны.

Все сообщения проходят премодерацию.

Рекламные сообщения и комментарии с ссылками, не несущими смысловую нагрузку по тематике материала будут удаляться.


На развитие проекта

Вход
hacklink serp takip teknik seo rehberi icerik optimizasyonu yerel seo google algoritma guncellemeleri backlink stratejileri backlink nedir dofollow nofollow backlink guest post backlink anchor text optimizasyonu broken link building core web vitals seo schema markup site hizi optimizasyonu mobile first indexing xml sitemap robots txt seo uyumlu icerik anahtar kelime arastirmasi eeat google kalite google analytics seo rakip analizi seo seo raporlama metrikleri google my business seo yerel arama siralama hacklink panel jojobet matbet matbet matbet holiganbet holiganbet güncel Holiganbet güncel giriş Jojobet Jojobet giriş Jojobet güncel Jojobet Güncel Giriş Jojobet Telegram meritking meritking Jojobet Pusulabet matbet jojobet Jojobet Jojobet giriş Jojobet güncel Jojobet Güncel Giriş Jojobet Telegram Jojobet Telegram giriş Jojobet Telegram güncel роуминг МТС в Дубае jojobet Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel jojobet giriş jojobet jojobet jojobet galabet giriş galabet Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel Casibom Casibom giriş Casibom güncel matbet matbet matbet matbet matbet matbet matbet matbet matbet kavbet kavbet kavbet betebet interbahis interbahis kingroyal kingroyal kingroyal kingroyal kingroyal interbahis kingroyal interbahis interbahis kingroyal Casibom Casibom giriş Casibom güncel kingroyal kingroyal giriş jojobet Meritking Meritking giriş Meritking güncel Holiganbet Holiganbet giriş Holiganbet güncel Jojobet Jojobet giriş Jojobet güncel Betebet Betebet giriş Betebet güncel holiganbet Holiganbet Holiganbet giriş Holiganbet güncel Holiganbet Holiganbet giriş Holiganbet güncel Holiganbet Holiganbet giriş Holiganbet güncel Holiganbet Holiganbet giriş Holiganbet güncel Holiganbet Holiganbet giriş Holiganbet güncel interbahis kingroyal piabet Holiganbet Holiganbet giriş Holiganbet güncel betlike betticket meritking meritking giriş meritking mobil adres meritking güncel betebet betebet nesinecasino nesinecasino giriş nesinecasino güncel Piabellacasino Piabellacasino giriş Piabellacasino güncel Bahiscasino Bahiscasino giriş Bahiscasino güncel Timebet Timebet giriş Timebet güncel Betebet Betebet giriş Betebet güncel Betebet Betebet giriş Betebet güncel grandpashabet Betasus Betasus giriş Betasus güncel marsbahis