User Tools

Site Tools


сервис_zabbix

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
сервис_zabbix [2024/08/20 08:17]
val [Обновление Zabbix]
сервис_zabbix [2026/07/17 13:50] (current)
val [Настройка уведомлений о событиях]
Line 7: Line 7:
 ===== Установка и запуск сервера ===== ===== Установка и запуск сервера =====
  
 +  * [[https://​www.zabbix.com/​release_notes|Release Notes for Zabbix]]
 ==== Установка SQL сервера ==== ==== Установка SQL сервера ====
  
Line 150: Line 151:
 # cat /​etc/​zabbix/​zabbix_proxy.conf # cat /​etc/​zabbix/​zabbix_proxy.conf
 </​code><​code>​ </​code><​code>​
-...+#...
 Hostname=gate Hostname=gate
-ConfigFrequency=60+ 
 +#v6 
 +#ConfigFrequency=60 
 +#v7 
 +#​ProxyConfigFrequency=60 
 +  ​
 Server=server Server=server
 DBName=/​var/​lib/​zabbix/​zabbix.db DBName=/​var/​lib/​zabbix/​zabbix.db
 +</​code>​
 +=== zabbix-proxy docker-compose ===
 +
 +  * [[https://​github.com/​kpod13/​docker-compose-zabbix-proxy]]
 +
 +<​code>​
 +lan:​~/​zabbix-proxy#​ cat docker-compose.yml
 +</​code><​code>​
 +services:
 +  zabbix-proxy:​
 +    environment:​
 +      ZBX_CONFIGFREQUENCY:​ '​60'​
 +      ZBX_HOSTNAME:​ lan
 +      ZBX_PROXYCONFIGFREQUENCY:​ '​60'​
 +      ZBX_SERVER_HOST:​ server.corpX.un
 +      ZBX_TLSCONNECT:​ psk
 +      ZBX_TLSPSK: aa.............................................................7c
 +      ZBX_TLSPSKIDENTITY:​ lan
 +    image: zabbix/​zabbix-proxy-sqlite3:​ubuntu-7.0-latest
 +    ports:
 +    - published: 10051
 +      target: 10051
 +    restart: always
 +    stop_grace_period:​ 1m
 </​code>​ </​code>​
  
Line 201: Line 231:
 ===== Обновление Zabbix ===== ===== Обновление Zabbix =====
  
 +  * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade|Zabbix Documentation Upgrade procedure]] см. log_bin_trust_function_creators
   * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade/​packages/​debian_ubuntu|upgrade packages Debian/​Ubuntu]] и !!![[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade_notes_700|Upgrade notes for 7.0.0]]   * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade/​packages/​debian_ubuntu|upgrade packages Debian/​Ubuntu]] и !!![[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade_notes_700|Upgrade notes for 7.0.0]]
   * [[https://​bestmonitoringtools.com/​upgrade-zabbix-to-the-latest-version/​|Upgrade Zabbix (5.0, 5.2, 5.4) to 6.0 like a Pro (+6.0 to 6.4 guide)]]   * [[https://​bestmonitoringtools.com/​upgrade-zabbix-to-the-latest-version/​|Upgrade Zabbix (5.0, 5.2, 5.4) to 6.0 like a Pro (+6.0 to 6.4 guide)]]
-  * [[https://​www.zabbix.com/​documentation/​current/​manual/​installation/​upgrade/​packages/​debian_ubuntu|Steps required for a successful upgrade Zabbix]] + 
-  * [[https://​www.zabbix.com/​documentation/​current/​ru/​manual/​installation/​upgrade/​packages/​debian_ubuntu|Требуемые шаги для успешного обновления Zabbix]] +
-  * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​installation/​upgrade|Zabbix Documentation Upgrade procedure]]+
  
  
Line 225: Line 255:
 === Настройка подсистемы Email === === Настройка подсистемы Email ===
 <​code>​ <​code>​
-Administration->​Media types->​Email+Administration/Alerts->Media types->​Email
   SMTP server: server.corpX.un   SMTP server: server.corpX.un
   SMTP helo: server.corpX.un   SMTP helo: server.corpX.un
   SMTP email: zabbix@corpX.un   SMTP email: zabbix@corpX.un
  
-Administration->​Users->​student->​Media+Administration/Users->​Users->​student->​Media
   Type: Email   Type: Email
   Send to: student@corpX.un   Send to: student@corpX.un
Line 236: Line 266:
 === Настройка уведомлений о срабатывании триггеров === === Настройка уведомлений о срабатывании триггеров ===
 <​code>​ <​code>​
-Configuration->​Actions->​Event source: Triggers+Configuration/Alerts->​Actions->​Event source: Triggers
   Report problems to Zabbix administrators->​Enable   Report problems to Zabbix administrators->​Enable
   ...   ...
 +</​code>​
 +
 +=== Настройка уведомлений о срабатывании сервиса ===
 +<​code>​
 +Configuration/​Alerts->​Actions->​Service actions
 +  Name: Mail Action
 +  Conditions: Service equals Corp Mail
 +  Operations: Send message to user groups: Zabbix administrators via all media
 +  Recovery operations: Notify all involved
 </​code>​ </​code>​
  
Line 246: Line 285:
  
 <​code>​ <​code>​
 +# zabbix_server --help | grep AlertScriptsPath
 +
 # grep AlertScriptsPath /​etc/​zabbix/​zabbix_server.conf # grep AlertScriptsPath /​etc/​zabbix/​zabbix_server.conf
 </​code>​ </​code>​
Line 252: Line 293:
  
   * [[Сервис OpenFire]] Настройка DNS, Установка,​ Spark   * [[Сервис OpenFire]] Настройка DNS, Установка,​ Spark
-  * [[Сервис OpenFire#​bash xmpp]]+
  
 <​code>​ <​code>​
Line 260: Line 301:
  
 # cat /​var/​lib/​zabbix/​.sendxmpprc # cat /​var/​lib/​zabbix/​.sendxmpprc
-admin@corpX.un Pa$$w0rd+</​code>​
  
 +  * [[Сервис OpenFire#​bash xmpp]]
 +
 +<​code>​
 # chmod 600 /​var/​lib/​zabbix/​.sendxmpprc # chmod 600 /​var/​lib/​zabbix/​.sendxmpprc
  
Line 271: Line 315:
  
 logger -t zabbix_xmpp -p local0.info "$1, $2, $3" logger -t zabbix_xmpp -p local0.info "$1, $2, $3"
 +
 +#echo "​$(date) $1, $2, $3" >>/​tmp/​zabbix_xmpp.txt
  
 to=$1 to=$1
Line 276: Line 322:
 body=$3 body=$3
  
-cat <<EOF | sendxmpp -f /​var/​lib/​zabbix/​.sendxmpprc ​-s "$subject" ​"$to"+cat <<EOF | sendxmpp -f /​var/​lib/​zabbix/​.sendxmpprc "$to" 
 +$subject 
 $body $body
 EOF EOF
 </​code><​code>​ </​code><​code>​
-Administration->​Media types->​Create media type+Administration/Alerts->Media types->​Create media type
   Name: XMPP   Name: XMPP
   Type: Script   Type: Script
Line 289: Line 337:
     {ALERT.MESSAGE}     {ALERT.MESSAGE}
   Message teplates   Message teplates
-    ​Problem +    ​Service 
-    ​Problem ​recovery +    ​Service ​recovery 
-    ​Problem ​update+    ​Service ​update
 </​code>​ </​code>​
 <​code>​ <​code>​
-Administration->​Users->​student->Media+Administration->​Users->​Admin->Media
   Type: XMPP   Type: XMPP
-  Send to: student@corpX.un+  Send to: user1@corpX.un
 </​code>​ </​code>​
  
Line 618: Line 666:
 </​code><​code>​ </​code><​code>​
 #!/bin/sh #!/bin/sh
 +
 +### iperf ###
 +MY_RES=$(iperf -c gate.isp.un -t 5 -R -f b -y c)
 +MY_DOWNLOAD=$(echo $MY_RES | cut -d','​ -f9)
 +MY_RES=$(iperf -c gate.isp.un -t 5 -f b -y c)
 +MY_UPLOAD=$(echo $MY_RES | cut -d','​ -f9)
  
 ### speedtest-cli ### result bits/s ### speedtest-cli ### result bits/s
-MY_RES=`speedtest-cli --csv` +#MY_RES=`speedtest-cli --csv` 
-MY_DOWNLOAD=`echo $MY_RES | cut -d','​ -f7` +#MY_DOWNLOAD=`echo $MY_RES | cut -d','​ -f7` 
-MY_UPLOAD=`echo $MY_RES | cut -d','​ -f8`+#MY_UPLOAD=`echo $MY_RES | cut -d','​ -f8`
  
 ### speedtest ### result Bytes/s (use preprocess Custom multiplier) ### speedtest ### result Bytes/s (use preprocess Custom multiplier)
 #​MY_RES=`speedtest -f csv` #​MY_RES=`speedtest -f csv`
 #​MY_DOWNLOAD=`echo $MY_RES | cut -d','​ -f6` #​MY_DOWNLOAD=`echo $MY_RES | cut -d','​ -f6`
-#Y_UPLOAD=`echo $MY_RES | cut -d','​ -f7`+#MY_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.download -o $MY_DOWNLOAD
Line 659: Line 713:
 </​code>​ </​code>​
 ==== Вычисляемые элементы ==== ==== Вычисляемые элементы ====
 +
 +  * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​config/​items/​itemtypes/​calculated/​aggregate]]
  
 <​code>​ <​code>​
Line 687: Line 743:
  
 last(openvpn1:​openvpn.server.clients)+last(openvpn2:​openvpn.server.clients)+last(openvpn3:​openvpn.server.clients) last(openvpn1:​openvpn.server.clients)+last(openvpn2:​openvpn.server.clients)+last(openvpn3:​openvpn.server.clients)
 +#​---------------------
 +
 +sum(last_foreach(/​*/​active_meetings.sh["​{HOST.CONN}"​]?​[group="​webinars"​]))
 </​code>​ </​code>​
 +
 +
 +
 ==== Web сценарии ==== ==== Web сценарии ====
  
Line 796: Line 858:
  
 === Примеры простых целочисленных триггеров === === Примеры простых целочисленных триггеров ===
 +
 +  * https://​www.zabbix.com/​documentation/​7.0/​ru/​manual/​config/​triggers/​expression
 +
 <​code>​ <​code>​
 Host: server.corpX.un Host: server.corpX.un
Line 928: Line 993:
 # apt install zabbix-get # apt install zabbix-get
  
-$ zabbix_get -s IP/​DNSNAME ​-p 10050 -k agent.version+$ zabbix_get -s IP/DNSNAME -k agent.version ​#-p 10050
 </​code>​ </​code>​
  
Line 969: Line 1034:
  
 <​code>​ <​code>​
-Configuration - Actions - Auto registration ​+Alerts|Configuration - Actions - Auto registration ​
   Name: Add Windows clients ​                                         # or Add Linux clients   Name: Add Windows clients ​                                         # or Add Linux clients
   Conditions: Host name contains CLIENT ​                             # or client (lowercase) for linux   Conditions: Host name contains CLIENT ​                             # or client (lowercase) for linux
Line 1062: Line 1127:
  
 <​code>​ <​code>​
-Configuration->​Discovery+Data collection/Configuration->​Discovery
 Discovery rules Discovery rules
   Name: Local network ​   или ​   Cisco Router Discovery   Name: Local network ​   или ​   Cisco Router Discovery
Line 1079: Line 1144:
   Enabled: yes   Enabled: yes
  
-Configuration->​Actions+Alert/Configuration->​Actions
   Event source: Discovery   Event source: Discovery
-    Name: Action add snmp device to zabbix+    Name: Action add Cisco device to zabbix
     Conditions: ​     Conditions: ​
       Received value: like или contains router       Received value: like или contains router
Line 1093: Line 1158:
              4.XX Template Module Interfaces Simple SNMPv2              4.XX Template Module Interfaces Simple SNMPv2
              5.XX Template Net Cisco IOS SNMP       !!! Уменьшить период Network interfaces discovery !!!              5.XX Template Net Cisco IOS SNMP       !!! Уменьшить период Network interfaces discovery !!!
-             6.XX Cisco IOS by SNMP+        ​6.XX 7.XX Cisco IOS by SNMP
       Set host inventory mode: Automatic       Set host inventory mode: Automatic
     Add     Add
Line 1156: Line 1221:
  
 ==== Создание своих шаблонов ==== ==== Создание своих шаблонов ====
 +
 +  * Лучше, поискать готовые:​
 +  * [[https://​git.zabbix.com/​projects/​ZBX/​repos/​zabbix/​browse/​templates]]
 +  * [[https://​github.com/​zabbix/​community-templates]]
  
   * Пример с использованием макроса   * Пример с использованием макроса
Line 1163: Line 1232:
 Configuration Configuration
   Templates   Templates
-    ​Template App SSH Service/SSH Service+    SSH Service
   Full Clone   Full Clone
-    ​Template App SSH Port Service/SSH Port Service+    SSH Port Service
   Add   Add
  
   Templates   Templates
-    ​Template App SSH Port Service/SSH Port Service+    ​Name: SSH Port Service 
 +      Template groups: Templates/Applications
       Items       Items
-        SSH service is running +        ​Name: SSH service is running 
-          Key: net.tcp.service[ssh,,​{$SSH_PORT}] +        Key: net.tcp.service[ssh,,​{$SSH_PORT}] 
-          Update interval: 30s+        Update interval: 30s 
 +      Triggers 
 +        Name: SSH service is down on {HOST.NAME} 
 +        Severity: Average 
 +        Expression: max(/SSH Port Service/​net.tcp.service[ssh,,​{$SSH_PORT}],#​3)=0
       Macros       Macros
         {$SSH_PORT}=22         {$SSH_PORT}=22
Line 1247: Line 1321:
  
   * Пример разработки собственного скрипта для LLD   * Пример разработки собственного скрипта для LLD
 +
 +  * Сервис DHCP [[Сервис DHCP#​Статистика DHCP сервера]]
   * [[Обработка XML файлов]]   * [[Обработка XML файлов]]
   * [[https://​stackoverflow.com/​questions/​12524437/​output-json-from-bash-script|Output JSON from Bash script]]   * [[https://​stackoverflow.com/​questions/​12524437/​output-json-from-bash-script|Output JSON from Bash script]]
 +
 +  * Язык программирования Python [[Язык программирования Python#​Zabbix LLD приложение]]
  
 <​code>​ <​code>​
Line 1255: Line 1333:
 #!/bin/bash #!/bin/bash
  
-echo -n '{"​data":​['+echo -n '​['​
  
 str=`/​usr/​bin/​dhcpd-pools -c /​etc/​dhcp/​dhcpd.conf -f x | \ str=`/​usr/​bin/​dhcpd-pools -c /​etc/​dhcp/​dhcpd.conf -f x | \
Line 1263: Line 1341:
 echo -n ${str::-1} echo -n ${str::-1}
  
-echo -n ']}'+echo -n '​]'​
 </​code><​code>​ </​code><​code>​
 gate# /​etc/​zabbix/​dhcp-pools-discovery.sh | jq gate# /​etc/​zabbix/​dhcp-pools-discovery.sh | jq
Line 1352: Line 1430:
 ===== API ===== ===== API =====
  
 +  * [[https://​www.zabbix.com/​documentation/​current/​en/​manual/​api]]
   * [[Формат JSON]]   * [[Формат JSON]]
   * [[https://​www.zabbix.com/​documentation/​1.8/​ru/​api/​getting_started|Zabbix Documentation Начало работы с Zabbix API]]   * [[https://​www.zabbix.com/​documentation/​1.8/​ru/​api/​getting_started|Zabbix Documentation Начало работы с Zabbix API]]
Line 1358: Line 1437:
  
   * [[https://​www.zabbix.com/​forum/​zabbix-troubleshooting-and-problems/​36900-api-key-lifetime|api key lifetime]]   * [[https://​www.zabbix.com/​forum/​zabbix-troubleshooting-and-problems/​36900-api-key-lifetime|api key lifetime]]
 +  * Для и до 6-й версии "​user":​ "​Admin",​
 <​code>​ <​code>​
 server:~# apt install curl server:~# apt install curl
Line 1367: Line 1446:
    "​method":​ "​user.login",​    "​method":​ "​user.login",​
    "​params":​ {    "​params":​ {
-      "user": "​Admin",​+      "username": "​Admin",​
       "​password":​ "​zabbix"​       "​password":​ "​zabbix"​
    },    },
Line 1385: Line 1464:
   * Получение списка узлов и шаблонов из Zabbix   * Получение списка узлов и шаблонов из Zabbix
  
 +До 7-й версии,​ включительно
 <​code>​ <​code>​
 server:~# curl -s -k -X POST -H '​Content-Type:​ application/​json-rpc'​ -d ' server:~# curl -s -k -X POST -H '​Content-Type:​ application/​json-rpc'​ -d '
Line 1396: Line 1476:
 ... ...
 </​code>​ </​code>​
 +От 7-й и старше
 <​code>​ <​code>​
-... +curl -s -k -X POST -H '​Content-Type:​ application/​json-rpc'​ -H '​Authorization:​ Bearer xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'​ -d '{ 
-    "​method":​ "template.get",​ +    "​jsonrpc":​ "2.0", 
-...+    "​method":​ "host.get",​ 
 +    "​params":​ {}, 
 +    "​id":​ 2 
 +}' http://​127.0.0.1/​zabbix/​api_jsonrpc.php | jq
 </​code>​ </​code>​
  
Line 1481: Line 1565:
 </​code>​ </​code>​
 ==== Пример изменения конфигурации через Zabbix API ==== ==== Пример изменения конфигурации через Zabbix API ====
 +
 +  * Язык программирования Python [[Язык программирования Python#​Zabbix API приложение]]
 +
 <​code>​ <​code>​
 server.corp1.un:​~#​ cat /​root/​zab_set_map_name.sh server.corp1.un:​~#​ cat /​root/​zab_set_map_name.sh
Line 1501: Line 1588:
 } " http://​127.0.0.1/​zabbix/​api_jsonrpc.php } " http://​127.0.0.1/​zabbix/​api_jsonrpc.php
 </​code><​code>​ </​code><​code>​
-server.corp1.un:​~#​ /​root/​zab_set_map_name.sh 2 "ISP1"+server.corp1.un:​~#​ /​root/​zab_set_map_name.sh 2 "ISP 1"
 </​code>​ </​code>​
 +
 +===== zabbix Services sla best practice именования tag =====
 +
 +В Zabbix существует два основных типа тегов, которые критически важны для корректной работы SLA, и их часто путают. Ниже представлена лучшая практика именования для каждого типа, основанная на опыте сообщества и официальной документации.
 +
 +### 1. Теги проблем (Problem Tags) — Связь Триггера и Сервиса
 +Это теги, которые вы добавляете в **Trigger**. Когда триггер срабатывает,​ Zabbix смотрит на эти теги, чтобы понять,​ к какому именно Service (Сервису) относится проблема .
 +
 +**Главное правило**:​ Тег должен уникально идентифицировать конкретный экземпляр сервиса (например,​ конкретный веб-сервер или БД), чтобы вы могли рассчитывать SLA для каждого компонента отдельно .
 +
 +*   ​**Имя тега**: Используйте осмысленное имя, например `problem_tag`,​ `service` или `target`. Избегайте общих названий вроде `tag`.
 +*   ​**Значение тега**: Лучшая практика — использовать макрос `{HOST.NAME}` в комбинации с именем приложения. Это автоматически создаст уникальный идентификатор при клонировании триггеров на разные хосты.
 +
 +**Пример именования:​**
 +> **Имя:** `service`
 +> **Значение:​** `{HOST.NAME}_nginx`
 +
 +*   ​*Результат:​* Для хоста `web01` тег превратится в `web01_nginx`. Для хоста `db01` тег превратится в `db01_postgres` .
 +
 +### 2. Теги сервиса (Service Tags) — Связь Сервиса и SLA
 +Это теги, которые вы добавляете в конфигурацию **Service** (в дереве Services > Services). Они нужны для того, чтобы движок SLA знал, какие сервисы включать в отчет .
 +
 +**Главное правило**:​ Используйте бизнес-классификацию,​ а не технические детали. Тег должен отвечать на вопрос:​ "К какому бизнес-домену или команде относится этот сервис?"​ .
 +
 +**Пример именования:​**
 +*   ​**Имя:​** `SLA_Scope`
 +*   ​**Значение:​** `Critical_Payment_System`
 +
 +*   ​**Имя:​** `Team`
 +*   ​**Значение:​** `Backend_API`
 +
 +### 3. Механизм наследования и фильтрации (Best Practice End-to-End)
 +
 +Лучший способ построения архитектуры — цепочка:​ **Trigger (Problem Tag)** -> **Service (Problem Tags match)** -> **Service (Service Tag)** -> **SLA (Service Tags match)**.
 +
 +Вот пошаговый пример того, как настроить SLA для приложения "​CRM":​
 +
 +1.  **На триггере (Trigger):​**
 +    *   ​`problem_tag`:​ `{HOST.NAME}_crm_app` ​
 +
 +2.  **На дочернем сервисе (Child Service) — например,​ "​CRM_Web_01":​**
 +    *   ​*Вкладка Problem Tags:* Имя `problem_tag`,​ Значение `web01_crm_app` (чтобы поймать проблему).
 +    *   ​*Вкладка Tags:* Имя `application`,​ Значение `crm` .
 +
 +3.  **На родительском сервисе (Parent Service) — например,​ "CRM System":​**
 +    *   ​*Вкладка Tags:* Имя `application`,​ Значение `crm` (тег наследуется или прописывается явно).
 +
 +4.  **В конфигурации SLA отчета:​**
 +    *   ​*Вкладка Service tags:* Имя `application`,​ Значение `crm` .
 +
 +### 4. Ключевые правила и ограничения
 +
 +1.  **Регистр символов:​** Имена и значения тегов чувствительны к регистру (`PROBLEM` != `problem`). Выберите один формат (например,​ `snake_case` или `lowercase`) и придерживайтесь его везде .
 +2.  **Уникальность для SLA:** Если вы хотите,​ чтобы downtime одного сервера не валил весь SLA, убедитесь,​ что значения тегов проблем для разных хостов уникальны (используйте `{HOST.NAME}`). Если вы хотите считать SLA для кластера в целом (например,​ "​хотя бы один из трех жив"​),​ делайте тег общим .
 +3.  **Стандартизация названий:​** Избегайте пробелов и спецсимволов. Рекомендуемый формат:​ `category:​subcategory` или `scope:​value` (например,​ `env:​production`,​ `tier:​critical`). Это облегчает фильтрацию в Grafana или через API .
 +
 +### Итоговая схема (Cheat Sheet)
 +
 +| Сущность | Поле | Best Practice Значение | Назначение |
 +| :--- | :--- | :--- | :--- |
 +| **Trigger** | Имя Tag | `service` | Тип проверки |
 +| **Trigger** | Значение | `{HOST.NAME}_nginx` | Связка "​хост + роль"​ |
 +| **Service** | Problem Tags | Имя:​`service` Знач:​`web01_nginx` | Какой триггер слушать |
 +| **Service** | Service Tags | Имя:​`app` Знач:​`frontend` | Для группировки в отчете |
 +| **SLA** | Service Tags | Имя:​`app` Знач:​`frontend` | Какие сервисы включить в отчет |
 +
сервис_zabbix.1724131063.txt.gz · Last modified: 2024/08/20 08:17 by val