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 エージェントのチェックに追加されました。

設定

HTTPアイテムを設定するには、次の手順を実行します。

  1. データ収集 > ホスト に移動します。
  2. ホストの行にある アイテム をクリックします。
  3. アイテムの作成 をクリックします。
  4. フォームにアイテムのパラメータを入力します。

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

HTTPアイテムで固有の情報が必要なフィールドは次のとおりです。

パラメータ 説明
タイプ ここで HTTPエージェント を選択します。
キー 一意のアイテムキーを入力します。
URL 接続してデータを取得するURL。例:
https://www.example.com
http://www.example.com/download
ドメイン名にはUnicode文字を指定できます。HTTPチェックの実行時に、自動的にASCIIのPunycodeへ変換されます。
解析 ボタンを使用すると、オプションのクエリフィールド(?name=Admin&password=mypasswordなど)をURLから分離し、属性と値を クエリフィールド に移動して自動的にURLエンコードできます。
2048文字に制限されます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_URL を設定します。
クエリフィールド URLの変数(上記参照)。
属性と値のペアとして指定します。
値は自動的にURLエンコードされます。マクロの値は解決された後、自動的にURLエンコードされます。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_URL を設定します。
リクエストタイプ リクエストメソッドのタイプとして、GET、POST、PUT、または HEAD を選択します。
リクエストボディタイプ リクエストボディのタイプを選択します。
Rawデータ - カスタムHTTPリクエストボディ。マクロは置換されますが、エンコードは実行されません。
JSONデータ - JSON形式のHTTPリクエストボディ。マクロは文字列、数値、true、falseとして使用できます。文字列として使用するマクロは二重引用符で囲む必要があります。マクロの値は解決された後、自動的にエスケープされます。ヘッダーに「Content-Type」が指定されていない場合、デフォルトで「Content-Type: application/json」になります。
XMLデータ - XML形式のHTTPリクエストボディ。マクロはテキストノード、属性、またはCDATAセクションとして使用できます。マクロの値は解決された後、テキストノードおよび属性内で自動的にエスケープされます。ヘッダーに「Content-Type」が指定されていない場合、デフォルトで「Content-Type: application/xml」になります。
リクエストボディ リクエストボディを入力します。
サポートされるマクロ: {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}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_HTTPHEADER を設定します。
必須ステータスコード 想定されるHTTPステータスコードのリスト。Zabbixがリストにないコードを取得した場合、アイテムはサポートされていない状態になります。空の場合、チェックは実行されません。
例: 200,201,210-299
リストでサポートされるマクロ: ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLINFO_RESPONSE_CODE を使用します。
リダイレクトを追跡 HTTPリダイレクトを追跡するには、チェックボックスを選択します。
cURLオプション CURLOPT_FOLLOWLOCATION を設定します。
取得モード 取得するレスポンスの部分を選択します。
ボディ - ボディのみ
ヘッダー - ヘッダーのみ
ボディとヘッダー - ボディとヘッダー
JSONに変換 取得モード が ボディ に設定されていない場合、ヘッダーは「header」キーの下に属性と値のペアとして保存されます。
「Content-Type: application/json」が検出された場合、ボディはオブジェクトとして保存されます。それ以外の場合は文字列として保存されます。例:
HTTPプロキシ [protocol://][username[:password]@]proxy.example.com[:port] の形式を使用して、使用するHTTPプロキシを指定できます。
オプションの 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}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_PROXY を設定します。
HTTP認証 認証オプションを選択します。
なし - 認証を使用しません。
Basic - Basic認証を使用します。
NTLM - NTLM(Windows NT LAN Manager)認証を使用します。
Kerberos - Kerberos認証を使用します(ZabbixでのKerberosの設定も参照)。
Digest - Digest認証を使用します。
cURLオプション CURLOPT_HTTPAUTH を設定します。
ユーザー名 ユーザー名を入力します(最大255文字)。
HTTP認証 がBasic、NTLM、Kerberos、またはDigestに設定されている場合に使用できます。ユーザーマクロとローレベルディスカバリマクロがサポートされます。
パスワード ユーザーパスワードを入力します(最大255文字)。
HTTP認証 がBasic、NTLM、Kerberos、またはDigestに設定されている場合に使用できます。ユーザーマクロとローレベルディスカバリマクロがサポートされます。
SSLピアの検証 WebサーバーのSSL証明書を検証するには、チェックボックスを選択します。サーバー証明書は、システム全体のCAロケーションにある信頼された認証局(CA)証明書に対して検証されます。CAファイルの場所は、Zabbixサーバーまたはプロキシの設定パラメータSSLCALocationを使用して上書きできます。
cURLオプション CURLOPT_SSL_VERIFYPEER を設定します。
SSLホストの検証 Webサーバー証明書のCommon NameフィールドまたはSubject Alternate Nameフィールドが一致することを検証するには、チェックボックスを選択します。
cURLオプション CURLOPT_SSL_VERIFYHOST を設定します。
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}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_SSLCERT を設定します。
SSLキーファイル クライアント認証に使用するSSL秘密鍵ファイルの名前。秘密鍵ファイルはPEM1形式である必要があります。このファイルを含むディレクトリは、Zabbixサーバーまたはプロキシの設定パラメータSSLKeyLocationで指定します。
サポートされるマクロ: {HOST.IP}, {HOST.CONN}, {HOST.DNS}, {HOST.HOST}, {HOST.NAME}, {HOST.PORT}, {ITEM.ID}, {ITEM.KEY}, {ITEM.KEY.ORIG}, ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_SSLKEY を設定します。
SSLキーパスワード SSL秘密鍵ファイルのパスワード。
サポートされるマクロ: ユーザーマクロ、ローレベルディスカバリマクロ。
cURLオプション CURLOPT_KEYPASSWD を設定します。
タイムアウト Zabbixは、設定された時間を超えてURLの処理に時間を費やしません(1~600秒)。実際には、このパラメータはURLへの接続確立にかかる最大時間と、HTTPリクエストの実行にかかる最大時間を定義します。そのため、Zabbixが1回のチェックに費やす時間は タイムアウト の2倍を超えません。
cURLオプション CURLOPT_TIMEOUT を設定します。
タイムアウト パラメータの詳細については、一般的なアイテム属性を参照してください。
トラッピングを有効化 このチェックボックスを選択すると、アイテムはトラッパーアイテムとしても機能し、Zabbix senderユーティリティまたはZabbix sender プロトコルを使用してZabbixサーバーまたはプロキシに送信されたデータを受け入れます。また、history.push APIメソッドを使用してZabbixサーバーに送信されたデータも受け入れます。データの送信については、トラッパーアイテムを参照してください。
許可されたホスト トラッピングを有効化 チェックボックスが選択されている場合にのみ表示されます。
カンマ区切りの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アドレスが許可されます。
任意のIPv4アドレスを許可するには、0.0.0.0/0 を使用できます。
「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 に 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

次に、データを抽出する依存アイテムを設定します。

  • 1 秒あたりのリクエスト数を取得する依存アイテムの例を設定します。

  • 正規表現 server accepts handled requests\s+([0-9]+) ([0-9]+) ([0-9]+) を使用した、依存アイテムの値の前処理例:

  • 最新データで stub モジュールから取得した完全な結果を確認します。