Ad Widget

Collapse

Возможности зависимости триггеров

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • surgeon_2022
    Member
    • Apr 2022
    • 56

    #1

    Возможности зависимости триггеров

    Всем привет.
    Использую 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
    Заранее спасибо
Working...