company_banner

Подружили Go и Zabbix 5.0


    Всем привет! Эта новость будет интересна тем, у кого есть микросервисы или утилиты на Go, которым нужно взаимодействовать с API Zabbix.


    Возможно, вы уже знаете, что совсем недавно ребята из Zabbix зарелизили v5.0. А поскольку у нас в Nixys активно используется эта система мониторинга, то мы просто не могли пройти мимо этого события и в дополнение к уже имеющимся версиям v2.4 и v4.4, добавили в нашу open source библиотеку nxs-go-zabbix ещё и поддержку API Zabbix v5.0.


    В ближайшие две недели мы переходим на v5.0, поэтому нам уже потребовалось применить наши последние наработки для собственных средств автоматизации. Полёт отличный!


    Насколько легко воспользоваться нашей библиотекой в своём Go-проекте, можно увидеть из следующего кода:


    package main
    
    import (
        "fmt"
        "os"
    
        "github.com/nixys/nxs-go-zabbix/v5"
    )
    
    func zabbixLogin(z *zabbix.Context, zbxHost, zbxUsername, zbxPassword string) {
        if err := z.Login(zbxHost, zbxUsername, zbxPassword); err != nil {
         fmt.Println("Login error:", err)
         os.Exit(1)
        }
        fmt.Println("Login: success")
    }
    
    func zabbixLogout(z *zabbix.Context) {
        if err := z.Logout(); err != nil {
         fmt.Println("Logout error:", err)
         os.Exit(1)
        }
        fmt.Println("Logout: success")
    }
    
    func main() {
    
        var z zabbix.Context
    
        /* Get variables from environment to login to Zabbix server */
        zbxHost := os.Getenv("ZABBIX_HOST")
        zbxUsername := os.Getenv("ZABBIX_USERNAME")
        zbxPassword := os.Getenv("ZABBIX_PASSWORD")
        if zbxHost == "" || zbxUsername == "" || zbxPassword == "" {
         fmt.Println("Login error: make sure environment variables `ZABBIX_HOST`, `ZABBIX_USERNAME` and `ZABBIX_PASSWORD` are defined")
         os.Exit(1)
        }
    
        /* Login to Zabbix server */
        zabbixLogin(&z, zbxHost, zbxUsername, zbxPassword)
        defer zabbixLogout(&z)
    
        /* Get all hosts */
        hObjects, _, err := z.HostGet(zabbix.HostGetParams{
         GetParameters: zabbix.GetParameters{
             Output: zabbix.SelectExtendedOutput,
         },
        })
        if err != nil {
         fmt.Println("Hosts get error:", err)
         return
        }
    
        /* Print names of retrieved hosts */
        fmt.Println("Hosts list:")
        for _, h := range hObjects {
         fmt.Println("-", h.Host)
        }
    }

    Пока реализованы не все методы весьма обширного API Zabbix просто потому, что у нас они не используются, но если вы решите заюзать nxs-go-zabbix у себя и вам чего-то не хватит — пишите, обязательно дополним нашу библиотеку. А будет желание, время и возможность — подключайтесь к проекту, места хватит всем! )


    P.S. Это библиотека доступна в нашем Github

    Nixys
    Эксперты в DevOps и Kubernetes

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

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

      0
      .
        0

        Исполняемых файлов библиотеки Go? Хм...

          0
          Прошу прощения, тупонул… понедельник, все дела ;)

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

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