Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Zabbix Agent 2 melemparkan ralat apabila cuba memproses pemalam ujian mengikut arahan rasmi

Zabbix Agent 2 melemparkan ralat apabila cuba memproses pemalam ujian mengikut arahan rasmi

PHPz
PHPzke hadapan
2024-02-11 08:54:171016semak imbas

Zabbix Agent 2 在尝试根据官方说明处理测试插件时抛出错误

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!

Kandungan soalan

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:

  1. Mencipta direktori /home/ubuntu/myip
  2. Mencipta fail main.go
  3. Tampal kod daripada 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()))
           }
       }
  1. go mod init example.test/myip
  2. Modul Organisasi
  3. Mula membina
  4. Saya mencipta fail myip.conf menggunakan laluan ke pemalam boleh laku dan meletakkannya dalam direktori /etc/zabbix/zabbix_agent2.d/plugins.d
  5. dan mulakan arahan 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.

Penyelesaian

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文件中的checkVersionKaedah 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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam