Подружили 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: https://github.com/nixys/nxs-go-zabbix