网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
计算
弹性云服务器 ECS
Flexus云服务
裸金属服务器 BMS
云手机服务器 CPH
专属主机 DeH
弹性伸缩 AS
镜像服务 IMS
函数工作流 FunctionGraph
云耀云服务器(旧版)
VR云渲游平台 CVR
Huawei Cloud EulerOS
云化数据中心 CloudDC
网络
虚拟私有云 VPC
弹性公网IP EIP
弹性负载均衡 ELB
NAT网关 NAT
云专线 DC
虚拟专用网络 VPN
云连接 CC
VPC终端节点 VPCEP
企业路由器 ER
企业交换机 ESW
全球加速 GA
企业连接 EC
云原生应用网络 ANC
CDN与智能边缘
内容分发网络 CDN
智能边缘云 IEC
智能边缘平台 IEF
CloudPond云服务
安全与合规
安全技术与应用
Web应用防火墙 WAF
企业主机安全 HSS
云防火墙 CFW
安全云脑 SecMaster
DDoS防护 AAD
数据加密服务 DEW
数据库安全服务 DBSS
云堡垒机 CBH
数据安全中心 DSC
云证书管理服务 CCM
威胁检测服务 MTD
态势感知 SA
认证测试中心 CTC
边缘安全 EdgeSec
大数据
MapReduce服务 MRS
数据湖探索 DLI
表格存储服务 CloudTable
可信智能计算服务 TICS
推荐系统 RES
云搜索服务 CSS
数据可视化 DLV
数据接入服务 DIS
数据仓库服务 GaussDB(DWS)
数据治理中心 DataArts Studio
湖仓构建 LakeFormation
智能数据洞察 DataArts Insight
应用中间件
微服务引擎 CSE
分布式消息服务Kafka版
分布式消息服务RabbitMQ版
分布式消息服务RocketMQ版
API网关 APIG
分布式缓存服务 DCS
多活高可用服务 MAS
事件网格 EG
开天aPaaS
应用平台 AppStage
开天企业工作台 MSSE
开天集成工作台 MSSI
API中心 API Hub
云消息服务 KooMessage
交换数据空间 EDS
云地图服务 KooMap
云手机服务 KooPhone
组织成员账号 OrgID
云空间服务 KooDrive
管理与监管
统一身份认证服务 IAM
消息通知服务 SMN
云监控服务 CES
应用运维管理 AOM
应用性能管理 APM
云日志服务 LTS
云审计服务 CTS
标签管理服务 TMS
配置审计 Config
应用身份管理服务 OneAccess
资源访问管理 RAM
组织 Organizations
资源编排服务 RFS
优化顾问 OA
IAM 身份中心
云运维中心 COC
资源治理中心 RGC
区块链
区块链服务 BCS
数字资产链 DAC
华为云区块链引擎服务 HBS
解决方案
高性能计算 HPC
SAP
混合云灾备
开天工业工作台 MIW
Haydn解决方案工厂
数字化诊断治理专家服务
价格
成本优化最佳实践
专属云商业逻辑
云生态
云商店
合作伙伴中心
华为云开发者学堂
华为云慧通差旅
其他
管理控制台
消息中心
产品价格详情
系统权限
客户关联华为云合作伙伴须知
公共问题
宽限期保留期
奖励推广计划
活动
云服务信任体系能力说明
开发与运维
软件开发生产线 CodeArts
需求管理 CodeArts Req
流水线 CodeArts Pipeline
代码检查 CodeArts Check
编译构建 CodeArts Build
部署 CodeArts Deploy
测试计划 CodeArts TestPlan
制品仓库 CodeArts Artifact
移动应用测试 MobileAPPTest
CodeArts IDE Online
开源镜像站 Mirrors
性能测试 CodeArts PerfTest
应用管理与运维平台 ServiceStage
云应用引擎 CAE
开源治理服务 CodeArts Governance
华为云Astro轻应用
CodeArts IDE
Astro工作流 AstroFlow
代码托管 CodeArts Repo
漏洞管理服务 CodeArts Inspector
联接 CodeArtsLink
软件建模 CodeArts Modeling
Astro企业应用 AstroPro
CodeArts盘古助手
华为云Astro大屏应用
存储
对象存储服务 OBS
云硬盘 EVS
云备份 CBR
高性能弹性文件服务 SFS Turbo
弹性文件服务 SFS
存储容灾服务 SDRS
云硬盘备份 VBS
云服务器备份 CSBS
数据快递服务 DES
云存储网关 CSG
专属分布式存储服务 DSS
数据工坊 DWR
地图数据 MapDS
键值存储服务 KVS
容器
云容器引擎 CCE
云容器实例 CCI
容器镜像服务 SWR
云原生服务中心 OSC
应用服务网格 ASM
华为云UCS
数据库
云数据库 RDS
数据复制服务 DRS
文档数据库服务 DDS
分布式数据库中间件 DDM
云数据库 GaussDB
云数据库 GeminiDB
数据管理服务 DAS
数据库和应用迁移 UGO
云数据库 TaurusDB
人工智能
AI开发平台ModelArts
华为HiLens
图引擎服务 GES
图像识别 Image
文字识别 OCR
自然语言处理 NLP
内容审核 Moderation
图像搜索 ImageSearch
医疗智能体 EIHealth
企业级AI应用开发专业套件 ModelArts Pro
人脸识别服务 FRS
对话机器人服务 CBS
语音交互服务 SIS
人证核身服务 IVS
视频智能分析服务 VIAS
城市智能体
自动驾驶云服务 Octopus
盘古大模型 PanguLargeModels
IoT物联网
设备接入 IoTDA
全球SIM联接 GSL
IoT数据分析 IoTA
路网数字化服务 DRIS
IoT边缘 IoTEdge
设备发放 IoTDP
企业应用
域名注册服务 Domains
云解析服务 DNS
企业门户 EWP
ICP备案
商标注册
华为云WeLink
华为云会议 Meeting
隐私保护通话 PrivateNumber
语音通话 VoiceCall
消息&短信 MSGSMS
云管理网络
SD-WAN 云服务
边缘数据中心管理 EDCM
云桌面 Workspace
应用与数据集成平台 ROMA Connect
ROMA资产中心 ROMA Exchange
API全生命周期管理 ROMA API
政企自服务管理 ESM
视频
实时音视频 SparkRTC
视频直播 Live
视频点播 VOD
媒体处理 MPC
视频接入服务 VIS
数字内容生产线 MetaStudio
迁移
主机迁移服务 SMS
对象存储迁移服务 OMS
云数据迁移 CDM
迁移中心 MGC
专属云
专属计算集群 DCC
开发者工具
SDK开发指南
API签名指南
DevStar
华为云命令行工具服务 KooCLI
Huawei Cloud Toolkit
CodeArts API
云化转型
云架构中心
云采用框架
用户服务
账号中心
费用中心
成本中心
资源中心
企业管理
工单管理
客户运营能力
国际站常见问题
支持计划
专业服务
合作伙伴支持计划
我的凭证
华为云公共事业服务云平台
工业软件
工业数字模型驱动引擎
硬件开发工具链平台云服务
工业数据转换引擎云服务
文档首页/ 云容器引擎 CCE/ 用户指南/ 云原生观测/ 云原生观测最佳实践/ 使用云原生监控插件监控自定义指标

使用云原生监控插件监控自定义指标

更新时间:2025-02-18 GMT+08:00
分享

CCE提供了云原生监控插件,支持使用Prometheus监控自定义指标。

本文将通过一个Nginx应用的示例演示如何使用Prometheus监控自定义指标,步骤如下:

  1. 安装并访问云原生监控插件

    CCE提供了集成Prometheus功能的插件,支持一键安装。

  2. 准备应用

    您需要准备一个应用镜像,该应用需要提供监控指标接口供Prometheus采集,且监控数据需要满足Prometheus的规范

  3. 监控自定义指标

    在集群中使用该应用镜像部署工作负载,将自动上报自定义监控指标至Prometheus。

    自定义指标监控支持四种配置方式。

自定义指标计费说明

当云原生监控插件对接AOM后,指标会上报到您选择的AOM实例,其中容器基础指标免费,自定义指标将由AOM服务进行收费,详情请参见价格详情

Prometheus监控数据采集说明

Prometheus通过周期性的调用应用程序的监控指标接口(默认为“/metrics”)获取监控数据,应用程序需要提供监控指标接口供Prometheus调用,且监控数据需要满足Prometheus的规范,如下所示。

# TYPE nginx_connections_active gauge
nginx_connections_active 2
# TYPE nginx_connections_reading gauge
nginx_connections_reading 0

Prometheus提供了各种语言的客户端,客户端具体请参见Prometheus CLIENT LIBRARIES,开发Exporter具体方法请参见WRITING EXPORTERS。Prometheus社区提供丰富的第三方exporter可以直接使用,具体请参见EXPORTERS AND INTEGRATIONS

约束与限制

  • 使用Prometheus监控自定义指标时,应用程序需要提供监控指标接口,详情请参见Prometheus监控数据采集说明
  • 使用Pod/Service Annotations的方式暂不支持采集kube-system与monitoring命名空间下的指标,如需采集这两个命名空间下的指标,请通过Pod Monitor与Service Monitor的方式配置。
  • 本文使用Nginx应用示例会拉取nginx/nginx-prometheus-exporter:0.9.0镜像,需要为应用部署的节点添加EIP或先将此镜像上传到SWR,以免部署应用失败。

安装并访问云原生监控插件

  1. 登录CCE控制台,单击集群名称进入集群。
  2. 在左侧导航栏中选择“插件中心”,在右侧找到云原生监控插件,单击“安装”。该插件除提供Prometheus监控能力外,还支持将监控数据与监控中心对接。

    安装插件时请关注以下配置,其余配置可根据需求填写,详情请参见云原生监控插件
    • 3.8.0及以上版本,需要确认插件配置中开启自定义指标采集。

    • 3.8.0以下版本,无需配置自定义指标采集开关。

  3. 插件安装完成后会在集群中部署一系列工作负载和Service。其中Prometheus的Server端会在monitoring命名空间下以有状态工作负载进行部署。

    您可以创建一个公网LoadBalancer类型Service,这样就可以从外部访问Prometheus。

    1. 登录CCE控制台,选择一个已安装Prometheus的集群,在左侧导航栏中选择“服务”。
    2. 单击右上角“YAML创建”,创建一个公网LoadBalancer类型的Service。
      apiVersion: v1
      kind: Service
      metadata:
        name: prom-lb     #服务名称,可自定义
        namespace: monitoring
        labels:
          app: prometheus
          component: server
        annotations:
          kubernetes.io/elb.id: 038ff***     #请替换为集群所在VPC下的ELB实例ID,且ELB实例为公网访问类型
      spec:
        ports:
          - name: cce-service-0
            protocol: TCP
            port: 88             #服务端口号,可自定义
            targetPort: 9090     #Prometheus的默认端口号,无需更改
        selector:                #标签选择器可根据Prometheus Server实例的标签进行调整
          app.kubernetes.io/name: prometheus
          prometheus: server
        type: LoadBalancer
    3. 创建完成后在浏览器访问“负载均衡公网IP地址:服务端口”,访问Prometheus。
      图1 访问Prometheus

准备应用

自行开发的应用程序需要提供监控指标接口供采集,且监控数据需要满足Prometheus的规范,详情请参见Prometheus监控数据采集说明

