如何配置监控
使用前提
对接监控,需要在csd.yaml文件中配置能力插件依赖功能声明,具体参考服务包扩展目录 capabilityRequirements示例
对接原理
开源的Prometheus是目前业界广泛应用的监控指标采集系统,其服务端可作为时间序列数据库,采集客户端应用不同时间周期上报的监控指标数据并存储,还可用来查询数据和图形化展示数据趋势。其针对不同的应用,提供了多种客户端exporter实现,用来上报监控指标,如:https://github.com/prometheus/jmx_exporter。
华为云容器洞察引擎CIE服务兼容Prometheus提供应用指标采集和监控服务,开发者只需要配置映射规则,OSC平台使用内置的ops-operator插件来匹配工作负载(包括Deployment、StatefulSet或DaemonSet)资源的标签,自动发现需要上报监控指标数据的应用,并通过sidecar方式,为应用监控指标数据注入instance_id字段,用以区分不同实例的指标,并分层分级生成监控仪表盘,图形化展示监控数据。
对接流程
- 获取OSC规范开发的服务包,如果只有原生的helm或OperatorFramework包,可以参考章节服务包转换进行转换。
- 在目录manifests/vendor下新增配置文件monitor_config.yaml
配置具体样例如下:
apiVersion: osc.io/v1 kind: MonitorConfig metadata: name: helm-release-1ughua-uxkrcb spec: monitorConfigItems: - labelSelector: monit-test: monit-test prometheus: exporterPort: 9404 displayOptions: levels: - name: "Pod" localeID: "ops.monitor.kafka.level.pod-slave" groupLabel: pod selectedMetrics: - "kafka_server_ReplicaManager_Value" metrics: - title: "Leader Count" localeID: "ops.monitor.kafka.memory.usage" expr: 'kafka_server_ReplicaManager_Value{name="LeaderCount",kubernetes_pod="$",}' unitType: ""
斜体字的部分则需要根据服务的实际情况进行适配更改。具体配置参数可见下面表格说明。
参数名
含义
类型
是否必填
备注
apiVersion
配置版本
string
是
固定为osc.io/v1
kind
配置种类
string
是
固定为MonitorConfig
metadata.name
配置名
string
否
监控配置默认名称
须知:目前对于monitor_config.yaml文件,一个服务包内有且仅有一个,目前该名字没有实际业务意义。在服务包下发时会根据服务包名称等,由OSC自动生成一个在Kubernetes集群该Namespace下面唯一的名字。
labelSelector
匹配实例的标签
string数组
是
同一operator CRD下也可能存在多个工作负载资源,需要通过label selector与应用实例label相关联,从而才可过滤出准确应用的数据并在界面展示。
exporterPort
普罗接口
integer
是
服务已实现的prometheus指标采集端口,此接口为容器运行时内部监听的端口。
说明:需要使用metrics形式进行相关指标的上报,即通过URL http://{Pod IP}:{exportPort}/metrics的形式对相关监控指标上报。具体指标书写请参考如下链接或步骤4中内容:
https://prometheus.io/docs/concepts/metric_types/
https://prometheus.io/docs/concepts/data_model/
https://prometheus.io/docs/prometheus/latest/configuration/configuration/
levels.name
监控维度名
string
否
显示为不同层级的页签名称,如:Instance、Pod等。
localeID
指标国际化展示
string
否
暂未启用,后续支持国际化展示。
groupLabel
该层级的聚合参数
string
否
如果填写,则自动在expr中注入根据该labelkey+占位符的筛选条件。
说明:对于聚合条件为pod的,需要设置为pod。
selectedMetrics
指标数组
string数组
否
与groupLabel配套,用于确认groupLabel指定的key值可以通过哪些指标获取全部value。
title
监控名
string
否
监控图显示名称,长度不超过64字节
expr
监控语句
string
否
原生普罗监控语句promsql
unitType
监控数据单位
string
否
unitType可以是""(默认无单位,按原数据展示),byte(根据数量展示b,kb,mb,tb),time(us,ms,s,min,hour,day,month),条,个,percentage(%)等等,长度不超过10字节。
- 在manifests/xxx_csd.yaml文件中增加引用监控能力的配置。
apiVersion: osc.io/v1beta1 kind: CustomServiceDefinition metadata: name: helmrelease-csd spec: CRDRef: apiVersion: apiextensions.k8s.io/v1 kind: CustomResourceDefinition capabilityRequirements: - apiVersion: osc.io/v1 kind: MonitorConfig defaultPath: vendor/monitor_config.yaml
- 下面以一个实际监控指标为样例进行展示
apiVersion: osc.io/v1 kind: MonitorConfig metadata: name: hwfka-monitor spec: monitorConfigItems: - labelSelector: # ops operator 根据 label 决定 Deployment、StatefulSet或DaemonSet 是否注入 sidecar osctest.huawei.com/service_provider: hwfka osctest.huawei.com/component: broker crd: hwfkas.osctest.huawei.com prometheus: exporterPort: 9404 displayOptions: levels: - name: "实例" localeID: "ops.monitor.redis.level.instance" metrics: - title: "Topic 总数" # 实例中的 topic 总数 localeID: "ops.monitor.redis.memory.usage" expr: 'sum(kafka_controller_KafkaController_Value{name="GlobalTopicCount"})' unitType: "" - title: "分区总数" # 实例中的分区总数(创建 topic 时设置的分区数,即仅 leader 数) localeID: "ops.monitor.redis.memory.usage" expr: 'sum(kafka_controller_KafkaController_Value{name="GlobalPartitionCount"})' unitType: "" - title: "副本总数" # 实例中的副本总数(含 leader) localeID: "ops.monitor.redis.memory.usage" expr: 'sum(kafka_server_ReplicaManager_Value{name="PartitionCount"})' unitType: "" - name: "Topic" localeID: "ops.monitor.redis.level.pod-slave" # console 通过查询语句 group(kafka_server_BrokerTopicMetrics_Count{topic!=""}) by (topic) 获取所有 Topic 列表 groupLabel: topic selectedMetrics: - 'kafka_server_BrokerTopicMetrics_Count{topic!=""}' metrics: - title: "生产消息数量(条)" # 每个 topic 的生产消息数量 localeID: "ops.monitor.redis.memory.usage" expr: 'sum(kafka_server_BrokerTopicMetrics_Count{name="MessagesInPerSec"}) by (topic)' unitType: "" - title: "生产消息速率(条/秒)" # 每个 topic 的生产速率消息数量(每秒) localeID: "ops.monitor.redis.memory.usage" expr: 'sum(kafka_server_BrokerTopicMetrics_OneMinuteRate{name="MessagesInPerSec"}) by (topic)' unitType: ""
服务需要对接监控能力,必须确保服务对外提供/metrics接口,并遵循prometheus规范将指标数据通过此接口对外提供。