Ad Widget

Collapse

Переименование узлов сети.

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • igoreha311
    Member
    • Sep 2011
    • 99

    #1

    Переименование узлов сети.

    Доброго времени суток!
    Возникла проблема следующего характера:
    БД - MySQL, zabbix 2.0.0, мониторится порядка 1500 узлов. Необходимо их переименовать следующим образом: есть поля Имя узла сети и этикетка (могло быть и другое, записываю в него sysLocation), имя должно состоять из этих 2-х полей.
    Пример:
    Имя узла сети: 172.16.16.16
    IP-адрес: 172.16.16.16
    Этикетка: 16m-16-1
    Видимое имя: 16m-16-1_172.16.16.16

    Может каким-либо запросом в базе всё править, может кто-нибудь делал что-то подобное?

    Спасибо.
  • Jimson
    Senior Member
    • Jan 2008
    • 1327

    #2
    Ну без проблем: update hosts set blablabla
    Только ты объясни что такое "этикетка" и где оно щас хранится, а так же что указанно в данный момент в "имени" и "видимом имени" в этих хостах, ну и заодно критерий по которому можно ограничить для каких хостов надо менять имя, а для каких не надо.

    Comment

    • igoreha311
      Member
      • Sep 2011
      • 99

      #3
      Узел сети - Инвентарные данные узла сети, там куча параметров.

      Потом использую Этикетку в инвентаризации...там такие поля:
      Узел сети Группа Имя Тип ОС Серийный номер a Этикетка mac адрес a

      Получается, что мне надо склеить 2 значения, каким образом с помощью update hosts set ...?
      Да и пока в базе не нашёл эти поля, поиски продолжаются.
      Last edited by igoreha311; 15-10-2012, 14:31.

      Comment

      • Jimson
        Senior Member
        • Jan 2008
        • 1327

        #4
        инвентарные данные узла в другой таблице хранятся - host_inventory
        мысквел увроде умеет уже делать апдейт по join-у ?

        update hosts as h join host_invetory as i on (h.hostid = i.hostid) set h.host = i.blablabla, h.name = i.blablabla + i.blablabla where blablba

        Comment

        • igoreha311
          Member
          • Sep 2011
          • 99

          #5
          Спасибо, попробую. О результатах отпишусь.
          Можно попробовать http://habrahabr.ru/post/82465/
          Last edited by igoreha311; 15-10-2012, 14:50.

          Comment

          • igoreha311
            Member
            • Sep 2011
            • 99

            #6
            Решил использовать статью http://habrahabr.ru/post/82465/.

            Скрипт из статьи для 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

            Вот что пробую я:

            #!/bin/sh

            MYSQL="mysql --connect_timeout 10 ZABBIX -h 127.0.0.1 -u root --password=ZABBIX --skip-column-names -B -e"

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

            done
            Вот ответ на выполнение скрипта:
            root@nm-zabbix:~# sh /home/dlink/dlink-rename.sh
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            /home/dlink/dlink-rename.sh: 11: Bad substitution
            /home/dlink/dlink-rename.sh: 11: [[: not found
            mysql> SELECT host FROM hosts where host like '172.16.17.4%';
            +--------------+
            | host |
            +--------------+
            | 172.16.17.4 |
            | 172.16.17.40 |
            | 172.16.17.41 |
            | 172.16.17.42 |
            | 172.16.17.43 |
            | 172.16.17.44 |
            | 172.16.17.45 |
            +--------------+
            7 rows in set (0.00 sec)
            root@nm-zabbix:~# snmpwalk -Ou -Oq -v2c -c public 172.16.17.41 1.3.6.1.2.1.1.5.0 | awk '{print$2}' | tr "[:upper:]" "[:lower:]"
            "111k-7-2_172.16.17.41"
            Что я делаю неверно?
            Last edited by igoreha311; 17-10-2012, 16:30.

            Comment

            • dima_dm
              Senior Member
              • Dec 2009
              • 2697

              #7
              Попробуйте полный путь от корня до snmpwalk прописать.

              Comment

              • Jimson
                Senior Member
                • Jan 2008
                • 1327

                #8
                матюкается на [[ -n ]]
                я без понятия что там за линукс с нескучными обоями у автора идеи, но в данном случае подразумевается "test -n", а "[" в нормальных системах это линк на /bin/test, остается загадкой что такое "[[", видимо что то из области shell internal command при этом подразумевается какой-нибудь ksh/bash/etc
                Last edited by Jimson; 17-10-2012, 12:55.

                Comment

                • igoreha311
                  Member
                  • Sep 2011
                  • 99

                  #9
                  Работает в таком виде:
                  #!/bin/bash

                  mysql="mysql --connect_timeout 10 zabbix -h 127.0.0.1 -u root --password=zabbix --skip-column-names -b -e"

                  $mysql "select host from hosts where host like '172.16.17.4%'" | while read line
                  do
                  arr=($line)
                  x=`snmpwalk -ou -oq -v2c -c public ${arr[0]} 1.3.6.1.2.1.1.5.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " | tr -d \" `
                  [[ -n $x ]] && $mysql "update hosts set name = '$x' where host ='${arr[0]}'"
                  done
                  Всем спасибо, тему можно закрыть.

                  Debian GNU/Linux 6.0
                  2.6.32-5-amd64

                  Comment

                  • igoreha311
                    Member
                    • Sep 2011
                    • 99

                    #10
                    Может кому-то пригодится. Стояла задача массово, не руками, что-то изменять на коммутаторах. Где-то в недрах Интернета нашёл статью. Используя её сделал переименование и ещё несколько записей на коммутаторах с выгрузкой конфигураций на tftp.

                    Имеется:
                    switch-ip.txt
                    19m-7-7 172.22.0.20
                    19m-5-4 172.22.0.21
                    19m-4-4 172.22.0.22
                    Запускаю:
                    #!/bin/sh
                    cat /home/dlink/name/switch-ip.txt | while read sw_ip sw_name
                    do
                    expect /home/dlink/name/switch-ip.exp $sw_ip $sw_name
                    #echo "$line"
                    done
                    echo
                    Считывая switch-ip.txt, с помощью expect выполняется:

                    #!/usr/bin/expect
                    spawn telnet [lindex $argv 1]
                    expect "Username:"
                    send "ADMIN\r"
                    expect "Password:"
                    send "PASSWORD\r"
                    send "config snmp system_name [lindex $argv 0]_[lindex $argv 1]\r"
                    send "config snmp system_location [lindex $argv 0]\r"
                    send "config sntp primary 10.0.0.115 secondary 10.0.0.10 poll-interval 3600\r"
                    send "create syslog host 2 ipaddress 10.0.0.115 severity all facility local7 udp_port 514 state enable\r"
                    send "save all\r"
                    sleep 5
                    send "upl cfg_toTFTP 10.0.0.3 save/[lindex $argv 0]_[lindex $argv 1]-live.cfg\r"
                    sleep 5
                    send "logout\r"
                    send eof

                    Comment

                    • sersad
                      Senior Member
                      • May 2009
                      • 518

                      #11
                      в статье скрипт стар)))
                      Новый вариант моего скрипта
                      cat /home/zabbix/scripts-zabbix/rn
                      Code:
                      #!/bin/bash
                      #echo " " >> /tmp/rn.log
                      #echo "begin" >> /tmp/rn.log
                      #echo "$1" >> /tmp/rn.log
                      MYSQL="mysql --connect_timeout 10 zabbix2 -h 127.0.0.1 -u zabbix --password=пароль --skip-column-names -B -e"
                      #$MYSQL "SELECT name FROM hosts where host like '10.21.%'" | while read line
                      #$MYSQL "SELECT name FROM hosts where host like '$1'" | while read line
                      #$MYSQL "SELECT interface.ip FROM hosts,interface WHERE main = 1 AND hosts.hostid= interface.hostid AND hosts.host like '$1' AND interface.ip = hosts.name" | while read line
                      $MYSQL "SELECT interface.ip FROM hosts,interface WHERE main = 1 AND hosts.hostid= interface.hostid AND hosts.host = '$1' AND interface.ip = hosts.name" | while read line
                      do
                      arr=($line)
                      echo "IP = $line" >> /tmp/rn.log
                      x=`snmpwalk -Ou -Oq -v2c -c комунити ноль ${arr[0]} system.sysName.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " ` 
                      [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" && $MYSQL "UPDATE hosts SET host = '$x' WHERE host ='${arr[0]}'"
                      echo "1  = $x" >> /tmp/rn.log
                      x=`snmpwalk -Ou -Oq -v2c -c комунити раз ${arr[0]} system.sysName.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " ` 
                      echo "2  = $x" >> /tmp/rn.log
                      [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" && $MYSQL "UPDATE hosts SET host = '$x' WHERE host ='${arr[0]}'"
                      x=`snmpwalk -Ou -Oq -v2c -c комунити два ${arr[0]} system.sysName.0 2> /dev/null | awk '{print$2}' | tr "[:upper:]" "[:lower:] " ` 
                      echo "3  = $x" >> /tmp/rn.log
                      [[ -n $x ]] && $MYSQL "UPDATE hosts SET name = '$x' WHERE host ='${arr[0]}'" && $MYSQL "UPDATE hosts SET host = '$x' WHERE host ='${arr[0]}'"
                      echo "$x" >> /tmp/rn.log
                      #echo "end" >> /tmp/rn.log
                      done
                      дальше его добавляем в скрипты как команду
                      /home/zabbix/scripts-zabbix/rn {HOST.HOST}
                      и вешаем её на автообнаружение, в итоге получаем что узлы после обнаружения имеют имя а не IP. И все эо делается само без каких либо телодвижений.
                      Attached Files

                      Comment

                      Working...