Главная

Sunday, 6 March 2022

Макросы в Zabbix.

Всем привет.

Макросы в Zabbix могут быть удобны для умного использования. Известно что макросы в Zabbix определяются на нескольких уровнях, более локальный перекрывает предыдущий по ниспадающей:

глобальный макрос

{$PROC_NUM} = 200

Его перекрывает макрос уровня шаблона 

{$PROC_NUM} = 300

А его перекрывает макрос уровня узла сети

{$PROC_NUM} = 500

Например, можно использовать {$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} = 500

- менее загруженный узел сети

{$PROC_NUM} = 200

Используйте{$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

{$SSH_PORT} = 22

А макрос уровня узла сети разделить по номеру порта:

- обычный узел сети

{$HTTP_PORT} = 80

- нестандартный узел сети 1

{$HTTP_PORT} = 8080

- нестандартный узел сети 2

{$HTTP_PORT} = 8000


Другой вариант - пишем правило LLD SNMP для printer-а:

Discovery rule  для катриджа:

Key      - suppliesDiscovery

SNMP OID - discovery[{#SNMPVALUE},.1.3.6.1.2.1.43.11.1.1.6]

Тогда рrototype item для уровня наполнения катриджа:

Key      - suppliesDiscovery[{#SNMPVALUE}]

SNMP OID - .1.3.6.1.2.1.43.11.1.1.9.{#SNMPINDEX}


Третий вариант - правило LLD check_remote_port для проверки открытого порта с помощью внешнего shell-скрипта:

check_remote_port_lld.sh:

#/bin/bash

IFS=':,' read -r -a array <<< "$1"

idx=0

echo {\"data\":[

while [ -n "${array[$idx]}" ]; do

echo -n \{\"{#R_IP}\":\""${array[$idx]}"\",\"{#R_PORT}\":""${array[$idx+1]}"\"\}

let idx=$idx+2

[ -n "${array[idx]}" ] && echo "," || echo

done

echo ]}

exit


А в само Discovery rule для проверки remote port пишем:

Type - внешнняя проверка

Key - check_remote_port_lld.sh[{$LLD_REMOTE_CHECK}]

Macros: {$LLD_REMOTE_CHECK} = 192.168.1.1:8080,192.168.1.1:22


И последнее - для оптимизации накопления данных используйте троттлинг. Т.е. обрабатывать значение только в случае его изменения. Для этого в предобработку правила обнаружения указываем "Discard unchanged with heartbeat - 24h".

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

Всем удачи.
Слава Украине!

No comments:

Post a Comment

А что вы думаете по этому поводу?