云容器引擎 CCE-CCE容器网络扩展指标:下发监控任务

时间:2024-04-23 19:45:31

下发监控任务

MonitorPolicy创建的模板如下:

apiVersion: crd.dolphin.io/v1
kind: MonitorPolicy
metadata:
  name: example-task            #监控任务名
  namespace: kube-system        #必填,namespace必须为kube-system
spec:
  selector:                     #选填,配置dolphin插件监控的后端,形如labelSelector格式,默认将监控本节点所有容器
    matchLabels:
      app: nginx
    matchExpressions:
      - key: app
        operator: In
        values:
          - nginx
  podLabel: [app]               #选填,用户标签
  ip4Tx:                        #选填,ipv4发送报文数和发送字节数这两个指标的开关,默认不开
    enable: true
  ip4Rx:                        #选填,ipv4接收报文数和接收字节数这两个指标的开关,默认不开
    enable: true
  ip4TxInternet:                #选填,ipv4发送公网报文数和发送公网字节数这两个指标的开关,默认不开
    enable: true
  healthCheck:                  #选填,本地节点 Pod 健康检查任务中最近一次健康检查是否健康、健康检查总健康&不健康次数这三个指标开关,默认不开
    enable: true                # true false
    failureThreshold: 3         #选填,健康检查不健康判定失败次数,默认1次健康检查失败即判定不健康
    periodSeconds: 5            #选填,健康检查任务检查间隔时间,单位秒,默认60
    command: ""                 #选填,健康检查任务检查命令,支持:ping、arping、curl,默认 ping
    ipFamilies: [""]            #选填,健康检查IP地址族,支持:ipv4,默认ipv4
    port: 80                    #选填,使用curl时必选,端口号
    path: ""                    #选填,使用curl时必选,http api 路径
  monitor:
    ip:
      ipReceive:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      ipSend:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
    tcp:
      tcpReceive:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      tcpSend:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      tcpRetrans:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      tcpRtt:
        aggregateType: flow       #选填,支持填写"flow",表示流粒度监控,单位:微秒
      tcpNewConnection:
        aggregateType: pod        #选填,支持填写"pod",表示pod粒度监控
      tcpDrop:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      tcpConnectionFailure:
        aggregateType: pod        #选填,支持填写"pod",表示pod粒度监控
    udp:
      udpReceive:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控
      udpSend:
        aggregateType: flow       #选填,支持填写"pod"或"flow",分别表示pod粒度监控或流粒度监控

用户标签PodLabel:可输入多个Pod的label标签,以逗号分隔,如[app, version]。

标签需符合以下规则,对应正则表达式为(^[a-zA-Z_]$)|(^([a-zA-Z][a-zA-Z0-9_]|_[a-zA-Z0-9])([a-zA-Z0-9_]){0,254}$):

  • 支持输入最多5个标签(1.3.4版本后最多支持10个标签),单个标签长度最长256个字符。
  • 不能以数字和双下划线__开头。
  • 单个标签格式需符合A-Za-z_0-9。
用户可以按照上述格式对监控任务进行创建、修改、及删除,当前仅支持最多10个监控任务的创建,且多个监控任务匹配到同一个监控后端时,每一个监控后端将会产生监控任务数量的监控指标。
  • 修改或删除监控任务,都将导致丢失原有监控任务所采集的监控数据,请谨慎操作。
  • 用户卸载插件后,用户之前配置的监控任务MonitorPolicy将随着插件卸载一并销毁。

