[ZABBIX] SQL Postgress cash

Бывают случаи, когда требуется собирать несколько значений из одной таблицы или вьюхи. При этом, сам селект долго отрабатывает и грузит сервер. К сожалению, заббикс в текущей реализации не умеет забирать несколько значений из селекта.
Для решения этой проблемы мне видятся два подхода:
- забирать данные скриптом, а потом использовать zabbix-sender
- забирать данные скриптом в файл, а заббикс читает эти данные
Далее я покажу реализацию второго подхода.

  1. Создаем VIEW на BD. Zabbix не преобразует пустое значение в 0 (когда вью ничего не вернула). Поэтому, надо написать такую вьюху, которая возвращала бы 0 вместо "нет результатов"
    Пример:

    Наша вьюха:
  2. на standby сервере DB или ином другом.
  3. Сохранение пароля подключения к БД. vim /opt/script/.pgpass

  4. Скрипт исполнения запроса. vim /opt/script/zabbix/get_data.sh
    get_data.sh

     
  5. крипт возвращает возможные значения айтемов. vim /opt/script/zabbix/stat_items.sh
    stat_items.sh
  6. crontab -e. Файл кеша именуется название_вьюхи.stat

     
  7. Zabbix. Под каждый сервер создаем свой темплейт с названием Templ_App_SQL_имяПриложения
  8. идем в Discovery rules и создаем правило. Здесь задается значение переменной, которая будет перебираться для создания item-ов. Например, перемененная {#SYSTEMNAME} = WEB. ANDROID, IOS
    Name: events_distinct_customer_platform - по имени вьюхи
    Type: Zabbix agent
    Key: system.run["sh /opt/script/stat_items.sh events_distinct_customer_platform"]
    Update interval (in sec): 3600 - чем больше, тем лучше
    Keep lost resources period (in days): 30 - удаление, если не найдено
  9. внутри этого правила переходим на Item prototypes и создаем прототип элемента данных
    Name: events_distinct_customer_platform_{#SYSTEMNAME}
    Type: Zabbix agent
    Key: system.run["grep -E '^{#SYSTEMNAME}\|' /opt/script/events_distinct_customer_platform.stat | awk -F'|' '{ print $2 }'"]
    Update interval (in sec): 60
    History storage period (in days): 30
    Trend storage period (in days): 365
    Applications: название группы элементов данных для вывода в графане
  10. Trigger prototypes. Для этого типа item-ов создаем два тригера. Первый сравнивает среднее значение за последние 5 минут со средним от средних значений за 5 минут 7, 14, 21, 28 дней назад. Второй сравнивает среднее значение за 5 минут и среднне значение за 5 минут 30 минут назад. Для обоих триггеров задается два порога 9-21 и 21-9
    1)Name: EVENTS_distinct_customer_{#SYSTEMNAME}
    Expression:

Description

Количество уникальных пользователей в онлайне по {#SYSTEMNAME} в сравнении с прошлой неделей выросло или снизилось
в 2 раза (9-21) или
в 4 раза ночью (21-9).

Текущее значение: {ITEM.VALUE}
2)Name: EVENTS_distinct_customer_{#SYSTEMNAME}
Expression:

 

 

Description

Количество уникальных пользователей в онлайне по {#SYSTEMNAME} в сравнении с данными 30 минут назад выросло или снизилось

в 2 раза днем (9-21) или
в 4 раза ночью (21-9).

Текущее значение: {ITEM.VALUE}

Идем в Monitoring - Latest data и проверяем получает ли заббикс данные

      

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

Ваш адрес email не будет опубликован.