2013-07-18 7 views
2

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

ответ

1

Нет, такой проверки нет. Вы можете достичь этого, используя UserParameter. Что касается того, как, зависит от ОС, которая запускает агент. В linux вы можете использовать mii-tool или ethtool для проверки периодически. Или вы можете сделать некоторые сценарии и подключиться к D-Bus, если вы используете NetworkManager. Или вы можете контролировать системные журналы, драйверы обычно регистрируют обнаружение ссылок в журнал ядра.

В окнах я понятия не имею. Вероятно, netsh или ipconfig с некоторыми findstr могут заставить вас опросить статус. Или powershell. Спросите на сервере, я уверен, у вас будут точные ответы.

2

Так что да UserParameter это (даже в Zabbix 3.0), и его достаточно легко настроить, по крайней мере, на современных Linux-боксах. Путем параметризации UserParameter (если вы следуете ...), можно определить один параметр для поддержки мониторинга нескольких сетевых адаптеров; вот как:

  1. На целевом окне найдите папку агента, где определения UserParamter хранятся, как-л /etc/zabbix/zabbix_agentd.d/
  2. Создание нового файла для определения или изменить существующий; Я сделал это:

    cat > /etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf << EOF 
    UserParameter=net.if.link[*],cat /sys/class/net/$1/carrier 
    EOF 
    
  3. Restart агент, например: service zabbix-agent restart
  4. В Zabbix UI, создать элемент против хозяина следующим образом:
    • Тип: Zabbix агент (активный при необходимости).
    • Ключ: имеет фактический NIC для мониторинга в скобках, например: net.if.link[em1],
    • Тип информации: Числовой (без знака); Тип данных: Десятичный
    • Показать значение: как "государственная служба" (отображает их как "вверх/вниз")
    • Применение: Сетевые интерфейсы

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

Пример: other ways to detect a NIC link's state; приведенный выше cat /sys/class/net/${nic}/carrier хорошо работает для меня (сервер Ubuntu 14.04, физический сетевой адаптер).

+0

Как IMPRO я использую следующую строку в '/ etc/zabbix/zabbix_agentd.d/userparameter_niclink.conf': ' UserParameter = net.if.link [*], если [-r/sys/class/net/$ 1/перевозчик]; затем cat/sys/class/net/$ 1/carrier; else echo 0; fi' Это предотвращает переход элемента в состояние «неподдерживаемого». – dsteinkopf

1

@ sxc731 является правильным, не существует такого существующего товара в net.if ключах.

Если вы хотите сделать это решение универсальным, вы можете использовать правила обнаружения для обнаружения сетевых интерфейсов. Это найдет все интерфейсы, также виртуальный, мост и т. Д. Но вы можете использовать регулярные выражения для соответствия только физическим интерфейсам. Я развертывал это в своей работе с несколькими ОС на многих серверах.Вот мой подход:

  1. Создайте или используйте существующий шаблон Zabbix.
  2. В Администрирование -> меню General, перейдите регулярных выражений и выполните следующие действия:
    1. Добавить регулярное выражение Physical network interface discovery.
    2. Использовать регулярное выражение ^em[0-9]{1,}|p[0-9]{1,}p[0-9]{1,}|eth[0-9]{1,}|ens[0-9]{1,}$.
  3. Создайте правило для своего шаблона с ключом net.if.discovery.
  4. Создать фильтр с макросом {#PHYSNET} и регулярным выражением @Physical network interface discovery.
  5. Добавить элемент прототипа с ключом net.if.link[{#PHYSNET}] и вызвать, если вам это нужно.
  6. Создайте UserParameter на клиентских серверах Zabbix (пример в конце).

Существует одна проблема с использованием cat /sys/class/net/$1/carrier в качестве UserParameter. Если сетевой интерфейс не работает (например, с ip link set eth0 down), результатом команды cat является Недопустимый аргумент.

Я лично использую этот один вкладыш для UserParameter:

UserParameter=net.if.link[*], if [ $(cat /sys/class/net/$1/operstate) = "up" ]; then cat /sys/class/net/$1/carrier; else echo "0"; fi; 

Ресурсы:

Смежные вопросы