Jadual Kandungan
Kandungan soalan
Penyelesaian
Rumah pembangunan bahagian belakang Golang 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

Feb 11, 2024 am 08:54 AM
Penghuraian rentetan

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()))
           }
       }
Salin selepas log masuk
  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 Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk mendapatkan tarikh luput daripada token jwt in go? Bagaimana untuk mendapatkan tarikh luput daripada token jwt in go? Feb 14, 2024 pm 12:20 PM

Saya mempunyai token jwt dan saya boleh melihat token yang dinyahkod di laman web https://jwt.io/. Ia tidak memerlukan saya untuk menetapkan sebarang rahsia atau tuntutan. Jadi saya sedang mencari cara untuk menyahkod token untuk mendapatkan tarikh luput tanpa memberikan sebarang rahsia. Saya menggunakan perpustakaan ngopkg.in/square/go-jose.v2/jwt, di bawah ialah kod saya: token,err:=jwt.ParseSigned(jwtToken) token nilai pulangan mempunyai medan pengepala yang merangkumi keyid, algoritma, Tetapi ia tidak memberi saya tarikh luput. Saya telah mencari topik ini dan orang berkata menggunakan github.com/a

Bagaimana untuk menggunakan fungsi parse dalam bahasa c Bagaimana untuk menggunakan fungsi parse dalam bahasa c Apr 28, 2024 pm 09:12 PM

Fungsi parse menghuraikan rentetan, menukarnya menjadi senarai token yang dipisahkan oleh pembatas. Langkah: 1. Cari aksara bukan pembatas pertama dari permulaan rentetan 2. Teruskan mencari sehingga pembatas ditemui dan tamatkan rentetan pada pembatas itu 3. Simpan token dalam tatasusunan token; 1-3 sehingga penghujung rentetan 5. Tambahkan penunjuk ke NULL di hujung tatasusunan untuk menunjukkan penghujung tatasusunan.

Dapatkan pasangan nilai kunci bersarang bagi permintaan x-www-form-urlencoded dalam format JSON dalam golang Dapatkan pasangan nilai kunci bersarang bagi permintaan x-www-form-urlencoded dalam format JSON dalam golang Feb 09, 2024 pm 03:15 PM

Saya mempunyai kes penggunaan di mana kita mendapat nilai kunci bersarang dalam badan x-www-form-urlencoded seperti di bawah name=abc&age=12&notes[key1]=value1&notes[key2]=value2 Saya cuba url.parsequery("name= abc&age=12&notes \[key1\]=value1&notes\[key2\]=value2") tetapi ia memberikan {"name":"abc","age":12,"notes[key1]":"value1", "note

Bagaimana untuk menukar rentetan kepada int dalam c++ Bagaimana untuk menukar rentetan kepada int dalam c++ May 01, 2024 pm 01:27 PM

Dalam C++, terdapat dua cara untuk menukar rentetan kepada int: menggunakan fungsi sto i(), yang menerima rentetan secara terus dan mengembalikan integer. Gunakan kelas isringstream untuk menghuraikan rentetan ke dalam aliran input dan mengekstrak integer. Kaedah yang dipilih bergantung pada format rentetan: stoi() adalah lebih ringkas jika formatnya tidak jelas dan tidak mempunyai aksara bukan angka adalah lebih fleksibel jika rentetan mungkin mengandungi aksara bukan angka atau memerlukan penukaran tersuai.

Apakah maksud parse dalam java Apakah maksud parse dalam java Apr 28, 2024 pm 09:09 PM

Parse dalam Java merujuk kepada proses menukar rentetan atau perwakilan lain kepada jenis atau objek tertentu. Aplikasi biasa termasuk menukar rentetan kepada jenis angka, objek tarikh/masa, objek JSON dan mengekstrak data daripada dokumen XML. Menghuraikan melalui kaedah terbina dalam, kelas pemformat atau perpustakaan pihak ketiga.

Panduan resolusi alamat fungsi biasa Golang Panduan resolusi alamat fungsi biasa Golang Apr 08, 2024 pm 02:18 PM

Fungsi utama untuk menghuraikan alamat dalam bahasa Go termasuk: net.ParseIP(): Menghuraikan alamat IPv4 atau IPv6. net.ParseCIDR(): Parse teg CIDR. net.ResolveIPAddr(): Selesaikan nama hos atau alamat IP ke dalam alamat IP. net.ResolveTCPAddr(): Selesaikan nama hos dan port ke alamat TCP. net.ResolveUDPAddr(): Selesaikan nama hos dan port ke alamat UDP.

Cara menggunakan pantulan untuk mengubah suai nilai pembolehubah secara dinamik dalam golang Cara menggunakan pantulan untuk mengubah suai nilai pembolehubah secara dinamik dalam golang May 02, 2024 am 11:09 AM

Refleksi bahasa Go membolehkan anda memanipulasi nilai pembolehubah pada masa jalan, termasuk mengubah suai nilai Boolean, integer, nombor titik terapung dan rentetan. Dengan mendapatkan Nilai pembolehubah, anda boleh memanggil kaedah SetBool, SetInt, SetFloat dan SetString untuk mengubah suainya. Sebagai contoh, anda boleh menghuraikan rentetan JSON ke dalam struktur dan kemudian menggunakan refleksi untuk mengubah suai nilai medan struktur. Perlu diingatkan bahawa operasi pantulan adalah perlahan dan medan yang tidak boleh diubah suai tidak boleh diubah suai Apabila mengubah nilai medan struktur, medan yang berkaitan mungkin tidak dikemas kini secara automatik.

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Mar 05, 2024 pm 02:48 PM

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar JSONUnicode kepada Bahasa Cina Semasa pembangunan, kami sering menghadapi situasi di mana kami perlu memproses data JSON dan pengekodan Unicode dalam JSON akan menyebabkan kami beberapa masalah dalam beberapa senario, terutamanya apabila kami perlu menukar Unicode Apabila pengekodan ditukar kepada aksara Cina. Dalam PHP, terdapat beberapa kaedah yang boleh membantu kami mencapai proses penukaran ini Kaedah biasa akan diperkenalkan di bawah dan contoh kod khusus akan disediakan. Mula-mula, mari kita fahami dulu Un dalam JSON

See all articles