Всем привет.

В Zabbix появился официальный Template DB PostgreSQL. В этой статье настроим его в Zabbix 4.4.


ПРИМЕЧАНИЕ

Если у вас все хорошо с английским, то рекомендую установить шаблон по официальному мануалу

github.com/zabbix/zabbix/tree/master/templates/db/postgresql

Тем не менее в моей статье учтены нюансы, которых нет по этой ссылке.

Подготовка шаблона


1. Переходим в домашний каталог.

cd ~

2. Скачиваем утилиту git и клонируем официальный репозиторий Zabbix, который находится на GitHub.

yum -y install git
git clone https://github.com/zabbix/zabbix.git

3. Переходим в каталог с шаблоном PostgreSQL.

cd zabbix/templates/db/postgresql/

Настройка шаблона для агента Zabbix


1. Подключимся к PostgreSQL.

psql -U postgres

2. Создадим пользователя zbx_monitor только для чтения с доступом к серверу PostgreSQL.

Для PostgreSQL версии 10 и выше:

CREATE USER zbx_monitor WITH PASSWORD '<ВАШ_ПАРОЛЬ>' INHERIT; GRANT pg_monitor TO zbx_monitor;

Для PostgreSQL версии 9.6 и ниже:

CREATE USER zbx_monitor WITH PASSWORD '<ВАШ_ПАРОЛЬ>';
GRANT SELECT ON pg_stat_database TO zbx_monitor;

--Для сбора метрик WAL пользователь должен быть superuser.
ALTER USER zbx_monitor WITH SUPERUSER;

3. Скопируем каталог postgresql/ в каталог /var/lib/zabbix/. Если у вас в /var/lib/ отсутствует каталог zabbix/, то создайте его. Каталог postgresql / содержит файлы, необходимые для получения метрик из PostgreSQL.

cp -r postgresql/ /var/lib/zabbix/

4. Затем скопируем файл template_db_postgresql.conf в каталог конфигурации агента Zabbix /etc/zabbix/zabbix_agentd.d/ и перезапустите агента Zabbix.

cp template_db_postgresql.conf /etc/zabbix/zabbix_agentd.d/

5. Теперь отредактируем файл pg_hba.conf, чтобы разрешить подключение к Zabbix. Подробнее о файле pg_hba.conf: https://www.postgresql.org/docs/current/auth-pg-hba-conf.html.

Откройте файл:

vi /var/lib/pgsql/12/data/pg_hba.conf

Добавьте одну из строк (Если не понимаете зачем это нужно, то добавьте только первую строку.):

host all zbx_monitor 127.0.0.1/32 trust
host all zbx_monitor 0.0.0.0/0 md5
host all zbx_monitor ::0/0 md5
ПРИМЕЧАНИЕ

Если PostgreSQL установлен из репозитория PGDG, добавьте путь к pg_isready в переменную среды PATH для пользователя zabbix.

Как вариант:

ln -s /usr/pgsql-12/bin/pg_isready /usr/bin/pg_isready

* — так как у меня pgsql 12 версии, то у вас вместо pgsql-12 будет другой путь.

Если этого не сделать, то Status: Ping всегда будет в состоянии Down.

Добавление шаблона на фронтенде Zabbix


Считаю, что те, кому требуется снимать метрики с PostgreSQL итак знают как добавлять шаблоны. Поэтому опишу процесс кратко.

  1. Заходим на страницу Zabbix;
  2. Переходим на страницу "Configuration" => "Host";
  3. Нажимаем на кнопку "Create host" или выбираем существующий хост;
  4. На странице создания/редактирования хоста выбираем вкладку "Templates" и и жмём на линк "Add";
  5. В «Group» из списка выбираем «Templates/Databases», выбираем шаблон "Template DB PostgreSQL", жмём кнопку "Select" и нажимаем кнопку "Update";

Ждём некоторое время и наконец, переходим в "Monitoring" => "Latest data" => "Hosts" выбираем сервер с PostgreSQL => нажимаем "Apply".


Enjoy!

Комментарии (12)


  1. Sleuthhound
    13.11.2019 08:26

    yum -y install git; git clone github.com/zabbix/zabbix.git


    Для скачивания с Github не обязательно тащить git, можно просто wget'ом/curl скачать github.com/zabbix/zabbix/archive/master.zip

    Ну и стиль написания команд в шел привели бы к единому виду, а то где-то в 1 строке по 2 команды через; а где-то построчно. ИМХО более наглядно и удобно когда 1 команда 1 строка.

    ПРИМЕЧАНИЕ
    Если PostgreSQL установлен из репозитория PGDG, добавьте путь к pg_isready в переменную среды PATH для пользователя zabbix.
    Как вариант:
    ln -s /usr/pgsql-12/bin/pg_isready /usr/bin/pg_isready


    То есть не освоили/осилили как добавить в PATH для zabbix-agent?

    Ну тогда подскажу, для CentOS/RHEL/OracleLinux в файл /etc/sysconfig/zabbix-agent добавить
    PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/usr/pgsql-12/bin
    


    А в /usr/lib/systemd/system/zabbix-agent.service добавить
    User=zabbix
    


    потом сделать
    systemctl daemon-reload
    systemctl restart zabbix-agent
    


    и проверить
    xargs -0 -L1 -a /proc/$(cat /var/run/zabbix/zabbix_agentd.pid)/environ
    


    1. MaxRAF Автор
      13.11.2019 09:18

      Спасибо за замечания.


      В чем преимущество вашего примера перед ln -s /usr/pgsql-12/bin/pg_isready /usr/bin/pg_isready?


      1. Sleuthhound
        13.11.2019 09:45

        Для меня симлинк — это костыль.

        Если у вас на сервере 2-3....10 экземпляров Pg, то в моем случае можно запустить 2-3...10 zabbix-agent на сервере, каждый со своим unit файлом и со с своим EnvironmentFile, а HOME со скриптами будет один. Таким образом каждый агент будет использовать нужную версию psql и pg_isready из своего экземпляра Pg. Да, такая ситуация редкость, но бывает.

        Хотя можно все 10 экземпляров Pg с одного агента мониторить, но тут придется надеяться что psql будет присутствовать в системном PATH, но в какой-то момент она может оттуда исчезнуть и… приехали.


    1. Snooper
      13.11.2019 09:54

      А в /usr/lib/systemd/system/zabbix-agent.service добавить

      Лучше использовать systemctl edit --full zabbix-agent.service
      Таким образом изменения в юните сохранятся и после установки обновлений.


      1. Sleuthhound
        13.11.2019 10:27

        Да, тут вы абсолютно правы.


      1. AlexGluck
        13.11.2019 11:18

        Я бы в /etc/systemd/system/zabbix-agent.d/user.service добавил. Так куда понятней для последующей автоматизации через любой scm.


    1. AlexGluck
      13.11.2019 11:20

      А в /etc/profiles.d/postgres не лучше? Тогда для всех пользователей обновится path и админы заходя на сервак не будут ломать голову. Это кстати работает на всех дистрибутивах, в отличии от вашего решения.


  1. oller
    13.11.2019 11:01
    -1

    А в чем принципиальное отличие этого мониторинга от mamonsu?


    1. MaxRAF Автор
      13.11.2019 11:14

      А в том, что в заголовке написано "Настраиваем официальный шаблон PostgreSQL на Zabbix 4.4", а не "Сравниваем шаблоны PostrgeSQL".


  1. lokks
    13.11.2019 12:52

    Спасибо за статью!
    Требуется ли обновление самих заббикс-агентов на серверах до новой go-шной версии?
    Или со старыми агентами (работавшими с libzbxpgsql например) всё подхватится?


    1. Sleuthhound
      13.11.2019 15:12

      Требуется как минимум zabbix-server 4.4, а zabbix-agent может быть и 3-й версии.

      zabbix-agent2 на Go тут не нужен.

      И libzbxpgsql тут наверно будет более интересен, т.к. это сишный модуль, который работает быстрее, кушает меньше ресурсов и наверно будет более гибок, хотя тут нужно смотреть что Вам проще — писать кастомные sql запросы для libzbxpgsql или правила препроцессинга для zabbix-server 4.4


  1. Pinkerton42
    13.11.2019 13:17

    Тет все метрики через psql -f somefile.sql тянутся. Мне кажется агентов не обязательно обновлять.