亚洲国产日韩欧美一区二区三区,精品亚洲国产成人av在线,国产99视频精品免视看7,99国产精品久久久久久久成人热,欧美日韩亚洲国产综合乱

Table of Contents
Question content
Solution
Home Backend Development Golang Zabbix Agent 2 throws error when trying to process test plugins according to official instructions

Zabbix Agent 2 throws error when trying to process test plugins according to official instructions

Feb 11, 2024 am 08:54 AM
String parsing

Zabbix Agent 2 在嘗試根據(jù)官方說(shuō)明處理測(cè)試插件時(shí)拋出錯(cuò)誤

php editor Yuzi will share with you a question about Zabbix Agent 2 today. One user encountered an error being thrown while trying to handle the test plugin according to the official instructions. This issue may affect the proper functioning of the plugin, so we will explore ways to resolve this issue. Let’s take a look!

Question content

I started exploring the possibilities of zabbix agent 2 and decided to create a test plugin step by step as described in the official plugin creation guide.

After I complete all the steps, the zabbix agent doesn't want to do anything (except the -h option) and gives the following error:

zabbix_agent2[10046]: Error: Unable to register plugin: Unable to parse agent version strconv.atoi: Parsing '6.0.13': Invalid syntax

I did this on ubuntu 22.04.

zabbix agent 2 version: 6.0.14.

go version: go1.18.1 linux/amd64

I only installed zabbix agent 2 through apt-get.

I did everything according to the instructions:

  1. Created the directory /home/ubuntu/myip
  2. Created a file main.go
  3. pasted the code from the directive
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. Organization module
  3. Start building
  4. I created the file myip.conf with the path to the plugin executable and placed it in the directory /etc/zabbix/zabbix_agent2.d/plugins.d
  5. And start the command zabbix_agent2 -t myip

And...it doesn't work and throws an error about wrong parsing proxy version.

I think strconv.atoi is somehow handled incorrectly in the code of zabbix agent 2 itself, but after looking at the entire project using the code editor I can't find anything of note .

In addition, it is strange that the zabbix agent version is 6.0.14, and 6.0.13 is the plug-in communication protocol version. I don't understand why it's trying to pass off the protocol version as the proxy version.

So, if you have any thoughts on this issue, I invite you to express them. Thank you in advance.

Solution

I found the solution! (Well, my work colleague actually discovered this, but not the point)

The reason is the file src/go/plugins/external/broker.go. The logic documented in the request structure was changed several times in this file. In summer '22 they changed the way the Zabbix Agent version attribute is parsed from string to integer via strconv.Atoi.

But in January '23, they removed the proxy version attribute, parsed it via strconv.Atoi, and added the protocol version attribute. That's why it tries to pass off the protocol version as the project version.

The

checkVersion method in the plugin/container/handler.go file of the Plugin Support package has also been changed, which is used to check the protocol version.

So, the problem is with the new Zabbix Agent 2 and the old plugin support package.

If you are using version 6.4 for Zabbix Agent 2 and version 1.2.2 for git.zabbix.com/ap/plugin-support/plugin then everything works fine!

The above is the detailed content of Zabbix Agent 2 throws error when trying to process test plugins according to official instructions. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot AI Tools

Undress AI Tool

Undress AI Tool

Undress images for free

Undresser.AI Undress

Undresser.AI Undress

AI-powered app for creating realistic nude photos

AI Clothes Remover

AI Clothes Remover

Online AI tool for removing clothes from photos.

Clothoff.io

Clothoff.io

AI clothes remover

Video Face Swap

Video Face Swap

Swap faces in any video effortlessly with our completely free AI face swap tool!

Hot Tools

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

Hot Topics

PHP Tutorial
1488
72
How to get expiration date from jwt token in go? How to get expiration date from jwt token in go? Feb 14, 2024 pm 12:20 PM

I have a jwt token and I can see the decoded token on the https://jwt.io/ website. It doesn't require me to set any secrets or claims. So I'm looking for a way to decode the token to get the expiration date without providing any secret. I'm using the library ngopkg.in/square/go-jose.v2/jwt, below is my code: token,err:=jwt.ParseSigned(jwtToken) return value token has a header field which includes keyid, algorithm, But it doesn't give me expiry date. I have searched this topic and people said to use github.com/a

What does parse mean in java What does parse mean in java Apr 28, 2024 pm 09:09 PM

Parse in Java refers to the process of converting a string or other representation into a specified type or object. Common applications include converting strings to numeric types, date/time objects, JSON objects, and extracting data from XML documents. Parse via built-in methods, formatter classes, or third-party libraries.

How to use parse function in c language How to use parse function in c language Apr 28, 2024 pm 09:12 PM

The parse function parses a string, converting it into a list of tokens separated by a delimiter. Steps: 1. Search for the first non-delimiter character from the beginning of the string; 2. Continue searching until a delimiter is encountered and terminate the string at that delimiter; 3. Store the token in the token array; 4 . Repeat steps 1-3 until the end of the string; 5. Add a pointer to NULL at the end of the array to indicate the end of the array.

Golang common function address resolution guide Golang common function address resolution guide Apr 08, 2024 pm 02:18 PM

The key functions for parsing addresses in the Go language include: net.ParseIP(): Parse IPv4 or IPv6 addresses. net.ParseCIDR(): Parse CIDR tags. net.ResolveIPAddr(): Resolve hostname or IP address into IP address. net.ResolveTCPAddr(): Resolve host names and ports into TCP addresses. net.ResolveUDPAddr(): Resolve host name and port into UDP address.

In-depth understanding of PHP: Implementation method of converting JSON Unicode to Chinese In-depth understanding of PHP: Implementation method of converting JSON Unicode to Chinese Mar 05, 2024 pm 02:48 PM

In-depth understanding of PHP: Implementation method of converting JSONUnicode to Chinese During development, we often encounter situations where we need to process JSON data, and Unicode encoding in JSON will cause us some problems in some scenarios, especially when Unicode needs to be converted When encoding is converted to Chinese characters. In PHP, there are some methods that can help us achieve this conversion process. A common method will be introduced below and specific code examples will be provided. First, let us first understand the Un in JSON

Get nested key-value pairs of x-www-form-urlencoded request in JSON format in golang Get nested key-value pairs of x-www-form-urlencoded request in JSON format in golang Feb 09, 2024 pm 03:15 PM

I have a use case where we are getting nested key value in x-www-form-urlencoded body like below name=abc&age=12&notes[key1]=value1&notes[key2]=value2 I tried url.parsequery("name= abc&age=12&notes\[key1\]=value1&notes\[key2\]=value2") but it gives {"name":"abc","age":12,"notes[key1]":"value1", "note

How to convert string to int in c++ How to convert string to int in c++ May 01, 2024 pm 01:27 PM

In C++, there are two ways to convert a string to an int: using the sto i() function, which receives the string directly and returns an integer. Use the isringstream class to parse the string into an input stream and extract the integers. The method chosen depends on the string format: stoi() is more concise if the format is unambiguous and has no non-numeric characters; isstringstream is more flexible if the string may contain non-numeric characters or requires custom conversion.

Zabbix Agent 2 throws error when trying to process test plugins according to official instructions Zabbix Agent 2 throws error when trying to process test plugins according to official instructions Feb 11, 2024 am 08:54 AM

I started exploring the possibilities of zabbixagent2 and decided to create a test plugin step by step as described in the official plugin creation guide. After I complete all the steps, zabbixagent doesn't want to do anything (except the -h option) and gives the following error: zabbix_agent2[10046]: Error: Unable to register plugin: Unable to resolve agent version strconv.atoi: Resolving "6.0.13": Invalid syntax I did this on ubuntu22.04. zabbixagent2 version: 6.0.14. go version: go1.18.1linux/amd64 I only

See all articles