Передача json данных в zabbix
Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:
- Установка CentOS 8.
- Настройка CentOS 8.
- Установка и настройка zabbix сервера.
То же самое на Debian 10, если предпочитаете его:
- Установка Debian 10.
- Базовая настройка Debian.
- Установка и настройка zabbix на debian.
Для примера возьму мониторинг работы ноды Bitcoin. В данном случае это совершенно не принципиально, так как подход к парсингу json в zabbix одинаковый везде. Формат json сейчас очень популярен. Большое число сервисов его поддерживают для вывода информации или логов. У биткоин ноды есть команды для вывода информации о состоянии ноды. Вывод идет в формате json. Вот пример:
# bitcoin-cli getblockchaininfo
{ "chain": "test", "blocks": 1447503, "headers": 1447503, "bestblockhash": "506a6952d47b939e9d7baa34fc290b4356c446", "difficulty": 12691409.16925421, "mediantime": 1544607906, "verificationprogress": 0.9999915635029165, "initialblockdownload": false, "chainwork": "00000000000000000000000000db56207f5987ad3", "size_on_disk": 23159068639, "pruned": false, "softforks": , "bip9_softforks": { "csv": { "status": "active", "startTime": 1456790400, "timeout": 1493596800, "since": 770112 }, "segwit": { "status": "active", "startTime": 1462060800, "timeout": 1493596800, "since": 834624 } }, "warnings": "Warning: unknown new rules activated (versionbit 28)" }
В своем примере я покажу, как из этого вывода парсить значения blocks и headers, хранить их в отдельных итемах в zabbix, чтобы дальше использовать в триггерах. По аналогии можно будет работать с другими значениями.
Настройка парсинга json в zabbix будет состоять из следующих шагов:
- Передаем всю json строку в исходном виде в итем в заббиксе.
- С помощью зависимых элементов данных формируем отдельные итемы с нужными значениями.
- Используем полученные итемы по назначению.
Для начала делаем простой скрипт для получения json — /etc/zabbix/scripts/getblockchaininfo.sh
#!/bin/bash /usr/bin/bitcoin-cli -rpcuser=user -rpcpassword=password -rpcport=8332 getblockchaininfo
Проверьте, что скрипт выдает корректную строку json. Далее создаем UserParameter. Я предпочитаю их хранить в разных конфигах, разделяя по функционалу. Создаю файл /etc/zabbix/zabbix_agentd.d/btc.conf следующего содержания:
UserParameter=blockchaininfo,/etc/zabbix/scripts/getblockchaininfo.sh
Сохраняем и перезапускаем zabbix-agent. Проверяем, что json корректно передается в нужном виде, без ошибок и прочих проблем:
# zabbix_agentd -t blockchaininfo
На выходе должны увидеть тот же самый json.
Zabbix агент подготовили. Для продолжения настройки, переходим на сервер.
Низкоуровневые обнаружения в теории
LLD появился в Zabbix где-то с версии 2.0. Эта техника применяется не только для автообнаружения на хостах, LLD еще очень хорошо разгружает работу сервера Zabbix. В случае активной проверки сервер Zabbix сам отправляет запрос на хост, чтобы получить метрику. Обычно запрос ставится в очередь наряду со всеми остальными запросами и обрабатывается в порядке очереди, но, если метрик много, сервер будет серьезно загружен. В случае с LLD в режиме проверки хост zabbix-trapper сам отправляет серверу список метрик, а спустя небольшое время — и сами метрики со значениями. То есть нагрузка выходит минимальная. Сервер сам решает, что принимать, а что нет, исходя из настроек.
Реализация технологии LLD на хосте следующая: используется связка «приложение — скрипт — сендер Zabbix — сервер Zabbix». Давайте пройдемся по всем этапам, чтобы было понятнее.
- Инициализация скрипта.
- Запрос от скрипта к приложению на получение метрик.
- Обработка запроса от скрипта приложением.
- Ответ скрипту от приложения с передачей данных.
- Формирование скриптом JSON LLD для передачи имен метрик на сервер Zabbix.
- Выдача JSON при вызове скрипта.
- Обработка полученных от приложения данных путем формирования метрик и их значений (к примеру, с записью в файл).
- Вызов сендера Zabbix скриптом и инициализация отправки метрик на сервер.
- Сендер передает запрос на сервер Zabbix. Режим проверки на сервере zabbix-trapper.
- Сервер Zabbix считывает метрики и отправляет ответ для сендера.
- Сендер получает ответ от сервера и логирует его на экран или в файл.
Чтобы было наглядней, я подготовил для вас небольшую графическую схему взаимодействия компонентов. Надеюсь, она вам поможет.
Схема взаимодействия компонентов Zabbix LLD
В остальных вопросах вы можете смело обращаться к документации Zabbix. Русскоязычная документация лежит в открытом доступе.
Мониторинг Mikrotik в Zabbix по snmp
Стандартный шаблон собирает все метрики по snmp. Так что нам надо включить его на микротике. Для этого подключаемся к нему по Winbox и идем в раздел IP -> SNMP. Настраиваем работу snmp.
Мониторинг Mikrotik в Zabbix по snmp
Мы включили snmp, выставили версию 2, разрешили подключаться только с ip адреса zabbix server — 10.1.3.29. Не забудьте указать адрес своего сервера.
Сходим теперь на zabbix-server и убедимся, что мы через него можем забирать информацию с mikrotik по snmp. Для этого подключимся к нему по ssh и воспользуемся утилитой snmpwalk. Если у вас ее нет, то поставить можно командой:
# yum install net-snmp-utils
1 | # yum install net-snmp-utils |
Подключаемся к микротику по snmp.
# snmpwalk -v 2c -c public 10.1.3.111
1 | # snmpwalk -v 2c -c public 10.1.3.111 |
Подключаемся к микротику по snmp.
Получите кучу значений в консоли. Если хотите удобно их просмотреть, направьте вывод команды в файл и почитайте его. Если подключение прошло успешно, то переходим в Web интерфейс Zabbix сервера.
Здесь нам нужно будет добавить несколько шаблонов. Для начала загрузите вот этот пак шаблонов — https://share.zabbix.com/official-templates/template-modules-pack и установите несколько штук из него:
- template_module_generic_snmp_SNMPv2_EN.xml
- template_module_interfaces_SNMPv2_EN.xml
- 00template_module_icmp_ping__EN.xml
Вроде все. Но если вдруг чего-то будет не хватать, то при установке основного шаблона, он вам скажет об этом. Загружаем основной шаблон отсюда — https://share.zabbix.com/network_devices/mikrotik/template-net-mikrotik-snmpv2 и устанавливаем на сервер мониторинга
Обратите внимание на вкладку Макросы в шаблоне. Там указаны дефолтные значения, которые используются в триггерах
Лично я немного поднял пороговые значения по температуре.
Теперь нам нужно добавить в систему само устройство Mikrotik. Делаем это как обычно, не забывая указать snmp интерфейс.
И не забудьте ему подключить шаблон Template Net Mikrotik SNMPv2. После этого можно идти в Lates Data и проверять поступление информации с устройства в систему мониторинга.
Часть данных увидите сразу, а та, что поступает через правила автообнаружения, появится позже. Надо подождать. После того, как отработают все правила автообнаружения, рекомендую сходить на хост и поотключать то, что вам не нужно. К примеру, если у вас настроен capsman, то в мониторинг с мастера попадут интерфейсы cap, которые отключаются, если к точке нет подключенных клиентов по wifi. В итоге будет ненужный спам от мониторинга с точек.
На этом по мониторингу базовых метрик в микротике все. Теперь займемся уведомлениями о подключениях к устройствам через Winbox.
Скрипты для парсинга значений
state_pump_1: off state_pump_2: off running_time_pump_1: 557 running_time_pump_2: 442 sensor: empty general_state: OK
Описание возможных значений параметров:
- state_pump может принимать значения on или off
- running_time_pump имеет нарастающее числовое значение
- sensor может принимать 3 значения: empty, full, overflow
- general_state либо ОК, либо номер ошибки
Рисуем батник для первого параметра. Если значение on, передаем в заббикс 1, если off — 0.
@echo off for /f "delims=" %%a in ('find /i "state_pump_1: off" ^< D:\Насосы.txt') do echo 0 for /f "delims=" %%a in ('find /i "state_pump_1: on" ^< D:\Насосы.txt') do echo 1
Обращаю внимание на то, что у меня имя файла было на русском языке. Чтобы его корректно обрабатывало, необходимо сохранить файл в кодировке OEM 866
ПО крайней мере так она называлась в Notepad++, который я использовал для изменения кодировки. Это была самая простая задача, которая решилась прямо в лоб. По аналогии написал скрипт для параметра sensor:
@echo off for /f "delims=" %%a in ('find /i "sensor: empty" ^< D:\Насосы.txt') do echo 0 for /f "delims=" %%a in ('find /i "sensor: full" ^<D:\Насосы.txt') do echo 1 for /f "delims=" %%a in ('find /i "sensor: overflow" ^< D:\Насосы.txt') do echo 2
Дальше пришлось соображать, как передать числовое значение, обрезав все, что стоит перед ним. Наверное, для любого программиста это простая задача, для скрипта в linux я тоже не вижу больших проблем придумать что-нибудь с sed, cat, grep или чем-то еще. Но тут у меня в распоряжении bat. Можно было на vbs написать, но для меня это было бы еще сложнее.
Начал читать документацию по for и find, смотреть примеры и пробовать. В итоге все получилось очень просто и коротенько, но повозиться мне пришлось прилично, пока родились эти строки:
@echo off for /f "delims=" %%a in ('find /i "running_time_pump_1:" ^< D:\Насосы.txt') do set str=%%a set d=%str:~21,25% Echo %d%
Подробно описывать не буду, что тут к чему, при желании сами можете поискать описание параметров
Обращу внимание только на строку set d=%str:~21,25%. Она меня очень выручила
Наткнулся где-то в примере на описание обрезания строк по заданным колонкам. Тут мы выводим значения с 21 по 25 колонки найденной строки. Как раз то, что мне нужно. На выходе просто цифры, которые отлично принимает zabbix.
Обработку параметра general_state делаем аналогичным способом:
@echo off for /f "delims=" %%a in ('find /i "general_state:" ^< D:\Насосы.txt') do set str=%%a set d=%str:~15,25% Echo %d%
Поступающее значение я передаю в заббикс как простую строку, в отличие от чисел в предыдущих примерах.
Второй текстовый файл был примерно такого содержания:
Power = 1 MAP = 1 bypass = 0 Voltage = 230 Electric_current = 5.1 Full_power = 1173 Active_power = 959 Reactive_power = 676 Cos_F = 0.82 frequency = 50
Здесь по аналогии делается все так же, как и в первом примере за одним исключением. Я в какой-то момент поставил в команде find ключ /i, который означает, что значение ищется без учета регистра. В итоге в новом файле я получил проблемы при поиске строк, где есть слово power. Таких строк несколько, причем первая точно повторяет 6-ю, где встречается точно такая же конструкция:
Power = 1 Full_power = 1173
Или еще пример со строками:
Active_power = 959 Reactive_power = 676
Я начал думать, гадать и заходить окольными путями для решения проблемы. В цикле for есть параметр eol, который позволяет задать символ начала строки, при встрече которого строка не обрабатывается. Например вот так:
@echo off for /f "eol=R delims=" %%a in ('find /i "active_power =" ^< D:\Электрика.txt') do set str=%%a set d=%str:~15,19% Echo %d%
То есть я нахожу первую и нужную мне строку с active_power, а вторую, где тоже есть эта фраза пропускаю, так как она начинается с символа R. Такой вот костыль придумал, но тем не менее поставленную задачу эта конструкция решает. Рассказываю об этом, чтобы поделиться опытом и самому потом не забыть эти подходы. В итоге я просто убрал ключ /i в команде find и поиск стал работать с учетом регистра без лишних телодвижений.
Распарсил в итоге второй файл. Проверять работу скриптов нужно в командной строке, просто их запуская. На выходе вы должны получать готовые значения, без лишних строк. Теперь двигаемся дальше и настраиваем zabbix agent на сбор данных.
Интеграция 1С и C#. Обращение к 1С через COM. Создание номенклатуры и выполнение запроса к 1С из C# на примере интеграции с Союз-PLM (система информационной поддержки жизненного цикла изделий). Обработка «Загрузка заказа на сборку». (ERP) Промо
Союз-PLM представляет собой полнофункциональный программный комплекс для решения широкого спектра задач управления инженерной технической информацией наукоемких изделий и сложных инженерных объектов в области машиностроения, приборостроения, архитектуры, строительства.
На практике, это управление конструкторской документацией, интегрированное с САПР, бизнес-процессы, файловый архив. Все это работает в SQL и шевелится с помощью скриптов на C#. Скрипты свободно отлаживаются в MS Visual Studio. Подробнее смотрите на их сайте: http://www.programsoyuz.ru/products/system-soyuz-plm.html Редактирование, конструирование и использование бизнес-процессов на порядок лучше систем на базе 1С из тех, что я изучил.
1 стартмани
Архитектура Zabbix
У Zabbix есть 4 основных инструмента, с помощью которых можно мониторить определенную рабочую среду и собирать о ней полный пакет данных для оптимизации работы.
- Сервер — ядро, хранящее в себе все данные системы, включая статистические, оперативные и конфигурацию. Дистанционно управляет сетевыми сервисами, оповещает администратора о существующих проблемах с оборудованием, находящимся под наблюдением.
- Прокси — сервис, собирающий данные о доступности и производительности устройств, который работает от имени сервера. Все собранные данные сохраняются в буфер и загружаются на сервер. Нужен для распределения нагрузки на сервер. Благодаря этому процессу можно уменьшить нагрузку на процессор и жесткий диск. Для работы прокси Zabbix отдельно нужна база данных.
- Агент — программа (демон), которая активно мониторит и собирает статистику работы локальных ресурсов (накопители, оперативная память, процессор и др.) и приложений.
- Веб-интерфейс — является частью сервера системы и требует для работы веб-сервер. Часто запускается на том же физическом узле, что и Zabbix.
Изменение пароля пользователя для доступа к базе данных
Если вам потребуется сменить пароль для подключения к базе данных, первым делом отредактируйте файл конфигурации
root@dedicated:~# mcedit /etc/zabbix/zabbix_server.conf
Найдите директиву DBPassword и задайте новый пароль:
- DBPassword=StrongPassword + DBPassword=NewStrongPassword
Измените настройки так же здесь:
root@dedicated:~# mcedit /etc/zabbix/web/zabbix.conf.php
директива:
$DB = 'NewStrongPassword';
Подключаемся к MySQL
root@dedicated:~# mysql -u root -p Enter password MariaDB > SET PASSWORD FOR 'zabbix'@'localhost' = PASSWORD('NewStrongPassword');
Обратите внимание. В разделе «5
Сброс пароля пользователя Zabbix в MySQL» мы изменили пароль доступа по web-интерфейсу. Здесь мы меняем пароль доступа mysql-пользователя zabbix. Если Вы разворачиваете Zabbix из шаблона, который мы предоставляем для наших клиентов, это следует сделать обязательно.
Заключение
Вот такую реализацию я придумал, когда потребовалось решить задачу. Один сервер постоянно донимал оповещениями по ночам. Нужно было понять, что его дергает в это время. Жаль, что у Zabbix из коробки нет реализации подобного информирования. Помню лет 5 назад был бесплатный тариф у мониторинга NewRelic. Можно было поставить агент мониторинга на сервер и потом смотреть очень удобные отчеты в веб интерфейсе. Никаких настроек не нужно было, все работало из коробки. Там были отражены все запущенные процессы на сервере на временном ряду со всеми остальными метриками. Это было очень удобно. Я нигде в бесплатном софте не видел такой реализации. Это примерно вот так выглядело.
Кстати, в первоначальной версии действия я просто отправлял список процессов на почту. Мне показалось это удобным. Можно было сразу же в почте, в соседнем письме с триггером, посмотреть список процессов. Но потом решил, что удобнее все же хранить историю в одном месте на сервере и настроил сбор данных туда. Хотя можно делать и то, и другое. Например, в действии можно указать другую команду к исполнению:
# ps aux --sort=-pcpu,+pmem | awk 'NR<=10' | mail -s "Process List" [email protected]
И вам на почту придет список запущенных процессов после активации триггера.
Онлайн курс «DevOps практики и инструменты»
Если у вас есть желание научиться строить и поддерживать высокодоступные и надежные системы, научиться непрерывной поставке ПО, мониторингу и логированию web приложений, рекомендую познакомиться с онлайн-курсом «DevOps практики и инструменты» в OTUS. Курс не для новичков, для поступления нужны базовые знания по сетям и установке Linux на виртуалку. Обучение длится 5 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.
Проверьте себя на вступительном тесте и смотрите программу детальнее по .