Philip Wiki

Персональный wiki-сайт

Инструменты пользователя

Инструменты сайта


docs:zabbix:snmp_dynamic_index

SNMP dynamic index

Обзор

Патч строго для линейки 2.0.х! В версии 2.2 реализовали работу динамических индексов «из коробки» и этот патч уже не нужен.

Данный патч реализует возможность работы Zabbix Server 2.0.x1) с динамическими SNMP-индексами. Патч взят с официального багтрекера.

Что такое динамический индекс? Например у нас есть сервер HP, с которого мы хотим низкоуровневым обнаружением снимать данные по физическим дискам. Вот так выглядит OID сообщающий о состоянии диска:

.1.3.6.1.4.1.232.3.2.5.1.1.37.6.1

где 6.1, как раз тот самый динамический индекс, который нам сообщает номер логического (6) и физического (1) дисков. Они могут быть разными, зависит от количества дисков и томов. Так вот, по-умолчанию Zabbix видит только последний индекс .1.3.6.1.4.1.232.3.2.5.1.1.37.6.X, а после применения патча уже понимает динамику изменений (в нашем случае два последних числа) .1.3.6.1.4.1.232.3.2.5.1.1.37.X.X

Код патча

Данный патч применяется для исходных кодов сервера, после чего его необходимо перекомпилировать.

ZBX-3449.patch
--- zabbix-2.0.2/src/zabbix_server/poller/checks_snmp.c	2012-07-31 09:16:45.000000000 +0000
+++ zabbix-2.0.2-dev/src/zabbix_server/poller/checks_snmp.c	2012-08-08 07:45:10.141908840 +0000
@@ -750,7 +750,7 @@
 	struct snmp_pdu		*pdu, *response;
 	oid			anOID[MAX_OID_LEN], rootOID[MAX_OID_LEN];
 	size_t			anOID_len = MAX_OID_LEN, rootOID_len = MAX_OID_LEN;
-	char			snmp_oid[MAX_STRING_LEN], *p;
+	char			root_oid[MAX_STRING_LEN], snmp_oid[MAX_STRING_LEN];
 	struct variable_list	*vars;
 	int			status, running, ret = SUCCEED;
 	struct zbx_json		j;
@@ -764,6 +764,7 @@
 
 	/* create OID from string */
 	snmp_parse_oid(OID, rootOID, &rootOID_len);
+	snprint_objid(root_oid, sizeof(root_oid), rootOID, rootOID_len);
 
 	/* copy rootOID to anOID */
 	memcpy(anOID, rootOID, rootOID_len * sizeof(oid));
@@ -785,8 +786,6 @@
 		{
 			for (vars = response->variables; vars && running; vars = vars->next_variable)
 			{
-				snprint_objid(snmp_oid, sizeof(snmp_oid), vars->name, vars->name_length);
-
 				/* verify if we are in the same subtree */
 				if (vars->name_length < rootOID_len ||
 						0 != memcmp(rootOID, vars->name, rootOID_len * sizeof(oid)))
@@ -809,13 +808,7 @@
 							break;
 						}
 
-						if (NULL == (p = strrchr(snmp_oid, '.')))
-						{
-							SET_MSG_RESULT(value, zbx_dsprintf(NULL, "Can't parse OID [%s]", snmp_oid));
-							ret = NOTSUPPORTED;
-							running = 0;
-							break;
-						}
+						snprint_objid(snmp_oid, sizeof(snmp_oid), vars->name, vars->name_length);
 
 						init_result(&snmp_value);
 
@@ -823,7 +816,7 @@
 								GET_STR_RESULT(&snmp_value))
 						{
 							zbx_json_addobject(&j, NULL);
-							zbx_json_addstring(&j, "{#SNMPINDEX}", &p[1], ZBX_JSON_TYPE_INT);
+							zbx_json_addstring(&j, "{#SNMPINDEX}", &snmp_oid[strlen(root_oid)+1], ZBX_JSON_TYPE_STRING);
 							zbx_json_addstring(&j, "{#SNMPVALUE}", snmp_value.str, ZBX_JSON_TYPE_STRING);
 							zbx_json_close(&j);
 						}
1)
По заявлениям разработчиков, работа динамических индексов уже реализована в Zabbix 2.2
Только авторизованные участники могут оставлять комментарии.
docs/zabbix/snmp_dynamic_index.txt · Последнее изменение: 31.05.2014 11:13 — philip

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki