Мониторинг времени делегирования домена в zabbix

Передача json данных в zabbix

Если у вас еще нет своего сервера для мониторинга, то рекомендую материалы на эту тему. Для тех, кто предпочитает систему CentOS:

  1. Установка CentOS 8.
  2. Настройка CentOS 8.
  3. Установка и настройка zabbix сервера.

То же самое на Debian 10, если предпочитаете его:

  1. Установка Debian 10.
  2. Базовая настройка Debian.
  3. Установка и настройка 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 будет состоять из следующих шагов:

  1. Передаем всю json строку в исходном виде в итем в заббиксе.
  2. С помощью зависимых элементов данных формируем отдельные итемы с нужными значениями.
  3. Используем полученные итемы по назначению.

Для начала делаем простой скрипт для получения 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». Давайте пройдемся по всем этапам, чтобы было понятнее.

  1. Инициализация скрипта.
  2. Запрос от скрипта к приложению на получение метрик.
  3. Обработка запроса от скрипта приложением.
  4. Ответ скрипту от приложения с передачей данных.
  5. Формирование скриптом JSON LLD для передачи имен метрик на сервер Zabbix.
  6. Выдача JSON при вызове скрипта.
  7. Обработка полученных от приложения данных путем формирования метрик и их значений (к примеру, с записью в файл).
  8. Вызов сендера Zabbix скриптом и инициализация отправки метрик на сервер.
  9. Сендер передает запрос на сервер Zabbix. Режим проверки на сервере zabbix-trapper.
  10. Сервер Zabbix считывает метрики и отправляет ответ для сендера.
  11. Сендер получает ответ от сервера и логирует его на экран или в файл.

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

Схема взаимодействия компонентов 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 основных инструмента, с помощью которых можно мониторить определенную рабочую среду и собирать о ней полный пакет данных для оптимизации работы.

  1. Сервер — ядро, хранящее в себе все данные системы, включая статистические, оперативные и конфигурацию. Дистанционно управляет сетевыми сервисами, оповещает администратора о существующих проблемах с оборудованием, находящимся под наблюдением.
  2. Прокси — сервис, собирающий данные о доступности и производительности устройств, который работает от имени сервера. Все собранные данные сохраняются в буфер и загружаются на сервер. Нужен для распределения нагрузки на сервер. Благодаря этому процессу можно уменьшить нагрузку на процессор и жесткий диск. Для работы прокси Zabbix отдельно нужна база данных.
  3. Агент — программа (демон), которая активно мониторит и собирает статистику работы локальных ресурсов (накопители, оперативная память, процессор и др.) и приложений.
  4. Веб-интерфейс — является частью сервера системы и требует для работы веб-сервер. Часто запускается на том же физическом узле, что и 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 месяцев, после чего успешные выпускники курса смогут пройти собеседования у партнеров.

Проверьте себя на вступительном тесте и смотрите программу детальнее по .

Рейтинг
( Пока оценок нет )
Понравилась статья? Поделиться с друзьями:
Техноарена
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: