Heim  >  Artikel  >  Backend-Entwicklung  >  Zabbix Agent 2 löst einen Fehler aus, wenn versucht wird, Test-Plugins gemäß den offiziellen Anweisungen zu verarbeiten

Zabbix Agent 2 löst einen Fehler aus, wenn versucht wird, Test-Plugins gemäß den offiziellen Anweisungen zu verarbeiten

PHPz
PHPznach vorne
2024-02-11 08:54:171019Durchsuche

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

php-Redakteur Yuzi wird Ihnen heute eine Frage zu Zabbix Agent 2 stellen. Bei einem Benutzer ist beim Versuch, das Test-Plugin gemäß den offiziellen Anweisungen zu handhaben, ein Fehler aufgetreten. Dieses Problem kann die ordnungsgemäße Funktion des Plugins beeinträchtigen. Daher werden wir nach Möglichkeiten suchen, dieses Problem zu beheben. Lass uns einen Blick darauf werfen!

Frageninhalt

Ich begann, die Möglichkeiten von Zabbix Agent 2 zu erkunden und beschloss, Schritt für Schritt ein Test-Plugin zu erstellen, wie im offiziellen Leitfaden zur Plugin-Erstellung beschrieben.

Nachdem ich alle Schritte abgeschlossen hatte, wollte der Zabbix-Agent nichts tun (außer der Option -h) und gab die folgende Fehlermeldung aus:

zabbix_agent2 [10046]:错误:无法注册插件:无法解析代理版本strconv.atoi:解析“6.0.13”:语法无效

Ich habe das auf Ubuntu 22.04 gemacht.

Zabbix-Agent 2-Version: 6.0.14.

go-Version: go1.18.1 linux/amd64

Ich habe Zabbix Agent 2 nur über apt-get installiert.

Ich habe alles nach Anleitung gemacht:

  1. Das Verzeichnis /home/ubuntu/myip wurde erstellt
  2. Erstellt eine Datei main.go
  3. Den Code aus der Anleitung eingefügt
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. Organisationsmodul
  3. Beginnen Sie mit dem Bau
  4. Ich habe die Datei myip.conf unter Verwendung des Pfads zur ausführbaren Plugin-Datei erstellt und im Verzeichnis abgelegt /etc/zabbix/zabbix_agent2.d/plugins.d
  5. und starten Sie den Befehl zabbix_agent2 -t myip

Und ... es funktioniert nicht und gibt einen Fehler wegen der falschen Parsing-Proxy-Version aus.

Ich denke, strconv.atoi wird im Code von Zabbix Agent 2 selbst irgendwie falsch gehandhabt, aber nachdem ich mir das gesamte Projekt mit dem Code-Editor angesehen habe, kann ich nichts Bemerkenswertes finden.

Außerdem ist es seltsam, dass die Version des Zabbix-Agenten 6.0.14 ist und 6.0.13 die Version des Plug-in-Kommunikationsprotokolls ist. Ich verstehe nicht, warum versucht wird, die Protokollversion als Proxy-Version auszugeben.

Wenn Sie also irgendwelche Gedanken zu diesem Thema haben, lade ich Sie ein, diese zu äußern. Vielen Dank im Voraus.

Lösung

Ich habe die Lösung gefunden! (Na ja, mein Arbeitskollege hat das tatsächlich entdeckt, aber nicht den Punkt)

Der Grund dafür ist, dass die Datei src/go/plugins/external/broker.go。在此文件中多次更改了请求结构中记录的逻辑。在 22 年夏天,他们改变了 Zabbix Agent 版本属性的方式(通过 strconv.Atoi von einer Zeichenfolge in eine Ganzzahl geparst wird.

Aber im Januar '23 haben sie das Proxy-Versionsattribut entfernt, es über strconv.Atoi geparst und das Protokollversionsattribut hinzugefügt. Deshalb wird versucht, die Protokollversion als Projektversion auszugeben.

Plugin Support包的plugin/container/handler.go文件中的checkVersionDie Methode zur Überprüfung der Protokollversion wurde ebenfalls geändert.

Das Problem liegt also beim neuen Zabbix Agent 2 und dem alten Plugin-Supportpaket.

Wenn Sie Version 6.4 für Zabbix Agent 2 und Version 1.2.2 für git.zabbix.com/ap/plugin-support/plugin verwenden, funktioniert alles einwandfrei!

Das obige ist der detaillierte Inhalt vonZabbix Agent 2 löst einen Fehler aus, wenn versucht wird, Test-Plugins gemäß den offiziellen Anweisungen zu verarbeiten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen