9 HTTPエージェント

概要

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

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

HTTPアイテムのチェックには、監視対象のホスト上で稼働しているエージェントは必要ありません。

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

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

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

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

非同期 HTTPエージェント poller の数は、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}, {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" になります
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_proxyHTTPS_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)配置から自動的に取得されます。Zabbixサーバーまたはプロキシの設定パラメータ SSLCALocation を使用してCAファイルの場所を上書きできます。
これは 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回のチェックに Timeout 秒の2倍を超えて費やしません。
これは CURLOPT_TIMEOUT cURLオプションを設定します。
Timeout パラメータの詳細は、一般的なアイテム属性 を参照してください。
Enable trapping このチェックボックスをオンにすると、アイテムはトラッパーアイテムとしても機能し、Zabbix sender ユーティリティまたはZabbix sender protocol を使用してサーバーまたはプロキシに送信されたデータ、または history.push APIメソッドを使用してサーバーに送信されたデータを受け付けます。データ送信の詳細は、トラッパーアイテム を参照してください。
Allowed hosts Enable trapping チェックボックスがオンの場合のみ表示されます。
カンマ区切りのIPアドレス(必要に応じてCIDR表記)またはDNS名の一覧です。

既定値は ユーザーマクロ {$TRAPPER.ALLOWED_HOSTS} です。既定では、{$TRAPPER.ALLOWED_HOSTS}127.0.0.1,::1 です。アドレスをフィールドに直接入力するか、マクロ値を変更できます。空のままにすると、すべてのホストからの受信接続は拒否されます。指定した場合、受信接続はここに列挙されたホストからのみ受け入れられます。
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}
このフィールドではスペースとユーザーマクロが使用できます。
ホストマクロ: {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 が http://localhost:9200/str/values/_search?scroll=10s の POST アイテムを作成します
  • プロセッサ負荷(1 コアあたりの 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 を使用したサンプル依存アイテムの値の前処理:

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

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