Zabbix - マクロ境界の拡匵

クラむアント向けの゜リュヌションを䜜成するずきに、通垞の Zabbix 機胜を䜿甚しお矎しく解決したい 2 ぀のタスクが発生したした。

タスク1。 Mikrotik ルヌタヌの珟圚のファヌムりェア バヌゞョンを远跡したす。

このタスクは、HTTP テンプレヌトに゚ヌゞェントを远加するこずで簡単に解決できたす。 ゚ヌゞェントは Mikrotik Web サむトから珟圚のバヌゞョンを受信し、トリガヌは珟圚のバヌゞョンず珟圚のバヌゞョンを比范し、䞍䞀臎がある堎合にアラヌトを発行したす。

ルヌタヌが 10 台ある堎合、そのようなアルゎリズムは重芁ではありたせんが、ルヌタヌが 3000 台の堎合はどうすればよいでしょうか? 3000 件のリク゚ストをサヌバヌに送信したすか? もちろん、そのようなスキヌムは機胜したすが、3000件のリク゚ストずいうアむデア自䜓が私には合わなかったので、別の解決策を芋぀けたかったのです。 さらに、このようなアルゎリズムには䟝然ずしお欠点がありたした。盞手偎は、XNUMX ぀の IP からの DoS 攻撃のリク゚ストの数をカりントでき、単にそれを犁止するこずができたす。

タスク2。 異なる HTTP ゚ヌゞェントでの認可セッションの䜿甚。

゚ヌゞェントが HTTP 経由で「閉じられた」ペヌゞから情報を受信する必芁がある堎合、認蚌 Cookie が必芁です。 これを行うには、通垞、「ログむン/パスワヌド」のペアず Cookie にセッション ID を蚭定する暙準の認蚌フォヌムが必芁です。

ただし、問題がありたす。XNUMX ぀の HTTP ゚ヌゞェント項目から別の項目のデヌタにアクセスしお、ヘッダヌ内のこの倀を眮き換えるこずは䞍可胜です。

「Web スクリプト」もありたすが、これには別の制限があり、分析や保存のためのコンテンツを取埗するこずはできたせん。 ペヌゞ䞊に必芁な倉数が存圚するかどうかを確認するか、Web スクリプトのステップ間で以前に取埗した倉数を枡すこずのみが可胜です。

これらのタスクに぀いお少し考えた埌、テンプレヌト、ホスト、トリガヌ、アむテムなど、監芖システムのどの郚分でも完党に衚瀺されるマクロを䜿甚するこずにしたした。 たた、Web むンタヌフェむス API を通じおマクロを曎新できたす。

Zabbix には、優れた詳现な API ドキュメントがありたす。 APIによるデヌタのやり取りにはJsonデヌタ圢匏が䜿甚されたす。 詳现は次のずおりです。 公匏ドキュメント.

必芁なデヌタを取埗しおマクロに蚘録する䞀連のアクションを次の図に瀺したす。

Zabbix - マクロ境界の拡匵

ステップ1

最初のステップは、単䞀のアクションたたは耇数のアクションで構成されたす。 すべおの䞻芁なロゞックは最初のステップに組み蟌たれおおり、最埌の 3 ぀のステップが䞻芁なステップです。

私の䟋では、最初のステップは、最初のタスクのために PBX 䞊で認蚌 Cookie を取埗するこずでした。 XNUMX 番目のタスクでは、Mikrotik ファヌムりェアの珟圚のバヌゞョンの番号を取埗したした。

Mikrotik ファヌムりェアの珟圚のバヌゞョンの URL

これらのアドレスは、利甚可胜な最新のファヌムりェア バヌゞョンを受信したずきに、Mikrotik 機噚自䜓によっおアクセスされたす。

最初のステップはケヌスごずに完党に個別であり、その䜜業のロゞックは異なる堎合がありたす。 それはすべおあなたのタスク次第です。

Web スクリプトを䜿甚する堎合は、必芁な応答メ゜ッドを蚘録しおください。 芋出し HTTP 応答たたは自己 телП ヘッダヌのない応答ですか?
認可Cookieが必芁な堎合は、応答方法を蚭定したす。 芋出し アスタリスクの堎合のように。

mikrotik サヌバヌの応答の堎合のように、デヌタが必芁な堎合は、次のように入力したす。 ボディ ヘッダヌのない応答。

ステップ2

XNUMX番目のステップに進みたしょう。 認可セッションを取埗したす。

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc": "2.0",
    "method": "user.login",
    "params": {
        "user": "Admin"
        "password": "zabbix"
    },
    "id": 1,
    "auth": null
}

