Мониторинг репликации postgresql в zabbix

Что нового в Zabbix 5.4?

Все нововведения свежей версии Zabbix 5.4 вы можете прочитать в официальном релизе — https://www.zabbix.com/ru/whats_new_5_4. Я среди них выделил следующие:

  1. Ну конечно же новый синтаксис триггеров. Странно, что они это изменение не поставили на первое место. Я уже делал заметку (https://t.me/srv_admin/684) по этому поводу, так что не буду повторяться. Изменение очень значимое и полезное.
  2. Планировщик для pdf отчетов. Теперь можно будет настроить отправку регулярных отчетов себе на почту или куда-то еще. Интересная и полезная возможность. Для руководства в самый раз.
  3. Новые расширенные способы агрегации данных. Это следствие использования нового синтаксиса. Примеры этого уже были в заметке, на которую дал ссылку в начале.
  4. Обновлена визуализация. Как я понял, появилась возможность объединять дашборды в виде отдельных страниц на одном экране. В целом, полезно. Сам часто думаю о том, что переключаться между дашбордами не очень удобно и быстро. Надо бы это как-то упростить. Придумали поместить их во вкладки на дашборде. Посмотрим, удобно ли будет на практике.

Дальше изменения на мой взгляд не столь значительные, так что не буду их комментировать, просто перечислю:

  • Новые api токены с истекающим сроком действия.
  • Tags стали поддерживаться еще большим количеством объектов (templates, hosts, host prototypes, triggers, metrics, events)
  • У шаблонов появились уникальные ID, теперь не будем с одинаковыми именами путаться.
  • Улучшено масштабирование.
  • Появились какие-то Global scripts. Из описания не понял, для чего они.
  • Появились локальные value maps. Раньше все глобально хранилось в одном месте.
  • Добавились интеграции с Brevis, Express, iTop, RocketChat, Signal, VictorOps.
  • Добавились шаблоны для APC UPS hardware, Hikvision cameras, etcd, Hadoop, Zookeeper, Kafka, AMQ, HashiCorp Vault, MS Sharepoint, MS Exchange, smartclt, Gitlab, Jenkins, Apache Ignite и других.

Ну и много других более мелких изменений. Я пробежался глазами по release_notes и перевел то, что показалось наиболее интересным. В общем, Zabbix не стоит на месте, развивается. Свою нишу в мониторинге удерживает твердо. Если кто-то не читал мою статью про сравнение Zabbix vs Prometheus, можете ознакомиться. Описал своими словами отличия.

Рекомендую мою статью по установке и настройке Zabbix 5. Там я разбираю различные варианты установки, выполняю первоначальную настройку и делюсь своим опытом эксплуатации данной системы мониторинга.

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

Также отдельно обращаю внимание, что с большой долей вероятности сломается интеграция с Grafana, если в метриках использовали Applications, так как их в 5.4 отменили и заменили полностью триггерами. Будете получать ошибку: Method not found

Incorrect API «application».

Настройка мониторинга репликации mysql на zabbix server

Здесь все как обычно. Скачиваем шаблон mysql-slave.xml импортируем его на сервер. Для этого идем в Configuration -> Templates и нажимаем Import:

Выбираем скачанный шаблон и жмем Import:

Дальше отправляемся к списку хостов в Configuration -> Hosts, выбираем нужный хост и назначаем ему новый шаблон:

Жмем Update для применения настроек. Ждем несколько минут и идем проверять поступление новых данных репликации mysql. Открываем Monitoring -> Latest Data, настраиваем фильтр и проверяем значения:

В данном случае мы видим, что значение Seconds Behind Master = 0, отставания от мастера нет. Два других значения равны единице, это значит, что наш скрипт проверки состояния репликации получает статусы Slave_IO_Running и Slave_SQL_Running равные Yes и поэтому возвращает значения 1. То есть наша репликация работает в штатном режиме, все в порядке.

Установка и запуск службы zabbix

9. После того, как сохранили конфигурационный файл, открываем командную строку с административными правами. Для установки и запуска службы Zabbix agent в командной строке набираем:

     «C:\Program Files\Zabbix_agent\bin\zabbix_agentd.exe» — config «C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf» — install

где:

   C:\Program Files\Zabbix_agent\bin\zabbix_agentd.exe — путь до программы;

   C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf — путь до конфигурационного файла.

После успешного применения команды появится вывод:

     zabbix_agent.exe : service installed successfully

     zabbix_agent.exe : event source  installed successfully

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

     zabbix_agentd.exe : ERROR: cannot connect to Service Manager: ….

Для запуска службы «Zabbix Agent» выполняем следующую команду:

     net start «Zabbix agent»

После успешного выполнения команды в командной строке появится:

     Служба «Zabbix Agent» успешно запущена.

Прописываем правила соединения в брандмауэре Защитника Windows

10. Для того, чтобы обеспечить передачу данных с клиента на сервер, необходимо разрешить zabbix агенту связываться с сервером. Пропишем необходимые правила для сетевого соединения в брандмауэре Windows. Открываем «Панель управления» далее «Брандмауэр Защитника Windows».

11. Далее выбираем «Дополнительные параметры».

12. В следующем окне выбираем «Правила для входящих подключений» — «Создать правило».

13. В открывшемся окне делаем выбор «Для программы», нажимаем «Далее».

14. Указываем с помощью кнопки «Обзор…» путь до программы, например %ProgramFiles%\Zabbix_agent\bin\zabbix_agentd.exe, нажимаем «Далее».

15. Выбираем «Разрешить подключение» — «Далее».

16. В новом окне задаем «Имя», например: «Zabbix_agent_in» — «Готово».

17. Затем открываем вновь созданное соединение Zabbix_agent_in, затем выбираем вкладку «Протоколы и порты»

Тип протокола: TCP

Специальные порты:

10050

Затем нажимаем «ОК».

Добавление узла сети на сервере Zabbix

18. Для добавления узла сети на сервере Zabbix заходим в веб-панель сервера с помощью логина и пароля, далее выбираем: «Настройка» — «Узлы сети» — «Создать узел сети».

19. В новом окне указываем:

Имя узла сети: например, Int

Группы: выбираем из списка с помощью кнопки «Выбрать» или пишем новое имя группы

Интерфейсы агента: задаем IP адреса клиента (в командной строке клиента надо набрать ipconfig /all)

20. Переходим на вкладку «Шаблоны», нажимаем «Выбрать» и из списка шаблонов, выбираем нужный, в данном случае «Template OS Windows», нажимаем «Выбрать».

21. Далее выбираем «Добавить» для присоединения выбранного шаблона, затем ниже нажимаем «Добавить» для добавления нового узла сети.

22. В списке появится новый узел сети, и через некоторое время узел сети станет зеленым. Это значит, что все настроено правильно и связь с клиентом установлена. 

23. Если узел сети остается красным, то необходимо разбираться, в чем дело. Для этого наводим на значок в графе «Доступность» и читаем диагностическое объявление.

24. Далее переходим к клиенту и открываем лог файл zabbix агента (C:\Program Files\Zabbix_agent\conf\zabbix_agentd.win.conf).

Смотрим проблему, в данном случае:

failed to accept an incoming connection: connection from «192.168.11.49» rejected, allowed hosts: «192.168.20.158»

25. Для решения проблемы прописываем IP адрес клиента в конфигурационный файл zabbix агента:

Option: Server

Server=192.168.11.69, 192.168.20.158

26. Для применения измененных настроек перезапускаем службу Zabbix agent:

net stop «Zabbix agent»

net start «Zabbix agent»

27. Проверяем лог файл.

28. Если нет проблем, на сервере появится зеленый значок клиента.

Удаление zabbix агента

29. Для удаления zabbix агента, удаляем узел сети на сервере.

30. Останавливаем службу «Zabbix agent» на клиенте.

net stop «Zabbix Agent»

31. Удаляем папку с компонентами zabbix агента.

32. Удаляем правило для входящих подключений для zabbix агента.

Посмотреть видео как произвести установку, настройку и удаление zabbix агента можно здесь:

https://youtube.com/watch?v=uC14OHZSXUQ

Настройка новый итемов на сервере zabbix

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

Создаем новый итем в хосте, либо шаблоне. Указываете следующие обязательные параметры (я рекомендую использовать английский язык везде):

Имя
Произвольное имя итема
 Тип
 В общем случае используются пассивные проверки (Zabbix agent)
 Ключ
 Название ключа, который указан в агенте в UserParameter
 Тип данных
 Выбираете в зависимости от типа поступаемых данных. В моем случае это были цифровые целые или с плавающей точкой, если значения дробные, и текстовые

Здесь важно не перепутать тип. Если перепутаете, получите ошибку итема.
 Интервал обновления
 Как часто будут поступать новые данные

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

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

Если вы хотите установить zabbix-agent на сам сервер мониторинга, то ничего делать не надо, кроме самой установки. Для других систем необходимо подключить репозитории заббикса, которые мы использовали во время установки сервера. Можете посмотреть их в соответствующих разделах для своей системы.

Установка zabbix agent в Centos:

# yum install zabbix-agent

Тоже самое в Ubuntu/Debian:

# apt install zabbix-agent

Для работы с сервером, который установлен локально на этой же машине, больше никаких настроек не надо делать. Если же вы будете устанавливать zabbix agent на другую машину, то в файле конфигурации агента /etc/zabbix/zabbix_agentd.conf нужно будет задать следующие параметры:

# mcedit /etc/zabbix/zabbix_agentd.conf
Server=192.168.13.117
ServerActive=192.168.13.117
Hostname=srv10 # имя вашего узла мониторинга, которое будет указано на сервере zabbix, Zabbix server если это сам сервер заббикса

Запускаем агент и добавляем в автозагрузку:

# systemctl start zabbix-agent
# systemctl enable zabbix-agent

Проверяем лог файл.

# cat /var/log/zabbix/zabbix_agentd.log
 14154:20181004:201307.800 Starting Zabbix Agent . Zabbix 4.0.0 (revision 85308).
 14154:20181004:201307.800 **** Enabled features ****
 14154:20181004:201307.800 IPv6 support:          YES
 14154:20181004:201307.800 TLS support:           YES
 14154:20181004:201307.800 **************************
 14154:20181004:201307.800 using configuration file: /etc/zabbix/zabbix_agentd.conf
 14154:20181004:201307.800 agent #0 started 
 14157:20181004:201307.801 agent #3 started 
 14159:20181004:201307.802 agent #5 started 
 14155:20181004:201307.804 agent #1 started 
 14158:20181004:201307.806 agent #4 started 
 14156:20181004:201307.810 agent #2 started 

Все в порядке. Идем в веб интерфейс и проверяем поступление данных. Для этого идем в раздел Мониторинг -> Последние данные. Указываем в разделе Узлы сети Zabbix Server и ждем поступления первых данных. Они должны пойти через 2-3 минуты после запуска агента.

Теперь попробуем остановить агент и проверить, придет ли уведомление на почту. Идем в консоль и выключаем агента:

# systemctl stop zabbix-agent

Ждем минимум 5 минут. Именно такой интервал указан по-умолчанию для срабатывания триггера на недоступность агента. После этого проверяем главную панель, виджет Проблемы.

Создание скрипта для мониторинга mysql репликации

Теперь создадим скрипт для мониторинга. Скачиваем его отсюда mysql-slave.sh и вставляем содержимое в папку /etc/zabbix/scripts:

# mcedit /etc/zabbix/scripts/mysql-slave.sh
# chown zabbix:zabbix /etc/zabbix/scripts/mysql-slave.sh
# chmod 550 /etc/zabbix/scripts/mysql-slave.sh

Проверяем его работу:

/etc/zabbix/scripts/mysql-slave.sh Master_Host zabbix parol

Скрипт должен вернуть в консоль имя мастера.

Если вы будете проверять работу скрипта от пользователя root, обязательно удалите временный файл из папки /tmp, который создает скрипт. Если этого не сделать, то потом заббикс не сможет его прочитать, так как ему не хватит для этого прав.

Данный скрипт анализирует вывод show slave status\G и парсит 3 необходимых нам значения. Он передает агенту информацию о задержке репликации через параметр Seconds_Behind_Master и анализирует значения Slave_IO_Running и Slave_SQL_Running. Если их значения равны Yes, он передает агенту 1, если там что-то другое то 0.

Шаблон для мониторинга за SSH подключениями

Я подготовил простой шаблон, который состоит из:

  1. Элемента данных SSH auth, с ключом log[/var/log/secure,»^.*sshd.*(Accepted|closed).*»,,,,,] и типом данных — Журнал (лог) 
  2. Триггера с условием {SSH Auth:log[/var/log/secure,»^.*sshd.*(Accepted|closed).*»,,,,,].str(Accepted,#1)}=1, который ищет в элементе данных строку Accepted и срабатывает, если ее находит. 

Не забудьте проверить, где у вас в системе находится лог с информацией о ssh авторизациях, и заменить этот путь в элементе данных.

На практике это все выглядит так. Когда вы подключаетесь по ssh на сервер, в zabbix приходит следующая информация.

Если включен триггер, то на почту получите уведомление, где сразу в тексте уведомления будет видно пользователя и адрес, с которого он подключился к серверу. Это удобно.

После того, как пользователь завершит свой сеанс, получите еще одно уведомление.

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

Скачиваем шаблон для версии 3.4 тут ssh-auth.xml. С другими версиями не проверял.

Тест настроек

Заходим на слейв и выполняем SQL-команду:

sudo -u postgres psql -c «select pg_xlog_replay_pause();»

* запрос select pg_xlog_replay_pause() ставит репликацию на паузу.

Немного ждем. Команда с сервера заббикс …

zabbix_get -s 192.168.1.10 -k pg_repl_mon

… должна вернуть .

Сама панель zabbix должна показать проблему:

Мониторинг репликации работает.

На слейве снова запускаем репликацию:

sudo -u postgres psql -c «select pg_xlog_replay_resume();»

* запрос select pg_xlog_replay_resume() снимает репликацию с паузы.

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

Скрипт для получения состояния репликации

Суть проверки сводится к выполнению двух запросов — на мастере pg_current_xlog_location, на слейве pg_last_xlog_replay_location. В ответ мы получаем отправленные запросы с master (current) и обработанные запросы сервером slave (replay). Полученные ответы имеют вид 0/304E310, где нужное нам значение идет после / — то есть, в данном примере, 304E310. Данное значение хранится в шестнадцатеричной системе счисления, чтобы получить привычное представление данных, мы будем его переводить в десятичную систему. Полученные результаты мы будем сравнивать для pg_current_xlog_location и pg_last_xlog_replay_location — их разница показывает отставание реплики и должна либо равняться нулю, либо отличаться на небольшое число.

Устанавливаем bc.

а) если используем Red Hat / CentOS / Fedora:

yum install bc

а) если используем Ubuntu / Debian:

apt-get install bc

* программа bc выполняем вычисления. В нашем случае, преобразует строку в число.

Создаем сам файл скрипта:

vi /etc/zabbix/zabbix_agentd.d/repl_pg_mon.sh

* путь до скрипта repl_pg_mon.sh может быть любой. В данном примере мы разместили его в каталог агента заббикс — во-первых, для порядка, во-вторых, не будет проблем с SELinux (если он используется).

Содержимое скрипта:

#!/bin/bash
PATH=/etc:/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
export PGPASSWORD=’repl_password3′
master_status=`psql -Umon_replication template1 -h127.0.0.1 -c «SELECT pg_current_xlog_location();» | grep ‘/’ | awk -F «/» {‘print $2’}`
master_queue=`echo «ibase=16; $master_status» | bc`
slave_status=`psql -Umon_replication template1 -h192.168.1.11 -c «SELECT pg_last_xlog_replay_location();» | grep ‘/’ | awk -F «/» {‘print $2’}`
slave_queue=`echo «ibase=16; $slave_status» | bc`
export PGPASSWORD=»
let replication_queue=$master_queue-$slave_queue
if
then
    echo «0»
    exit 0
fi
echo «1»
exit 0

* в данном скрипте мы подключаемся к базе мастер и получаем позицию репликации последней отправки данных на слейв, затем к базе вторичного сервера и получаем позицию репликации последнего получения данных; после — мы парсим значения двух параметров и преобразовываем шестнадцатеричное их значение в десятичное. Если разница этих значений больше 1, скрипт вернет , иначе — 1. В Zabbix мы будем проверять значение и реагировать на значение . Разница значений на 1 — очень чувствительный показатель и для больших баз, которые активно используются, слишком мал — его нужно вычислить экспериментально.

Устанавливаем права на скрипт — разрешаем запуск на выполнение и задаем владельца zabbix:

chmod 770 /etc/zabbix/zabbix_agentd.d/repl_pg_mon.sh

chown zabbix:zabbix /etc/zabbix/zabbix_agentd.d/repl_pg_mon.sh

Можно проверить работу скрипта, запустив его:

/etc/zabbix/zabbix_agentd.d/repl_pg_mon.sh

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

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