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:每秒流式传输到外部服务器的最大日志数。默认情况下,每秒流式传输 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 UI 启用应用程序日志流式传输

以足够的管理特权登录到控制器以执行以下步骤:

  1. 导航到模板 > 配置文件 > 分析

  2. 创建新的分析配置文件,或选择要编辑的预先存在的分析配置文件。日志流的相关设置位于最底部。



  3. 选中将日志流式传输到外部服务器复选框。



  4. 填写表单,然后单击保存

  5. 将设置应用于日志数据将流式传输到外部服务器的虚拟服务。

速率限制

如上所述,SE 使用其管理接口将应用程序日志流式传输到配置的外部服务器。由于 SE 使用相同的网络接口与 NSX Advanced Load Balancer 控制器 同步,因此必须确保流式传输日志流量不会干扰管理流量。为此,NSX Advanced Load Balancer 将流式传输流量的速率限制为每秒流式传输一定数量的日志条目。默认限制为每秒 100 个日志条目。尽管可以在配置中更改此速率,但必须注意流式传输日志会占用管理网络上的 SE CPU 周期和带宽。

有关日志收集和流式传输设置的详细信息,请参阅VMware NSX Advanced Load Balancer 配置指南》中的“日志收集和流式处理设置”主题。

注:

 se_log_agent 只能限制最大 15000 个日志/秒的速率。在我们的测试设置中,为了达到 15000 个日志/秒的最大速率,可最多将 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 的字段,表示在相应的服务引擎上生成该日志的时间。

可用的格式选项包括:

  • JSON 格式的单行消息,作为 UDP 数据报传输 -(默认)

  • JSON 格式的单行消息,通过 TCP 连接传输

  • JSON 格式的单行消息,通过使用 TLS 加密的 TCP 连接传输

  • Syslog (RFC 5424) 格式的消息,作为 UDP 数据报传输(日志信息仍以 JSON 格式表示,但使用 Syslog 标头括起来)

  • Syslog (RFC 5424) 格式的消息,通过 TCP 连接传输

  • Syslog (RFC 5424) 格式的消息,通过使用 TLS 加密的 TCP 连接传输 -

目前,只能使用 CLI 更改格式选项。

选择日志流式传输字段

用户可以选择要包含在流式日志中的特定字段,这可能会显著减少每个流式日志的大小。请注意,所选字段必须位于客户端日志的顶级。

注:

NSX Advanced Load Balancer REST API 和 NSX Advanced Load Balancer CLI 中支持此功能,但在 NSX Advanced Load Balancer UI 中不支持此功能。

例如,要仅流式传输 client_ipuri_pathresponse_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

应用此分析配置文件后,流式日志将仅包含这三个选定字段的信息。例如,该信息可能如下所示:{"client_ip":"10.10.22.190","uri_path":"/not_exist","response_code":404}

对于顶级字段的完整列表,请使用 FQDN 或 IP 地址替换 AVI-CONTROLLER,并且

  • 对于 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:使用 Syslog 协议 (RFC5424) 流式传输日志,并将 TCP 作为传输协议。

  • log_streaming_protocol_syslog_over_tls:使用 Syslog 协议 (RFC5424) 流式传输日志,并将 TCP 作为使用 TLS 加密的传输协议。

  • log_streaming_protocol_syslog_over_udp:使用 Syslog 协议 (RFC5424) 流式传输日志,并将 UDP 作为传输协议。

[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 之间(含 0 和 23);默认值为 16。

  • significant_log_severity - 重要日志的严重性代码(如 RFC5424 中定义)。必须介于 0 和 7 之间(含 0 和 7);默认值为 4。

  • filtered_log_severity - 筛选的日志的严重性代码(如 RFC5424 中定义)。必须介于 0 和 7 之间(含 0 和 7);默认值为 5。

  • non_significant_log_severity - 非重要日志的严重性代码(如 RFC5424 中定义)。必须介于 0 和 7 之间(含 0 和 7);默认值为 6。

  • hostname - 要在 Syslog 消息中作为主机名的字符串。该字符串只能包含可打印的 ASCII 字符(十六进制 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 控制器 可以按需检索和处理这些日志。但是,当所有日志都从 SE 流式传输到外部系统,并且不需要 NSX Advanced Load Balancer 控制器 进行处理时,将所有日志保存到磁盘会不必要地浪费 IO 带宽。可以使用 NSX Advanced Load Balancer UI 或 NSX Advanced Load Balancer CLI 禁用本地或网络磁盘日志记录,如下所示。

使用 NSX Advanced Load Balancer UI

  1. 下面显示了应用程序配置文件编辑器的客户端日志配置部分的两个视图。

  2. 除了选中将日志流式传输到外部服务器复选框外,用户还可以单独选择重要日志、已筛选日志和非重要日志所需的行为。

  3. 选择将禁止关闭将日志数据写入本地磁盘或网络磁盘。



使用 NSX Advanced Load Balancer CLI

需要将 Analytics Profileclient_log_config 字段下的参数设置为 LOG_PROCESSING_NONE。这些参数是 significant_log_processingfiltered_log_processingnon_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 作为源类型,以正确解释为每个日志流式传输的单行 JSON 字符串。

默认情况下,Splunk 将用与 Splunk 接收到日志的时间相对应的时间戳对每个接收到的日志标记时间戳。

要强制 Splunk 使用日志内容中的 report_timestamp 作为日志的时间戳,请在 props.conf 中设置以下配置:

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

有关更多信息,请参阅文档

Splunk 服务器的屏幕截图: