16 HTTPエージェント

概要

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

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

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

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

Zabbix サーバー/プロキシは、あらかじめ cURL(libcurl)サポート付きで設定されている必要があります。

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

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

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

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

設定

HTTPアイテムを設定するには、以下のようにします。

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

必須入力フィールドには、すべて赤いアスタリスクが付いています。

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

Parameter Description
Type ここでは HTTPエージェント を選択します。
Key 一意のアイテムキーを入力します。
URL 接続してデータを取得するURLです。例:
https://www.example.com
http://www.example.com/download
ドメイン名はUnicode文字で指定できます。HTTPチェックの実行時に自動的にpunycodeへ変換され、ASCIIになります。
Parse ボタンを使用すると、オプションのクエリフィールド(例: ?name=Admin&password=mypassword)をURLから分離し、属性と値を Query fields に移動して自動的にURLエンコードできます。
2048文字までに制限されています。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_URL cURLオプションを設定します。
Query fields URL用の変数です(上記参照)。
属性と値のペアとして指定します。
値は自動的にURLエンコードされます。マクロからの値は展開された後、自動的にURLエンコードされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_URL cURLオプションを設定します。
Request type リクエストメソッドの種類を選択します: GETPOSTPUTHEAD
Request body type リクエストボディの種類を選択します:
Raw data - カスタムHTTPリクエストボディ。マクロは置換されますが、エンコードは行われません
JSON data - JSON形式のHTTPリクエストボディ。マクロは文字列、数値、true、false として使用できます。文字列として使用するマクロは二重引用符で囲む必要があります。マクロからの値は展開された後、自動的にエスケープされます。"Content-Type" がヘッダーで指定されていない場合、デフォルトで "Content-Type: application/json" になります
XML data - XML形式のHTTPリクエストボディ。マクロはテキストノード、属性、またはCDATAセクションで使用できます。マクロからの値は展開された後、テキストノードおよび属性内で自動的にエスケープされます。"Content-Type" がヘッダーで指定されていない場合、デフォルトで "Content-Type: application/xml" になります
:XML data を選択するには libxml2 が必要です。
Request body リクエストボディを入力します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
Headers リクエスト実行時に送信されるカスタムHTTPヘッダーです。
属性と値のペアとして指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_HTTPHEADER cURLオプションを設定します。
Required status codes 期待されるHTTPステータスコードの一覧です。Zabbixが一覧にないコードを受信した場合、そのアイテムは未サポートになります。空の場合、チェックは実行されません。
例: 200,201,210-299
一覧内でサポートされるマクロ: ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLINFO_RESPONSE_CODE cURLオプションを使用します。
Follow redirects HTTPリダイレクトに従うには、このチェックボックスをオンにします。
これは CURLOPT_FOLLOWLOCATION cURLオプションを設定します。
Retrieve mode 取得する必要があるレスポンスの部分を選択します:
Body - ボディのみ
Headers - ヘッダーのみ
Body and headers - ボディとヘッダー
Convert to JSON Retrieve modeBody に設定されていない場合、ヘッダーは "header" キーの下に属性と値のペアとして保存されます。
'Content-Type: application/json' が検出された場合、ボディはオブジェクトとして保存され、それ以外の場合は文字列として保存されます。例:
HTTP proxy 使用するHTTPプロキシを [protocol://][username[:password]@]proxy.example.com[:port] の形式で指定できます。
オプションの protocol:// プレフィックスを使用して、代替のプロキシプロトコル(例: https、socks4、socks5)を指定できます(documentation を参照。プロトコルプレフィックスのサポートは 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}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_PROXY cURLオプションを設定します。
HTTP authentication 認証オプションを選択します:
None - 認証を使用しません;
Basic - Basic認証を使用します;
NTLM - NTLM (Windows NT LAN Manager) 認証を使用します;
Kerberos - Kerberos認証を使用します(あわせて Configuring Kerberos with Zabbix も参照してください);
Digest - Digest認証を使用します。
これは CURLOPT_HTTPAUTH cURLオプションを設定します。
User name ユーザー名を入力します(255文字まで)。
このフィールドは、HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合に使用できます。ユーザーマクロおよびローレベルディスカバリマクロをサポートします。
Password ユーザーパスワードを入力します(255文字まで)。
このフィールドは、HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合に使用できます。ユーザーマクロおよびローレベルディスカバリマクロをサポートします。
SSL verify peer WebサーバーのSSL証明書を検証するには、このチェックボックスをオンにします。サーバー証明書は、システム全体の認証局(CA)の場所から自動的に取得されます。CAファイルの場所は、Zabbixサーバーまたはプロキシの設定パラメータ SSLCALocation を使用して上書きできます。
これは CURLOPT_SSL_VERIFYPEER cURLオプションを設定します。
SSL verify host Webサーバー証明書の Common Name フィールドまたは Subject Alternate Name フィールドが一致することを検証するには、このチェックボックスをオンにします。
これは CURLOPT_SSL_VERIFYHOST cURLオプションを設定します。
SSL certificate file クライアント認証に使用するSSL証明書ファイルの名前です。証明書ファイルは PEM1 形式である必要があります。証明書ファイルに秘密鍵も含まれている場合は、SSL key file フィールドは空のままにしてください。鍵が暗号化されている場合は、SSL key password フィールドにパスワードを指定します。このファイルを含むディレクトリは、Zabbixサーバーまたはプロキシの設定パラメータ SSLCertLocation で指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_SSLCERT cURLオプションを設定します。
SSL key file クライアント認証に使用するSSL秘密鍵ファイルの名前です。秘密鍵ファイルは PEM1 形式である必要があります。このファイルを含むディレクトリは、Zabbixサーバーまたはプロキシの設定パラメータ SSLKeyLocation で指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_SSLKEY cURLオプションを設定します。
SSL key password SSL秘密鍵ファイルのパスワードです。
サポートされるマクロ: ユーザーマクロ、ローレベルディスカバリマクロ。
これは CURLOPT_KEYPASSWD cURLオプションを設定します。
Timeout Zabbixは、URLの処理に設定された時間(1~600秒)を超えて費やしません。実際には、このパラメータはURLへの接続を確立する最大時間と、HTTPリクエストを実行する最大時間を定義します。したがって、Zabbixは1回のチェックに対して 2 x Timeout 秒を超えて費やしません。
これは CURLOPT_TIMEOUT cURLオプションを設定します。
Timeout パラメータの詳細については、一般的なアイテム属性 を参照してください。
Enable trapping このチェックボックスをオンにすると、このアイテムはトラッパーアイテムとしても機能し、Zabbix sender ユーティリティまたは Zabbix sender protocol を使用してZabbixサーバーまたはプロキシに送信されたデータ、あるいは history.push APIメソッドを使用してZabbixサーバーに送信されたデータを受け付けます。データ送信の詳細については、トラッパーアイテム を参照してください。
Allowed hosts Enable trapping チェックボックスがオンの場合にのみ表示されます。
カンマ区切りの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-compatible IPv6 addresses"(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}
このフィールドではスペースおよび user macros を使用できます。
このフィールドではホストマクロ {HOST.HOST}, {HOST.NAME}, {HOST.IP}, {HOST.DNS}, {HOST.CONN} を使用できます。

HTTP proxy フィールドを空のままにした場合、HTTPプロキシを使用する別の方法として、 プロキシ関連の環境変数を設定できます。

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

apiinfo.version を使用して、Zabbix API が稼働しているかどうかを確認します。

  • アイテムの設定:

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

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

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

例4

Openweathermap の公開サービスに接続して天気情報を取得します。

  • 単一の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からデータを抽出する依存アイテムを設定することです。

  • 湿度用の依存アイテムの設定例:

「Temperature」などの他の気象指標も、同様の方法で追加します。

  • 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

次のタスクは、データを抽出する依存アイテムを設定することです。

  • 1秒あたりのリクエスト数の依存アイテムの例を設定します。

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

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