16 HTTPエージェント

概要

このアイテムタイプでは、HTTP/HTTPSプロトコルを使用したデータのポーリングが可能です。 トラッピングも、Zabbix senderユーティリティやZabbix senderプロトコル(Zabbixサーバーまたはプロキシへのデータ送信)、またはhistory.pushAPIメソッド(Zabbixサーバーへのデータ送信)を使用して可能です。

HTTPアイテムチェックはZabbixサーバーによって実行されます。ただし、ホストがZabbixプロキシによって監視されている場合、HTTPアイテムチェックはプロキシによって実行されます。

HTTPアイテムチェックは、監視対象ホストでエージェントを実行する必要はありません。

HTTPエージェントは、HTTPとHTTPSの両方をサポートします。Zabbixは、リダイレクトをオプションで追跡します(下記のリダイレクトを追跡オプションを参照)。リダイレクトの最大数は10にハードコードされています(cURLオプションCURLOPT_MAXREDIRSを使用)。

Zabbixサーバー/プロキシは、最初にcURL(libcurl)サポートで構成する必要があります。

HTTPチェックは非同期で実行されます。1つのリクエストの応答を受信する前に他のチェックを開始する必要はありません。DNS解決も非同期です。

非同期チェックの最大同時実行数は1000です(MaxConcurrentChecksPerPollerで定義)。

非同期HTTPエージェントポーラーの数は、StartHTTPAgentPollersパラメータで定義されます。

cURLの永続的な接続機能は、Zabbix 7.0以降のHTTPエージェントチェックに追加されました。

設定

HTTPアイテムを設定するには:

  • データ収集ホスト に移動します
  • ホストの行でアイテムをクリックします
  • アイテムの作成をクリックします
  • フォームにアイテムのパラメータを入力します

必須入力フィールドは赤いアスタリスクでマークされています。

HTTPアイテムに固有の情報が必要なフィールドは次のとおりです:

