Pull to refresh

Автоматическое переименование хостов в Zabbix, по данным из snmp sysName

Reading time2 min
Views19K
Цикл статей о Zabbix продолжает не зарегистрированный здесь пользователь. Первую статью можете прочитать тут.

Зачем это нужно?


Добавить новый хост в Zabbix можно двумя основными способами: автообнаружение и ручное добавление хоста. Когда мы имеем очень большое количество узлов добавление их в систему мониторинга ручками занимает большое время, отслеживание их количества и подержание их в актуальном состоянии тоже не легкая задача. В этом случае удобно использовать авто обнаружение. Как его использовать в этой статье описываться не будет (если кому будет интересно можно будет подготовить маленький обзор по основным функциям). Основной недостаток при авто обнаружении — добавленные хосты получают имя равное IP устройства. При большом количестве устройств разобраться, что где проблематично.

Решение.


Как правило любое устройство контролируемое по snmp имеет стандартный OID .1.3.6.1.2.1.1.5.0 или system.sysName.0. Это и есть так называемый hostname железки. В качестве имени устройства использовать какое либо значение полученное по OID стандартными средствами в Zabbix невозможно.
Самый простой способ — использование внешних скриптов.

Для PostgresSQL:


#!/bin/bash

PGSQL="psql -d <имя БД> -h <ип сервера БД> -U <имя пользователя БД> -W -c"

$PGSQL"SELECT ip FROM hosts where ip ILIKE '192.168.1.%'" | while read line
do
arr=($line)
x=`snmpwalk -Ou -Oq -v2c -c <community string> ${arr[0]} system.sysName.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " `
[[ -n $x ]] && $PGSQL"UPDATE hosts SET host = '$x' WHERE ip ='${arr[0]}'"

done


* This source code was highlighted with Source Code Highlighter
.


Для MYSQL:


#!/bin/bash

MYSQL="mysql --connect_timeout 10 <имя БД> -h <ип сервера БД> -u <имя пользователя БД> --password=<пароль> --skip-column-names -B -e"

$MYSQL "SELECT ip FROM hosts where ip like '192.168.1.%'" | while read line
do
arr=($line)
x=`snmpwalk -Ou -Oq -v2c -c <community string> ${arr[0]} system.sysName.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " `
[[ -n $x ]] && $MYSQL "UPDATE hosts SET host = '$x' WHERE ip ='${arr[0]}'"

done


* This source code was highlighted with Source Code Highlighter
.


Вместо '192.168.1.%' подставляем нужный диапазон ip адресов железок.
Скрипт сохраняем в удобном для использования месте, делаем chmod +X и запускаем по необходимости. Можно прописать этот скрипт в крон.

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

Tags:
Hubs:
+4
Comments2

Articles