16 HTTPエージェント

概要

このアイテムタイプでは、HTTP/HTTPSプロトコルを使用したデータ ポーリングが可能です。Zabbix senderまたはZabbix senderプロトコルを使用したトラッピングも可能です。

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

HTTP監視アイテムでは、監視対象のホストでエージェントが実行されている必要はありません。

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

Zabbixサーバ/Zabbixプロキシは、cURL(libcurl)をサポートした状態で初期設定されている必要があります。

設定

HTTPアイテムを構成するには:

  • 設定ホスト にアクセスします。
  • ホストの行にあるアイテムをクリックします。
  • アイテムの作成をクリックします。
  • アイテムのフォームで入力フィールドに値を入力します。

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

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

Parameter Description
タイプ ここで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}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザーマクロ、ローレベルディスカバリマクロ。
これにより、cURLオプションCURLOPT_URLが設定されます。
クエリフィールド URLの変数(上記を参照)。
属性と値のペアとして指定されます。
値は自動的にURLエンコードされます。マクロからの値は解決されてから自動的に URL エンコードされます。
サポートされているマクロ: {HOST.IP}、{HOST.CONN}、{HOST.DNS}、{HOST.HOST}、{HOST.NAME}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザーマクロ、ローレベルディスカバリマクロ。
これにより、CURLOPT_URL cURLオプションが設定されます。
リクエストメソッド リクエストメソッドタイプを選択します: GETPOSTPUT、または HEAD
タイムアウト リクエストメソッドの種類を選択します: GETPOSTPUT、または HEAD
リクエストボディのタイプ リクエスト本文のタイプを選択します:
Rawデータ - カスタム HTTPリクエスト本文。マクロは置換されますが、エンコードは実行されません
JSONデータ - JSON 形式の HTTP リクエスト本文。マクロは文字列、数値、true、falseとして使用できます。文字列として使用するマクロは二重引用符で囲む必要があります。マクロの値は解決されてから自動的にエスケープされます。ヘッダーで "Content-Type"が指定されていない場合は、デフォルトで "Content-Type: application/json" になります
XML データ - XML 形式の HTTP リクエスト本文。マクロはテキストノード、属性、またはCDATAセクションとして使用できます。マクロの値は解決されてから、テキストノードと属性で自動的にエスケープされます。ヘッダーで "Content-Type" が指定されていない場合は、デフォルトで "Content-Type: application/xml" になります
注意 XMLデータを選択するには、libxml2が必要です。
リクエストボディ リクエスト本文を入力します。
サポートされているマクロ: {HOST.IP}、{HOST.CONN}、{HOST.DNS}、{HOST.HOST}、{HOST.NAME}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザー マクロ、ローレベルディスカバリマクロ。
ヘッダー リクエストを実行するときに送信されるカスタムHTTPヘッダー。
属性と値のペアとして指定されます。
サポートされているマクロ: {HOST.IP}、{HOST.CONN}、{HOST.DNS}、{HOST.HOST}、{HOST.NAME}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザー マクロ、ローレベルディスカバリマクロ。
これにより、cURLオプションCURLOPT_HTTPHEADER が設定されます。
要求ステータスコード 予想されるHTTPステータスコードのリスト。Zabbix がリストにないコードを取得した場合、その項目はサポート対象外になります。空の場合、チェックは実行されません。
例: 200,201,210-299
リスト内のサポートされているマクロ: ユーザー マクロ、ローレベルディスカバリマクロ。
これはcURLオプションCURLINFO_RESPONSE_CODEを使用します。
リダイレクトをたどる HTTPリダイレクトをたどる際にチェックボックスをオンにします。これにより、cURLオプションCURLOPT_FOLLOWLOCATIONが設定されます。
取得モード 取得する必要がある応答の部分を選択します:
ボディ - ボディのみ
ヘッダー - ヘッダーのみ
ボディとヘッダー - ボディとヘッダー
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}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザー マクロ、ローレベルディスカバリマクロ。
これにより、cUR オプションCURLOPT_PROXYが設定されます。
HTTP認証 認証タイプ:
なし - 認証は使用されません。
Basic - 基本認証が使用されます。
NTLM - NTLM (Windows NT LAN Manager 認証が使用されます。
Kerberos - Kerberos 認証が使用されます。Zabbixを使用したKerberosの設定 も参照してください。
Digest - ダイジェスト認証が使用されます。
認証方法を選択すると、ユーザー名とパスワードを入力するための 2 つの追加フィールドが表示されます。ここでは、ユーザー マクロとローレベルディスカバリマクロがサポートされています。
これにより、cURLオプションCURLOPT_HTTPAUTHが設定されます。
SSLピア検証 Web サーバーの SSL 証明書を検証するには、チェックボックスをオンにします。サーバー証明書は、システム全体の証明機関 (CA) の場所から自動的に取得されます。Zabbix サーバーまたはプロキシ構成パラメーター SSLCALocation を使用して、CA ファイルの場所を上書きできます。
これにより、cURLオプションCURLOPT_SSL_VERIFYPEERが設定されます。
SSLホスト検証 チェックボックスをオンにして、Webサーバー証明書の共通名フィールドまたはサブジェクト代替名フィールドが一致することを確認します。これにより、cURLオプションCURLOPT_SSL_VERIFYHOSTが設定されます。
SSL証明書ファイル クライアント認証に使用されるSSL証明書ファイルの名前。証明書ファイルは PEM1形式である必要があります。証明書ファイルに秘密鍵も含まれている場合は、SSLキーファイルフィールドを空のままにしておきます。キーが暗号化されている場合は、SSL キー パスワード フィールドにパスワードを指定します。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシ構成パラメータ SSLCertLocation によって指定されます。
サポートされているマクロ: {HOST.IP}、{HOST.CONN}、{HOST.DNS}、{HOST.HOST}、{HOST.NAME}、{ITEM.ID}、{ITEM.KEY}、{ITEM.KEY.ORIG}、ユーザーマクロ、ローレベルディスカバリマクロ。
これにより、cURLオプションCURLOPT_SSLCERTが設定されます。
SSL秘密鍵ファイル クライアント認証に使用される 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秘密鍵パスワード SSL秘密鍵ファイルのパスワード。
サポートされているマクロ: ユーザーマクロ、ローレベルディスカバリマクロ。
これにより、cURLオプションCURLOPT_KEYPASSWDが設定されます。
トラッピングの有効化 このチェックボックスをオンにすると、アイテムは トラッパーアイテム としても機能し、Zabbix senderによって、または Zabbix senderプロトコルを使用して、このアイテムに送信されたデータを受け入れます。
許可されたホスト トラッピングの有効化チェックボックスがオンになっている場合にのみ表示されます。
カンマで区切られた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プロキシを使用する別の方法は、プロキシ関連の環境変数を設定することです

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を指定してGET item を作成します。localhost:9200/?prettyでGET item を作成します。
  • レスポンスに注目してください。
{
         "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
                           }
                       }
                   }]
               }
           }
       }
  • Received:
{
           "_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のプリプロセスを利用して item 値を抽出します。 $.hits.hits[0]._source.value
例3

apiinfo.version を使用して、Zabbix APIが生きているかどうかをチェックします。

  • Item 設定

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

  • 項目値を正規表現で前処理し、HTTPコードを取得します:

  • Latest data の結果をチェックします: 

例4

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

  • 1つのJSONでデータを一括収集するためのマスター item を設定する。

クエリフィールドのマクロの使い方に注意してください。
記入方法は、Openweathermap APIを参照してください。

HTTP agentのレスポンスで返される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からデータを抽出する従属 itemを設定することです。

  • 湿度に関するサンプルの従属 item を設定します。

その他、「気温」などの気象指標も同様に追加されます。

  • JSONPathを使った従属 item 値のプリプロセスの例:

  • Latest dataで気象データの結果を確認します:

例5

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

  • 一括データ収集のためのマスター item を設定する。

Nginx stubのステータス出力のサンプル:

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

次のタスクは、データを抽出する従属 item を設定することです。

  • サンプルとして、1秒あたりのリクエストの従属 item を設定します。

  • 正規表現による従属 item 値のプリプロセッシング例 server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+):

  • スタブモジュールの全結果はLatest dataでご確認ください。