TF Analytics指南丨“分析”哪些内容?如何发出“警报”?

2021-01-15 10:48:11 浏览数 (1)

Tungsten Fabric是一个由计算节点、控制节点、配置节点、数据库节点、Web UI节点和分析节点组成的分布式系统。

分析(Analytics)节点负责收集系统所有节点上所有软件模块的系统状态信息、使用统计和调试信息。分析节点将整个系统收集到的数据存储在数据库中,数据库基于Apache Cassandra开源分布式数据库管理系统。该数据库通过类似SQL的语言和表示状态转移(REST)API进行查询。

分析节点收集到的系统状态信息将汇总到所有的节点上。

分析节点收集的调试信息包括以下几种类型。

  • 系统日志(syslog)消息——由系统软件组件产生的信息和调试消息。
  • 对象日志消息——记录对系统对象(如虚拟机、虚拟网络、服务实例、虚拟路由器、BGP对等体、路由实例等)的更改。
  • 追踪消息——软件组件在本地收集的活动记录,仅在需要时才发送给分析节点。

与流量、CPU和内存使用情况等相关的统计信息也由分析节点收集,并可进行查询以提供历史分析和时间序列信息。查询使用REST APIs进行。

分析数据会被写入到Tungsten Fabric的数据库。数据将在默认的48小时有效时间(TTL)后过期。这个默认的TTL时间可以根据需要通过改变集群配置中的database_ttl值来改变。

TF警报流(Alert Streaming)

TF警报(alert)是在基于每个用户可见实体(UVE)提供的。TF分析(analytics)使用Python编码的规则来触发或解除警报,这些规则将检查UVE的内容和对象的配置。一些规则是内置的,其它规则可以使用Python stevedore插件添加。

本主题介绍了Tungsten Fabric警报功能。

警报API格式

TF警报分析API提供以下内容。

  • 作为UVE GET APIs的一部分,读取对警报的访问。
  • 使用POST请求进行警报确认。
  • 使用服务器发送的事件(SSE)进行UVE和警报流。

例如:

GET http://<analytics-ip> :8081/analytics/alarms。

代码语言:javascript复制
{
    analytics-node: [
        {
            name: "nodec40",
            value: {
                UVEAlarms: {
                    alarms: [
                        {
                            any_of: [
                                {
                                    all_of: [
                                        {
                                            json_operand1_value: ""PROCESS_STATE_STOPPED"",
                                            rule: {
                                                oper: "!=",
                                                operand1: {
                                                    keys: [
                                                        "NodeStatus",
                                                        "process_info",
                                                        "process_state"
                                                    ]
                                                },
                                                operand2: {
                                                    json_value: ""PROCESS_STATE_RUNNING""
                                                }
                                            },
                                            json_vars: {
                                                NodeStatus.process_info.process_name: "contrail-topology"
                                            }
                                        }
                                    ]
                                }
                            ],
                            severity: 3,
                            ack: false,
                            timestamp: 1457395052889182,
                            token: "eyJ0aW1lc3RhbXAiOiAxNDU3Mzk1MDUyODg5MTgyLCAiaHR0cF9wb3J0I
................................... jogNTk5NSwgImhvc3RfaXAiOiAiMTAuMjA0LjIxNy4yNCJ9",
                            type: "ProcessStatus"
                        }
                    ]
                }
            }
        }
    ]
}

在这个例子中:

  • any_of属性包含以[ [rule1 AND rule2 AND ... AND ruleN] ... OR [rule11 AND rule22 AND ... AND ruleNN] ]格式定义的报警(alarm)规则。
  • 警报是在每个UVE的基础上发出的,可以通过在UVE上的GET来检索。
  • ack表示警报是否已被确认。
  • token用于客户端的请求确认。

用于警报的分析API

下面的示例显示了用于显示警报(alert)和报警(alarm),以及确认报警(alarm)的API。

  • 检索对名为aXXsYY的控制节点发出的警报列表。
代码语言:javascript复制
GET http://<analytics-ip>:<rest-api-port>/analytics/uves/control-node/aXXsYY&cfilt=UVEAlarms

这适用于所有UVE表类型。

  • 检索系统中所有报警(alarm)的列表。
代码语言:javascript复制
GET http://<analytics-ip>:<rest-api-port>/analytics/alarms
  • 确认报警(alarm)。
代码语言:javascript复制
POST http://<analytics-ip>:<rest-api-port>/analytics/alarms/acknowledge
Body: {“table”: <object-type>,“name”: <key>, “type”: <alarm type>, “token”: <token>}

可以使用以下URL查询参数和前面列出的GET操作具体查询已确认和未确认的报警(alarm)。

代码语言:javascript复制
ackFilt=True
ackFilt=False

SSE流的分析API

下面的例子展示了用于检索全部或部分SE流的API。

  • 检索基于SSE的UVE更新流,用于控制节点报警(alarm)。
代码语言:javascript复制
GET http://<analytics-ip>:<rest-api-port> /analytics/uve-stream?tablefilt=control-node

这对所有UVE表类型都可用。如果没有提供tablefilt URL查询参数,则会检索所有UVE。

  • 只检索基于SSE的UVE更新流的警报部分,而不是整个内容。
代码语言:javascript复制
GET http://<analytics-ip>:<rest-api-port> /analytics/alarm-stream?tablefilt=control-node

这对所有UVE表类型都可用。如果没有提供tablefilt URL查询参数,则会检索所有UVE。

内置节点警报

可以使用分析API中列出的API来检索以下内置节点警报。

代码语言:javascript复制
control‐node: {
PartialSysinfoControl: "Basic System Information is absent for this node in BgpRouterState.build_info",
ProcessStatus: "NodeMgr reports abnormal status for process(es) in NodeStatus.process_info",
XmppConnectivity: "Not enough XMPP peers are up in BgpRouterState.num_up_bgp_peer",
BgpConnectivity: "Not enough BGP peers are up in BgpRouterState.num_up_bgp_peer",
AddressMismatch: “Mismatch between configured IP Address and operational IP Address",
ProcessConnectivity: "Process(es) are reporting non‐functional components in NodeStatus.process_status"
},
vrouter: {
PartialSysinfoCompute: "Basic System Information is absent for this node in VrouterAgent.build_info",
ProcessStatus: "NodeMgr reports abnormal status for process(es) in NodeStatus.process_info",
ProcessConnectivity: "Process(es) are reporting non‐functional components in NodeStatus.process_status",
VrouterInterface: "VrouterAgent has interfaces in error state in VrouterAgent.error_intf_list”,
VrouterConfigAbsent: “Vrouter is not present in Configuration”,
},
config‐node: {
PartialSysinfoConfig: "Basic System Information is absent for this node in ModuleCpuState.build_info",
ProcessStatus: "NodeMgr reports abnormal status for process(es) in NodeStatus.process_info",
ProcessConnectivity: "Process(es) are reporting non‐functional components in NodeStatus.process_status"
},
analytics‐node: {
ProcessStatus: "NodeMgr reports abnormal status for process(es) in NodeStatus.process_info"
PartialSysinfoAnalytics: "Basic System Information is absent for this node in CollectorState.build_info",
ProcessConnectivity: "Process(es) are reporting non‐functional components in NodeStatus.process_status"
},
database‐node: {
ProcessStatus: "NodeMgr reports abnormal status for process(es) in NodeStatus.process_info",
ProcessConnectivity: "Process(es) are reporting non‐functional components in NodeStatus.process_status"
},

分析API服务器和Client服务器之间的加密

Tungsten Fabric 1910版本支持SSL加密,用于分析(Analytics)API服务器和Client服务器之间的连接。Client服务器是Service Monitor和Contrail Command,后者通过REST API端口连接到分析API服务器。在1910版之前的版本中,分析API服务器和Client服务器之间的连接没有加密,这可能会造成安全威胁。

只有当Tungsten Fabric与Red Hat OpenStack Platform(RHOSP)一起部署时,1910版才支持SSL加密。在RHOSP部署中,添加了一个全局标志,它决定了SSL加密的状态。

如果启用了全局标志:

  • 您不必修改配置文件,因为SSL加密是自动启用的。
  • 如果要禁用SSL加密,必须修改配置文件。

如果全局标志被禁用:

  • 您不必修改配置文件,因为SSL加密是自动禁用的。
  • 即使修改配置文件,也无法启用SSL加密。由于全局标志被禁用,因此在部署期间不会生成证书。

配置文件有contrail-analytics-api.conf、contrail-svc-monitor.conf和command_servers.yml。在配置文件中,修改下表中的参数,以启用或禁用基于SSL的加密。

表1:SSL加密参数

参数

说明

默认

analytics_api_ssl_enable

启用或禁用分析API服务器和Client服务器之间的SSL加密支持。

如果赋值为TRUE:支持SSL加密。 如果赋值为FALSE:不启用对SSL加密的支持,且分析API服务器不接受HTTPS请求。

analytics_api_insecure_enable

启用或禁用对HTTPS请求中所需证书的支持。

如果赋值为TRUE:不需要证书就支持HTTPS连接。 如果赋值为FALSE:没有证书就不支持HTTPS连接。

analytics_api_ssl_keyfile

节点私钥的路径。

/etc/contrail/ssl/private/server-privkey.pem

analytics_api_ssl_certfile

节点公共证书的路径。

/etc/trail/ssl/certs/server.pem

analytics_api_ssl_ca_cert

CA证书的路径

/etc/ipa/ca.crt

配置好这些参数后,分析API服务器就会开始使用SSL证书,从而实现对分析API服务器和Client服务器之间连接的SSL加密支持。

在下篇文章中,我们将继续“游览”TF Analytics的功能,看看如何使用Analytics进行underlay overlay映射。

sdn

0 人点赞