NSX Advanced Load Balancer には、アプリケーション トラフィックと、NSX Advanced Load Balancer システムおよび構成イベントの分析を提供するインデックス作成および検索サービスが組み込まれています。一部のユーザーは、データを既存のログ管理システム(Splunk、Sumo Logic、rsyslog/elasticsearch など)に組み込むことを望みます。

NSX Advanced Load Balancer は、次に示すように、アプリケーション ログを外部サーバに直接送信できます。ログは、NSX Advanced Load Balancer サービス エンジンから直接 UDP メッセージとして送信されます。外部サーバ情報は、[分析プロファイル] の新しいオプション client_log_streaming_config で指定できます。分析プロファイルなどを使用する仮想サービスのトラフィック ログは、その仮想サービスが配置されている SE から自動的に送信されます。SE は管理インターフェイスを使用して、構成された外部サーバに接続します。



NSX Advanced Load Balancer CLI を使用したアプリケーション ログ送信の有効化

新しい AnalyticsProfile オブジェクトを作成するか、既存のオブジェクトを編集し、アプリケーション ログを送信するために client_log_streaming_config サブセクションの下に次のフィールドを設定します。

external_server:宛先サーバの IP アドレスまたはホスト名。ホスト名を指定する場合、NSX Advanced Load Balancer サービス エンジンで解決可能な名前を指定する必要があります。NSX Advanced Load Balancer では複数のサーバを指定できます。指定する場合は、IP アドレスまたはホスト名のコンマ区切りリストを使用します(例:11.11.11.11, 23.12.12.4)。必要に応じて、リスト内の各外部サーバに個別のポートを指定することもできます(例:11.11.11.11:234, 12.12.12.12:343)。ドメイン名を解決するには、サービス エンジンにネーム サーバを構成できます。詳細については、『VMware NSX Advanced Load Balancer 構成ガイド』の「サービス エンジンの DNS 解決」トピックを参照してください。

次のサブセクションでは、CLI の例を示します。

  • external_server_port:ターゲット サーバのサービス ポート。これに対するデフォルトは 514 です。複数の外部サーバが識別されている場合、ここで指定した単一のポート番号が、外部サーバ リストで明示的なポート番号が指定されているサーバを除いたすべてのサーバに適用されます。

  • log_types_to_send:外部サーバに送信するログのタイプ。デフォルトは logs_all で、すべてのログが送信されます。その他のオプションは次のとおりです。

    • logs_significant_only:重要なログのみ

    • logs_udf_only:任意のクライアント ログ フィルタに一致するログか、ログが有効になっているルールに一致するログのみ

    • logs_udf_significant:重要なログは任意のクライアント ログ フィルタに一致するログか、ログが有効になっているルールに一致するログです

  • max_logs_per_second:1 秒間に外部サーバに送信されるログの最大数。デフォルトでは、1 秒あたり 100 個のログが送信されます。制限を適用しない場合は、0 に設定します。

注:

この変数を変更する前に、「レートの制限」セクションの注を参照してください。

[admin:node-1]: > configure analyticsprofile streaming-profile
[admin:node-1]: analyticsprofile> client_log_streaming_config
[admin:node-1]: analyticsprofile:client_log_streaming_config> external_server 10.10.25.200
[admin:node-1]: analyticsprofile:client_log_streaming_config> log_types_to_send logs_significant_only
[admin:node-1]: analyticsprofile:client_log_streaming_config> max_logs_per_second 20
[admin:node-1]: analyticsprofile:client_log_streaming_config> save
[admin:node-1]: analyticsprofile> save
+-------------------------------------------------+-------------------------------------------------------+
| Field                                           | Value                                                 |
+-------------------------------------------------+-------------------------------------------------------+
 ...
    Many lines intentionally left out
 ...
| client_log_streaming_config                     |                                                       |
|   external_server                               | 10.10.25.200                                          |
|   external_server_port                          | 514                                                   |
|   log_types_to_send                             | LOGS_SIGNIFICANT_ONLY                                 |
|   max_logs_per_second                           | 20                                                    |
+-------------------------------------------------+-------------------------------------------------------+
[admin:node-1]: >

