HTTP エージェント

概要

このアイテムタイプでは、HTTP/HTTPS プロトコルを使用してデータをポーリングできます。 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 エージェントのチェックに追加されました。

Configuration

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}, ユーザーマクロ, low-level discoveryマクロ。
これは 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}, ユーザーマクロ, low-level discoveryマクロ。
これは 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}, ユーザーマクロ, low-level discoveryマクロ。
Headers リクエスト実行時に送信されるカスタムHTTPヘッダー。
属性と値のペアとして指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, low-level discoveryマクロ。
これは CURLOPT_HTTPHEADER cURLオプションを設定します。
Required status codes 期待されるHTTPステータスコードの一覧。Zabbixが一覧に含まれないコードを取得した場合、アイテムはサポート対象外になります。空の場合はチェックは行われません。
例: 200,201,210-299
一覧でサポートされるマクロ: ユーザーマクロ, low-level discoveryマクロ。
これは 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 などのプロキシ関連環境変数を上書きします。指定しない場合、プロキシはプロキシ関連環境変数を上書きしません。入力した値はそのまま渡され、妥当性チェックは行われません。
Note HTTPプロキシでは単純認証のみサポートされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ, low-level discoveryマクロ。
これは 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 に設定されている場合に使用できます。ユーザーマクロと low-level discoveryマクロがサポートされます。
Password ユーザーパスワードを入力します(最大255文字)。
このフィールドは HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合に使用できます。ユーザーマクロと low-level discoveryマクロがサポートされます。
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}, ユーザーマクロ, low-level discoveryマクロ。
これは 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}, ユーザーマクロ, low-level discoveryマクロ。
これは CURLOPT_SSLKEY cURLオプションを設定します。
SSL key password SSL秘密鍵ファイルのパスワード。
サポートされるマクロ: ユーザーマクロ, low-level discoveryマクロ。
これは CURLOPT_KEYPASSWD cURLオプションを設定します。
Timeout Zabbixは、URLの処理に設定時間以上を費やしません(1-600秒)。実際には、このパラメータはURLへの接続にかける最大時間と、HTTPリクエストの実行にかける最大時間を定義します。したがって、Zabbixは1回のチェックに Timeout 秒の2倍以上を費やしません。
これは CURLOPT_TIMEOUT cURLオプションを設定します。
Timeout パラメータの詳細については、general item attributes を参照してください。
Enable trapping このチェックボックスをオンにすると、アイテムはトラッパーアイテムとしても機能し、Zabbix sender ユーティリティまたは Zabbix sender protocol を使用して Zabbixサーバーまたはプロキシに送信されたデータ、あるいは history.push APIメソッドを使用して Zabbixサーバーに送信されたデータを受け付けます。データ送信の詳細については、Trapper items を参照してください。
Allowed hosts Enable trapping チェックボックスがオンの場合のみ表示されます。
カンマ区切りのIPアドレス(CIDR表記も可)またはDNS名の一覧。

既定値は user macro {$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モジュールからの完全な結果を確認します。