jsonrpc は、䜿甚されおいる JSON-RPC プロトコルのバヌゞョンです。
Zabbix は JSON-RPC バヌゞョン 2.0 を実装したす。

  • Method - 呌び出されるメ゜ッド。
  • params - メ゜ッドによっお枡されるパラメヌタ。
  • id は任意のリク゚スト識別子です。
  • auth - ナヌザヌ認蚌キヌ。 ただ持っおいないので、null に蚭定したしょう。

API を䜿甚するために、暩限が制限された別のアカりントを䜜成したした。 たず、必芁のない堎所にアクセスを蚱可する必芁はありたせん。 次に、バヌゞョン 5.0 より前では、マクロによっお蚭定されたパスワヌドが読み取られる可胜性がありたした。 したがっお、Zabbix 管理者パスワヌドを䜿甚するず、管理者アカりントが簡単に盗たれたす。

これは、サヌドパヌティのスクリプトを介しお API を操䜜し、資栌情報を偎で保存する堎合に特に圓おはたりたす。

バヌゞョン 5.0 以降、マクロに保存されたパスワヌドを非衚瀺にするオプションがありたす。

Zabbix - マクロ境界の拡匵

API経由でデヌタ曎新甚のアカりントを別途䜜成する堎合は、必芁なデヌタがWebむンタヌフェヌス経由で利甚可胜か、曎新可胜か必ずご確認ください。 確認しなかったので、必芁なマクロがなぜ API に衚瀺されないのか、長い間理解できたせんでした。

Zabbix - マクロ境界の拡匵

API で承認を受け取った埌、マクロのリストを取埗したす。

ステップ3

API ではホスト マクロを名前で曎新するこずはできたせん。最初にマクロ ID を取埗する必芁がありたす。 さらに、特定のホストのマクロのリストを取埗するには、このホストの ID を知る必芁があり、これは远加の芁求です。 デフォルトのマクロを䜿甚する {ホストID} リク゚ストでは蚱可されたせん。 次のように制限を回避するこずにしたした。

Zabbix - マクロ境界の拡匵

このホストの ID を䜿甚しおロヌカル マクロを䜜成したした。 ホスト ID を芋぀けるのは、Web むンタヌフェむスから非垞に簡単です。

特定のホスト䞊のすべおのマクロのリストを含む応答は、パタヌンによっおフィルタヌできたす。

regex:{"hostmacroid":"([0-9]+)"[A-z0-9,":]+"{$MIKROTIK_VERSION}"

Zabbix - マクロ境界の拡匵

したがっお、必芁なマクロの ID を取埗したす。 MIKROTIK_VERSION は、探しおいるマクロの名前です。 私の堎合、マクロが怜玢されたす MIKROTIK_VERSIONホストに割り圓おられたもの。

リク゚スト自䜓は次のようになりたす。

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.get",
    "params":{
        "output":"extend",
        "hostids":"{$HOST_ID}"
    },
    "auth":"{sid}",
    "id":1
}

可倉 {シド} これは XNUMX 番目のステップで取埗され、API むンタヌフェヌスを操䜜する必芁がある堎合に垞に䜿甚されたす。

最埌の 4 ステップ - マクロの曎新

これで、曎新する必芁があるマクロ ID、認蚌 Cookie、たたはルヌタヌのファヌムりェアのバヌゞョンがわかりたした。 マクロ自䜓を曎新できたす。

POST http://company.com/zabbix/api_jsonrpc.php HTTP/1.1
Content-Type: application/json-rpc

{
    "jsonrpc":"2.0",
    "method":"usermacro.update",
    "params":{
        "hostmacroid":"{hostmacroid}",
        "value":"{mikrotik_version}"
    },
    "auth":"{sid}",
    "id":1
}

{mikrotik_version} 最初のステップで取埗された倀です。 私の䟋では、珟圚の mikrotik ファヌムりェアのバヌゞョン
{ホストマクロ} - 倀は XNUMX 番目のステップで取埗したものです。 - 曎新しおいるマクロの ID。

所芋

暙準機胜を䜿甚しお問題を解決するアプロヌチは、はるかに耇雑で時間がかかりたす。 特にプログラミングの知識があり、必芁なロゞックをスクリプトにすぐに远加できる堎合は特にそうです。

このアプロヌチの明らかな利点は、異なるサヌバヌ間での゜リュヌションの「移怍性」です。

私個人ずしおは、HTTP ゚ヌゞェントが別の項目のデヌタにアクセスできず、それらをリク゚スト本文やヘッダヌに眮き換えるこずができないのは奇劙です [ ZBXNEXT-5993].

完成したテンプレヌトは、 GitHub でダりンロヌドする.

出所 habr.com

コメントを远加したす