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

    Цикл статей о 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 и запускаем по необходимости. Можно прописать этот скрипт в крон.

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

    Похожие публикации

    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама

    Комментарии 2

      0
      О, как раз сегодня искал как это можно сделать. Спасибо!
        0
        Очень пригодилось, спасибо за скриптик!!!

        Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

        Самое читаемое