You are viewing documentation for the development version, it may be incomplete.
Join our translation project and help translate Zabbix documentation into your native language.

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に変換されます。
解析ボタンを使用すると、URLからオプションのクエリフィールド(例: ?name=Admin&password=mypassword)を分離し、属性と値をクエリフィールドに移動して自動的にURLエンコードできます。
2048文字まで。
サポートされているマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これは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}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これは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"になります。
: XMLデータを選択するにはlibxml2が必要です。
リクエストボディ リクエストボディを入力します。
サポートされているマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, ローレベルディスカバリーマクロ。
ヘッダー リクエストを実行する際に送信されるカスタムHTTPヘッダー。
属性と値のペアとして指定します。
サポートされているマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これはCURLOPT_HTTPHEADER cURLオプションを設定します。
必要なステータスコード 期待されるHTTPステータスコードのリスト。Zabbixがリストにないコードを取得した場合、アイテムはサポート対象外になります。空の場合はチェックされません。
例: 200,201,210-299
リスト内でサポートされているマクロ: ユーザーマクロ, ローレベルディスカバリーマクロ。
これは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}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これはCURLOPT_PROXY cURLオプションを設定します。
HTTP認証 認証オプションを選択します:
なし - 認証を使用しません;
Basic - Basic認証を使用します;
NTLM - NTLM (Windows NT LAN Manager)認証を使用します;
Kerberos - Kerberos認証を使用します(詳細はKerberosのZabbixでの設定も参照してください);
Digest - Digest認証を使用します。
これはCURLOPT_HTTPAUTH cURLオプションを設定します。
ユーザー名 ユーザー名を入力します(255文字まで)。
HTTP認証がBasic、NTLM、Kerberos、Digestに設定されている場合に利用できます。ユーザーマクロとローレベルディスカバリーマクロがサポートされています。
パスワード ユーザーパスワードを入力します(255文字まで)。
HTTP認証がBasic、NTLM、Kerberos、Digestに設定されている場合に利用できます。ユーザーマクロとローレベルディスカバリーマクロがサポートされています。
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}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これは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}, ユーザーマクロ, ローレベルディスカバリーマクロ。
これはCURLOPT_SSLKEY cURLオプションを設定します。
SSLキーパスワード SSL秘密鍵ファイルのパスワード。
サポートされているマクロ: ユーザーマクロ, ローレベルディスカバリーマクロ。
これはCURLOPT_KEYPASSWD cURLオプションを設定します。
タイムアウト ZabbixはURLの処理に設定された時間(1-600秒)以上は費やしません。実際には、このパラメータはURLへの接続の最大時間とHTTPリクエストの実行の最大時間を定義します。したがって、Zabbixは1回のチェックで2 x タイムアウト秒以上は費やしません。
これはCURLOPT_TIMEOUT cURLオプションを設定します。
タイムアウトパラメータの詳細については、一般的なアイテム属性を参照してください。
トラッピングを有効化 このチェックボックスをオンにすると、アイテムはトラッパーアイテムとしても機能し、Zabbix senderユーティリティまたはZabbix senderプロトコルを使用してZabbixサーバーまたはプロキシに送信されたデータ、またはhistory.pushAPIメソッドを使用して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モジュールからの完全な結果を確認します: