editor php Yuzi akan berkongsi dengan anda soalan mengenai Zabbix Agent 2 hari ini. Seorang pengguna mengalami ralat semasa cuba mengendalikan pemalam ujian mengikut arahan rasmi. Isu ini mungkin menjejaskan fungsi pemalam yang betul, jadi kami akan meneroka cara untuk menyelesaikan isu ini. Mari lihat!
Saya mula meneroka kemungkinan ejen zabbix 2 dan memutuskan untuk mencipta pemalam ujian langkah demi langkah seperti yang diterangkan dalam panduan penciptaan pemalam rasmi.
Selepas saya menyelesaikan semua langkah, ejen zabbix tidak mahu melakukan apa-apa (kecuali pilihan -h) dan memberikan ralat berikut:
zabbix_agent2 [10046]:错误:无法注册插件:无法解析代理版本strconv.atoi:解析“6.0.13”:语法无效
Saya melakukan ini pada ubuntu 22.04.
ejen zabbix 2 versi: 6.0.14.
versi go: go1.18.1 linux/amd64
Saya hanya memasang ejen zabbix 2 melalui apt-get.
Saya melakukan semuanya mengikut arahan:
package main import ( "fmt" "io/ioutil" "net/http" "git.zabbix.com/ap/plugin-support/plugin/container" "git.zabbix.com/ap/plugin-support/plugin" ) // Plugin must define structure and embed plugin.Base structure. type Plugin struct { plugin.Base } // Create a new instance of the defined plugin structure var impl Plugin // Plugin must implement one or several plugin interfaces. func (p *Plugin) Export(key string, params []string, ctx plugin.ContextProvider) (result interface{}, err error) { // You may use one of Critf, Errf, Infof, Warningf, Debugf, Tracef functions for logging. p.Infof("received request to handle %s key with %d parameters", key, len(params)) // Fetch response from the specified URL, it should be just the IP address. resp, err := http.Get("https://api.ipify.org") if err != nil { // Plugin will return an error response if the request failed return nil, err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { // Plugin will return an error response if it failed to read the response return nil, err } return string(body), nil } func init() { // Register our metric, specifying the plugin and metric details. // 1 - a pointer to plugin implementation // 2 - plugin name // 3 - metric name (item key) // 4 - metric description // // NB! The metric description must end with a period, otherwise the Zabbix agent 2 will return an error and won't start! // Metric name (item key) and metric description can be repeated in a loop to register additional metrics. plugin.RegisterMetrics(&impl, "Myip", "myip", "Return the external IP address of the host where agent is running.") } // This is the main function, it is required to compile the plugin. // By default the function implements our packages to handle the plugin creation and execution. 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())) } }
/etc/zabbix/zabbix_agent2.d/plugins.d
zabbix_agent2 -t myip
Dan...ia tidak berfungsi dan menimbulkan ralat tentang versi proksi penghuraian yang salah.
Saya rasa strconv.atoi
entah bagaimana dikendalikan secara salah dalam kod ejen zabbix 2 itu sendiri, tetapi selepas melihat keseluruhan projek menggunakan editor kod, saya tidak dapat menjumpai apa-apa yang perlu diperhatikan.
Selain itu, peliknya versi ejen zabbix ialah 6.0.14, dan 6.0.13 ialah versi protokol komunikasi plug-in. Saya tidak faham mengapa ia cuba melepaskan versi protokol sebagai versi proksi.
Jadi, jika anda mempunyai sebarang pemikiran tentang isu ini, saya menjemput anda untuk meluahkannya. Terima kasih terlebih dahulu.
Saya jumpa penyelesaiannya! (Nah, rakan sekerja saya sebenarnya menemui perkara ini, tetapi bukan maksudnya)
Sebabnya ialah fail src/go/plugins/external/broker.go
。在此文件中多次更改了请求结构中记录的逻辑。在 22 年夏天,他们改变了 Zabbix Agent 版本属性的方式(通过 strconv.Atoi
dihuraikan daripada rentetan kepada integer).
Tetapi pada Januari '23 mereka mengalih keluar atribut versi proksi, menghuraikannya melalui strconv.Atoi
dan menambahkan atribut versi protokol. Itulah sebabnya ia cuba melepaskan versi protokol sebagai versi projek.
Plugin Support
包的plugin/container/handler.go
文件中的checkVersion
Kaedah untuk menyemak versi protokol juga telah ditukar.
Jadi, masalahnya ialah dengan Zabbix Agent 2 yang baharu dan pakej sokongan plugin lama.
Jika anda menggunakan versi 6.4 untuk Zabbix Agent 2 dan versi 1.2.2 untuk git.zabbix.com/ap/plugin-support/plugin
maka semuanya berfungsi dengan baik!
Atas ialah kandungan terperinci Zabbix Agent 2 melemparkan ralat apabila cuba memproses pemalam ujian mengikut arahan rasmi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!