å ¨å½ä¸åä¸Zabbixã¦ã¼ã¶ã®çæ§ããã«ã¡ã¯ã
è¤æ°ã®Zabbix Agentããåå¾ããå¤ãéç´ãã zabbix-aggregate-agent ã zabbix_get ã³ãã³ãã® Go å®è£ ç go-zabbix-get ãæ¸ãã¦éãã§ãããã¡ã«ãGo 㧠Zabbix ã¨éä¿¡ããã©ã¤ãã©ãªãè²ã£ã¦ãã¦ãã¾ã£ãã®ã§ä¸éãã¾ã¨ãã¦ããã¾ãã
"github.com/fujiwara/go-zabbix-get/zabbix" ã import ãã¦ä½¿ãã¾ãã
import "github.com/fujiwara/go-zabbix-get/zabbix"
Zabbix Agentããå¤ãåå¾ãã
ã¢ã¤ãã ã§ããã¨ããã®ãZabbixã¨ã¼ã¸ã§ã³ããåãServerãProxyããAgentã«å¯¾ãã¦TCPæ¥ç¶ããã¦å¤ãåå¾ããã¿ã¤ãã§ãã
value, err := zabbix.Get("example.com:10050", "keyname", 5*time.Second)
éä¿¡ç¸æã®Aegentã®ã¢ãã¬ã¹ãåå¾ãããã¢ã¤ãã ã®keyåãã¿ã¤ã ã¢ã¦ãæéã渡ãã ãã§ããç°¡åã§ãããvalue 㯠string ã§ãã
Zabbix Server/Proxy ã«å¤ãéä¿¡ãã
ã¢ã¤ãã ã§ããã¨ããã®ãZabbixãã©ããã¼ãåãServerãProxyã«å¯¾ãã¦(Agent以å¤ã®ä½è ãã)å¤ãéä¿¡ããã¿ã¤ãã§ããFluentdã®ãã©ã°ã¤ã³ãfluent-plugin-zabbix ããã®å½¢å¼ã§ããã
resp, err := zabbix.Send( "example.com:10051", zabbix.TrapperData{Host: "localhost", Key: "foo", Value: "bar"}, 5 * time.Second, )
éä¿¡ãã¼ã¿ã zabbix.TrapperData åã¨ãã¦ä½æãã¦æ¸¡ãã¦ãããã ãã§ãããããç°¡åã§ããã
ããã¯ä½ãå¬ããã®ãã¨ããã¨ãèªä½ã® daemon é¡ã«ä½ãç°å¸¸ããã£ãå ´åã« Zabbix Serever ã«ç´æ¥ trap ãéãã¤ãããããªæ©è½ãå®è£ ã§ãã¾ããã¢ã©ã¼ãã®å³å¿æ§ãä¸ããã¾ããã
è¤æ°ãã¼ã¿ãã¾ã¨ãã¦éãã¤ãã SendBulk() ãããã¾ãã
res, err := zabbix.SendBulk( "example.com:10051", zabbix.TrapperRequest{ Data: []zabbix.TrapperData{ zabbix.TrapperData{Host: "localhost", Key: "foo", Value: "bar"}, zabbix.TrapperData{Host: "localhost", Key: "xxx", Value: "yyy"}, }, }, timeout, )
ãªã¬ãªã¬Zabbix Agentãå®è£ ãã
ããã¾ã§ã¯æ¢åã® Agent ã Server ã«å¯¾ããéä¿¡ã§ãããèªåèªèº«ã§ Agent ã Server(Trapper) ãå®è£ ãããã¨ãå¯è½ã§ãã
err := zabbix.RunAgent("0.0.0.0:10050", func(key string) (string, error) { switch key { case "agent.ping": return "1", nil // ... default: return "", fmt.Errorf("not supported") } })
RunAgent() ã« func(key string) (string, error) ãªé¢æ°ã callback ã¨ãã¦æ¸¡ãã¦ãããã¨ã§ãTCPãµã¼ãã¨ãªã Server ã zabbix_get ã³ãã³ãã«å¤ãè¿ã daemon ãå®è£ ã§ãã¾ãã
èªä½ã® daemon ãæã£ã¦ããæ å ±ããç´æ¥ Zabbix Server ããéä¿¡ãã¦åå¾ãããããªæ©è½ãå®è£ ã§ãã¾ããå¤ã®åå¾ã®ããã«ãå¥é zabbix-agent ãã UserParameter ã§å¤é¨ã³ãã³ããèµ·åãããããªå¿ è¦ããªããªãã¾ãã
ãªã¬ãªã¬Zabbix Server(Trapper)ãå®è£ ãã
zabbix_sender (zabbix.Send()) ã«ããéä¿¡ãããå¤ãåä¿¡ãããµã¼ããç°¡åã«å®è£ å¯è½ã§ãã
err := zabbix.RunTrapper("0.0.0.0:10051", func(req zabbix.TrapperRequest) (res zabbix.TrapperResponse, err error) { for _, data := range req.Data { log.Println(data) } res.Proceeded = len(req.Data) return res, nil })
ããã¯ä½¿ãã©ããããã¾ãã¡é£ããã®ã§ãããfluent-plugin-zabbixのテスト ã«ã¯ä¾¿å©ã«ä½¿ã£ã¦ãã¾ãã
ããã¾ã§éå ·ãæã£ãããGo 㧠Zabbix Server äºæå®è£ ãä½ãä¸ãããã¨ã夢ã§ã¯ãªãã§ããï¼(ããã¾ãããã©â¦)
å ¨ã誰å¾ãããã¯ãã ã¨æãã¾ãããã楽ãã¿ãã ããã