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

ij_740iogg6e2fflze1qgcoxrcs.jpeg

Всем привет! Эта новость будет интересна тем, у кого есть микросервисы или утилиты на 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: https://github.com/nixys/nxs-go-zabbix

© Habrahabr.ru