本文以Nginx为例采集监控数据,Nginx本身有个名叫ngx_http_stub_status_module的模块,这个模块提供了基本的监控功能,通过在nginx.conf的配置可以提供一个对外访问Nginx监控数据的接口。

  1. 登录一台可连接公网的Linux虚拟机,且要求可执行Docker命令。
  2. 创建一个nginx.conf文件,如下所示,在http下添加server配置即可让nginx提供对外访问的监控数据的接口。

    user  nginx;
    worker_processes  auto;
    
    error_log  /var/log/nginx/error.log warn;
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
    }
    
    http {
        include       /etc/nginx/mime.types;
        default_type  application/octet-stream;
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log  main;
        sendfile        on;
        #tcp_nopush     on;
        keepalive_timeout  65;
        #gzip  on;
        include /etc/nginx/conf.d/*.conf;
    
        server {
          listen 8080;
          server_name  localhost;
          location /stub_status {
             stub_status on;
             access_log off;
          }
        }
    }

  3. 使用该配置制作一个镜像,创建Dockerfile文件。

    vi Dockerfile
    Dockerfile文件内容如下所示:
    FROM nginx:1.21.5-alpine
    ADD nginx.conf /etc/nginx/nginx.conf
    EXPOSE 80
    CMD ["nginx", "-g", "daemon off;"]

  4. 使用上面Dockerfile构建镜像并上传到SWR镜像仓库,镜像名称为nginx:exporter。上传镜像的具体方法请参见客户端上传镜像

    1. 在左侧导航栏选择“我的镜像”,单击右侧“客户端上传”,在弹出的页面中单击“生成临时登录指令”,单击复制登录指令。
    2. 在集群节点上执行上一步复制的登录指令,登录成功会显示“Login Succeeded”。
    3. 执行如下命令构建镜像,镜像名称为nginx,版本为exporter。
      docker build -t nginx:exporter .
    4. 为镜像打标签并上传至镜像仓库,其中镜像仓库地址和组织名称请根据实际情况修改。
      docker tag nginx:exporter swr.cn-east-3.myhuaweicloud.com/dev-container/nginx:exporter
      docker push swr.cn-east-3.myhuaweicloud.com/dev-container/nginx:exporter

  5. 查看应用指标。

    1. 使用nginx:exporter创建工作负载。
    2. 登录到容器中,并通过http://<ip_address>:8080/stub_status获取到nginx的监控数据,其中<ip_address>为容器的IP地址,监控数据如下所示。
      # curl http://127.0.0.1:8080/stub_status
      Active connections: 3 
      server accepts handled requests
       146269 146269 212 
      Reading: 0 Writing: 1 Waiting: 2

方法一:配置Pod Annotations监控自定义指标

当Pod的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Pod暴露的指标。

如上所述的nginx:exporter提供的监控数据,其数据格式并不满足Prometheus的要求,需要将其转换成Prometheus需要的格式,可以使用nginx-prometheus-exporter来转换Nginx的指标,将nginx:exporter和nginx-prometheus-exporter部署到同一个Pod,并在部署时添加如下Annotations就可以自动被Prometheus采集监控指标。

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-exporter
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-exporter
  template:
    metadata:
      labels:
        app: nginx-exporter
      annotations:
        prometheus.io/scrape: "true"
        prometheus.io/port: "9113"
        prometheus.io/path: "/metrics"
        prometheus.io/scheme: "http"
    spec:
      containers:
        - name: container-0
          image: 'nginx:exporter'      # 替换为您上传到SWR的镜像地址
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi
        - name: container-1
          image: 'nginx/nginx-prometheus-exporter:0.9.0'
          command:
            - nginx-prometheus-exporter
          args:
            - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status'
      imagePullSecrets:
        - name: default-secret

其中

  • prometheus.io/scrape:表示是否需要prometheus采集Pod的监控数据,取值为true。
  • prometheus.io/port:表示采集监控数据接口的端口,由需要采集的应用决定。本示例中采集端口为9113。
  • prometheus.io/path:表示采集监控数据接口的URL,如不配置则默认为“/metrics”
  • prometheus.io/scheme:表示采集的协议,值可以填写http或https。

应用部署成功后,访问Prometheus,根据job名称查询自定义监控指标。

可以查询到nginx相关的自定义监控指标,通过job名称可以判断出是根据Pod配置上报的。

nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", container="container-0", instance="10.0.0.46:9113", job="monitoring/kubernetes-pods", kubernetes_namespace="default", kubernetes_pod="nginx-exporter-77bf4d4948-zsb59", namespace="default", pod="nginx-exporter-77bf4d4948-zsb59", prometheus="monitoring/server"}

方法二:配置Service Annotations监控自定义指标

当Service的Annotations配置符合Prometheus采集规范的规则后,Prometheus会自动采集这些Service暴露的指标。

Service Annotations使用方法和Pod Annotations基本相同,主要是采集的指标的适用场景不同,Pod Annotations更关注Pod的资源使用情况,Service Annotations侧重于对该业务的请求等指标。

部署示例应用如下:

kind: Deployment
apiVersion: apps/v1
metadata:
  name: nginx-test
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test
  template:
    metadata:
      labels:
        app: nginx-test
    spec:
      containers:
        - name: container-0
          image: 'nginx:exporter'      # 替换为您上传到SWR的镜像地址
          resources:
            limits:
              cpu: 250m
              memory: 512Mi
            requests:
              cpu: 250m
              memory: 512Mi
        - name: container-1
          image: 'nginx/nginx-prometheus-exporter:0.9.0'
          command:
            - nginx-prometheus-exporter
          args:
            - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status'
      imagePullSecrets:
        - name: default-secret

部署示例Service如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-test
  labels:
    app: nginx-test
  namespace: default
  annotations: 
    prometheus.io/scrape: "true"  # 配置为 true 表示开启服务发现
    prometheus.io/port: "9113"  # 配置为采集指标暴露的端口号
    prometheus.io/path: "/metrics" # 填写指标暴露的 URI 路径,一般是 /metrics
spec:
  selector:
    app: nginx-test
  externalTrafficPolicy: Cluster
  ports:
    - name: cce-service-0
      targetPort: 80
      nodePort: 0
      port: 8080
      protocol: TCP
    - name: cce-service-1
      protocol: TCP
      port: 9113
      targetPort: 9113
  type: NodePort

应用部署成功后,访问Prometheus,查询自定义监控指标。通过Service名称可以判断出该指标是根据Service配置上报的。

nginx_connections_accepted{app="nginx-test", cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", instance="10.0.0.38:9113", job="nginx-test", kubernetes_namespace="default", kubernetes_service="nginx-test", namespace="default", pod="nginx-test-78cfb65889-gtv7z", prometheus="monitoring/server", service="nginx-test"}

方法三:配置Pod Monitor监控自定义指标

云原生监控插件提供了基于PodMonitor与ServiceMonitor配置指标采集任务的能力。Prometheus Operator将watch的PodMonitor的变化,通过Prometheus的reload机制,将Prometheus的采集任务热更新至Prometheus的实例中。

Prometheus Operator定义的CRD资源github地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/charts/crds/crds

部署示例应用如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test2
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test2
  template:
    metadata:
      labels:
        app: nginx-test2
    spec:
      containers:
      - image: nginx:exporter     # 替换为您上传到SWR的镜像地址
        name: container-0
        ports:
        - containerPort: 9113      # 指标暴露的端口号
          name: nginx-test2        # 该名称是后续配置PodMonitor时相匹配的名称
          protocol: TCP
        resources:
          limits:
            cpu: 250m
            memory: 300Mi
          requests:
            cpu: 100m
            memory: 100Mi
      - name: container-1
        image: 'nginx/nginx-prometheus-exporter:0.9.0'
        command:
          - nginx-prometheus-exporter
        args:
          - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status'
      imagePullSecrets:
        - name: default-secret

配置Pod Monitor示例如下:

apiVersion: monitoring.coreos.com/v1
kind: PodMonitor
metadata:
  name: podmonitor-nginx   # PodMonitor的名称
  namespace: monitoring    # 所属命名空间,建议使用monitoring  
spec:
  namespaceSelector:       # 匹配工作负载所在的命名空间
    matchNames:
    - default              # 工作负载所属的命名空间
  jobLabel: podmonitor-nginx
  podMetricsEndpoints:
  - interval: 15s 
    path: /metrics            # 工作负载暴露指标的路径
    port: nginx-test2         # 工作负载暴露指标的port名称
    tlsConfig:
      insecureSkipVerify: true
  selector:  
    matchLabels:
      app: nginx-test2   # Pod携带的标签,能被选择器选中

应用部署成功后,访问Prometheus,查询自定义监控指标。通过job名称可以判断出该指标是根据PodMonitor配置上报的。

nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", container="container-0", endpoint="nginx-test2", instance="10.0.0.44:9113", job="monitoring/podmonitor-nginx", namespace="default", pod="nginx-test2-746b7f8fdd-krzfp", prometheus="monitoring/server"}

方法四:配置Service Monitor监控自定义指标

云原生监控插件提供了基于PodMonitor与ServiceMonitor配置指标采集任务的能力。Prometheus Operator将watch的ServiceMonitor的变化,通过Prometheus的reload机制,将Prometheus的采集任务热更新至Prometheus的实例中。

Prometheus Operator定义的CRD资源github地址:https://github.com/prometheus-community/helm-charts/tree/main/charts/kube-prometheus-stack/charts/crds/crds

部署示例应用如下:

apiVersion: apps/v1
kind: Deployment
metadata:
  name: nginx-test3
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: nginx-test3
  template:
    metadata:
      labels:
        app: nginx-test3
    spec:
      containers:
      - image: nginx:exporter        # 替换为您上传到SWR的镜像地址
        name: container-0
        resources:
          limits:
            cpu: 250m
            memory: 300Mi
          requests:
            cpu: 100m
            memory: 100Mi
      - name: container-1
        image: 'nginx/nginx-prometheus-exporter:0.9.0'
        command:
          - nginx-prometheus-exporter
        args:
          - '-nginx.scrape-uri=http://127.0.0.1:8080/stub_status'
      imagePullSecrets:
        - name: default-secret

部署示例Service如下:

apiVersion: v1
kind: Service
metadata:
  name: nginx-test3
  labels:
    app: nginx-test3
  namespace: default
spec:
  selector:
    app: nginx-test3
  externalTrafficPolicy: Cluster
  ports:
    - name: cce-service-0
      targetPort: 80
      nodePort: 0
      port: 8080
      protocol: TCP
    - name: servicemonitor-ports
      protocol: TCP
      port: 9113
      targetPort: 9113
  type: NodePort

配置Service Monitor示例如下:

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: servicemonitor-nginx
  namespace: monitoring
spec:
  # 配置service中的暴露指标的port的名称
  endpoints:
  - path: /metrics
    port: servicemonitor-ports
  jobLabel: servicemonitor-nginx
  # 采集任务的作用范围,如果不配置,默认为default
  namespaceSelector:
    matchNames:
    - default
  selector:
    matchLabels:
      app: nginx-test3

应用部署成功后,访问Prometheus,查询自定义监控指标。通过endpoint名称可以判断出该指标是根据ServiceMonitor配置上报的。

nginx_connections_accepted{cluster="2048c170-8359-11ee-9527-0255ac1000cf", cluster_category="CCE", cluster_name="cce-test", endpoint="servicemonitor-ports", instance="10.0.0.47:9113", job="nginx-test3", namespace="default", pod="nginx-test3-6f8bccd9-f27hv", prometheus="monitoring/server", service="nginx-test3"}

方法五:使用AdditionalScrapeConfigs监控自定义指标

须知:

集群中需要已安装3.10.1及以上版本的云原生监控插件。

AdditionalScrapeConfigs允许您指定一个Secret的key,将您额外的Prometheus抓取配置附加至云原生监控插件。

由于使用该机制会绕过常规的抓取配置生成逻辑,而是直接将您指定的配置内容传递给Prometheus,因此需要您保证配置的正确性。建议您参考scrape_config官方文档进行配置。

  1. 请参见通过kubectl连接集群,使用kubectl连接集群。
  2. 使用YAML创建如下Secret。

    kind: Secret
    apiVersion: v1
    type: Opaque
    metadata:
      name: additional-scrape-configs
      namespace: monitoring  # 命名空间仅为示例,命名空间需要与云原生监控插件相同
    stringData:
      # 以下为云原生监控插件未开启本地存储时的采集配置示例,您需要替换为您需要的采集配置
      prometheus-additional.yaml: |-
        - job_name: custom-job-test
          metrics_path: /metrics
          relabel_configs:
          - action: keep
            source_labels:
            - __meta_kubernetes_pod_label_app
            - __meta_kubernetes_pod_labelpresent_app
            regex: (prometheus-lightweight);true
          - action: keep
            source_labels:
            - __meta_kubernetes_pod_container_port_name
            regex: web
          kubernetes_sd_configs:
          - role: pod
            namespaces:
              names:
              - monitoring

  3. 编辑persistent-user-config配置项,开启AdditionalScrapeConfigs能力。

    kubectl edit configmap persistent-user-config -n monitoring

    在其中operatorConfigOverride字段下新增一行--common.prom.default-additional-scrape-configs-key=prometheus-additional.yaml,开启AdditionalScrapeConfigs能力,示例如下:

    ...
    data:
      lightweight-user-config.yaml: |
        customSettings:
          additionalScrapeConfigs: []
          agentExtraArgs: []
          metricsDeprecated:
            globalDeprecateMetrics: []
          nodeExporterConfigOverride: []
          operatorConfigOverride: 
          - --common.prom.default-additional-scrape-configs-key=prometheus-additional.yaml
    ...

  4. 前往Grafana或AOM页面处查看您的自定义采集指标是否采集成功。
提示

您即将访问非华为云网站,请注意账号财产安全

文档反馈

文档反馈

意见反馈

0/500

标记内容

同时提交标记内容