上記の変更を行うと、この分析プロファイルに関連付けられている仮想サービスのトラフィック ログが、構成済みの外部サーバに送信されます。

複数の外部サーバ CLI の構成例

[admin:10-10-23-81]: > configure analyticsprofile testprofile
[admin:10-10-23-81]: analyticsprofile> client_log_streaming_config external_server 10.0.0.4,10.0.0.5,10.0.0.6:500
[admin:10-10-23-81]: analyticsprofile> save
+-------------------------------------------------+-------------------------------------------------------+
| Field                                           | Value                                                 |
+-------------------------------------------------+-------------------------------------------------------+
| uuid                                            | analyticsprofile-94517d21-9c61-4255-9325-78954caa1d78 |
| name                                            | testprofile                                           |
| tenant_ref                                      | admin                                                 |
|                                                 |                                                       |
|                                   Many lines intentionally left out                                     |
|                                                 |                                                       |
|                                                 |                                                       |
| client_log_streaming_config                     |                                                       |
|   external_server                               | 10.0.0.4,10.0.0.5,10.0.0.6:500                        |
|   external_server_port                          | 514                                                   |
|   protocol                                      | LOG_STREAMING_PROTOCOL_UDP                            |
|   log_types_to_send                             | LOGS_ALL                                              |
|   max_logs_per_second                           | 100                                                   |
| exclude_dns_policy_drop_as_significant          | False                                                 |
| disable_ondemand_metrics                        | False                                                 |
| ondemand_metrics_idle_timeout                   | 1800 seconds                                          |
| sip_log_depth                                   | 20                                                    |
| healthscore_max_server_limit                    | 20                                                    |
| enable_advanced_analytics                       | True                                                  |
| disable_vs_analytics                            | False                                                 |
+-------------------------------------------------+-------------------------------------------------------+

NSX Advanced Load Balancer ユーザー インターフェイスを使用したアプリケーション ログ送信の有効化

次の手順を実行するのに十分な管理者権限でコントローラにログインします。

  1. [テンプレート] > [プロファイル] > [分析] の順に移動します。

  2. 新しい分析プロファイルを作成するか、既存の分析プロファイルを選択して編集します。ログ送信に関連する設定は、最下部にあります。



  3. [外部サーバへのログの送信] チェックボックスをオンにします。



  4. フォームの入力を完了し、[保存] をクリックします。

  5. ログ データを外部サーバに送信する仮想サービスに設定を適用します。

レートの制限

前述のように、SE は管理インターフェイスを使用して、構成された外部サーバにアプリケーション ログを送信します。SE は同じネットワーク インターフェイスを使用して NSX Advanced Load Balancer Controller と同期するため、ログ送信トラフィックが管理トラフィックに干渉しないようにする必要があります。そのため、NSX Advanced Load Balancer は、送信トラフィックのレートを、1 秒あたりに送信される一定数のログ エントリに制限します。ログ エントリのデフォルトの制限は、1 秒あたり 100 個です。このレートは構成で変更できますが、ログの送信には管理ネットワーク上の SE の CPU サイクルと帯域幅の両方が使用されることを念頭に置く必要があります。

ログ収集と送信の設定に関する詳細については、『VMware NSX Advanced Load Balancer 構成ガイド』のトピック「ログの収集と送信の設定」を参照してください。

注:

 se_log_agent は、1 秒あたり 15,000 個のログの最大レートでのみスロットルできます。テストのセットアップでは、1 秒あたり 15,000 個のログの最大レートを達成するため、log_agent_sleep_interval フィールドは最大 2 ミリ秒削減されました。

送信されるメッセージのフォーマット

デフォルトでは、各ログは改行のない JSON 形式の文字列として送信されます。

レイアウトの例:

