prometheus通过Endpoints自定义grafana的dashboard模块

1、prometheus自定义的dashboard模块

文件路径/etc/prometheus/config_out/prometheus-env.yaml

yaml 复制代码
- job_name: serviceMonitor/monitoring/pfil/0
  honor_labels: false
  kubernetes_sd_configs:
  - role: endpoints
    namespaces:
      names:
      - monitoring
  relabel_configs:
  - source_labels:
    - job
    target_label: __tmp_prometheus_job_name
  - action: keep
    source_labels:
    - __meta_kubernetes_service_label_app
    - __meta_kubernetes_service_labelpresent_app
    regex: (pfil);true
  - action: keep
    source_labels:
    - __meta_kubernetes_service_label_source
    - __meta_kubernetes_service_labelpresent_source
    regex: (external);true
  - action: keep
    source_labels:
    - __meta_kubernetes_endpoint_port_name
    regex: metrics
  - source_labels:
    - __meta_kubernetes_endpoint_address_target_kind
    - __meta_kubernetes_endpoint_address_target_name
    separator: ;
    regex: Node;(.*)
    replacement: ${1}
    target_label: node
  - source_labels:
    - __meta_kubernetes_endpoint_address_target_kind
    - __meta_kubernetes_endpoint_address_target_name
    separator: ;
    regex: Pod;(.*)
    replacement: ${1}
    target_label: pod
  - source_labels:
    - __meta_kubernetes_namespace
    target_label: namespace
  - source_labels:
    - __meta_kubernetes_service_name
    target_label: service
  - source_labels:
    - __meta_kubernetes_pod_name
    target_label: pod
  - source_labels:
    - __meta_kubernetes_pod_container_name
    target_label: container
  - action: drop
    source_labels:
    - __meta_kubernetes_pod_phase
    regex: (Failed|Succeeded)
  - source_labels:
    - __meta_kubernetes_service_name
    target_label: job
    replacement: ${1}
  - source_labels:
    - __meta_kubernetes_service_label_jobname
    target_label: job
    regex: (.+)
    replacement: ${1}
  - target_label: endpoint
    replacement: metrics
  - source_labels:
    - __address__
    target_label: __tmp_hash
    modulus: 1
    action: hashmod
  - source_labels:
    - __tmp_hash
    regex: 0
    action: keep

注释

Prometheus 配置文件 (/etc/prometheus/config_out/prometheus-env.yaml) 使用的是 Kubernetes 服务发现(kubernetes_sd_configs),并且指定了 role: endpoints。这意味着 Prometheus 会自动去查找 Kubernetes 集群里的 Endpoints(端点) 对象来发现监控目标。

根据配置,Prometheus 只会抓取满足以下所有条件的目标:

命名空间(Namespace): 目标必须位于 monitoring 这个命名空间内。

服务标签(Service Labels): 与目标关联的 Kubernetes Service(服务) 必须 同时 具有 app=pfil 和 source=external 这两个标签。

端口名称(Port Name): 在 Service 定义中,目标所使用的那个端口,其 名称(name) 必须是 metrics。

Pod 状态(Pod Phase): 不会抓取状态是 Failed (失败) 或 Succeeded (成功) 的 Pod 对应的目标

2、创建ServiceMonitor

注意标签selector

yaml 复制代码
  selector:
    matchLabels:
      app: pfil
      source: external
yaml 复制代码
---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  annotations: {}
  labels:
    app: pfil
    release: kube-prometheus
    source: external
  name: pfil
  namespace: monitoring
  resourceVersion: '308908134'
spec:
  endpoints:
    - port: metrics
  jobLabel: jobname
  namespaceSelector:
    matchNames:
      - monitoring
  selector:
    matchLabels:
      app: pfil
      source: external

3、创建Endpoints

Endpoints1

yaml 复制代码
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: pfil
    jobname: pfil
    source: external
  name: pfil
  namespace: monitoring
  resourceVersion: "552235238"
  uid: dbd41ece-caf3-4b7b-8510-3c6eda714f7a
subsets:
- addresses:
  - hostname: test-main
    ip: 1.1.1.1
  - hostname: test-east-1
    ip: 2.2.2.2
  - hostname: test-west-1
    ip: 3.3.3.3
  ports:
  - name: metrics
    port: 9002
    protocol: TCP

Endpoints2

yaml 复制代码
apiVersion: v1
kind: Endpoints
metadata:
  name: parasail-miner
  namespace: monitoring
  labels:
    app: pfil
    source: external
    component: parasail-miner
subsets:
- addresses:
  - ip: 1.1.1.1
    hostname: parasail-miner
  ports:
  - name: metrics 
    port: 8002
    protocol: TCP

4、创建Service

service1

yaml 复制代码
---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    app: pfil
    component: parasail-miner
    source: external
  name: parasail-miner
  namespace: monitoring
  resourceVersion: '552542525'
spec:
  clusterIP: 10.100.103.0
  clusterIPs:
    - 10.100.103.0
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: metrics
      port: 8002
      protocol: TCP
      targetPort: 8002
  sessionAffinity: None
  type: ClusterIP
status:
  loadBalancer: {}

service2

yaml 复制代码
---
apiVersion: v1
kind: Service
metadata:
  annotations: {}
  labels:
    app: pfil
    jobname: pfil
    source: external
  name: pfil
  namespace: monitoring
  resourceVersion: '552219945'
spec:
  clusterIP: 10.100.78.9
  clusterIPs:
    - 10.100.78.9
  internalTrafficPolicy: Cluster
  ipFamilies:
    - IPv4
  ipFamilyPolicy: SingleStack
  ports:
    - name: metrics
      port: 9002
      protocol: TCP
      targetPort: 9002
    - name: metrics-8002
      port: 8002
      protocol: TCP
      targetPort: 8002
  sessionAffinity: None
  type: ClusterIP
相关推荐
goodlook01233 小时前
监控平台搭建-日志-springboot直接推送loki篇(九)
java·spring boot·后端·grafana
三不原则4 小时前
实战:Prometheus 监控 GPU 使用率,设置智能告警阈值
prometheus
新钛云服7 小时前
Grafana Polystat面板与腾讯云可观测平台的深度融合实践
大数据·云计算·腾讯云·grafana
flying robot1 天前
Prometheus[2.33.3]grafana[12.3.1]监控安装
grafana·prometheus
flying robot1 天前
Grafana对xx-export监控和AlertManager 告警
grafana
2501_941805933 天前
一次从接口网关到异步消息驱动架构演化的互联网系统实践技术随笔分享录
leetcode·决策树·贪心算法
2501_941664963 天前
面向微服务分布式队列与异步流量削峰的互联网系统高可用设计与多语言工程实践分享
leetcode·贪心算法
一只懒鱼a4 天前
Prometheus和Grafana的安装和使用
grafana·prometheus
YanDDDeat4 天前
Prometheus + Grafana 搭建应用监控体系
java·后端·eureka·grafana·prometheus
goodlook01234 天前
监控平台搭建-日志-loki篇-最新版3.6.3(七)
服务器·grafana·prometheus