Всем привет.
Использую zbx 7.0 для мониторинга arista свичей. Основной шаблон взять отсюда https://www.zabbix.com/integrations/arista.
Для определения типа датчиков для DDM (rx,tx, voltage, temp) используетс entityMIB (.1.3.6.1.2.1.47). Там получает index для ссылки уже на приватный mib, откуда берем значения самих датчиков
Задача, триггеры, настроенные для DDM не должны срабатывать при условии если порт выключен административно, либо гаситься, если порт лежит. К сожалению, скоординировать с if.mib ни как не получается, так как snmpindex датчиков не совпадает с snmpindex if.mib. К тому же, DDM и IF discovery - два разных обнаружения.
Есть какая-то возможность сделать триггеры DDM хоть как-то завысимыми от состояния интерфейсов?
Основной item по обаружению датчиков
Уже сам зависимый дисковери для Rx/Tx
Заранее спасибо
Использую zbx 7.0 для мониторинга arista свичей. Основной шаблон взять отсюда https://www.zabbix.com/integrations/arista.
Для определения типа датчиков для DDM (rx,tx, voltage, temp) используетс entityMIB (.1.3.6.1.2.1.47). Там получает index для ссылки уже на приватный mib, откуда берем значения самих датчиков
Задача, триггеры, настроенные для DDM не должны срабатывать при условии если порт выключен административно, либо гаситься, если порт лежит. К сожалению, скоординировать с if.mib ни как не получается, так как snmpindex датчиков не совпадает с snmpindex if.mib. К тому же, DDM и IF discovery - два разных обнаружения.
Есть какая-то возможность сделать триггеры DDM хоть как-то завысимыми от состояния интерфейсов?
Основной item по обаружению датчиков
Code:
name: 'Get sensors'
type: SNMP_AGENT
snmp_oid: 'discovery[{#SENSOR_TYPE},1.3.6.1.2.1.99.1.1.1.1,{#SENSOR_INFO},1.3.6.1.2.1.47.1.1.1.1.2,{#SENSOR_PRECISION},1.3.6.1.2.1.99.1.1.1.3,{#THRESHOLD_LO_WARN},1.3.6.1.4.1.30065.3.12.1.1.1.1,{#THRESHOLD_LO_CRIT},1.3.6.1.4.1.30065.3.12.1.1.1.2,{#THRESHOLD_HI_WARN},1.3.6.1.4.1.30065.3.12.1.1.1.3,{#THRESHOLD_HI_CRIT},1.3.6.1.4.1.30065.3.12.1.1.1.4]'
key: sensors.get
delay: 1h
history: '0'
value_type: TEXT
trends: '0'
description: 'Gets sensors with type, description, and thresholds.'
preprocessing:
- type: JAVASCRIPT
parameters:
- |
try {
var data = JSON.parse(value);
}
catch (error) {
throw 'Failed to parse JSON of Arista sensor discovery.';
}
var fields = ['{#SNMPINDEX}','{#SENSOR_TYPE}','{#SENSOR_INFO}','{#SENSOR_PRECISION}','{#THRESHOLD_LO_WARN}','{#THRESHOLD_LO_CRIT}','{#THRESHOLD_HI_WARN}','{#THRESHOLD_HI_CRIT}'];
data.forEach(function (element) {
fields.forEach(function (field) {
element[field] = element[field] || '';
});
});
return JSON.stringify(data);
tags:
- tag: component
value: raw
Уже сам зависимый дисковери для Rx/Tx
Code:
name: 'DDM status discovery'
type: DEPENDENT
key: if.ddm.discovery
delay: '0'
filter:
conditions:
- macro: '{#SENSOR_TYPE}'
value: '6'
formulaid: A
item_prototypes:
- uuid: a4dd81423af641a082d3a86f62c544bd
name: '{#SENSOR_INFO}'
type: SNMP_AGENT
snmp_oid: '1.3.6.1.2.1.99.1.1.1.4.{#SNMPINDEX}'
key: 'sensor.ddm.optical.value[entPhySensorValue.{#SNMPINDEX}]'
value_type: FLOAT
units: dBm
preprocessing:
- type: JAVASCRIPT
parameters:
- 'return Math.round((-40 + 10 * Math.log10(value)) * 100) / 100;'
tags:
- tag: component
value: ddm
- tag: interface
value: '{#IFNAME}'
trigger_prototypes:
- uuid: ff7dd98ef4394654a5baef2a812d767a
expression: 'max(/Arista by SNMP/sensor.ddm.optical.value[entPhySensorValue.{#SNMPINDEX}],5)<(10*log10({#THRESHOLD_LO_CRIT})-40)'
name: '{#SENSOR_INFO}: is below the critical threshold'
event_name: '{#SENSOR_INFO}: is below the critical threshold of {#LO_CRIT_DBM} dBm for 5m'
priority: HIGH
manual_close: 'YES'
tags:
- tag: class
value: ddm
- tag: interface
value: '{#IFNAME}'
- tag: scope
value: notice
master_item:
key: sensors.get
preprocessing:
- type: JAVASCRIPT
parameters:
- |
var data = JSON.parse(value);
function convert(v) {
v = parseFloat(v);
if (isNaN(v)) {
return null;
}
var dbm = -40 + 10 * Math.log10(v);
return Math.round(dbm * 100) / 100;
}
data.forEach(function(sensor) {
if (sensor['{#SENSOR_TYPE}'] === '6') {
if (sensor['{#THRESHOLD_LO_WARN}']) {
sensor['{#LO_WARN_DBM}'] = convert(sensor['{#THRESHOLD_LO_WARN}']);
}
if (sensor['{#THRESHOLD_LO_CRIT}']) {
sensor['{#LO_CRIT_DBM}'] = convert(sensor['{#THRESHOLD_LO_CRIT}']);
}
if (sensor['{#THRESHOLD_HI_WARN}']) {
sensor['{#HI_WARN_DBM}'] = convert(sensor['{#THRESHOLD_HI_WARN}']);
}
if (sensor['{#THRESHOLD_HI_CRIT}']) {
sensor['{#HI_CRIT_DBM}'] = convert(sensor['{#THRESHOLD_HI_CRIT}']);
}
}
if (sensor['{#SENSOR_INFO}']) {
var m = sensor['{#SENSOR_INFO}'].match(/Ethernet\d+(?:\/\d+)?/);
if (m) {
sensor['{#IFNAME}'] = m[0];
}
}
});
return JSON.stringify(data);
overrides:
- name: 'trigger THRESHOLD_LO_CRIT'
step: '1'
filter:
conditions:
- macro: '{#THRESHOLD_LO_CRIT}'
value: ^$
formulaid: A
operations:
- operationobject: TRIGGER_PROTOTYPE
operator: REGEXP
value: 'is below the critical threshold'
discover: NO_DISCOVER
- name: 'trigger THRESHOLD_HI_CRIT'
step: '2'
filter:
conditions:
- macro: '{#THRESHOLD_HI_CRIT}'
value: ^$
formulaid: A
operations:
- operationobject: TRIGGER_PROTOTYPE
operator: REGEXP
value: 'optical power is above the critical threshold'
discover: NO_DISCOVER