{"adf": 1, "virtualservice": "virtualservice-4abd93ed-9d89-4ca2-813f-f1706285d7c7", "report_timestamp": "2017-05-01T15:10:08.798592", "service_engine": "10.10.25.204", "vcpu_id": 1, "log_id": 5, "client_ip": "10.90.20.11", "client_src_port": 41392, "client_dest_port": 9000, "client_rtt": 1, "http_version": "1.1", "method": "GET", "uri_path": "/notexist.html", "referer": "www.avinetworks.com", "user_agent": "L7ProxyTest", "xff": "192.168.1.1 17.33.22.107 12.124.13.12 109.32.12.34 234.12.23.67", "host": "10.90.20.64:9000", "persistent_session_id": 3472328296917460336, "response_content_type": "text/html", "request_length": 299, "cacheable": 1, "pool": "pool-16fd2f0c-01db-467a-b673-6faa076b9142", "pool_name": "l7pool1", "server_ip": "10.90.20.61", "server_name": "10.90.20.61", "server_conn_src_ip": "10.90.20.13", "server_dest_port": 80, "server_src_port": 49003, "server_rtt": 16, "server_response_length": 1395, "server_response_code": 404, "server_response_time_first_byte": 1, "server_response_time_last_byte": 1, "response_length": 1397, "response_code": 404, "response_time_first_byte": 1, "response_time_last_byte": 1, "compression": NO_COMPRESSION_CAN_BE_COMPRESSED, "client_insights": NO_INSIGHTS_NOT_SAMPLED_TYPE, "request_headers": 689219, "response_headers": 13, "request_state": AVI_HTTP_REQUEST_STATE_SEND_TO_CLIENT, "significant_log": [ADF_RESPONSE_CODE_4XX], "headers_sent_to_server": "X-Forwarded-For: 10.90.20.11  Host: 10.90.20.64:9000  Accept-Encoding: identity  Accept: */*  User-Agent: L7ProxyTest  referer: www.avinetworks.com  Authorization: Basic YXZpdXNlcjphdml1c2Vy    ", "headers_received_from_server": "Server: nginx/1.2.1  Date: Mon, 01 May 2017 15:15:24 GMT  Content-Type: text/html  Content-Length: 1242  Connection: keep-alive  ", "server_connection_reused": 1, "vs_ip": "10.90.20.64", "body_updated": NOT_UPDATED, "vs_name": "l7vs1"}

すべてのログには、report_timestamp という名前のフィールドが含まれています。これは、そのログが対応するサービス エンジンで生成された時刻を示します。

使用可能なフォーマット オプションは次のとおりです。

  • UDP データグラムとしての JSON 形式の 1 行メッセージ - (デフォルト)

  • TCP 接続を介した JSON 形式の 1 行メッセージ

  • TLS で暗号化され、TCP 接続を介した JSON 形式の 1 行メッセージ

  • UDP データグラムとしての Syslog (RFC 5424) 形式のメッセージ(ログ情報は引き続き JSON 形式で表されますが、Syslog ヘッダーで囲まれています)

  • TCP 接続を介した Syslog (RFC 5424) 形式のメッセージ

  • TLS で暗号化された TCP 接続を介した Syslog (RFC 5424) 形式のメッセージ -

現在、フォーマット オプションは CLI を使用してのみ変更できます。

ログ送信のフィールドの選択

ユーザーは、送信されるログに含める特定のフィールドを選択できるため、送信される各ログのサイズが大幅に削減される可能性があります。選択したフィールドは、クライアント ログの最上位レベルである必要があることに注意します。

注:

この機能は、NSX Advanced Load Balancer REST API と NSX Advanced Load Balancer CLI ではサポートされますが、NSX Advanced Load Balancer ユーザー インターフェイスではサポートされません。

たとえば、client_ipuri_path、および response_code フィールドのみを送信するには、新しい分析プロファイルを作成するか、既存の分析プロファイルを更新して、ログが送信されている仮想サービスに添付します。次に、NSX Advanced Load Balancer CLI の例を示します。X.X.X.X が設定されている場所には、外部サーバの IP アドレスを設定する必要があります。

[admin:10-10-23-81]: > create analyticsprofile selected-fields-profile
[admin:10-10-23-81]: analyticsprofile> client_log_streaming_config
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> external_server X.X.X.X
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config format_config 
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> format log_streaming_format_json_selected
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> included_fields uri_path
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> included_fields client_ip
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> included_fields response_code
[admin:10-10-23-81]: analyticsprofile:client_log_streaming_config> save
[admin:10-10-23-81]: analyticsprofile> save
[admin:10-10-23-81]: save

