This is an old revision of the document!
# apt install zabbix-server-mysql #2m # less /usr/share/doc/zabbix-server-mysql/README.Debian
# cat zabbix.sql
#drop database zabbix; create database zabbix character set utf8 collate utf8_bin; grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
# mysql < zabbix.sql
# zcat /usr/share/zabbix-server-mysql/{schema,images,data}.sql.gz | mysql -uzabbix -pzabbix zabbix # cat /etc/zabbix/zabbix_server.conf
... DBHost=localhost DBName=zabbix DBUser=zabbix DBPassword=zabbix #end newline!!!
# systemctl enable zabbix-server # service zabbix-server start
Все следующие компоненты поставятся, как зависимости:
# apt install zabbix-frontend-php php-mysql # less /usr/share/doc/zabbix-frontend-php/README.Debian # cat /etc/apache2/conf-available/zabbix-frontend-php.conf
... php_value date.timezone Europe/Moscow ... php_value date.timezone Europe/Moscow ...
# a2enconf zabbix-frontend-php # service apache2 reload # touch /etc/zabbix/zabbix.conf.php # chown www-data /etc/zabbix/zabbix.conf.php
http://server.corpX.un/zabbix/setup.php
# less /etc/zabbix/zabbix.conf.php
<?php // Zabbix GUI configuration file. global $DB; $DB['TYPE'] = 'MYSQL'; $DB['SERVER'] = 'localhost'; $DB['PORT'] = '0'; $DB['DATABASE'] = 'zabbix'; $DB['USER'] = 'zabbix'; $DB['PASSWORD'] = 'zabbix'; // Schema name. Used for IBM DB2 and PostgreSQL. $DB['SCHEMA'] = ''; $ZBX_SERVER = 'localhost'; $ZBX_SERVER_PORT = '10051'; $ZBX_SERVER_NAME = ''; $IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
# apt install zabbix-proxy-sqlite3 # mkdir /var/lib/zabbix # zcat /usr/share/doc/zabbix-proxy-sqlite3/schema.sql.gz | sqlite3 /var/lib/zabbix/zabbix.db
# apt install zabbix-proxy-sqlite3 # less /usr/share/doc/zabbix-proxy-sqlite3/README.Debian # zcat /usr/share/zabbix-proxy-sqlite3/schema.sql.gz | sqlite3 /var/lib/zabbix/zabbix.db
# chown -R zabbix:zabbix /var/lib/zabbix # vim /etc/zabbix/zabbix_proxy.conf
... Hostname=gate ConfigFrequency=60 Server=server DBName=/var/lib/zabbix/zabbix.db
gate# apt install zabbix-proxy-mysql gate# cat zabbix_proxy.sql
#drop database zabbix_proxy; create database zabbix_proxy character set utf8 collate utf8_bin; grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';
gate# mysql < zabbix_proxy.sql gate# zcat /usr/share/zabbix-proxy-mysql/schema.sql.gz | mysql -uzabbix -pzabbix zabbix_proxy gate# cat /etc/zabbix/zabbix_proxy.conf
... Hostname=gate ConfigFrequency=60 Server=server DBHost=localhost DBName=zabbix_proxy DBUser=zabbix DBPassword=zabbix
gate# systemctl enable zabbix-proxy gate# service zabbix-proxy start
Administration->Proxies Proxy name: gate Proxy mode: Active Proxy address: gate
http://server.corpX.un/zabbix/
Administration->Media types->Email SMTP server: server.corpX.un SMTP helo: server.corpX.un SMTP email: zabbix@corpX.un Administration->Users->student->Media Type: Email Send to: student@corpX.un
Configuration->Actions->Event source: Triggers Report problems to Zabbix administrators->Enable ...
# grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
# getent passwd zabbix # mkdir /var/lib/zabbix/ # cat /var/lib/zabbix/.sendxmpprc admin@corpX.un Pa$$w0rd # chmod 600 /var/lib/zabbix/.sendxmpprc # chown -R zabbix:zabbix /var/lib/zabbix/ # cat /usr/lib/zabbix/alertscripts/notification_xmpp.sh
#!/bin/bash logger -t zabbix_xmpp -p local0.info "$1, $2, $3" to=$1 subject=$2 body=$3 cat <<EOF | sendxmpp -f /var/lib/zabbix/.sendxmpprc -s "$subject" "$to" $body EOF
Administration->Media types->Create media type Name: XMPP Type: Script Script Name: notification_xmpp.sh Script parameters {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} Message teplates Problem Problem recovery Problem update
Administration->Users->student->Media Type: XMPP Send to: student@corpX.un
# cat /usr/lib/zabbix/alertscripts/notification_pstn.sh
#!/bin/bash logger -t zabbix_pstn -p local0.info "$1, $2, $3" to=$1 subject=$2 body=$3 cat <<EOF > /tmp/zabbix.txt $subject $body EOF cat /tmp/zabbix.txt | text2wave -eval '(voice_msu_ru_nsh_clunits)' > /tmp/zabbix.wav sox /tmp/zabbix.wav -r 8000 -c 1 /tmp/zabbix.raw rm /tmp/zabbix.wav #sudo /usr/sbin/asterisk -x "channel originate SIP/smg1016/$to extension 326@default" sudo /usr/sbin/asterisk -x "channel originate SIP/$to extension 326@default"
Administration->Media types->Create media type Name: PSTN Type: Script Script Name: notification_pstn.sh Script parameters {ALERT.SENDTO} {ALERT.SUBJECT} {ALERT.MESSAGE} Message teplates Problem Message templates-> Subject: Звонок с работы. Message: Обнаружена проблема: {EVENT.NAME}. Имя узла: {HOST.NAME}.
Administration->Users->student->Media Type: PSTN Send to: 8495123456X или 403 Use if severity Disaster
Reports -> Action log
Zabbix 4
Configuration->Actions->Event source: Triggers Report problems to Zabbix administrators Operations: Default message
... {ITEM.NAME1} ({HOST.NAME1}:{ITEM.KEY1}): Current: {ITEM.VALUE1} Previous: {{HOSTNAME}:{TRIGGER.KEY}.last(#2)}
Zabbix 5
Administration->Media type->Email->Message templates Problem ... Current: {ITEM.VALUE1} Previous: {{HOSTNAME}:{TRIGGER.KEY}.last(#2)}
Host: ya.ru или val.bmstu.ru ЛЮБОЙ ИНТЕРФЕЙС: ya.ru или val.bmstu.ru New group: External Hosts Items Name: check perf http Type: Simple check Key: net.tcp.service.perf[https] Type of information: Numeric (float)
Host: server.corpX.un ... Items Name: check ping gate.isp.un Type: Simple check Key: icmpping[gate.isp.un] Applications: Network check Host: server.corpX.un ... Items Name: check rdp admin/host windows Type: Simple check Key: net.tcp.service[tcp,192.168.X.5,3389] Applications: Service check
server# zabbix_server --help | grep ExternalScripts server# cat /etc/zabbix/zabbix_server.conf
... Timeout=30 ... ExternalScripts=/etc/zabbix/externalscripts ...
server# mkdir /etc/zabbix/externalscripts
Пример 1
server# cat /etc/zabbix/externalscripts/ping_avg.sh
#!/bin/sh ping -c"$1" "$2" | tail -n1 | cut -d'/' -f5
server# /etc/zabbix/externalscripts/ping_avg.sh 3 ya.ru
Cofiguration->Hosts->ya.ru или val.bmstu.ru Items Name: Ping AVG Type: External Check Key: ping_avg.sh[3,"{HOST.CONN}"] Type of information: Numeric (float) Units: ms
Пример 2
server# cat /etc/zabbix/externalscripts/speedtest.sh
#!/bin/sh if [ "x$1" = xupload ] then A="--no-download" F=8 elif [ "x$1" = xdownload ] then A="--no-upload" F=7 else exit 1 fi speedtest-cli --csv $A | cut -d',' -f $F
Cofiguration->Hosts->server.corpX.un Items Name: speedtest download Type: External Check Key: speedtest.sh[download] Type of information: Numeric (float) Units: Бит/сек ... Name: speedtest upload ...
!!! Для некоторых хостов (например, val.bmstu.ru) не хватит Timeout
server# cat /etc/zabbix/externalscripts/detect_host_nmap.sh
#!/bin/sh sudo /usr/bin/nmap -O $1 | grep -v 'Starting Nmap\|Host is up\|Nmap done'
Cofiguration->Hosts->gate Items Name: Detect host operating system by nmap Type: External Check Key: detect_host_nmap.sh["{HOST.CONN}"] Type of information: Text
server# service zabbix-server stop server# service zabbix-agent stop
server# service zabbix-server start server# service zabbix-agent start server# sudo -u zabbix bash zabbix@server:~$ ssh-keygen zabbix@server:~$ ssh-copy-id root@gate zabbix@server:~$ ssh root@gate hostname
zabbix@server:~$ ssh root@gate /usr/local/bin/dhcp_stat.sh CUR zabbix@server:~$ ssh root@gate /usr/local/bin/dhcp_stat.sh MAX server# cat /etc/zabbix/externalscripts/dhcp_stat_ext.sh
#!/bin/sh ssh root@$1 /usr/local/bin/dhcp_stat.sh $2
zabbix@server:~$ /etc/zabbix/externalscripts/dhcp_stat_ext.sh gate CUR
gate->Items Name: DHCP stat CUR Type: External check Key: dhcp_stat_ext.sh["{HOST.CONN}",CUR]
Пример 1
HOSTNAME_IN_CONFIG->Items Name: my item Type: Zabbix trapper Key: my.item Allowed hosts: 127.0.0.1, 192.168.X.0/24
# apt install zabbix-sender $ zabbix_sender -z IP/DNSNAME -p 10051 -s HOSTNAME_IN_CONFIG -k my.item -o 1
Пример 2
server.corpX.un->Items Name: speedtest download trap Type: Zabbix trapper Key: speedtest.download Type of information: Numeric (float) или Numeric (unsigned) Units: Бит/сек Allowed hosts: 127.0.0.1 Preprocessing может понадобиться Custom multiplier: 8 ... Name: speedtest upload trap ...
# cat /root/speedtest.sh
#!/bin/sh ### speedtest-cli ### result bits/s MY_RES=`speedtest-cli --csv` MY_DOWNLOAD=`echo $MY_RES | cut -d',' -f7` MY_UPLOAD=`echo $MY_RES | cut -d',' -f8` ### speedtest ### result Bytes/s (use preprocess Custom multiplier) #MY_RES=`speedtest -f csv` #MY_DOWNLOAD=`echo $MY_RES | cut -d',' -f6` #Y_UPLOAD=`echo $MY_RES | cut -d',' -f7` zabbix_sender -z 127.0.0.1 -p 10051 -s server.corpX.un -k speedtest.download -o $MY_DOWNLOAD zabbix_sender -z 127.0.0.1 -p 10051 -s server.corpX.un -k speedtest.upload -o $MY_UPLOAD
# crontab -l
... X * * * * /root/speedtest.sh >/dev/null 2>&1
val.bmstu.ru->Items Name: my nmap Type: Zabbix trapper Key: my.nmap Type of information: Text Allowed hosts: 127.0.0.1
server# zabbix_sender -z 127.0.0.1 -p 10051 -s val.bmstu.ru -k my.nmap -o "$(nmap -O val.bmstu.ru)"
server# cat /root/detect_host_nmap.sh
#!/bin/sh /usr/bin/nmap -O $1 | grep -v 'Starting Nmap\|Host is up\|Nmap done\|Network Distance'
server# chmod +x /root/detect_host_nmap.sh
server# zabbix_sender -z 127.0.0.1 -p 10051 -s val.bmstu.ru -k my.nmap -o "$(/root/detect_host_nmap.sh val.bmstu.ru)"
ya.ru->Items Name: avg perf http Type: Calculated Key: my.avg.perf.http Formula: avg(net.tcp.service.perf[https],5m) Type of information: Numeric (float) #--------------------- gate.corpX.un->Items Name: DHCP stat CUR Type: Zabbix agent Key: dhcp.stat[CUR] Name: DHCP stat MAX Type: Zabbix agent Key: dhcp.stat[MAX] Name: DHCP stat CUR MAX percent Type: Calculated Key: DHCP.stat.CUR.MAX.percent Formula: last(dhcp.stat[CUR])/last(dhcp.stat[MAX])*100 #--------------------- last(openvpn1:openvpn.server.clients)+last(openvpn2:openvpn.server.clients)+last(openvpn3:openvpn.server.clients)
Шаг 1. Браузер: http://192.168.X.10/mail/ view-source ... ...Roundcube Webmail... ... <input type="hidden" name="_token" value="29JVrZhgW97xID7K2pkSRRHsngGDRGCY"> ... Шаг 2. Браузер: вводим логин/пароль и нажимаем "Войти" server# tcpdump -n -A port 80 | tee dump2.txt ... POST /mail/?_task=login HTTP/1.1 ... _token=29JVrZhgW97xID7K2pkSRRHsngGDRGCY&_task=login&_action=login&_timezone=Europe%2FMoscow&_url=&_user=student&_pass=password ... HTTP/1.1 302 Found ... Location: ./?_task=mail&_token=pWUje42O61E2Rm0r8zgKzOPXWGby8ugP ... view-source ... ...button-logout... ... <input type="hidden" name="_token" value="pWUje42O61E2Rm0r8zgKzOPXWGby8ugP"> ... 3. Браузер: нажимаем "Выход" server# tcpdump -n -A port 80 | tee dump3.txt ... GET /mail/?_task=logout&_token=pWUje42O61E2Rm0r8zgKzOPXWGby8ugP HTTP/1.1 ...
Name: mail corpX Variables {login} student {password} password Steps Step 1 Name: First page URL: http://server.corpX.un/mail/ Variables {token1} regex:name="_token" value="([0-9A-Za-z]{32})" Required string: Roundcube Webmail Required status codes: 200 Step 2 Name: Log in URL: http://server.corpX.un/mail/ Post fields _token: {token1} _task: login _action: login _user: {login} _pass: {password} Variables {token2}: regex:name="_token" value="([0-9A-Za-z]{32})" Follow redirects: YES Required string: button-logout Required status codes: 200 Step 3 Name: Log out URL: http://server.corpX.un/mail/ Query fields _task: logout _token: {token2} Required string: Roundcube Webmail Required status codes: 200
Host: server.corpX.un Name: gate.isp.un is unreachable Expression: {server.corpX.un:icmpping[gate.isp.un].last()}=0 Severity: High Name: RDP service on host is not available Expression: {server.corpX.un:net.tcp.service[tcp,192.168.X.5,3389].last()}=0 Severity: Warning Host: ya.ru Name: HTTPS service on {HOST.NAME} is not available Expression: {ya.ru:net.tcp.service.perf[https].last(#2)}=0 Dependencies: Zabbix server: gate.isp.un is unreachable !!!Можно добавить после эксперимента с недоступностью gate.isp.un и двумя, сработавшими триггерами Severity: Average
Host: ya.ru Name: HTTP service on {HOST.NAME} is slow Expression: {ya.ru:net.tcp.service.perf[https].avg(5m)}>0.4 Expression: {ya.ru:my.avg.perf.http.last()}>0.4 Значение подобрать на основе графика Severity: Warning
Name: On {HOST.NAME} dhcp subnet is full Problem expression: {Template App DHCP Service:dhcp.stat[CUR].last()}/{Template App DHCP Service:dhcp.stat[MAX].last()}*100>{$DHCP.POOLS.MAX.PERCENT} Recovery expression: {Template App DHCP Service:dhcp.stat[CUR].last()}/{Template App DHCP Service:dhcp.stat[MAX].last()}*100<{$DHCP.POOLS.OK.PERCENT} Description: В заканчиваются адреса. Израсходовано более {$DHCP.POOLS.MAX.PERCENT} процентов.
Name: Host {HOST.NAME} nmap change Severity: Warning Expression: {gate.corpX.un:detect_host_nmap.sh["{HOST.CONN}"].diff()}=1 или Expression: {val.bmstu.ru:my.nmap.diff()}=1
Name: Web scenario mail corpX FAIL Severity: Hight Expression: {server.corpX.un:web.test.fail[mail corpX].last()}>0
Configuration->Hosts->ya.ru->Graphs->Create graph или val.bmstu.ru Name: perf http Y axis MIN value: Fixed 0 Items ya.ru: avg perf http или val.bmstu.ru ya.ru: check perf http или val.bmstu.ru Draw style: Bold Line
# apt install zabbix-agent
# zabbix_agentd -p # zabbix_agentd -p | grep agent.version
# zabbix_agentd -p | grep vm.memory.size # zabbix_agentd -t vm.memory.size[available] # cat /proc/meminfo | grep MemAvailable # zabbix_agentd -t system.sw.packages # dpkg -l
Проверка связи с агентом:
# apt install zabbix-get $ zabbix_get -s IP/DNSNAME -p 10050 -k agent.version
Минимальная конфигурация агента, включая PSK
# cat /etc/zabbix/zabbix_agentd.conf или # cat `echo /etc/zabbix/zabbix_agentd.*d/`corpX.conf
Server=server # ListenPort=10050 # Hostname=Zabbix server # must match hostname as configured in Zabbix # Иначе в журнале будут сообщения: cannot send list of active checks #TLSConnect=psk #TLSAccept=psk ##TLSAccept=unencrypted,psk #TLSPSKFile=/etc/zabbix/zabbix_agentd.psk #TLSPSKIdentity=gate
gate# openssl rand -hex 32 > /etc/zabbix/zabbix_agentd.psk gate# scp /etc/zabbix/zabbix_agentd.psk server:gate.psk gate# service zabbix-agent restart server# zabbix_get -s gate -k system.sw.packages --tls-connect=psk --tls-psk-identity="gate" --tls-psk-file=gate.psk
Configuration - Actions - Auto registration Name: Add windows clients Conditions: Host name contains CLIENT Action operations: Add to host groups: windows clients Link to templates: Template OS Windows by Zabbix agent active Template OS Windows list installed soft Active Set host inventory mode: Automatic
LogFile=C:\Program Files\Zabbix Agent\zabbix_agentd.log #Server=server ListenIP=0.0.0.0 StartAgents=0 ServerActive=server Hostname=CLIENTN
gate# cat `echo /etc/zabbix/zabbix_agentd.*d/`dhcp_stat.conf
UserParameter=dhcp.stat[*],/usr/local/bin/dhcp_stat.sh $1
server# zabbix_get -s gate -k dhcp.stat[CUR] server# zabbix_get -s gate -k dhcp.stat[MAX]
Admin C:\> C:\Program Files\Zabbix Agent\zabbix_agentd.conf
... Timeout=30 UserParameter=listinstalledsoft,powershell -Command Get-ChildItem HKLM:\Software\Microsoft\Windows\CurrentVersion\Uninstall; powershell -Command Get-ChildItem HKLM:\Software\Wow6432Node\Microsoft\Windows\CurrentVersion\Uninstall UnsafeUserParameters=1 UserParameter=dir[*],dir $1 UserParameter=runcommand[*],$1 UserParameter=lmstat[*],C:\Progra~1\PTC\flexnet\bin\lmutil lmstat -a -c $1
# service zabbix-server restart
Configuration->Discovery Discovery rules Name: Local network IP range: 172.16.1.190-199, 192.168.X.51-60 Checks: Check type: SNMPv2 agent SNMP community: public SNMP OID .1.3.6.1.2.1.1.5.0 или SNMPv2-MIB::sysName.0 Add Update interval: 5m Device uniqueness criteria: IP address Enabled: yes Configuration->Actions Event source: Discovery Name: Action add snmp device to zabbix Conditions: Received value: like или contains router Discovery status: equals Up без этого появляются ghost hosts :) Add Operations: Add to host groups: Discovered hosts Link to templates: 3.XX Template SNMP Device 4.XX Template Module Generic SNMPv2 4.XX Template Module Interfaces Simple SNMPv2 5.XX Template Net Cisco IOS SNMP !!!! Уменьшить период Discovery !!!! Set host inventory mode: Automatic Add
# apt install snmptt # systemctl disable snmptt # systemctl stop snmptt # cat /etc/snmp/snmptt.conf
EVENT general .* "General event" Normal FORMAT ZBXTRAP $aA $ar
# cat /etc/snmp/snmptt.ini
... date_time_format = %H:%M:%S %Y/%m/%d ... #log_file = /var/log/snmptt/snmptt.log log_file = /tmp/my_zabbix_traps.tmp ...
# cat /etc/snmp/snmptrapd.conf
traphandle default snmptt authCommunity execute writetrap
# cat /lib/systemd/system/snmptrapd.service
... ExecStart=/usr/sbin/snmptrapd -Lsd -f -On ...
# systemctl daemon-reload # service snmptrapd restart
Configuration Templates Template App SSH Service Full Clone Template App SSH Port Service Add Templates Template App SSH Port Service Items SSH service is running Key: net.tcp.service[ssh,,{$SSH_PORT}] Update interval: 30s Macros {$SSH_PORT}=22
server# zabbix_get -s gate -k vfs.fs.discovery | jq ... server# zabbix_get -s gate -k vfs.fs.size[/,free] server# zabbix_get -s gate -k vfs.fs.size[/,total] server# zabbix_get -s gate -k vfs.fs.size[/,used] ... server# zabbix_get -s gate -k net.if.discovery | jq ... server# zabbix_get -s gate -k net.if.in[eth0] ...
agent# zabbix_agentd -p | grep vfs.dev ... server# zabbix_get -s agent -k "vfs.dev.read[sda,sps]" ... agent# cat /etc/zabbix/zabbix_agentd.conf.d/my.linux.disk.discovery.conf
UserParameter=my.disks.discovery,/bin/lsblk -dJ | /bin/sed -e 's/blockdevices/data/' -e 's/name/{#NAME}/g' -e 's/type/{#TYPE}/g'
server# zabbix_get -s agent -k my.disks.discovery | jq ...
Configuration->Templates->Create template Template name: My Template Linux disks utilization Groups: Templates/Server hardware Discovery rules-> Name: my disks discovery Key: my.disks.discovery Filters-> {#TYPE} matches disk Item prototypes-> Name: disk {#NAME} read bytes Key: vfs.dev.read[{#NAME},sps] Type of information: Numeric (float) Units: Байт Preprocessing-> Preprocessing steps Custom multiplier 512 Name: disk {#NAME} write bytes ...
gate# cat /etc/zabbix/dhcp-pools-discovery.sh
#!/bin/bash echo -n '{"data":[' str=`/usr/bin/dhcpd-pools -c /etc/dhcp/dhcpd.conf -f x | \ /usr/bin/xmlstarlet sel -T -t -m '//shared-network' \ -o '{"{#POOLNAME}":"' -v location -o '"},'` echo -n ${str::-1} echo -n ']}'
gate# /etc/zabbix/dhcp-pools-discovery.sh | jq gate# cat /etc/zabbix/dhcp-pools-shared-network.sh
#!/bin/sh res_field=2 test "x$2" = "xused" && res_field=3 /usr/bin/dhcpd-pools -c /etc/dhcp/dhcpd.conf -f x | \ /usr/bin/xmlstarlet sel -T -t -m '//shared-network' \ -v location -o ' ' -v defined -o ' ' -v used -n | \ grep $1 | cut -d ' ' -f $res_field
gate# /etc/zabbix/dhcp-pools-shared-network.sh LAN1 defined gate# /etc/zabbix/dhcp-pools-shared-network.sh LAN2 used gate# cat `echo /etc/zabbix/zabbix_agentd.*d/`dhcp_stat.conf
UserParameter=dhcp.pools.discovery,/etc/zabbix/dhcp-pools-discovery.sh UserParameter=dhcp.pools.shared-network[*],/etc/zabbix/dhcp-pools-shared-network.sh $1 $2
server# zabbix_get -s gate -k dhcp.pools.discovery | jq server# zabbix_get -s gate -k dhcp.pools.shared-network[LAN1,used]
Configuration->Templates->Create template Template name: Template App DHCP Pools Groups In groups: Templates/Applications Macros: {$DHCP.POOLS.MAX.PERCENT}=90 Add Applications: DHCP Discovery rules Name: Search DHCP Pools Type: Zabbix Agent Key: dhcp.pools.discovery Add Item prototypes Name: DHCP Pool $1 max addr или DHCP Pool {#POOLNAME} max addr Type: Zabbix Agent Key: dhcp.pools.shared-network[{#POOLNAME},defined] Applications: DHCP Add Name: DHCP Pool $1 cur addr Type: Zabbix Agent Key: dhcp.pools.shared-network[{#POOLNAME},used] Applications: DHCP Add Graph prototypes Name: DHCP Pool {#POOLNAME} max cur Y axis MIN value: Fixed 0 Items: Template App DHCP Pools: DHCP Pool {#POOLNAME} cur addr Template App DHCP Pools: DHCP Pool {#POOLNAME} max addr Trigger prototypes Name: On {HOST.NAME} in the DHCP pool {#POOLNAME} Expression: {Template App DHCP Pools:dhcp.pools.shared-network[{#POOLNAME},used].last()}/{Template App DHCP Pools:dhcp.pools.shared-network[{#POOLNAME},defined].last()}*100 > {$DHCP.POOLS.MAX.PERCENT} Severity: Warning
Configuration Templates Export/Import
server:~# apt install curl server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "user.login", "params": { "user": "Admin", "password": "zabbix" }, "id": 1 } ' http://127.0.0.1/zabbix/api_jsonrpc.php
{"jsonrpc":"2.0","result":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","id":1}
server:~# apt install jq
server:~# curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "host.get", "params": {}, "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "id": 2 } ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq ...
... "method": "template.get", ...
... "params": { "output": ["hostid", "host"], "templateids": ["10NNN"] }, ...
curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d ' { "jsonrpc": "2.0", "method": "history.get", "params": { "output": "extend", "history": 0, "itemids": "NNNNN", "sortfield": "clock", "sortorder": "DESC", "limit": 10 }, "auth": "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx", "id": 2 } ' http://127.0.0.1/zabbix/api_jsonrpc.php | jq
server:~# export AUTH=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx server:~# cat /root/zab_get_hosts.sh
#!/bin/sh curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"host.get\", \"params\": {}, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php
server:~# /root/zab_get_hosts.sh | jq Список имен узлов server:~# /root/zab_get_hosts.sh | jq '.result | .[] | { host: .host} | tostring' | tr -d '{}\\' | tr '"' ' ' | cut -d ' ' -f5
server.corp1.un:~# cat /root/zab_get_maps.sh
#!/bin/sh curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"map.get\", \"params\": { \"selectLinks\": \"extend\", \"selectSelements\": \"extend\" }, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php | jq
server.corp1.un:~# cat /root/zab_set_map_name.sh
#!/bin/sh MAPID=$1 MAPNAME=$2 curl -s -k -X POST -H 'Content-Type: application/json-rpc' -d " { \"jsonrpc\": \"2.0\", \"method\": \"map.update\", \"params\": { \"sysmapid\": \"${MAPID}\", \"name\": \"${MAPNAME}\" }, \"auth\": \"${AUTH}\", \"id\": 2 } " http://127.0.0.1/zabbix/api_jsonrpc.php
server.corp1.un:~# /root/zab_set_map_name.sh 2 "Super MAP"