Как добавить событие / предупреждение на Zenoss для типа строки SNMP OID?

У меня есть статус определенного приложения, сообщаемого как строка по SNMP.

Когда все работает, как ожидалось, этот мониторинг сообщает о пустой строке, а когда у некоторых источников данных возникают проблемы, он возвращает строку с именами затронутых источников данных.

Я хочу отображать эту строку как предупреждение / информацию на консоли событий Zenoss, когда она не пуста.

Проблема заключается в том, что всякий раз, когда я добавляю источник данных типа SNMP в шаблон мониторинга, он принимает числовое значение.

Идея состояла в том, чтобы использовать StatusThreshold только для того, чтобы увидеть, когда значение изменяется.

Такая настройка не приводит к появлению событий на консоли событий.

Насколько я понимаю, пороговые значения сравниваются со значением в базе данных RRD, которая является только числовой, поэтому строка последовательно превращается в "NaN".

Интерфейс шаблонов мониторинга Zenoss не показывает интуитивно понятный способ работы со строками. Как это можно сделать?

1 ответ

Решение

Одно из возможных решений оказывается очень простым, но поиск в интернете приводит к появлению множества похожих вопросов, на которые либо не дан ответ, либо в конечном итоге они выбрали другой подход или стали другой проблемой для начала.

Zenoss предлагает возможность интеграции с плагинами Nagios, которые могут не привлечь ваше внимание, если вы не знаете, как работает эта интеграция.

По сути, это означает, что вы можете вызывать произвольную команду при условии, что она возвращает код выхода 0 для успеха (событие сброса) и 1, 2 или 3 для ошибки (событие генерации), а также правильно отформатированную строку в STDOUT.

Вооружившись этой информацией, вы можете написать простой скрипт, который читает ваши данные SNMP, используя snmpget, анализирует его и печатает сообщение, которое вы хотите отобразить на событии.

Простой и общий пример Perl может быть:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;

my ( $target, $oid, $msg ) = @ARGV;

my $value = `snmpget -v1 -c <comunity> $target $oid`;
$value =~ /STRING: "([^"]*)"/;

exit 0 unless $1;

say "$msg $1";
exit 1;

сохранить это как $ZENHOME/libexec/string_monitor на вашем сервере zenoss иchmod +x $ZENHOME/libexec/string_monitor

Затем в шаблонах мониторинга добавьте источник данных типа COMMAND и заполните поле "Шаблон команды" следующим образом:

string_monitor ${here/manageIp} <OID> "Error reported on:"

Несколько вещей, которые нужно запомнить, если вы не знакомы с Zenoss:

Если у вас есть установка с сервером zenoss и множеством коллекторов, она будет вызываться из коллектора, которому назначено ваше устройство, а не из основного сервера, поэтому не забывайте, чтобы скрипт был доступен для всех коллекторов. Когда он пытается позвонить string_monitor на сборщике, а его там нет, вы получите событие на консоли событий, которое гласит: "Код: 2 - сообщение: неправильное использование встроенных команд оболочки"

Это вводит в заблуждение, так как легко предположить, что в вашем скрипте возникла проблема, когда $ZENHOME/libexec/string_monitor не был найден.:-)

Это может быть особенно запутанным, если вы используете кнопку "Тест" при настройке источника данных, и в этом случае вместо этого будет сделан запрос с основного сервера, и он будет работать, а затем вместо этого отобразит вышеуказанную ошибку на консоли.

Кроме того, чтобы сделать ваш процесс быстрее, вы можете захотеть ssh в сборщик, sudo -i -uzenoss и беги zencommand run -d your.targetdevice.com -v 10

Это должно привести к полному запуску на этом устройстве, и ваше событие должно появиться на консоли событий (при условии, что оно не было пустым).

После того, как вы заработаете, вы также можете передать фактические числовые данные из вашего скрипта в Zenoss, формат для напечатанной строки:

Error string to display|failing=7 warning=31 good=24

ошибки, исправности и предупреждения будут переданы как точки данных в этом источнике данных, и вы можете использовать пороги MinMax или построить на них графику.

Для простого начала я рекомендую заставить его работать с минимальным / фиктивным скриптом и расширяться оттуда:

#!/usr/bin/env perl
use strict;
use warnings;
use 5.010;
say "We got an error|my=1 sample=6 values=10";
exit 1;
Другие вопросы по тегам