この分析プロファイルを適用すると、送信されるログには、選択した 3 つのフィールドの情報のみが含められます。たとえば、情報は次のように表示されます:{"client_ip":"10.10.22.190","uri_path":"/not_exist","response_code":404}

最上位のフィールドの完全なリストについては、AVI-CONTROLLER の FQDN または IP アドレスを置き換え、さらに次のようにします。

  • HTTP アプリケーションの場合は、ブラウザで https://AVI-CONTROLLER/api/analytics/logs#HTTPLog を参照します

  • HTTP 以外のサービスの場合は、ブラウザで https://AVI-CONTROLLER/api/analytics/logs#L4Log を参照します

NSX Advanced Load Balancer CLI を使用した送信形式の変更

新しい AnalyticsProfile オブジェクトを作成するか、既存のオブジェクトを編集して、client_log_streaming_config サブセクションの下にあるプロトコル フィールドを、アプリケーション ログを送信するために次のいずれかのオプションに設定します。

  • log_streaming_protocol_udp:UDP データグラムとしてログを送信します。

  • log_streaming_protocol_tcp:TCP 接続経由でログを送信します。

  • log_streaming_protocol_tls:TLS で暗号化された TCP 接続経由でログを送信します。

  • log_streaming_protocol_syslog_over_tcp:転送プロトコルとして TCP を使用し、Syslog プロトコル (RFC5424) に従ってログをストリーミングします。

  • log_streaming_protocol_syslog_over_tls:転送プロトコルとして TLS で暗号化された TCP を使用し、Syslog プロトコル (RFC5424) に従ってログを送信します。

  • log_streaming_protocol_syslog_over_udp:転送プロトコルとして UDP を使用し、Syslog プロトコル (RFC5424) に従ってログを送信します。

[admin:node-1]: > configure analyticsprofile streaming-profile
    [admin:node-1]: analyticsprofile> client_log_streaming_config
    [admin:node-1]: analyticsprofile:client_log_streaming_config> protocol log_streaming_protocol_syslog_over_tcp
    [admin:node-1]: analyticsprofile:client_log_streaming_config> save
    [admin:node-1]: analyticsprofile> save

SYSLOG 形式で送信する場合のカスタマイズ可能なフィールド

これらのフィールドは、UDP または TCP を介して Syslog 形式で送信する場合にカスタマイズできます。

  • facility — RFC5424 で定義されているファシリティ値。0 ~ 23 の範囲で指定する必要があります。デフォルトは 16 です。

  • significant_log_severity — 重要なログで使用される重要度コード(RFC5424 で定義されています)。0 ~ 7 の範囲で指定する必要があります。デフォルトは 4 です。

  • filtered_log_severity — フィルタリングされたログで使用される重要度コード(RFC5424 で定義されています)。0 ~ 7 の範囲で指定する必要があります。デフォルトは 5 です。

  • non_significant_log_severity — 重要でないログで使用される重要度コード(RFC5424 で定義されています)。0 ~ 7 の範囲で指定する必要があります。デフォルトは 6 です。

  • hostname — Syslog メッセージのホスト名として使用する文字列。この文字列には、印刷可能な ASCII 文字のみを含めることができます(16 進数の 21 から 7E、スペースは使用できません)。文字列の長さは 255 です。デフォルトは NSX Advanced Load Balancer です。

これらのフィールドは、client_log_streaming_config の syslog_config フィールドで使用できます。

[admin:node-1]: > configure analyticsprofile streaming-profile
[admin:node-1]: analyticsprofile> client_log_streaming_config
[admin:node-1]: analyticsprofile:client_log_streaming_config> syslog_config
[admin:node-1]: analyticsprofile:client_log_streaming_config:syslog_config> hostname Avi-18.1.3-New
[admin:node-1]: analyticsprofile:client_log_streaming_config:syslog_config> save
[admin:node-1]: analyticsprofile:client_log_streaming_config> save
[admin:node-1]: analyticsprofile> save

ローカル ディスクまたはネットワーク ディスクにデータを書き込まずにクライアント ログを直接送信する

デフォルトでは、サービス エンジンで収集されたログ(重要、フィルタリング、または重要でない)はディスクに保存されるため、NSX Advanced Load Balancer Controller はそれらを取得してオンデマンドで処理できます。ただし、すべてのログが SE から外部システムに送信され、NSX Advanced Load Balancer Controller による処理が必要ない場合、すべてのログをディスクに保存すると、I/O 帯域幅が不必要に消費されることになります。次に示すように、NSX Advanced Load Balancer ユーザー インターフェイスまたは NSX Advanced Load Balancer CLI を使用して、ローカル ディスクまたはネットワーク ディスクのログの記録をオフにできます。

NSX Advanced Load Balancer ユーザー インターフェイスの使用

  1. 次に示すのは、[アプリケーション プロファイル] エディタの [クライアント ログ] の構成セクションの 2 つのビューです。

  2. [外部サーバへのログの送信] チェックボックスを選択するだけでなく、ユーザーは重要なログ、フィルタリングされたログ、および重要でないログに対して必要な動作を個別に選択できます。

  3. ローカル ディスクまたはネットワーク ディスクへのログ データの書き込みをオフにするには、[なし] を選択します。



NSX Advanced Load Balancer CLI の使用

Analytics Profileclient_log_config フィールドのパラメータを LOG_PROCESSING_NONE に設定する必要があります。これらのパラメータは、significant_log_processingfiltered_log_processing、および non_significant_log_processing です。

クライアント ログの送信での IPv6 サポート

バージョン 22.1.3 以降で、NSX Advanced Load Balancer は IPv6 を介したサービス エンジンから外部ログ サーバへの通信をサポートします。これにより、分析プロファイルの下に IPv6 外部サーバを提供できます。分析プロファイルには、IPv6 アドレスまたは IPv6 アドレスとポートを使用して外部サーバを構成できます。IP:PORT を外部サーバとして渡す場合は、IPv6 アドレスを括弧で囲む必要があります。複数の外部サーバが必要な場合は、カンマ区切りのリストを外部サーバとして渡すことができます。次の例を考慮します。

  • external_server 23.12.12.4,2001:123::1 または

  • external_server 12.12.12.12:343,[2001:123::1]:234

[admin:10-79-175-173]: > configure analyticsprofile ipv6-streaming
[admin:10-79-175-173]: analyticsprofile> client_log_streaming_config
[admin:10-79-175-173]: analyticsprofile:client_log_streaming_config> external_server
external_server        IP address or hostnames (FQDNs) of destination servers...
external_server_port   The service port to use for the external servers. If m...
[admin:10-79-175-173]: analyticsprofile:client_log_streaming_config> external_server 23.12.12.4,2001:123::1.
[admin:10-79-175-173]: analyticsprofile:client_log_streaming_config> where
Tenant: admin
Cloud: Default-Cloud
+-----------------+-------------------------+
| Field           | Value                   |
+-----------------+-------------------------+
| external_server | 23.12.12.4,2001:123::1. |
+-----------------+-------------------------+
[admin:10-79-175-173]: analyticsprofile:client_log_streaming_config> save
[admin:10-79-175-173]: analyticsprofile> save

分析プロファイルの下の IPv6 外部サーバは次のとおりです。



外部サーバとしての Splunk

Splunk は、ポート 514 で UDP メッセージを受信するように構成できます。

詳細については、「Splunk のドキュメント」を参照してください。

./splunk add udp 514 -sourcetype syslog

送信元のタイプとして syslog を使用して、各ログに送信される 1 行の JSON 文字列を適切に解釈することをお勧めします。

デフォルトでは、Splunk は、そのログを受信した時刻に対応する時刻で、受信した各ログにタイムスタンプを付けます。

Splunk がログのタイムスタンプとしてログ コンテンツの report_timestamp を使用するように強制するには、props.conf で次の構成を設定します。

[syslog]
TIME_PREFIX = \"report_timestamp\":\ \"
TIME_FORMAT = %Y-%m-%dT%H:%M:%S.%5N

詳細については、「ドキュメント」を参照してください。

Splunk サーバからのスクリーンショット: