更新时间:2024-06-13 GMT+08:00
分享

如何配置监控

使用前提

对接监控,需要在csd.yaml文件中配置能力插件依赖功能声明,具体参考服务包扩展目录 capabilityRequirements示例

对接原理

开源的Prometheus是目前业界广泛应用的监控指标采集系统,其服务端可作为时间序列数据库,采集客户端应用不同时间周期上报的监控指标数据并存储,还可用来查询数据和图形化展示数据趋势。其针对不同的应用,提供了多种客户端exporter实现,用来上报监控指标,如:https://github.com/prometheus/jmx_exporter

华为云容器洞察引擎CIE服务兼容Prometheus提供应用指标采集和监控服务,开发者只需要配置映射规则,OSC平台使用内置的ops-operator插件来匹配工作负载(包括Deployment、StatefulSet或DaemonSet)资源的标签,自动发现需要上报监控指标数据的应用,并通过sidecar方式,为应用监控指标数据注入instance_id字段,用以区分不同实例的指标,并分层分级生成监控仪表盘,图形化展示监控数据。

对接流程

  1. 获取OSC规范开发的服务包,如果只有原生的helm或OperatorFramework包,可以参考章节服务包转换进行转换。
  2. 在目录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字节。

  3. 在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

  4. 下面以一个实际监控指标为样例进行展示

    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规范将指标数据通过此接口对外提供。

相关文档