本文主要指导用户如何在BMC可观测功能页面进行上报功能配置、以及如何使用Zipkin、Prometheus和Elasticsearch可视化后端查看可观测数据
1.BMC可观测功能配置
可观测功能页面位于维护诊断->可观测,页面共分为五个部分,分别为:可观测配置、跟踪数据配置、指标数据配置、日志数据配置以及接收端信息配置
1.1 可观测配置
主要用于设置可观测使能、TLS模式、证书上传以及主机标识
1.1.1 可观测使能
可观测功能的总开关按钮,如果要使用可观测功能必须将该使能按钮打开
1.1.2 TLS模式
选择BMC与接收端之间TLS认证的方式,分为单向认证与双向认证两种
- 单向认证:BMC使用根证书认证接收端的SSL证书的认证方式;需要在BMC上传根证书(也叫CA证书,点击接收端根证书旁边的跳转按钮进行上传),接收端配置对应根证书签发的SSL client证书和密钥
- 双向认证:BMC与接收端互相用根证书认证对端的SSL证书的认证方式;需要在BMC上传根证书以及SSL server证书(点击本地证书旁边的跳转按钮进行上传),接收端配置与BMC的SSL证书对应的根证书和BMC的根证书对应的SSL client证书和密钥
1.1.3主机标识
主机标识的作用是用于区分上报的可观测数据来自于哪一台BMC机器,有三种类型的主机标识可以选择:1、单板序列号;2、产品资产标签;3、主机名 主机标识数据会跟随可观测数据一同进行上报,可通过上报数据中ServerIdentity字段来确认可观测数据来源
- 单板序列号跟随BMC出厂设置,无法进行修改
- 产品资产标签可以在系统管理->系统信息->资产摘要->产品信息->资产标签中进行修改
- 主机名可以在openUBMC管理->网络配置->主机名中进行修改
1.2 跟踪数据配置
主要用于跟踪(Traces)数据的精细化配置,可设置采样策略、分级策略、采样率以及数据上报周期
1.2.1 采样策略
分为固定采样与自适应采样:
- 1、固定采样:使用指定的跟踪采样率进行数据采集;
- 2、自适应采样:根据cpu自适应调整跟踪采样率,选择自适应采样之后采样率无法进行设置
1.2.2 采样率
跟踪数据采样的概率,采样率为0时表示关闭跟踪数据采集与上报,当前允许设置的最大采样率为0.1,表示跟踪数据有10%的概率会进行采样,因此不是每次调用北向接口都会上报跟踪数据
- 进行调试时可通过mdbctl setprop modify Dashboard_0 bmc.kepler.Dashboard.Observability.Traces SamplingRate 1 将采样率修改为1,此时调用北向接口将必定能产生跟踪数据
1.2.3 分级策略
跟踪数据的跨度创建点分为不同的类型,主要分为Server类型、Client类型、Producer类型、Consumer类型、Internal类型,分级策略将跨度类型分为不同的级别,高级别采样策略覆盖低级别采样策略。 共分为系统级采样、组件级采样和功能级采样:
- 1、系统级采样:BMC系统间客户端(Client)到服务端(Server)通信的调用过程,应用于BMC双主机场景,单主机可不选择该项;
- 2、组件级采样:组件间客户端(Client、Producer)到服务端(Server、Consumer)通信的调用过程,即跨组件调用rpc流程进行采样;
- 3、功能级采样:组件内部业务功能(Internal)的调用过程,通过分级策略控制Span(跨度)是否创建,简单来说就是针对单个组件内部函数调用流程进行采样。
默认设置为组件级采样,如果需要更详细的采样点数据需要设置为功能级采样,此时跟踪数据将包含系统级和组件级采样的采样点数据
1.2.4 上报周期
BMC上报跟踪数据的间隔,按照合适间隔设置即可
1.3 指标数据配置
主要用于指标(Metrics)数据的精细化配置,可单独设置度量项指标的上报开关以及数据上报周期
1.3.1 度量项指标
表示当前BMC版本支持上报的度量指标数据,勾选指标名称后才会采集和上报对应的指标数据,如果所有指标均不勾选,则不会上报指标数据;按需选择指标进行上报,如果所有指标均开启上报,会造成BMC的cpu和内存占用上涨
1.3.2 上报周期
BMC上报指标数据的间隔,按照合适间隔设置即可
1.4 日志数据配置
主要用于日志(Logs)数据的精细化配置,可设置日志采集使能与数据上报周期
1.4.1 日志采集使能
日志数据采集上报的使能,关闭后不会上报日志数据
1.4.2 上报周期
BMC上报日志数据的间隔,按照合适间隔设置即可
1.5 接收端信息配置
用于配置可观测数据接收端信息,包括接收端地址、接收端端口以及接收端使能,还可以测试接收端连通性
1.5.1 接收端地址
用于接收可观测数据的接收端,一般填写本机ip或搭建了可视化后端的服务器ip
1.5.2 接收端端口
用于接收可观测数据的接收端端口,需要填写与opentelemetry collector contrib配置文件中endpoint字段填写的端口号一致
1.5.3 接收端使能
以后可能会扩展多个接收端,因此每个接收端有单独的使能按钮,使用时请打开
1.5.4 测试连通性
点击测试按钮后BMC会构造一个trace数据和一个log数据进行上报;点击测试后提示测试成功不代表着BMC和可视化后端连通性正常,需要在可视化后端中确认接收到数据才行
2.可视化后端搭建与配置
- 单独搭建各可视化后端可参考社区指南:https://discuss.openubmc.cn/t/topic/2118
- 或从社区manifest中获取集成了所有可视化后端的dockerfile,构建镜像后可一键式部署所有可视化后端(推荐使用docker进行部署) 下载地址为:https://gitcode.com/openUBMC/manifest.git,dockerfile存放在一级目录下,docker构建与运行指南参考manifest中README进行
3.可视化后端使用说明
Grafana后端可以对接Zipkin、Prometheus和Elasticsearch这三个可视化后端,因此可直接登录Grafana查看可观测数据
3.1 Zipkin后端
Zipkin后端用于接收跟踪数据,通过Grafana接入Zipkin进行跟踪数据查询
跟踪数据应用场景:
用于分析北向接口(redfish、web、cli、snmp)接口请求调用的过程,以及接口耗时,用于识别和定位接口性能问题和定界功能异常组件
使用举例
Grafana查询Zipkin查询页面如下图所示,右上角Run query旁边可以选择查询时间,确认bmc系统时间在查询的时间段范围内,否则无法查询到跟踪数据
示例1
调用/UI/Rest/Maintenance/Alarm接口查询告警信息,如下图
调用接口之后点击Traces按钮进行跟踪数据筛选,可以通过接口名称确认需要查找的跟踪数据,如图所示为查询告警信息的web接口get请求
选择之后可以确认如下信息:
- 调用的接口名称:此为web接口,接口名为/UI/Rest/Maintenance/Alarm
- 调用该接口耗时:共耗时196.71ms
- 该接口涉及的资源树处理:调用接口进行的会话认证(ValidateSession);获取请求返回数据使用的资源树方法(GetAlarmList),共执行了两次
- 第一个Span可以确认这个跟踪数据的Span类型(kind字段)、主机标识(ServerIdentity字段)、调用接口的类型(method字段)、接口名称(url字段)
- 第二个Span为web会话创建,可以确认调用的资源树方法(dbus.method字段:方法名为ValidateSession)、涉及的资源树路径(dbus.path字段:路径名为/bmc/kepler/SessionService/Sessions)、资源树接口(dbus.interface字段:接口名为bmc.kepler.SessionService.Sessions),共耗时10.67ms
- 第三个和第四个Span为获取告警列表信息,可以确认调用的资源树方法为GetAlarmList,资源树路径为/bmc/kepler/Systems/1/Events,资源树接口为bmc.kepler.Systems.Events,web_backend.client.request.getalarmlist表示这个Span为web后端进行调用,event.server.request.getalarmlist表示这个请求是由event组件进行响应调用,共耗时17.5ms
- 第五个和第六个Span同样为获取告警列表信息,这表示调用一次/UI/Rest/Maintenance/Alarm接口,会调用两次getalarmlist进行获取
示例2
调用/redfish/v1/oem/openUBMC/observabilityservice接口查询可观测信息,调用接口后点击Traces按钮之后进行跟踪数据筛选,可以通过接口名称确认需要查找的跟踪数据,如图所示为查询可观测功能的redfish的get请求
选择之后可以确认如下信息:
- 调用的接口名称:此为redfish接口,接口名为/redfish/v1/oem/openUBMC/observabilityservice
- 调用该接口耗时:共耗时170.34ms
- 该接口涉及的资源树处理:调用接口进行的认证(authenticate);获取请求返回数据使用的资源树方法(getconfigurations),共执行了三次
如下图所示,每一个Span点击之后会展示更加详细的信息
- 第一个Span可以确认这个跟踪数据的Span类型(kind字段)、主机标识(ServerIdentity字段)、调用接口的类型(method字段)、接口名称(url字段)
- 第二个Span为用户认证,可以确认调用的资源树方法(dbus.method字段:方法名为Authenticate)、涉及的资源树路径(dbus.path字段:路径名为/bmc/kepler/AccountService/Authentication)、资源树接口(dbus.interface字段:接口名为bmc.kepler.AccountService.Authentication),共耗时81.06ms
- 第三个Span为获取Traces配置,可以确认调用的资源树方法为GetConfigurations,资源树路径为/bmc/kepler/ObservabilityService/Traces,资源树接口为bmc.kepler.ObservabilityService.Traces,共耗时7.12ms
- 第四个和第五个Span同理,分别为获取Metrics和Logs配置,可以从资源树路径和接口确认
3.2 Prometheus后端
Prometheus后端用于接收指标数据,通过Grafana接入Prometheus进行指标数据查询
各指标应用场景:
- 器件访问类:硬件器件IO指标、硬件器件访问指标、硬件器件扫描指标,支持分析组件通过读写接口、访问器、扫描器等方式发起的器件访问信息,应用于定位链路和器件配置错误问题,分析器件请求频率的合理性及评估系统性能影响
- 组件运行类:Flash写入量指标、RPC客户端请求指标、持久化Flash IO指标、微组件Flash IO指标、信号广播发送指标,支持定位组件运行过程的功能和性能问题
- 系统状态类:启动时间指标、总CPU使用指标、总内存使用指标、进程CPU使用指标、进程内存使用指标支持分析系统CPU占用率和内存使用情况以及进程CPU占用率和内存占用情况,用于分析系统整体运行状态和资源占用情况,定位系统和组件性能问题
使用举例
Grafana查询Prometheus页面如下图所示,右上角Run query可以选择查询时间,确认bmc系统时间在查询的时间段范围内,否则无法查询到指标数据
示例1
点击Metric选择需要查看的指标数据,Label filters可以进一步选择进行更细化的过滤
如下图,选择查看信号广播发送指标,Graph可以看到指标数据在一个时间段内周期性上报,Raw可以查看每一个指标数据具体的详细信息
再如查看RPC客户端请求指标,可以有两种方法查看指标详细信息
- 在Graph中可以通过点击具体的某个指标进行筛选过滤,鼠标停留在Graph中数据的折线上可以显示出停留时间点的该数据的详细信息,如这个指标来自资源树路径/bmc/kepler/UpdateService/FirmwareInventory,资源树接口bmc.kepler.UpdateService.FirmwareInventory,资源树方法是Add,来自组件Firmware_mgmt
- 在Raw中点击Expand results展开Raw中数据的详细信息,如图所示这个指标来自资源树路径/bmc/kepler/KeyService/Kmc/Keys,资源树接口bmc.kepler.KeyService.Keys,资源树方法是RegisterKey,来自组件key_mgmt
通过RPC客户端请求指标和信号广播发送指标可以分析组件异常的请求风暴和广播风暴,用于解决组件性能或业务功能异常问题
示例2
如下图,假设需要定位器件访问类问题,通过查询硬件器件IO指标,通过Label filters过滤标签(hw_operation_result)为failed的指标,就可以确认哪些硬件器件访问存在失败问题,可以看到有Eeprom_PsuChip1_0101等器件存在访问失败问题
3.3 ElasticSearch后端
ElasticSearch后端用于接收日志数据,通过Grafana接入ElasticSearch进行日志数据查询
日志数据应用场景:
对BMC上报的日志信息进行关键字统计,以及与跟踪数据进行联动,日志信息中携带跟踪数据的trace id可以用于确认一个完整的跟踪数据中产生了哪些日志信息,实现辅助定位跟踪流程的效果
使用举例
Grafana查询ElasticSearch查询页面如下图所示,右上角Run query可以选择查询时间,确认bmc系统时间在查询的时间段范围内,否则无法查询到日志数据
点击Query type中的Logs按钮进行查询,可以看到Logs volume中记录了每个时间段接收到日志的数量,Logs栏可以确认每条日志数据的详细信息
- body.text字段显示的为日志的内容
- resource.attributes.ServerIdentity字段为主机标识
- resource.attributes.service.name字段为日志来自哪个记录组件,图中示例为ras组件
- scope.name字段为日志来自哪个进程,图中示例为compute
也可以点击Query type中的Raw Data按钮进行查询,可以将每个日志都初步呈现出来,每个字段名与在Logs按钮查看的含义一致