パラメータ 説明
タイプ ここでHTTPエージェントを選択します。
キー 一意のアイテムキーを入力します。
URL 接続してデータを取得するURL。例:
https://www.example.com
http://www.example.com/download
ドメイン名はUnicode文字で指定できます。HTTPチェックを実行する際に自動的にpunycodeでASCIIに変換されます。
解析ボタンを使用すると、オプションのクエリフィールド(?name=Admin&password=mypasswordなど)をURLから分離し、属性と値をクエリフィールドに移動して自動的にURLエンコードできます。
2048文字まで。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_URL cURLオプションを設定します。
クエリフィールド URLの変数(上記参照)。
属性と値のペアで指定します。
値は自動的にURLエンコードされます。マクロからの値は解決されてから自動的にURLエンコードされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_URL cURLオプションを設定します。
リクエストタイプ リクエストメソッドタイプを選択します: GET, POST, PUT または HEAD
リクエストボディタイプ リクエストボディタイプを選択します:
生データ - カスタムHTTPリクエストボディ、マクロは置換されますがエンコードは行われません
JSONデータ - JSON形式のHTTPリクエストボディ。マクロは文字列、数値、true、falseとして使用できます。文字列として使用する場合はダブルクォートで囲む必要があります。マクロからの値は解決されてから自動的にエスケープされます。ヘッダーで"Content-Type"が指定されていない場合は、デフォルトで"Content-Type: application/json"になります。
XMLデータ - XML形式のHTTPリクエストボディ。マクロはテキストノード、属性、CDATAセクションとして使用できます。マクロからの値はテキストノードと属性で解決されてから自動的にエスケープされます。ヘッダーで"Content-Type"が指定されていない場合は、デフォルトで"Content-Type: application/xml"になります。
リクエストボディ リクエストボディを入力します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
ヘッダー リクエスト時に送信されるカスタムHTTPヘッダー。
属性と値のペアで指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_HTTPHEADER cURLオプションを設定します。
必要なステータスコード 期待されるHTTPステータスコードのリスト。Zabbixがリストにないコードを取得した場合、アイテムはサポート対象外になります。空の場合はチェックされません。
例: 200,201,210-299
リストでサポートされるマクロ: ユーザーマクロ, LLDマクロ。
これはCURLINFO_RESPONSE_CODE cURLオプションを使用します。
リダイレクトを追跡 HTTPリダイレクトを追跡するにはチェックボックスをマークします。
これはCURLOPT_FOLLOWLOCATION cURLオプションを設定します。
取得モード 取得するレスポンスの部分を選択します:
ボディ - ボディのみ
ヘッダー - ヘッダーのみ
ボディとヘッダー - ボディとヘッダー
JSONに変換 取得モードボディ以外の場合、ヘッダーは"header"キーの下で属性と値のペアとして保存されます。
'Content-Type: application/json'が検出された場合、ボディはオブジェクトとして保存され、それ以外の場合は文字列として保存されます。例:
HTTPプロキシ 使用するHTTPプロキシを[protocol://][username[:password]@]proxy.example.com[:port]の形式で指定できます。
オプションのprotocol://プレフィックスを使用して、代替プロキシプロトコル(例: https, socks4, socks5; ドキュメント参照; プロトコルプレフィックスのサポートはcURL 7.21.7で追加されました)を指定できます。プロトコルを指定しない場合、プロキシはHTTPプロキシとして扱われます。間違ったプロトコルを指定すると、接続に失敗し、アイテムはサポート対象外になります。
デフォルトでは、1080ポートが使用されます。
指定した場合、プロキシはhttp_proxy、HTTPS_PROXYなどのプロキシ関連の環境変数を上書きします。指定しない場合、プロキシはプロキシ関連の環境変数を上書きしません。入力された値はそのまま渡され、整合性チェックは行われません。
注意 HTTPプロキシでサポートされるのはシンプル認証のみです。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_PROXY cURLオプションを設定します。
HTTP認証 認証オプションを選択します:
なし - 認証を使用しません;
Basic - Basic認証を使用します;
NTLM - NTLM (Windows NT LAN Manager)認証を使用します;
Kerberos - Kerberos認証を使用します(参考: ZabbixでのKerberosの設定);
Digest - Digest認証を使用します。
これはCURLOPT_HTTPAUTH cURLオプションを設定します。
ユーザー名 ユーザー名を入力します(255文字まで)。
HTTP認証がBasic、NTLM、Kerberos、Digestに設定されている場合に利用可能です。ユーザーマクロとLLDマクロがサポートされています。
パスワード ユーザーパスワードを入力します(255文字まで)。
HTTP認証がBasic、NTLM、Kerberos、Digestに設定されている場合に利用可能です。ユーザーマクロとLLDマクロがサポートされています。
SSLピア検証 WebサーバーのSSL証明書を検証するにはチェックボックスをマークします。サーバー証明書はシステム全体の証明書認証局(CA)ロケーションから自動的に取得されます。CAファイルの場所はZabbixサーバーまたはプロキシの設定パラメータSSLCALocationで上書きできます。
これはCURLOPT_SSL_VERIFYPEER cURLオプションを設定します。
SSLホスト検証 Webサーバー証明書のCommon NameフィールドまたはSubject Alternate Nameフィールドが一致するかどうかを検証するにはチェックボックスをマークします。
これはCURLOPT_SSL_VERIFYHOST cURLオプションを設定します。
SSL証明書ファイル クライアント認証に使用するSSL証明書ファイル名。証明書ファイルはPEM1形式である必要があります。証明書ファイルに秘密鍵も含まれている場合は、SSL鍵ファイルフィールドを空にします。鍵が暗号化されている場合は、SSL鍵パスワードフィールドにパスワードを指定します。このファイルを含むディレクトリはZabbixサーバーまたはプロキシの設定パラメータSSLCertLocationで指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_SSLCERT cURLオプションを設定します。
SSL鍵ファイル クライアント認証に使用するSSL秘密鍵ファイル名。秘密鍵ファイルはPEM1形式である必要があります。このファイルを含むディレクトリはZabbixサーバーまたはプロキシの設定パラメータSSLKeyLocationで指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, LLDマクロ。
これはCURLOPT_SSLKEY cURLオプションを設定します。
SSL鍵パスワード SSL秘密鍵ファイルのパスワード。
サポートされるマクロ: ユーザーマクロ, LLDマクロ。
これはCURLOPT_KEYPASSWD cURLオプションを設定します。
タイムアウト ZabbixはURLの処理に設定された時間(1-600秒)以上は費やしません。実際には、このパラメータはURLへの接続とHTTPリクエストの実行の最大時間を定義します。したがって、Zabbixは1回のチェックで2 x タイムアウト秒以上は費やしません。
これはCURLOPT_TIMEOUT cURLオプションを設定します。
タイムアウトパラメータの詳細については、一般的なアイテム属性を参照してください。
トラッピングを有効化 このチェックボックスをマークすると、アイテムはトラッパーアイテムとしても機能し、Zabbix senderユーティリティまたはZabbix sender プロトコルを使用してZabbixサーバーまたはプロキシに送信されたデータ、またはhistory.push APIメソッドを使用してZabbixサーバーに送信されたデータを受け入れます。データ送信の詳細については、トラッパーアイテムを参照してください。
許可されたホスト トラッピングを有効化チェックボックスがマークされている場合のみ表示されます。
カンマ区切りのIPアドレス(オプションでCIDR表記)、またはDNS名のリスト。
指定した場合、ここにリストされたホストからの着信接続のみが受け入れられます。
IPv6サポートが有効な場合、'127.0.0.1'、'::127.0.0.1'、'::ffff:127.0.0.1'は同等に扱われ、'::/0'は任意のIPv4またはIPv6アドレスを許可します。
'0.0.0.0/0'は任意のIPv4アドレスを許可するために使用できます。
"IPv4互換IPv6アドレス"(0000::/96プレフィックス)はサポートされていますが、RFC4291で非推奨とされています。
例: 127.0.0.1, 192.168.1.0/24, 192.168.3.1-255, 192.168.1-10.1-255, ::1,2001:db8::/32, mysqlserver1, zabbix.example.com, {HOST.HOST}
このフィールドではスペースとユーザーマクロが使用できます。
ホストマクロ: {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN}がこのフィールドで使用できます。

HTTPプロキシフィールドを空のままにした場合、HTTPプロキシを使用するもう1つの方法は、プロキシ関連の環境変数を設定することです。

HTTPの場合 - Zabbixサーバーユーザーのhttp_proxy環境変数を設定します。例:
http_proxy=http://proxy_ip:proxy_port

HTTPSの場合 - HTTPS_PROXY環境変数を設定します。例:
HTTPS_PROXY=http://proxy_ip:proxy_port。詳細はシェルコマンド: # man curl を実行して確認できます。

[1] ZabbixはPEM形式の証明書および秘密鍵ファイルのみをサポートします。証明書と秘密鍵データがPKCS #12形式ファイル(通常は*.p12または*.pfx拡張子)にある場合は、次のコマンドを使用してPEMファイルを生成できます:

openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

例1

Elasticsearchのようなサービスからデータを取得するために、単純なGETリクエストを送信します。

  • URLがlocalhost:9200/?prettyのGETアイテムを作成します
  • レスポンスを確認します:
    {
      "name" : "YQ2VAY-",
      "cluster_name" : "elasticsearch",
      "cluster_uuid" : "kH4CYqh5QfqgeTsjh2F9zg",
      "version" : {
        "number" : "6.1.3",
        "build_hash" : "af51318",
        "build_date" : "2018-01-26T18:22:55.523Z",
        "build_snapshot" : false,
        "lucene_version" : "7.1.0",
        "minimum_wire_compatibility_version" : "5.6.0",
        "minimum_index_compatibility_version" : "5.0.0"
      },
      "tagline" : "You know, for search"
    }
  • 次に、JSONPathの前処理ステップを使用してバージョン番号を抽出します: $.version.number
例2

Elasticsearchなどのサービスからデータを取得するために、シンプルなPOSTリクエストを送信します:

  • URLに対してPOSTアイテムを作成します: http://localhost:9200/str/values/_search?scroll=10s
  • プロセッサの負荷(1分平均/コア)を取得するために、以下のPOSTボディを設定します
    {
        "query": {
            "bool": {
                "must": [{
                    "match": {
                        "itemid": 28275
                    }
                }],
                "filter": [{
                    "range": {
                        "clock": {
                            "gt": 1517565836,
                            "lte": 1517566137
                        }
                    }
                }]
            }
        }
    }
  • 受信データ:
    {
        "_scroll_id": "DnF1ZXJ5VGhlbkZldGNoBQAAAAAAAAAkFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAJRZZUTJWQVktVFNacU5nRHhlcEI0QUxRAAAAAAAAACYWWVEyVkFZLVRTWnFOZ0R4ZXBCNEFMUQAAAAAAAAAnFllRMlZBWS1UU1pxTmdEeGVwQjRBTFEAAAAAAAAAKBZZUTJWQVktVFNacU5nRHhlcEI0QUxR",
        "took": 18,
        "timed_out": false,
        "_shards": {
            "total": 5,
            "successful": 5,
            "skipped": 0,
            "failed": 0
        },
        "hits": {
            "total": 1,
            "max_score": 1.0,
            "hits": [{
                "_index": "dbl",
                "_type": "values",
                "_id": "dqX9VWEBV6sEKSMyk6sw",
                "_score": 1.0,
                "_source": {
                    "itemid": 28275,
                    "value": "0.138750",
                    "clock": 1517566136,
                    "ns": 25388713,
                    "ttl": 604800
                }
            }]
        }
    }
  • JSONPathの事前処理ステップを使用してアイテム値を取得します: $.hits.hits[0]._source.value
例3

Zabbix APIが生きているかどうかを確認するには、 apiinfo.versionを使用します。

  • アイテムの設定:

POSTメソッドでJSONデータを使用し、リクエストヘッダーを設定し、ヘッダーのみを返すように指定している点に注意してください。

  • HTTPコードを取得するための正規表現によるアイテム値の事前処理:

  • 最新データでの結果の確認:

例4

Openweathermapのパブリックサービスに接続して天気情報を取得します。

  • 1つのJSONで一括データ収集のためのマスターアイテムを設定します。

クエリフィールドでのマクロの使用に注意してください。これらの入力方法についてはOpenweathermap APIを参照してください。

HTTPエージェントの応答で返されるサンプルJSON:

{
    "body": {
        "coord": {
            "lon": 40.01,
            "lat": 56.11
        },
        "weather": [{
            "id": 801,
            "main": "Clouds",
            "description": "few clouds",
            "icon": "02n"
        }],
        "base": "stations",
        "main": {
            "temp": 15.14,
            "pressure": 1012.6,
            "humidity": 66,
            "temp_min": 15.14,
            "temp_max": 15.14,
            "sea_level": 1030.91,
            "grnd_level": 1012.6
        },
        "wind": {
            "speed": 1.86,
            "deg": 246.001
        },
        "clouds": {
            "all": 20
        },
        "dt": 1526509427,
        "sys": {
            "message": 0.0035,
            "country": "RU",
            "sunrise": 1526432608,
            "sunset": 1526491828
        },
        "id": 487837,
        "name": "Stavrovo",
        "cod": 200
    }
}

次の作業は、JSONからデータを抽出する従属アイテムを設定することです。

  • 湿度のサンプル従属アイテムを設定します。

「温度」などの他の天気指標も同様に追加します。

  • JSONPathによるサンプル従属アイテムの値の前処理:

  • 最新データで天気データの結果を確認します。

例5

Nginxのステータスページに接続し、そのメトリクスを一括で取得します。

  • 公式ガイドに従ってNginxを設定します。
  • 一括データ収集用のマスターアイテムを設定します:

Nginx stub statusの出力例:

Active connections: 1 Active connections:
server accepts handled requests
 52 52 52 
Reading: 0 Writing: 1 Waiting: 0

次の作業は、データを抽出する従属アイテムを設定することです。

  • 秒あたりのリクエスト数のサンプル従属アイテムを設定します:

  • 正規表現server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+)を使用した従属アイテム値の前処理例:

  • 最新データでstubモジュールからの完全な結果を確認します: