Ad Widget

Collapse

Автоматическое заполнение полей URL A и URL B в инвентарных данных

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • esitengar
    Junior Member
    • Apr 2019
    • 5

    #1

    Автоматическое заполнение полей URL A и URL B в инвентарных данных

    Добрый.

    Code:
    [SIZE=14px]~$ zabbix_server -V
    zabbix_server (Zabbix) 3.0.26[/SIZE]
    [SIZE=14px]~$ cat /etc/*issue
    Ubuntu 18.04.2 LTS[/SIZE]

    Что есть:

    Добавил узлы через обнаружение и через действия раскидал их по группам, с добавлением SNMP интерфейсов к узлам.


    Через snmp заполнил некоторые поля инвентарных данных, модель коммутатора:
    Code:
    snmpwalk -v 2c -c public 192.168.176.40 1.3.6.1.2.1.1.1.0
    SNMPv2-MIB::sysDescr.0 = STRING: DGS-1100-06/ME/A1


    Click image for larger version

Name:	Снимок экрана_2019-04-12_11-00-25.png
Views:	153
Size:	44.1 KB
ID:	377451

    Что хочу сделать:
    Автоматическое заполнение поля URL A и URL B в инвентарных данных узлов, по типу:
    Click image for larger version

Name:	Снимок экрана_2019-04-12_11-11-31.png
Views:	97
Size:	4.9 KB
ID:	377452
    Как это можно сделать инструментами самого заббикса?

    Макросы не работают в инвентарных данных, а было бы классно сделать так:
    http://{HOST.CONN}
    telnet://{HOST.CONN}

    С помощью snmp, не получается заполнить, выдаёт ошибку после создания элемента данных:
    Code:
    No Such Instance currently exists at this OID
    Хотя snmpwalk возвращает IP:
    Code:
    snmpwalk -v 2c -c public 192.168.176.40 1.3.6.1.2.1.4.20.1.1
    IP-MIB::ipAdEntAddr.192.168.176.40 = IpAddress: 192.168.176.40
    Даже если получится, как добавить перед IP http:// и telnet://?

    Прошу помощи.
  • oscar
    Senior Member
    • Dec 2010
    • 141

    #2
    в третьем заббиксе не уверен что это возможно через SNMP. ИМХО, проще через внешнюю проверку. В 4.2 появилась мощная постобработка вплоть до js и там уже можно что угодно наворотить. Но возникает вопрос: зачем? Как в дальнейшем это планируется использовать, если не секрет?

    Comment

    • esitengar
      Junior Member
      • Apr 2019
      • 5

      #3
      Не секрет, это нужно для быстрого доступа к коммутатору прямо с карты.
      Вот собственно скрин:
      Click image for larger version

Name:	Снимок экрана_2019-04-12_16-14-25.png
Views:	198
Size:	718.8 KB
ID:	377492

      Это дополнение, интерактивная карта - https://github.com/RussianFox/imap/tree/Zabbix3
      Удивлён, что до сих пор нечто подобное не внедрили, очень ведь удобно.
      Только ради этого функционала решил пересесть на заббикс.

      Я так понял мою задачу не решить средствами заббикса? Придётся напрямую в бд править.
      Attached Files

      Comment

      • esitengar
        Junior Member
        • Apr 2019
        • 5

        #4
        Решено | Автоматическое заполнение полей URL A и URL B инвентарных данных заббикса.
        Инструменты заббикса не позволяют сделать это, придётся напрямую в базу вносить изменения.

        Code:
        cat /etc/*issue
        Ubuntu 18.04.2 LTS
        
        zabbix_server -V
        zabbix_server (Zabbix) 3.0.26
        
        mysql -V
        mysql  Ver 15.1 Distrib 10.1.38-MariaDB, for debian-linux-gnu (x86_64) using readline 5.2
        Для удобства, создать папку для скриптов в домашней папке пользователя:
        Code:
        cd ~/
        mkdir scripts
        Создаём файл в созданной папке:
        Code:
        cd scripts
        nano fill_url.py
        С таким содержимым:

        Code:
        #!/usr/bin/env python3
        
        """
        Необходиыме пакеты:
            sudo apt-get install -y python3.6 python3-pip
            pip3 install mysql-connector-python
        
        Скрипт заполняет стоблцы "url_a" и "url_b" в таблице "host_inventory" данными
        из столбца "ip" таблицы "interface", добавив перед "ip" с помощью функции
        concat строку 'http://' и 'telnet://'.
        """
        import mysql.connector
        
        # подключение к базе, надо заменить своими данными для подключения
        mydb = mysql.connector.connect(
            host='localhost',
            user='zabbix',
            passwd='password',
            database='zabbix'
        )
        # создаём курсов, который будет вводить команды
        mycursor = mydb.cursor()
        # собственно сами команды
        # можно под себя команды переделать, например изменить строки 'http://',
        # 'telnet://' на например 'ssh://', 'whatever'
        # или диапазон применения с '192.168.176.%' на '192.168.%.%' | '172.16.%.%'
        # и т.д.
        fill_a = (
            "UPDATE host_inventory "
            "LEFT JOIN interface ON host_inventory.hostid = interface.hostid "
            "SET host_inventory.url_a=concat('http://',interface.ip) "
            "WHERE interface.ip LIKE '192.168.176.%'; "
        )
        fill_b = (
            "UPDATE host_inventory "
            "LEFT JOIN interface ON host_inventory.hostid = interface.hostid "
            "SET host_inventory.url_b=concat('telnet://',interface.ip) "
            "WHERE interface.ip LIKE '192.168.176.%'; "
        )
        # выполнить команды
        mycursor.execute(fill_a)
        mycursor.execute(fill_b)
        # коммит изменений
        mydb.commit()
        print(mycursor.rowcount, "URLs: record(s) affected")
        # закрыть подключени к БД
        mydb.close()
        Да, можно было бы обойтись без дополнительных установок пакетов, например на shell написать. Но я сейчас учу python, поэтому стараюсь всё писать на нём.
        Чтобы скрипт заработал, надо установить пакеты:
        Code:
        sudo apt-get install -y python3.6 python3-pip
        pip3 install mysql-connector-python
        Сделать файл исполняемым:
        Code:
        sudo chmod +x fill_url.py
        Добавить скрипт в крон:
        Code:
        crontab -e
        в конец файла:
        Code:
        */5 * * * * python3 /home/username/scripts/fill_url.py
        скрипт будет запускаться каждые 5 минут, для меня это оптимальное время.

        На всякий можно проверить в логах, выполняется ли скрипт cron'ом:

        Code:
        tail -f /var/log/syslog | grep CRON
        Apr 16 05:25:01 zabbix CRON[7288]: (username) CMD (python3 /home/username/scripts/fill_url.py)
        Узлы могут добавляться вручную, по-одному. Решил, что удобнее запускать через cron,
        а не через заббикс.

        Comment

        • Kos
          Senior Member
          Zabbix Certified SpecialistZabbix Certified Professional
          • Aug 2015
          • 3404

          #5
          Спасибо, красиво. Только, для полного удовлетворения, лучше не лезть в базу самому, и делать изменения через API. У меня, например, не Ubuntu. И база данных не MariaDB и не MySQL. И структура базы может поменяться при изменении версии Zabbix (прецеденты были).

          Comment

          Working...