Ово је водич корак по корак за креирање једноставног додатка који се може учитати за Zabbix agent 2.
Слободно користите наш example repository као шаблон или водич за креирање сопствених додатака.
Током овог упутства, додаћете нови додатак који се може учитати MyIP. Додатак ће имплементирати 1 метрику под називом myip, који враћа екстерну IP адресу домаћина на коме је покренут Zabbix agent 2.
У овом одељку ћете научити како да напишете додатак који додаје нову метрику агенту Zabbix 2.
Креирајте нови директоријум myip у /usr/local/zabbix/go/plugins/.
Креирајте датотеку main.go унутар myip директоријума и дефинишите име вашег Go пакета.
/usr/local/zabbix/go/plugins/myip/main.go
Држите датотеку отворену да бисте додали још редова као што је описано у следећим корацима.
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error)
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error){
p.Infof("received request to handle %s key with %d parameters", key, len(params))
}
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil""net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error){
p.Infof("received request to handle %s key with %d parameters", key, len(params))
resp, err := http.Get("https://api.ipify.org")
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return string(body), nil
}
Опис параметра методе plugin.RegisterMetrics:
-структуре- показивач на имплементацију додатка; омогућава приступ структури додатка, укључујући листу доступних интерфејса додатка (на пример, &impl). -име- назив додатка; мора бити јединствен (на пример, "Myip"). -назив метрике- назив метрике (на пример, "myip"). Ово је кључ ставке који се користи за прикупљање података из додатка. -опис- опис метрике; мора почети великим словом и завршити тачком (на пример, "Враћа спољну IP адресу домаћина на коме агент ради.").
Да бисте регистровали више метрика, поновите параметре назив метрике и опис за сваку метрику. На пример: plugin.RegisterMetrics(&impl, "Myip", "metric.one", "Metric one description.", "metric.two", "Metric two description.")
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error){
p.Infof("received request to handle %s key with %d parameters", key, len(params))
resp, err := http.Get("https://api.ipify.org")
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return string(body), nil
}
func init() {plugin.RegisterMetrics(&impl, "Myip", "myip", "Return the external IP address of the host where agent is running.")
}
Дефинисање функције main() је обавезно.
/usr/local/zabbix/go/plugins/myip/main.go
package main
import (
"fmt"
"io/ioutil"
"net/http"
"git.zabbix.com/ap/plugin-support/plugin/container"
"git.zabbix.com/ap/plugin-support/plugin"
)
type Plugin struct {
plugin.Base
}
var impl Plugin
func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error){
p.Infof("received request to handle %s key with %d parameters", key, len(params))
resp, err := http.Get("https://api.ipify.org")
if err != nil {
return nil, err
}
defer resp.Body.Close()
body, err := ioutil.ReadAll(resp.Body)
if err != nil {
return nil, err
}
return string(body), nil
}
func init() {plugin.RegisterMetrics(&impl, "Myip", "myip", "Return the external IP address of the host where agent is running.")
}
func main() {
h, err := container.NewHandler(impl.Name())
if err != nil {
panic(fmt.Sprintf("failed to create plugin handler %s", err.Error()))
}
impl.Logger = &h
err = h.Execute()
if err != nil {
panic(fmt.Sprintf("failed to execute plugin handler %s", err.Error()))
}
}
У овом одељку ћете научити како да компајлирате додатак.
go mod init myip
GOPROXY=direct go get git.zabbix.com/ap/plugin-support/plugin@branchname
go mod tidy
go build
Уверите се да сте навели исправно име гране, тј. замените branchname
(погледајте 2. ред) са једним од следећих:
relase/*
- за грану стабилног издања, где је "*" верзија издања (тј. 7.0
)master
- за главну грану<commit hash>
- за специфичну верзију комита (користите специфичан хаш комит )Излаз би требао бити сличан овоме:
go: creating new go.mod: module myip
go: to add module requirements and sums:
go mod tidy
go: finding module for package git.zabbix.com/ap/plugin-support/plugin/container
go: finding module for package git.zabbix.com/ap/plugin-support/plugin
go: found git.zabbix.com/ap/plugin-support/plugin in git.zabbix.com/ap/plugin-support v0.0.0-20220608100211-35b8bffd7ad0
go: found git.zabbix.com/ap/plugin-support/plugin/container in git.zabbix.com/ap/plugin-support v0.0.0-20220608100211-35b8bffd7ad0
Креирајте извршну датотеку myip за додатак који се може учитати.
Наведите путању до конфигурационе датотеке додатка у параметру Plugins.Myip.System.Path конфигурационе датотеке Zabbix агента 2.
Име додатка у имену конфигурационог параметра (Myip у овом водичу) мора да одговара имену додатка дефинисаном у функцији plugin.RegisterMetrics().
echo 'Plugins.Myip.System.Path=/usr/local/zabbix/go/plugins/myip/myip' > /etc/zabbix_agent2.d/plugins.d/myip.conf
Одговор треба да садржи екстерну IP адресу вашег домаћина.
У случају грешке, проверите да ли корисник zabbix има дозволе за приступ /usr/local/zabbix/go/plugins/myip директоријуму.