Zabbix Documentation 5.0

3.04.05.0 (current)| In development:5.2 (devel)| Unsupported:1.82.02.22.43.23.44.24.4Guidelines

User Tools

Site Tools


ru:manual:discovery:low_level_discovery

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
ru:manual:discovery:low_level_discovery [2017/09/13 18:46]
dotneft
ru:manual:discovery:low_level_discovery [2020/01/06 05:54]
Line 1: Line 1:
-==== 3 Низкоуровневое обнаружение ==== 
-=== Обзор ===  
  
-Низкоуровневое обнаружение (LLD) даёт возможность автоматического создания элементов данных,​ триггеров и графиков для различных объектов на компьютере. Например,​ Zabbix может автоматически начать мониторить файловые системы или сетевые интерфейсы с вашего устройства,​ без необходимости создания вручную элементов данных для каждой файловой системы или сетевого интерфейса. Кроме того, в Zabbix имеется возможность настроить удаление ненужных объектов,​ основываясь на фактических результатах периодически выполняемого обнаружения. 
- 
-Пользователь имеет возможность определить свои собственные типы обнаружения,​ обеспечив их функционирование согласно спецификации JSON протокола. 
- 
-Общая архитектура процессов обнаружения заключается в следующем. 
- 
-Сначала,​ пользователь создает правило обнаружения в "​Настройка"​ -> "​Шаблоны"​ -> колонка "​Обнаружение"​. Правило обнаружения состоит из (1) элемента данных,​ который осуществляет обнаружение необходимых объектов (например,​ файловые системы или сетевые интерфейсы) и (2) прототипов элементов данных,​ триггеров и графиков,​ которые должны быть созданы на основании полученных значений этого элемента данных. 
- 
-Элемент данных,​ который осуществляет обнаружение необходимых объектов,​ подобен обычным элементам данных,​ которые видны в других местах:​ Zabbix сервер запрашивает у Zabbix агента (или любой другой указанный тип элемента данных) значение этого элемента данных,​ и агент отвечает текстовым значением. Разница в том, что значение,​ которое возвращает агент, должно содержать список обнаруженных объектов в специальном JSON формате. Хотя детали этого формата важны только для создателей собственных проверок обнаружения,​ всё же всем необходимо знать, что возвращаемое значение содержит список из пар: макрос -> значение. Например,​ элемент данных "​net.if.discovery"​ может вернуть две пары: "​{#​IFNAME}"​ -> "​lo"​ и "​{#​IFNAME}"​ -> "​eth0"​. 
- 
-<​note>​Zabbix прокси на IBM DB2 базе данных имеет ограничение в 2048 байт на возвращаемое значение правил низкоуровневого обнаружения. Это ограничение не распространяется на Zabbix сервер,​ так как возвращаемые значения обрабатываются без предварительной записи в базу данных.</​note>​ 
- 
-Эти макросы затем используются в именах,​ ключах и в других полях прототипов,​ которые являются основой для создания реальных элементов данных,​ триггеров и графиков каждому обнаруженному объекту. Смотрите полный список [[:​ru/​manual/​config/​macros/​lld_macros|опций]] по использованию макросов в низкоуровневом обнаружении. 
- 
-Когда сервер получает значение элемента данных обнаружения,​ он смотрит на пару макрос -> значение и для каждой пары создает реальные элементы данных,​ триггеров и графиков,​ основанных на их прототипах. В приведенном выше примере с "​net.if.discovery",​ сервер будет создавать один набор элементов данных,​ триггеров и графиков для локального интерфейса "​lo"​ и другой набор для интерфейса "​eth0"​. 
- 
-For more detail on the process described above see the following sections with how-tos for performing all types of out-of-the-box discovery: 
- 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​filesystems|file systems]]; 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​network_interfaces|network interfaces]];​ 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​cpu|CPUs and CPU cores]]; 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​snmp_oids|SNMP OIDs]]; 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​jmx|JMX objects]]; 
-  * discovery using [[:​manual/​discovery/​low_level_discovery/​sql_queries|ODBC SQL queries]]; 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​windows_services|Windows services]]; 
-  * discovery of [[:​manual/​discovery/​low_level_discovery/​host_interfaces|host interfaces]] in Zabbix. 
- 
-For more detail on the JSON format for discovery items and an example of how to implement your own file system discoverer as a Perl script, see [[#​creating_custom_lld_rules|creating custom LLD rules]]. 
- 
-=== Multiple LLD rules for same item === 
- 
-Since Zabbix agent version 3.2 it is possible to define several low-level discovery rules with the same discovery item.  
- 
-To do that you need to define the Alias agent [[manual/​appendix/​config/​zabbix_agentd|parameter]],​ allowing to use altered discovery item keys in different discovery rules, for example ''​vfs.fs.discovery[foo]'',​ ''​vfs.fs.discovery[bar]'',​ etc. 
- 
-=== - Создание пользовательских LLD правил === 
- 
-Также имеется возможность создать полностью пользовательское правило низкоуровневого обнаружения,​ для обнаружения любого типа объектов - к примеру,​ баз данных на сервере баз данных. 
- 
-Чтобы это сделать,​ необходимо создать пользовательский элемент данных,​ который будет возвращать JSON, определяющий найденные объекты и опционально - некоторые свойства этих объектов. Количество макросов на объект не ограничено - в то время как встроенные правила обнаружения возвращают либо один, либо два макроса (нппример,​ два в случае обнаружения файловых систем),​ имеется возможность возвращать больше. 
- 
-Требуемый JSON формат лучше всего иллюстрируется в примере. Предположим,​ что мы оставим старый Zabbix агент версии 1.8 (который не поддерживает "​vfs.fs.discovery"​),​ но нам также нужно обнаруживать файловые системы. Вот простой Perl скрипт для Linux, который обнаруживает примонтированные файловые системы и выдает на выходе данные JSON, в которых включено и имя, и тип файловой системы. Одним из способов его использования является UserParameter с ключем "​vfs.fs.discovery_perl":​ 
- 
-<code perl> 
-#​!/​usr/​bin/​perl 
- 
-$first = 1; 
- 
-print "​{\n";​ 
-print "​\t\"​data\":​[\n\n";​ 
- 
-for (`cat /​proc/​mounts`) 
-{ 
-    ($fsname, $fstype) = m/\S+ (\S+) (\S+)/; 
- 
-    print "​\t,​\n"​ if not $first; 
-    $first = 0; 
- 
-    print "​\t{\n";​ 
-    print "​\t\t\"​{#​FSNAME}\":​\"​$fsname\",​\n";​ 
-    print "​\t\t\"​{#​FSTYPE}\":​\"​$fstype\"​\n";​ 
-    print "​\t}\n";​ 
-} 
- 
-print "​\n\t]\n";​ 
-print "​}\n";​ 
-</​code>​ 
- 
-<note important>​Допустимыми символами в именах макросов низкоуровневых правил обнаружения являются **0-9** , **A-Z** , **_** , **.** \\ \\  Буквы в нижнем регистре в именах не поддерживаются.</​note>​ 
- 
-Пример его вывода (переформатирован для наглядности) представлен ниже. JSON данные от пользовательской проверки обнаружения следуют такому же формату. ​ 
- 
-  { 
-    "​data":​[ 
-    ​ 
-    { "​{#​FSNAME}":"/", ​                          "​{#​FSTYPE}":"​rootfs" ​  }, 
-    { "​{#​FSNAME}":"/​sys", ​                       "​{#​FSTYPE}":"​sysfs" ​   }, 
-    { "​{#​FSNAME}":"/​proc", ​                      "​{#​FSTYPE}":"​proc" ​    }, 
-    { "​{#​FSNAME}":"/​dev", ​                       "​{#​FSTYPE}":"​devtmpfs"​ }, 
-    { "​{#​FSNAME}":"/​dev/​pts", ​                   "​{#​FSTYPE}":"​devpts" ​  }, 
-    { "​{#​FSNAME}":"/​lib/​init/​rw", ​               "​{#​FSTYPE}":"​tmpfs" ​   }, 
-    { "​{#​FSNAME}":"/​dev/​shm", ​                   "​{#​FSTYPE}":"​tmpfs" ​   }, 
-    { "​{#​FSNAME}":"/​home", ​                      "​{#​FSTYPE}":"​ext3" ​    }, 
-    { "​{#​FSNAME}":"/​tmp", ​                       "​{#​FSTYPE}":"​ext3" ​    }, 
-    { "​{#​FSNAME}":"/​usr", ​                       "​{#​FSTYPE}":"​ext3" ​    }, 
-    { "​{#​FSNAME}":"/​var", ​                       "​{#​FSTYPE}":"​ext3" ​    }, 
-    { "​{#​FSNAME}":"/​sys/​fs/​fuse/​connections", ​   "​{#​FSTYPE}":"​fusectl" ​ } 
-    ​ 
-    ] 
-  } 
-  
-  
-Тогда, в правилах обнаружения в поле "​Фильтр"​ мы можем указать "​{#​FSTYPE}",​ как макрос,​ и "​rootfs|ext3",​ как регулярное выражение. 
- 
-<​note>​Вы не обязаны использовать имена макросов FSNAME/​FSTYPE в пользовательских правилах низкоуровневого обнаружения,​ вы можете использовать любые другие имена, которые вам нравятся.</​note>​ 
- 
-=== - Использование макросов LLD в контекстах пользовательских макросов === 
- 
-User macros [[:​manual/​config/​macros/​usermacros#​user_macro_context|with context]] can be used to accomplish more flexible thresholds in trigger expressions. Different thresholds may be defined on user macro level and then used in trigger constants depending on the discovered context. Discovered context appears when the [[:​manual/​config/​macros/​lld_macros|low-level discovery macros]] used in the macros are resolved to real values. 
- 
-To illustrate we can use data from the example above and assume that the following file systems will be discovered: ''/'',​ ''/​home'',​ ''/​tmp'',​ ''/​usr'', ​ ''/​var''​. 
- 
-We may define a free-disk-space trigger prototype for a host, where the threshold is expressed by a user macro with context: 
- 
-''​{host:​vfs.fs.size[{#​FSNAME},​pfree].last()}<​**{$LOW_SPACE_LIMIT:<​nowiki>"</​nowiki>​{#​FSNAME}<​nowiki>"</​nowiki>​}**''​ 
- 
-Then add user macros: 
-  * ''​{$LOW_SPACE_LIMIT}''​ **10** 
-  * ''​{$LOW_SPACE_LIMIT:/​home}''​ **20** 
-  * ''​{$LOW_SPACE_LIMIT:/​tmp}''​ **50** 
- 
-Тогда события сгенерируются,​ когда на файловых системах ''/'',​ ''/​usr''​ и ''/​var''​ станет свободного места на диске меньше чем **10**%, файловой системе ''/​tmp''​ станет свободного места на диске менее чем **50**% или на файловой системе ''/​home''​ станет свободного места на диске менее чем **20**%. 
- 
-<note important>​LLD macros are not supported inside of user macro contexts in [[manual:​config:​triggers:​expression#​function_parameters|trigger function parameters]].</​note>​