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 | リクエストメソッドの種類を選択します: 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" になります 注: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 mode が Body に設定されていない場合、ヘッダーは "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モジュールの完全な結果を確認します。

