9 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 アイテムを設定するには:

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

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

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

Parameter Description
Type ここで HTTP agent を選択します。
Key 一意のアイテムキーを入力します。
URL 接続してデータを取得する URL です。例:
https://www.example.com
http://www.example.com/download
ドメイン名は Unicode 文字で指定できます。HTTP チェックの実行時に、自動的に punycode に変換されて ASCII になります。
Parse ボタンを使用すると、URL から任意のクエリフィールド(?name=Admin&password=mypassword など)を分離し、属性と値を Query fields に移して自動的に URL エンコードできます。
2048 文字までです。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_URL を設定します。
Query fields URL の変数です(上記参照)。
属性と値のペアとして指定します。
値は自動的に URL エンコードされます。マクロの値は展開された後、自動的に URL エンコードされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_URL を設定します。
Request type リクエストメソッドの種類を選択します: GET, POST, PUT または HEAD
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" になります
Note XML data を選択するには libxml2 が必要です。
Request body リクエストボディを入力します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
Headers リクエスト実行時に送信されるカスタム HTTP ヘッダーです。
属性と値のペアとして指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_HTTPHEADER を設定します。
Required status codes 期待される HTTP ステータスコードの一覧です。Zabbix が一覧にないコードを取得した場合、アイテムはサポート対象外になります。空の場合はチェックを行いません。
例: 200,201,210-299
一覧でサポートされるマクロ: ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLINFO_RESPONSE_CODE を使用します。
Follow redirects HTTP リダイレクトに従う場合はチェックボックスをオンにします。
これは cURL オプション CURLOPT_FOLLOWLOCATION を設定します。
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 などのプロキシ関連環境変数を上書きします。指定しない場合、プロキシはプロキシ関連環境変数を上書きしません。入力した値はそのまま渡され、妥当性チェックは行われません。
Note HTTP プロキシでは単純認証のみがサポートされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_PROXY を設定します。
HTTP authentication 認証オプションを選択します:
None - 認証を使用しません;
Basic - Basic 認証を使用します;
NTLM - NTLM (Windows NT LAN Manager) 認証を使用します;
Kerberos - Kerberos 認証を使用します(関連: Configuring Kerberos with Zabbix);
Digest - Digest 認証を使用します。
これは cURL オプション CURLOPT_HTTPAUTH を設定します。
User name ユーザー名を入力します(最大 255 文字)。
HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合にこのフィールドを使用できます。ユーザーマクロと低レベルディスカバリマクロがサポートされます。
Password ユーザーパスワードを入力します(最大 255 文字)。
HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合にこのフィールドを使用できます。ユーザーマクロと低レベルディスカバリマクロがサポートされます。
SSL verify peer チェックボックスをオンにすると、Web サーバーの SSL 証明書を検証します。サーバー証明書はシステム全体の証明機関(CA)配置から自動的に取得されます。Zabbix サーバーまたはプロキシの設定パラメータ SSLCALocation を使用して CA ファイルの配置を上書きできます。
これは cURL オプション CURLOPT_SSL_VERIFYPEER を設定します。
SSL verify host チェックボックスをオンにすると、Web サーバー証明書の Common Name フィールドまたは Subject Alternate Name フィールドが一致することを検証します。
これは cURL オプション CURLOPT_SSL_VERIFYHOST を設定します。
SSL certificate file クライアント認証に使用する SSL 証明書ファイル名です。証明書ファイルは PEM1 形式である必要があります。証明書ファイルに秘密鍵も含まれている場合は、SSL key file フィールドを空にしてください。鍵が暗号化されている場合は、SSL key password フィールドにパスワードを指定します。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメータ SSLCertLocation で指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_SSLCERT を設定します。
SSL key file クライアント認証に使用する SSL 秘密鍵ファイル名です。秘密鍵ファイルは PEM1 形式である必要があります。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメータ SSLKeyLocation で指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_SSLKEY を設定します。
SSL key password SSL 秘密鍵ファイルのパスワードです。
サポートされるマクロ: ユーザーマクロ、低レベルディスカバリマクロ。
これは cURL オプション CURLOPT_KEYPASSWD を設定します。
Timeout Zabbix は、設定された時間を超えて URL の処理に時間を費やしません(1-600 秒)。実際には、このパラメータは URL への接続にかける最大時間と HTTP リクエストの実行にかける最大時間を定義します。したがって、Zabbix は 1 回のチェックに 2 x Timeout 秒を超えて費やしません。
これは cURL オプション CURLOPT_TIMEOUT を設定します。
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 が稼働しているかどうかを確認します。

  • アイテムの設定:

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

  • 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 モジュールの完全な結果を確認します。