场景化示例如下:

  1. 以下示例将监控节点上满足app=nginx的labelselector的所有Pod,生成三个健康检查指标,默认使用ping方式检测本地Pod,若监控的容器携带test及app这两个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task  
      namespace: kube-system        
    spec:
      selector:
        matchLabels:
          app: nginx
      podLabel: [test, app] 
      healthCheck: 
        enable: true
        failureThreshold: 3
        periodSeconds: 5
  2. 以下示例将监控节点上满足app=nginx的labelselector的所有Pod,生成三个健康检查指标,自定义curl方式(此处curl只考虑网络连通性,不论程序返回的http code是什么,只要网络能连通就认为Pod是健康的)。若监控的容器携带test及app这两个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: nginx
      podLabel: [test, app]
      healthCheck: 
        enable: true
        failureThreshold: 3
        periodSeconds: 5 
        command: "curl"
        port: 80
        path: "healthz"
  3. 以下示例将监控节点上满足app=nginx的labelselector的所有Pod,监控Pod粒度的IP收发报文数、IP收发字节数、TCP收发报文数、TCP收发字节数、TCP重传报文数、TCP新建连接数、TCP丢包数、TCP建链失败数、UDP收发报文数、UDP收发字节数,若监控的容器携带test及app这两个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: nginx
      podLabel: [test, app]
      monitor:
        ip:
          ipReceive:
            aggregateType: pod
          ipSend:
            aggregateType: pod
        tcp:
          tcpReceive:
            aggregateType: pod
          tcpSend:
            aggregateType: pod
          tcpRetrans:
            aggregateType: pod
          tcpNewConnection:
            aggregateType: pod
          tcpDrop:
            aggregateType: pod
          tcpConnectionFailure:
            aggregateType: pod
        udp:
          udpReceive:
            aggregateType: pod
          udpSend:
            aggregateType: pod
  4. 以下示例将监控节点上满足app=nginx的labelselector的所有Pod,监控流粒度的IP收发报文数、IP收发字节数、TCP收发报文数、TCP收发字节数、TCP重传报文数、tcp round trip time(单位:微秒)、TCP丢包数、UDP收发报文数、UDP收发字节数,若监控的容器携带test及app这两个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。使用流粒度监控能力,用户可以更细腻的感知容器的流量信息。基于流的监控数据量较大,会占用更多的cpu和内存,请按需使用。

    每开启一个基于流的IP监控任务(一个MonitorPolicy中开启一个和多个IP监控项)会占用内核2.6M内存;每开启一个基于流的TCP监控任务(一个MonitorPolicy中开启一个和多个TCP监控项)会占用内核14M内存。

    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: nginx
      podLabel: [test, app]
      monitor:
        ip:
          ipReceive:
            aggregateType: flow
          ipSend:
            aggregateType: flow
        tcp:
          tcpReceive:
            aggregateType: flow
          tcpSend:
            aggregateType: flow
          tcpRetrans:
            aggregateType: flow
          tcpRtt:
            aggregateType: flow
          tcpDrop:
            aggregateType: flow
        udp:
          udpReceive:
            aggregateType: flow
          udpSend:
            aggregateType: flow

    基于流的监控数据量比较大时,当数据量超过一定限制时,会导致超限的流统计丢失,当前限制如下:

    • 10s内内核态最多统计5w条(每监控任务)TCP流信息。
    • 10s内内核态最多统计1w条(每监控任务)IP流信息。
    • 两次普罗拉取间隔最多缓存6w条(所有监控任务)流统计信息。
    • 普罗长时间不拉取时,只缓存1小时内的监控数据。
  5. 以下示例将监控节点上所有Pod,生成IPv4发送报文数和发送字节数这两个指标,若监控的容器携带app这个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task  
      namespace: kube-system        
    spec:
      podLabel: [app]
      ip4Tx:
        enable: true
  6. 以下示例将监控节点上满足app=nginx的labelselector的所有Pod,生成IPv4收发报文数、IPv4收发字节数、IPv4发送公网报文数和字节数等指标,若监控的容器携带test及app这两个标签,将在监控指标上携带对应label的key-value信息,否则对应label的value为“not found”。
    apiVersion: crd.dolphin.io/v1
    kind: MonitorPolicy
    metadata:
      name: example-task
      namespace: kube-system
    spec:
      selector:
        matchLabels:
          app: nginx
      podLabel: [test, app]
      ip4Tx:
        enable: true
      ip4Rx:
        enable: true
      ip4TxInternet:      
        enable: true
support.huaweicloud.com/usermanual-cce/cce_10_0371.html