公式の指示に従ってテストプラグインを処理しようとすると、Zabbix Agent 2 がエラーをスローします
php エディターの Yuzi が、今日は Zabbix Agent 2 に関する質問を共有します。あるユーザーは、公式の指示に従ってテスト プラグインを処理しようとしたときにエラーが発生しました。この問題はプラグインの適切な機能に影響を与える可能性があるため、この問題を解決する方法を検討します。見てみましょう!
質問内容
私は zabbix エージェント 2 の可能性を模索し始め、公式プラグイン作成ガイドに記載されているように段階的にテスト プラグインを作成することにしました。
すべての手順を完了した後、zabbix エージェントは何も実行しようとせず (-h オプションを除く)、次のエラーが表示されます:
zabbix_agent2[10046]: エラー: プラグインを登録できません: エージェントのバージョン strconv.atoi を解析できません: '6.0.13' を解析しています: 無効な構文
これをubuntu 22.04で実行しました。
zabbix エージェント 2 バージョン: 6.0.14。
go バージョン: go1.18.1 linux/amd64
私は apt-get を通じて zabbix エージェント 2 のみをインストールしました。
指示に従ってすべてを行いました:
- ディレクトリ/home/ubuntu/myipを作成しました
- ファイルmain.goを作成しました
- ディレクティブからコードを貼り付けました
- go mod init example.test/myip
- 組織モジュール
- 構築を開始
- プラグイン実行可能ファイルへのパスを含むファイル myip.conf を作成し、ディレクトリ
/etc/zabbix/zabbix_agent2.d/plugins.d
に配置しました。
- そして、コマンド
zabbix_agent2 -t myip
を開始します。
そして...機能せず、間違った解析プロキシのバージョンに関するエラーがスローされます。
strconv.atoi
は、zabbix エージェント 2 自体のコード内で何らかの形で間違って処理されていると思いますが、コード エディターを使用してプロジェクト全体を確認したところ、特筆すべき点は見つかりませんでした。
また、zabbixエージェントのバージョンが6.0.14、プラグイン通信プロトコルのバージョンが6.0.13というのも不思議です。なぜプロトコルのバージョンをプロキシのバージョンとして偽装しようとするのか理解できません。
それでは、この問題についてご意見がございましたら、ぜひ表明していただきたいと思います。よろしくお願いします。
解決策
解決策を見つけました! (実際、私の職場の同僚がこれを発見しましたが、要点ではありません)
その理由は、ファイル src/go/plugins/external/broker.go
にあります。リクエスト構造に文書化されたロジックは、このファイル内で数回変更されました。 Summer '22 では、strconv.Atoi
を介して Zabbix エージェントのバージョン属性を文字列から整数に解析する方法が変更されました。
しかし、2023 年 1 月に、プロキシ バージョン属性が削除され、strconv.Atoi
によって解析され、プロトコル バージョン属性が追加されました。そのため、プロトコルのバージョンをプロジェクトのバージョンとして偽装しようとします。
Plugin Support
パッケージの plugin/container/handler.go
ファイル内の checkVersion
メソッドも変更されました。これは、プロトコルのバージョン。
つまり、問題は新しい Zabbix Agent 2 と古いプラグイン サポート パッケージにあります。
Zabbix Agent 2 にバージョン 6.4 を使用し、git.zabbix.com/ap/plugin-support/plugin
にバージョン 1.2.2 を使用している場合は、すべて正常に動作します。
以上が公式の指示に従ってテストプラグインを処理しようとすると、Zabbix Agent 2 がエラーをスローしますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









私は jwt トークンを持っており、https://jwt.io/ Web サイトでデコードされたトークンを確認できます。シークレットやクレームを設定する必要はありません。そこで、シークレットを提供せずにトークンをデコードして有効期限を取得する方法を探しています。私はライブラリ ngopkg.in/square/go-jose.v2/jwt を使用しています。以下は私のコードです: token,err:=jwt.ParseSigned(jwtToken) 戻り値トークンには、keyid、アルゴリズムを含むヘッダーフィールドがあります。有効期限はありません。このトピックを検索したところ、github.com/a を使用するように言われました。

parse 関数は文字列を解析し、区切り文字で区切られたトークンのリストに変換します。手順: 1. 文字列の先頭から最初の非区切り文字を検索します。 2. 区切り文字が見つかるまで検索を続け、その区切り文字で文字列を終了します。 3. トークンをトークン配列に保存します。 1 ~ 3 を文字列の末尾まで。 5. 配列の末尾に NULL へのポインタを追加して、配列の末尾を示します。

以下のような x-www-form-urlencoded 本文でネストされたキー値を取得するユースケースがあります。 name=abc&age=12¬es[key1]=value1¬es[key2]=value2 試しました url.parsequery("name= abc&age=12¬es \[key1\]=value1¬es\[key2\]=value2") ですが、それは {"name":"abc","age":12,"notes[key1]":"value1", "note

C++ では、文字列を int に変換する方法が 2 つあります。1 つは、文字列を直接受け取り、整数を返す sto i() 関数を使用する方法です。 isringstream クラスを使用して、文字列を入力ストリームに解析し、整数を抽出します。選択される方法は文字列の形式によって異なります。形式が明確で数値以外の文字が含まれていない場合は stoi() の方がより簡潔であり、文字列に数値以外の文字が含まれる可能性がある場合やカスタム変換が必要な場合は isstringstream の方がより柔軟です。

Java における解析とは、文字列またはその他の表現を指定された型またはオブジェクトに変換するプロセスを指します。一般的なアプリケーションには、文字列の数値型、日付/時刻オブジェクト、JSON オブジェクトへの変換、XML ドキュメントからのデータの抽出などが含まれます。組み込みメソッド、フォーマッタ クラス、またはサードパーティ ライブラリを介して解析します。

Go 言語でアドレスを解析するための主要な関数には次のものがあります。 net.ParseIP(): IPv4 または IPv6 アドレスを解析します。 net.ParseCIDR(): CIDR タグを解析します。 net.ResolveIPAddr(): ホスト名または IP アドレスを IP アドレスに解決します。 net.ResolveTCPAddr(): ホスト名とポートを TCP アドレスに解決します。 net.ResolveUDPAddr(): ホスト名とポートを UDP アドレスに解決します。

PHP の深い理解: JSONUnicode を中国語に変換する実装方法 開発中、JSON データを処理する必要がある状況によく遭遇しますが、特に変換する必要がある場合、JSON 内の Unicode エンコードによっていくつかのシナリオで問題が発生します。 Unicode エンコードを漢字に変換する場合。 PHP では、この変換処理を実現するためのメソッドがいくつかありますが、以下では一般的なメソッドを紹介し、具体的なコード例を示します。まず、JSON の Un について理解しましょう

Go 言語のリフレクションを使用すると、ブール値、整数、浮動小数点数、文字列の変更など、実行時に変数値を操作できます。変数の値を取得すると、SetBool、SetInt、SetFloat、および SetString メソッドを呼び出して変数を変更できます。たとえば、JSON 文字列を構造に解析し、リフレクションを使用して構造フィールドの値を変更できます。反映操作は遅く、変更不可能なフィールドは変更できないことに注意してください。構造フィールドの値を変更する場合、関連するフィールドは自動的に更新されない場合があります。
