ZabbixのActionでカスタムスクリプトにマクロで情報を渡しているのですが、このApplicationの情報が取リ方がわかりません。
マクロ定義されていれば、このあたりと思われますのですが、無さそうです。
https://github.com/zabbix/zabbix/blob/3.2.4/src/libs/zbxserver/expression.c#L1616
https://www.zabbix.org/websvn/wsvn/zabbix.com/trunk/src/libs/zbxserver/expression.c?rev=78516
{ITEM.APPLICATION}
というマクロがあれば一番なんだけどなと思っていたらこんなIssueもあったりで、
[ZBXNEXT-4303] {ITEM.APPLICATION} macro - ZABBIX SUPPORT
結局あきらめて、ZabbixのAPIを利用して取得することにしました。
Zabbix API利用例
今回利用したのは application.get
です。
application.get [Zabbix Documentation 3.0]
Golangのこちらのライブラリ利用させてもらって実装してみました。
GitHub - AlekSi/zabbix: Go package providing access to Zabbix API.
package main import ( "fmt" "net/http" "github.com/AlekSi/zabbix" ) type Connection struct { url string user string password string } func printApplications(conn *Connection, param zabbix.Params) { api := zabbix.NewAPI(conn.url) api.SetClient(http.DefaultClient) auth, err := api.Login(conn.user, conn.password) if err != nil { if zerr, ok := err.(*zabbix.Error); ok { fmt.Printf("%#v\n", zerr) panic(err) } panic(err) } if auth == "" { panic(err) } apps, err := api.ApplicationsGet(param) if err != nil { panic(err) } for _, ap := range apps { fmt.Printf("ApplicationId=%s, HostId=%s, Name=%s\n", ap.ApplicationId, ap.HostId, ap.Name) } } func main() { conn := &Connection{ url: "http://localhost:8080/api_jsonrpc.php", user: "admin", password: "zabbix", } // get.application API のパラメータ // https://www.zabbix.com/documentation/3.0/manual/api/reference/application/get#parameters fmt.Println("=====") fmt.Println("パラメータを空にすると全件") printApplications(conn, zabbix.Params{}) fmt.Println("=====") fmt.Println("{HOST.ID}でフィルタ") printApplications(conn, zabbix.Params{ "hostids": "10105", }) fmt.Println("=====") fmt.Println("{HOST.ID}と{ITEM.ID}でフィルタ") printApplications(conn, zabbix.Params{ "hostids": "10105", "itemids": "23667", }) fmt.Println("=====") fmt.Println("複数の{HOST.ID}でフィルタ") printApplications(conn, zabbix.Params{ "hostids": []string{"10093", "10094", "10095"}, }) }
出力例
===== パラメータを空にすると全件 ApplicationId=1, HostId=10001, Name=OS ApplicationId=5, HostId=10001, Name=Filesystems ApplicationId=7, HostId=10001, Name=Network interfaces ApplicationId=9, HostId=10001, Name=Processes ApplicationId=13, HostId=10001, Name=CPU ApplicationId=15, HostId=10001, Name=Memory ApplicationId=17, HostId=10001, Name=Performance ApplicationId=21, HostId=10001, Name=General ---- ----省略 ---- ApplicationId=463, HostId=10105, Name=Memory ApplicationId=464, HostId=10105, Name=Network interfaces ApplicationId=465, HostId=10105, Name=OS ApplicationId=466, HostId=10105, Name=Performance ApplicationId=467, HostId=10105, Name=Processes ApplicationId=468, HostId=10105, Name=Security ApplicationId=469, HostId=10105, Name=Zabbix agent ===== {HOST.ID}でフィルタ ApplicationId=460, HostId=10105, Name=CPU ApplicationId=461, HostId=10105, Name=Filesystems ApplicationId=462, HostId=10105, Name=General ApplicationId=459, HostId=10105, Name=HTTP service ApplicationId=463, HostId=10105, Name=Memory ApplicationId=464, HostId=10105, Name=Network interfaces ApplicationId=465, HostId=10105, Name=OS ApplicationId=466, HostId=10105, Name=Performance ApplicationId=467, HostId=10105, Name=Processes ApplicationId=468, HostId=10105, Name=Security ApplicationId=469, HostId=10105, Name=Zabbix agent ===== {HOST.ID}と{ITEM.ID}でフィルタ ApplicationId=459, HostId=10105, Name=HTTP service ===== 複数の{HOST.ID}でフィルタ ApplicationId=446, HostId=10093, Name=FTP service ApplicationId=447, HostId=10094, Name=HTTP service ApplicationId=448, HostId=10095, Name=HTTPS service