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
相关推荐
咖啡啡不加糖17 小时前
Grafana 监控服务指标使用指南:打造可视化监控体系
java·后端·grafana
池央18 小时前
贪心-最长递增子序列
算法·贪心算法
牛奶咖啡1321 小时前
Prometheus+Grafana构建云原生分布式监控系统(十四)_Prometheus中PromQL使用(一)
云原生·prometheus·promql·计算一个时间范围内的平均值·将相同数据整合查看整体趋势·计算时间范围内的最大最小比率·向量标量的算术运算
金枪不摆鳍1 天前
算法-贪心算法
算法·贪心算法
池央1 天前
贪心算法-摆动序列
算法·贪心算法
芒克芒克1 天前
LeetCode 跳跃游戏 II 最优解法:贪心算法
leetcode·游戏·贪心算法
世界尽头与你1 天前
(修复方案)CVE-2021-43798: Grafana路径遍历漏洞
安全·grafana
草履虫建模2 天前
力扣算法 121. 买卖股票的最佳时机
算法·leetcode·职场和发展·贪心算法·动态规划·一次遍历
每天要多喝水2 天前
贪心算法专题Day22
算法·贪心算法
燃于AC之乐2 天前
《算法实战笔记》第10期:六大算法实战——枚举、贪心、并查集、Kruskal、双指针、区间DP
算法·贪心算法·图论·双指针·区间dp·二进制枚举