Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
Хитрости и трюки Zabbix
Хитрости и трюки Zabbix
1. {$USER_MACROS}
Что такое {$USER_MACROS}?
Макрос — это символьное имя в шаблонах, заменяемое при
обработке препроцессором на последовательность символов
Это – переменные, которые способны хранить различную
информацию
• пороги срабатывания для триггеров
• различные фильтры
• учетные данные
• …..
Макросы определяются на нескольких уровнях, более локальный
перекрывает предыдущий
ГЛОБАЛЬНЫЙ МАКРОС
{$PROC_NUM} = 200
МАКРОС УРОВНЯ
ШАБЛОНА
{$PROC_NUM} = 300
МАКРОС УРОВНЯ УЗЛА
СЕТИ
{$PROC_NUM} = 500
Фиксированные пороговые значения в
шаблонах
{Template OS: system.cpu.load[percpu,avg1].avg(5m)}>5
{Template OS: vm.memory.size[available].last(0)}<20M
{Template OS: proc.num[].avg(5m)}>300
Разные серверы могут иметь разные пороговые значения для таких
элементов, как загрузка процессора, объем свободной памяти,
количество процессов и т.д.
Динамические пороги в шаблонах
Используйте {$USER_MACROS} в качестве порогового
значения для таких элементов данных как загрузка CPU,
размер свободной памяти, количества процессов и т.д.
{Template OS: system.cpu.load[percpu,avg1].avg(5m)}>{$CPU_LOAD}
{Template OS: vm.memory.size[available].last(0)}<{$MEMORY_FREE}
{Template OS: proc.num[].avg(5m)}>{$PROC_NUM}
{$PROC_NUM} = 300
{$PROC_NUM} = 300
Обычный узел сети
Сильно нагруженный узел сети
Менее загруженный узел сети
МАКРОС УРОВНЯ ШАБЛОНА
{$PROC_NUM} = 300
{$PROC_NUM} = 500
{$PROC_NUM} = 300
{$PROC_NUM} = 200
МАКРОС УРОВНЯ УЗЛА СЕТИ
Динамические пороги в шаблонах
Фиксированные номера портов в
шаблонах
Одинаковые сервисы могут использовать
различные номера портов tcp
{Template OS: net.tcp.service[ssh,22]
{Template OS: net.tcp.service[http,80]
{Template OS: net.tcp.service[https,443]
Динамические номера портов в шаблонах
Используйте {$USER_MACROS} как номер порта для tcp/udp соединений ssh,
http, https и других служб
{Template OS: net.tcp.service[ssh,{$SSH_PORT}]
{Template OS: net.tcp.service[http,{$HTTP_PORT}]
{Template OS: net.tcp.service[https,{$HTTPS_PORT}]
{$HTTP_PORT} = 80
{$HTTP_PORT} = 80
Обычный узел сети
Нестандартный узел сети 1
Нестандартный узел сети 2
{$HTTP_PORT} = 80
{$HTTP_PORT} = 8080
{$HTTP_PORT} = 80
{$HTTP_PORT} = 8000
МАКРОС УРОВНЯ ШАБЛОНА МАКРОС УРОВНЯ УЗЛА СЕТИ
Динамические номера портов в шаблонах
Фиксированные пороги для элементов данных LLD
(Правил Низкоуровневого Обнаружения)
Разные точки монтирования имеют различный размер, и следовательно
пороговые значения для предупреждения о их заполненности отличаются
• /boot малый размер 100M
• / средний размер 10G
• /data большой размер 1TB
Используйте контекст для макросов в пороговых
значениях для элементов данных LLD
Разные точки монтирования имеют различный размер, поэтому используйте
контекст макросов в выражениях триггеров
• /boot малый размер {$LOW_SPACE:”/boot”}
• / средний размер {$LOW_SPACE:”/”}
• /data большой размер {$LOW_SPACE:”/data”}
{host:vfs.fs.size[{#FSNAME},free].last()} < {$LOW_SPACE:"{#FSNAME}"}
Может также использоваться для имен дисков Windows
Как работает контекст пользовательских
макросов
{$LOW_SPACE} = 1G
{$LOW_SPACE: " /boot "} =
10M
{$LOW_SPACE: " / "} = 500M
{$LOW_SPACE: " /var "} = 5G
{$LOW_SPACE} = 1G
{$LOW_SPACE: " /boot "} =
10M
{$LOW_SPACE: " / "} = 500M
{$LOW_SPACE:”/var”} = 5G
{$LOW_SPACE: " /data "} =
50G
{$LOW_SPACE: " /var "} = 10G
МАКРОС УРОВНЯ ШАБЛОНА МАКРОС УРОВНЯ УЗЛА СЕТИ
Разный набор служб на разных серверах
Разные серверы имеют разные сервисы, которые необходимо отслеживать
• Сервер 1 DHCP client, Windows defender
• Сервер 2 DHCP client, Windows defender, MS Exchange
• Сервер 3 DHCP client, RDP Service, RPC
Использовать только @Global regular expressions неудобно и сложно,
ведь возможных комбинаций очень много
{$SERVICES} = none
{$SERVICES} = none
Обычный узел сети
Узел сети со службами exchange
Узел сети со службами Tomcat и WSUS
{$SERVICES} = none
{$SERVICES}= (exchange)
{$SERVICES} =none
{$SERVICES}=
(Tomcat|WSUS)
@SERVICES = (DNS Client|DHCP
Client)
ГЛОБАЛЬНОЕ
РЕГУЛЯРНОЕ
ВЫРАЖЕНИЕ
OR
OR
OR
@SERVICE
S
@SERVICE
S
@SERVICE
S
МАКРОС УРОВНЯ ШАБЛОНА
МАКРОС УРОВНЯ УЗЛА
СЕТИ
Используйте комбинацию {$USER_MACROS} и
@global regular expressions
Пример фильтрации служб
МАКРОС УРОВНЯ УЗЛА СЕТИ ГЛОБАЛЬНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ
Разные клиенты используют разные
учетные данные
• Разные клиенты используют разные учетные данные
• для пароля SNMPv2
• для SNMPv3 логина и пароля
• для учетных данных SSH
• для учетных данных веб-сайта
Теоретически, вы можете просто клонировать шаблон для каждого клиента, но
потом вам придется управлять этим множеством шаблонов
{$SNMP_COMMUNITY} =
public
{$SNMP_COMMUNITY} =
public
{$SNMP_COMMUNITY} =
secret1
Узел сети клиента 1
Шаблон Клиент 1
{$SNMP_COMMUNITY} =
secret2
Шаблон Клиент 2
Шаблон SNMP
Узел сети клиента 2
ШАБЛОНЫ
{$SNMP_COMMUNITY} =
secret2
{$SNMP_COMMUNITY} =
secret1
{$SNMP_COMMUNITY} =
public
Разные клиенты используют разные
учетные данные
Хитрости и трюки Zabbix
2. Предобработка
Когда выполняется предварительная
обработка?
Сбор данных
База данных Zabbix
Предварительная
обработка
Нужно делить или умножать значения
• Конвертация Байтов в Биты
• Конвертация Битов в Байты
• Конвертация миллисекунд в секунды
• ….
Вы можете задать единицы измерения для удобного отображения информации, но что если
вы хотите хранить преобразованные данные?
Используйте шаг предварительной обработки –
пользовательский множитель
Конвертируйте байты в биты используя множитель 8
Конвертируйте биты в байты используя множитель 0.125
В последних версиях Zabbix для этого используется новая вкладка
«Предобработка»
Вам нужно извлечь числовые данные из
отчёта
• Память в Linux
• Отчет о свободном пространстве Linux
• Любой отчет, содержащий числовые данные
Извлекаем число из текста
Извлекайте данные при помощи шаблонов PCRE REGEX
Полученные данные могут быть обработаны на следующих шагах
Необходимо преобразовать двоичные текстовые
данные в десятичные
• systemctl возвращает состояние служб как enabled или disabled
• Мы хотим хранить состояние в виде 1 или 0 для простых триггерных функций
или для визуализации в графиках
Используйте регулярные выражения
systemctl list-unit-files | grep postfix
База данных Zabbix
Совпадение по шаблону regex
postfix.service
Преобразование логического
значения в десятичное
enabled disabled
true false
y n
yes no
On off
up down
1 01 0
Преобразование логического значения в
десятичное
Хитрости и трюки Zabbix
3. Зависимые элементы
данных
Требуется извлечь всю числовую информацию
из текста
• Использование памяти в Linux, отчет о свободном пространстве или любой
другой отчет, который содержит числовые данные
• Используя обычные элементы данных нам потребуется 9(!) проверок чтобы
собрать всю информацию
• Это дополнительный сетевой трафик и использование процессора на узле
сети.
Используйте зависимые элементы данных
system.run[free]
База данных Zabbix
used free shared buffertotal available
Основной элемент
данных собирающий
текстовый тип
информации
Зависимые элементы
данных с числовым
типом информации
Исходные данные
Соберите все информацию с помощью обычного текстового элемента данных:
Используйте зависимые элементы данных
Создайте зависимые элементы данных для каждого значения используя
предварительную обработку регулярными выражениями:
Настройка зависимых элементов данных
Мониторинг репликации MySQL базы данных
Использование ODBC элементов данных означает сбор данных в несколько
подходов, а это значит дополнительный трафик, использование CPU и
несколько подключений к базе данных.
MariaDB [(none)]> show slave status G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: master2-bin.000001
Read_Master_Log_Pos: 926945751
Relay_Log_File: master1-relay-bin.000002
Relay_Log_Pos: 207526
Relay_Master_Log_File: master2-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Seconds_Behind_Master: 0
Используйте запросы SQL и зависимые
элементы данных
MySQL: show slave status;
возвращено несколько метрик
SLAVE STATUS
Relay log pos
Seconds behind
master
Relay log file
База данных Zabbix
Настройка зависимых элементов данных
Необходимо собрать погодные данные для
вашего местоположения
• Хотите получить данные о температуре, влажности, скорости ветра
• Можно использовать собственный curl скрипт, но в итоге его логика может
заметно усложниться
Используйте OpenWeatherMap API и
предобработку JSON
Запрос get с параметрами
Ответ в виде JSON от API
HTTP Agent
JSON Data
Предобработка
Путь JSON
Температура
Влажность
Скорость ветра
Зависимые элементы
данных
База данных
Zabbix
OpenWeatherMap
Используйте HTTP agent с
{$USER_MACROS}
Ответом вы получите JSON объект
$.main.humidity
$.main.temp
$.wind.speed
Используйте предобработку для JSON
Предобработка
JSON Path
Зависимые
элементы данных
Хитрости и трюки Zabbix
4. Низкоуровневое
обнаружение
Необходимо настроить обнаружение
пользовательских SNMP метрик
• Многообразие моделей принтеров
• Хотите узнать все параметры принтера
• Расходники
• Лотки для бумаги
• Количество отпечатанных страниц
• Уровень чернил
Используйте обнаружение SNMP
правилах LLD
Описание
.1.3.6.1.2.1.43.11.1.1.6.{#SNMPINDEX}
Объем картриджа .1.3.6.1.2.1.43.8.2.1.8
Описание картриджа .1.3.6.1.2.1.43.11.1.1.6
Объем картриджа
.1.3.6.1.2.1.43.11.1.1.8.{#SNMPINDEX}
Уровень картриджа
.1.3.6.1.2.1.43.11.1.1.9.{#SNMPINDEX}
Уровень картриджа .1.3.6.1.2.1.43.8.2.1.9
Картриджи
discovery[{#SNMPVALUE},.1.3.6.1.2.1.43.11.1.1
.6]
ПРОТОТИП ЭЛЕМЕНТА ДАННЫХПРАВИЛО ОБНАРУЖЕНИЯ
Правило LLD и прототипы элементов
данных
Проверка доступности удаленного порта на других узлах сети
Server 1 Port 1111
Server 2 Port 2222
Server 3 Port 3333
Server 4 Port 4444
Server 5 Port 5555
• Используется ключ net.tcp.port
• Множество серверов и портов
• Каждый агент имеет свой список
серверов для проверки
Используйте собственный скрипт для LLD
• Простой bash скрипт будет работать из коробки на большинстве платформ
• Использует {$USER_MACRO} во входных данных, возвращает JSON объект
Создание правила низкоуровневого
обнаружения
Все данные точек доступа собираются на контроллере
Точка доступа 1
Точка доступа 2
Точка доступа 3
Точка доступа 4
• WLAN контроллер возвращает все SNMP данные по каждой точке доступа
• Точки доступа используются разными клиентами
Создайте правило обнаружения и прототипы узлов сети для сбора
метрик по точкам доступа
Для каждого узла сети присоедините шаблон
Данные все еще собираются из WLC и
фильтруются по актуальной точке
Используйте фильтры LLD чтобы отфильтровать данные только по конкретной точке доступа
Результат – узлы сети, автоматически
созданные для каждой точки доступа
Преимущества использования
прототипов узла сети
• Управляются Zabbix внутренним механизмом LLD
• Добавляются по необходимости
• Автоматически удаляются или изменяются
• Шаблоны и группы назначаются автоматически
• Группы узлов сети могут генерироваться динамически из макросов LLD
• Можно ограничить доступ только к части данных с использованием групп узлов и
групп пользователей.
Работа объемных LLD правил
в нестабильных средах
• Мы хотим обнаруживать и мониторить лог файлы
• Набор логов изменяется каждые сутки, но момент времени изменения
нам не известен
• Список логов большой и обработка полученного JSON накладна по
ресурсам – мы не можем запускать правило часто
Можно написать скрипт, определяющий изменения конфигурации и если
таковые есть он отправит готовый JSON при помощи zabbix_sender.
Запускать скрипт по расписанию.
Но что, если у нас нет возможности использовать локальный планировщик?
Троттлинг
Мы будем обрабатывать значение только в случае его изменения
Основные элементы данных
Это уменьшит объем входных
данных, если они в основном
статичны
Элемент данных правила LLD
Это позволит уменьшить
интервал опроса для LLD правила
и позволит быстрее реагировать
на изменения в конфигурации не
нагружая при этом сервер
Троттлинг в LLD
JSON в LLD правилах
• RAID контроллер возвращает данные обо всех массивах и дисках
• На разных контроллерах используется разное количество дисков
• Мы хотим отслеживать состояние и производительность всех дисков
Пример возвращаемых контроллером
данных
JSON для правила LLD
{#DRIVE} -> $.Drive
{#SIZE} -> $.Size
Предобработка в LLD
«Последние данные»
Мы получили работающее правило без скриптов
Предобработка в правилах LLD
• Используйте Путь Json или регулярное выражение чтобы без пользовательских скриптов привести
правило к JSON для LLD. LLD макросы завершат эту задачу
• Если нужна логика сложнее, например условные проверки или циклы – вы можете написать
JavaScript для предобработки правила
• Проверьте на ошибки – совпадает ли с шаблоном регулярного выражения и нет ли ошибок в JSON
объекте
• Троттлинг
Хитрости и трюки Zabbix
5. Глобальная
корреляция событий
Подавление оповещений
• Конечные устройства подключены через разные коммутаторы
• Можно использовать Зависимость триггеров, но это может оказаться что
устройств за каждым коммутатором множество
• Если устройство будет перемещено за другой коммутатор, придется
изменить и связи триггеров
Используйте глобальную корреляцию
событий на основе тегов
Макрос {$SWITCH.IP} генерируется API скриптом на основе ARP таблиц,
которые собираются Zabbix с коммутатора
Тэг SWITCH_IP= {HOST.IP}
Тэг DEVICE_TYPE = SWITCH
Тэг SWITCH_IP = {$SWITCH.IP}
Тэг DEVICE_TYPE = END_DEVICE
Тэг SWITCH_IP = {$SWITCH.IP}
Тэг DEVICE_TYPE = END_DEVICE
Тэг SWITCH_IP = {$SWITCH.IP}
Тэг DEVICE_TYPE = END_DEVICE
Тэг SWITCH_IP = {$SWITCH.IP}
Тэг DEVICE_TYPE = END_DEVICE
Зависимость
триггеров
Корреляция
событий
Тэг SWITCH_IP = {$SWITCH.IP}
Тэг DEVICE_TYPE = END_DEVICE
Тэг SWITCH_IP= {HOST.IP}
Тэг DEVICE_TYPE = SWITCH
Создайте правило глобальной
корреляции событий
Cпасибо!

More Related Content

Elina kuzyutkina-hitrosti-i-tryuki-v-ispolzovanii-zabbix

  • 2. Хитрости и трюки Zabbix 1. {$USER_MACROS}
  • 3. Что такое {$USER_MACROS}? Макрос — это символьное имя в шаблонах, заменяемое при обработке препроцессором на последовательность символов Это – переменные, которые способны хранить различную информацию • пороги срабатывания для триггеров • различные фильтры • учетные данные • ….. Макросы определяются на нескольких уровнях, более локальный перекрывает предыдущий ГЛОБАЛЬНЫЙ МАКРОС {$PROC_NUM} = 200 МАКРОС УРОВНЯ ШАБЛОНА {$PROC_NUM} = 300 МАКРОС УРОВНЯ УЗЛА СЕТИ {$PROC_NUM} = 500
  • 4. Фиксированные пороговые значения в шаблонах {Template OS: system.cpu.load[percpu,avg1].avg(5m)}>5 {Template OS: vm.memory.size[available].last(0)}<20M {Template OS: proc.num[].avg(5m)}>300 Разные серверы могут иметь разные пороговые значения для таких элементов, как загрузка процессора, объем свободной памяти, количество процессов и т.д.
  • 5. Динамические пороги в шаблонах Используйте {$USER_MACROS} в качестве порогового значения для таких элементов данных как загрузка CPU, размер свободной памяти, количества процессов и т.д. {Template OS: system.cpu.load[percpu,avg1].avg(5m)}>{$CPU_LOAD} {Template OS: vm.memory.size[available].last(0)}<{$MEMORY_FREE} {Template OS: proc.num[].avg(5m)}>{$PROC_NUM}
  • 6. {$PROC_NUM} = 300 {$PROC_NUM} = 300 Обычный узел сети Сильно нагруженный узел сети Менее загруженный узел сети МАКРОС УРОВНЯ ШАБЛОНА {$PROC_NUM} = 300 {$PROC_NUM} = 500 {$PROC_NUM} = 300 {$PROC_NUM} = 200 МАКРОС УРОВНЯ УЗЛА СЕТИ Динамические пороги в шаблонах
  • 7. Фиксированные номера портов в шаблонах Одинаковые сервисы могут использовать различные номера портов tcp {Template OS: net.tcp.service[ssh,22] {Template OS: net.tcp.service[http,80] {Template OS: net.tcp.service[https,443]
  • 8. Динамические номера портов в шаблонах Используйте {$USER_MACROS} как номер порта для tcp/udp соединений ssh, http, https и других служб {Template OS: net.tcp.service[ssh,{$SSH_PORT}] {Template OS: net.tcp.service[http,{$HTTP_PORT}] {Template OS: net.tcp.service[https,{$HTTPS_PORT}]
  • 9. {$HTTP_PORT} = 80 {$HTTP_PORT} = 80 Обычный узел сети Нестандартный узел сети 1 Нестандартный узел сети 2 {$HTTP_PORT} = 80 {$HTTP_PORT} = 8080 {$HTTP_PORT} = 80 {$HTTP_PORT} = 8000 МАКРОС УРОВНЯ ШАБЛОНА МАКРОС УРОВНЯ УЗЛА СЕТИ Динамические номера портов в шаблонах
  • 10. Фиксированные пороги для элементов данных LLD (Правил Низкоуровневого Обнаружения) Разные точки монтирования имеют различный размер, и следовательно пороговые значения для предупреждения о их заполненности отличаются • /boot малый размер 100M • / средний размер 10G • /data большой размер 1TB
  • 11. Используйте контекст для макросов в пороговых значениях для элементов данных LLD Разные точки монтирования имеют различный размер, поэтому используйте контекст макросов в выражениях триггеров • /boot малый размер {$LOW_SPACE:”/boot”} • / средний размер {$LOW_SPACE:”/”} • /data большой размер {$LOW_SPACE:”/data”} {host:vfs.fs.size[{#FSNAME},free].last()} < {$LOW_SPACE:"{#FSNAME}"} Может также использоваться для имен дисков Windows
  • 12. Как работает контекст пользовательских макросов {$LOW_SPACE} = 1G {$LOW_SPACE: " /boot "} = 10M {$LOW_SPACE: " / "} = 500M {$LOW_SPACE: " /var "} = 5G {$LOW_SPACE} = 1G {$LOW_SPACE: " /boot "} = 10M {$LOW_SPACE: " / "} = 500M {$LOW_SPACE:”/var”} = 5G {$LOW_SPACE: " /data "} = 50G {$LOW_SPACE: " /var "} = 10G МАКРОС УРОВНЯ ШАБЛОНА МАКРОС УРОВНЯ УЗЛА СЕТИ
  • 13. Разный набор служб на разных серверах Разные серверы имеют разные сервисы, которые необходимо отслеживать • Сервер 1 DHCP client, Windows defender • Сервер 2 DHCP client, Windows defender, MS Exchange • Сервер 3 DHCP client, RDP Service, RPC Использовать только @Global regular expressions неудобно и сложно, ведь возможных комбинаций очень много
  • 14. {$SERVICES} = none {$SERVICES} = none Обычный узел сети Узел сети со службами exchange Узел сети со службами Tomcat и WSUS {$SERVICES} = none {$SERVICES}= (exchange) {$SERVICES} =none {$SERVICES}= (Tomcat|WSUS) @SERVICES = (DNS Client|DHCP Client) ГЛОБАЛЬНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ OR OR OR @SERVICE S @SERVICE S @SERVICE S МАКРОС УРОВНЯ ШАБЛОНА МАКРОС УРОВНЯ УЗЛА СЕТИ Используйте комбинацию {$USER_MACROS} и @global regular expressions
  • 15. Пример фильтрации служб МАКРОС УРОВНЯ УЗЛА СЕТИ ГЛОБАЛЬНОЕ РЕГУЛЯРНОЕ ВЫРАЖЕНИЕ
  • 16. Разные клиенты используют разные учетные данные • Разные клиенты используют разные учетные данные • для пароля SNMPv2 • для SNMPv3 логина и пароля • для учетных данных SSH • для учетных данных веб-сайта Теоретически, вы можете просто клонировать шаблон для каждого клиента, но потом вам придется управлять этим множеством шаблонов
  • 17. {$SNMP_COMMUNITY} = public {$SNMP_COMMUNITY} = public {$SNMP_COMMUNITY} = secret1 Узел сети клиента 1 Шаблон Клиент 1 {$SNMP_COMMUNITY} = secret2 Шаблон Клиент 2 Шаблон SNMP Узел сети клиента 2 ШАБЛОНЫ {$SNMP_COMMUNITY} = secret2 {$SNMP_COMMUNITY} = secret1 {$SNMP_COMMUNITY} = public Разные клиенты используют разные учетные данные
  • 18. Хитрости и трюки Zabbix 2. Предобработка
  • 19. Когда выполняется предварительная обработка? Сбор данных База данных Zabbix Предварительная обработка
  • 20. Нужно делить или умножать значения • Конвертация Байтов в Биты • Конвертация Битов в Байты • Конвертация миллисекунд в секунды • …. Вы можете задать единицы измерения для удобного отображения информации, но что если вы хотите хранить преобразованные данные?
  • 21. Используйте шаг предварительной обработки – пользовательский множитель Конвертируйте байты в биты используя множитель 8 Конвертируйте биты в байты используя множитель 0.125 В последних версиях Zabbix для этого используется новая вкладка «Предобработка»
  • 22. Вам нужно извлечь числовые данные из отчёта • Память в Linux • Отчет о свободном пространстве Linux • Любой отчет, содержащий числовые данные
  • 23. Извлекаем число из текста Извлекайте данные при помощи шаблонов PCRE REGEX Полученные данные могут быть обработаны на следующих шагах
  • 24. Необходимо преобразовать двоичные текстовые данные в десятичные • systemctl возвращает состояние служб как enabled или disabled • Мы хотим хранить состояние в виде 1 или 0 для простых триггерных функций или для визуализации в графиках
  • 25. Используйте регулярные выражения systemctl list-unit-files | grep postfix База данных Zabbix Совпадение по шаблону regex postfix.service Преобразование логического значения в десятичное enabled disabled true false y n yes no On off up down 1 01 0
  • 27. Хитрости и трюки Zabbix 3. Зависимые элементы данных
  • 28. Требуется извлечь всю числовую информацию из текста • Использование памяти в Linux, отчет о свободном пространстве или любой другой отчет, который содержит числовые данные • Используя обычные элементы данных нам потребуется 9(!) проверок чтобы собрать всю информацию • Это дополнительный сетевой трафик и использование процессора на узле сети.
  • 29. Используйте зависимые элементы данных system.run[free] База данных Zabbix used free shared buffertotal available Основной элемент данных собирающий текстовый тип информации Зависимые элементы данных с числовым типом информации Исходные данные
  • 30. Соберите все информацию с помощью обычного текстового элемента данных: Используйте зависимые элементы данных Создайте зависимые элементы данных для каждого значения используя предварительную обработку регулярными выражениями:
  • 32. Мониторинг репликации MySQL базы данных Использование ODBC элементов данных означает сбор данных в несколько подходов, а это значит дополнительный трафик, использование CPU и несколько подключений к базе данных. MariaDB [(none)]> show slave status G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Port: 3306 Connect_Retry: 60 Master_Log_File: master2-bin.000001 Read_Master_Log_Pos: 926945751 Relay_Log_File: master1-relay-bin.000002 Relay_Log_Pos: 207526 Relay_Master_Log_File: master2-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0
  • 33. Используйте запросы SQL и зависимые элементы данных MySQL: show slave status; возвращено несколько метрик SLAVE STATUS Relay log pos Seconds behind master Relay log file База данных Zabbix
  • 35. Необходимо собрать погодные данные для вашего местоположения • Хотите получить данные о температуре, влажности, скорости ветра • Можно использовать собственный curl скрипт, но в итоге его логика может заметно усложниться
  • 36. Используйте OpenWeatherMap API и предобработку JSON Запрос get с параметрами Ответ в виде JSON от API HTTP Agent JSON Data Предобработка Путь JSON Температура Влажность Скорость ветра Зависимые элементы данных База данных Zabbix OpenWeatherMap
  • 38. Ответом вы получите JSON объект $.main.humidity $.main.temp $.wind.speed
  • 39. Используйте предобработку для JSON Предобработка JSON Path Зависимые элементы данных
  • 40. Хитрости и трюки Zabbix 4. Низкоуровневое обнаружение
  • 41. Необходимо настроить обнаружение пользовательских SNMP метрик • Многообразие моделей принтеров • Хотите узнать все параметры принтера • Расходники • Лотки для бумаги • Количество отпечатанных страниц • Уровень чернил
  • 42. Используйте обнаружение SNMP правилах LLD Описание .1.3.6.1.2.1.43.11.1.1.6.{#SNMPINDEX} Объем картриджа .1.3.6.1.2.1.43.8.2.1.8 Описание картриджа .1.3.6.1.2.1.43.11.1.1.6 Объем картриджа .1.3.6.1.2.1.43.11.1.1.8.{#SNMPINDEX} Уровень картриджа .1.3.6.1.2.1.43.11.1.1.9.{#SNMPINDEX} Уровень картриджа .1.3.6.1.2.1.43.8.2.1.9 Картриджи discovery[{#SNMPVALUE},.1.3.6.1.2.1.43.11.1.1 .6] ПРОТОТИП ЭЛЕМЕНТА ДАННЫХПРАВИЛО ОБНАРУЖЕНИЯ
  • 43. Правило LLD и прототипы элементов данных
  • 44. Проверка доступности удаленного порта на других узлах сети Server 1 Port 1111 Server 2 Port 2222 Server 3 Port 3333 Server 4 Port 4444 Server 5 Port 5555 • Используется ключ net.tcp.port • Множество серверов и портов • Каждый агент имеет свой список серверов для проверки
  • 45. Используйте собственный скрипт для LLD • Простой bash скрипт будет работать из коробки на большинстве платформ • Использует {$USER_MACRO} во входных данных, возвращает JSON объект
  • 47. Все данные точек доступа собираются на контроллере Точка доступа 1 Точка доступа 2 Точка доступа 3 Точка доступа 4 • WLAN контроллер возвращает все SNMP данные по каждой точке доступа • Точки доступа используются разными клиентами
  • 48. Создайте правило обнаружения и прототипы узлов сети для сбора метрик по точкам доступа
  • 49. Для каждого узла сети присоедините шаблон
  • 50. Данные все еще собираются из WLC и фильтруются по актуальной точке Используйте фильтры LLD чтобы отфильтровать данные только по конкретной точке доступа
  • 51. Результат – узлы сети, автоматически созданные для каждой точки доступа
  • 52. Преимущества использования прототипов узла сети • Управляются Zabbix внутренним механизмом LLD • Добавляются по необходимости • Автоматически удаляются или изменяются • Шаблоны и группы назначаются автоматически • Группы узлов сети могут генерироваться динамически из макросов LLD • Можно ограничить доступ только к части данных с использованием групп узлов и групп пользователей.
  • 53. Работа объемных LLD правил в нестабильных средах • Мы хотим обнаруживать и мониторить лог файлы • Набор логов изменяется каждые сутки, но момент времени изменения нам не известен • Список логов большой и обработка полученного JSON накладна по ресурсам – мы не можем запускать правило часто Можно написать скрипт, определяющий изменения конфигурации и если таковые есть он отправит готовый JSON при помощи zabbix_sender. Запускать скрипт по расписанию. Но что, если у нас нет возможности использовать локальный планировщик?
  • 54. Троттлинг Мы будем обрабатывать значение только в случае его изменения Основные элементы данных Это уменьшит объем входных данных, если они в основном статичны Элемент данных правила LLD Это позволит уменьшить интервал опроса для LLD правила и позволит быстрее реагировать на изменения в конфигурации не нагружая при этом сервер
  • 56. JSON в LLD правилах • RAID контроллер возвращает данные обо всех массивах и дисках • На разных контроллерах используется разное количество дисков • Мы хотим отслеживать состояние и производительность всех дисков
  • 57. Пример возвращаемых контроллером данных JSON для правила LLD {#DRIVE} -> $.Drive {#SIZE} -> $.Size
  • 59. «Последние данные» Мы получили работающее правило без скриптов
  • 60. Предобработка в правилах LLD • Используйте Путь Json или регулярное выражение чтобы без пользовательских скриптов привести правило к JSON для LLD. LLD макросы завершат эту задачу • Если нужна логика сложнее, например условные проверки или циклы – вы можете написать JavaScript для предобработки правила • Проверьте на ошибки – совпадает ли с шаблоном регулярного выражения и нет ли ошибок в JSON объекте • Троттлинг
  • 61. Хитрости и трюки Zabbix 5. Глобальная корреляция событий
  • 62. Подавление оповещений • Конечные устройства подключены через разные коммутаторы • Можно использовать Зависимость триггеров, но это может оказаться что устройств за каждым коммутатором множество • Если устройство будет перемещено за другой коммутатор, придется изменить и связи триггеров
  • 63. Используйте глобальную корреляцию событий на основе тегов Макрос {$SWITCH.IP} генерируется API скриптом на основе ARP таблиц, которые собираются Zabbix с коммутатора Тэг SWITCH_IP= {HOST.IP} Тэг DEVICE_TYPE = SWITCH Тэг SWITCH_IP = {$SWITCH.IP} Тэг DEVICE_TYPE = END_DEVICE Тэг SWITCH_IP = {$SWITCH.IP} Тэг DEVICE_TYPE = END_DEVICE Тэг SWITCH_IP = {$SWITCH.IP} Тэг DEVICE_TYPE = END_DEVICE Тэг SWITCH_IP = {$SWITCH.IP} Тэг DEVICE_TYPE = END_DEVICE Зависимость триггеров Корреляция событий Тэг SWITCH_IP = {$SWITCH.IP} Тэг DEVICE_TYPE = END_DEVICE Тэг SWITCH_IP= {HOST.IP} Тэг DEVICE_TYPE = SWITCH