当前位置:网站首页>自建 Prometheus 采集腾讯云容器服务监控数据最佳实践
自建 Prometheus 采集腾讯云容器服务监控数据最佳实践
2022-08-01 21:50:00 【imroc】
概述
用 Prometheus 采集腾讯云容器服务的监控数据时如何配置采集规则?主要需要注意的是 kubelet 与 cadvisor 的监控指标采集,本文分享为 Prometheus 配置 scrape_config
来采集腾讯云容器服务集群的监控数据的方法。
普通节点采集规则
- job_name: "tke-cadvisor"
scheme: https
metrics_path: /metrics/cadvisor # 采集容器 cadvisor 监控数据
tls_config:
insecure_skip_verify: true # tke 的 kubelet 使用自签证书,忽略证书校验
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet # 排除超级节点
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "tke-kubelet"
scheme: https
metrics_path: /metrics # 采集 kubelet 自身的监控数据
tls_config:
insecure_skip_verify: true
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "tke-probes" # 采集容器健康检查健康数据
scheme: https
metrics_path: /metrics/probes
tls_config:
insecure_skip_verify: true
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- 使用节点服务发现 (
kubernetes_sd_configs
的 role 为node
),抓取所有节点kubelet:10250
暴露的几种监控数据。 - 如果集群是普通节点与超级节点混用,排除超级节点 (
relabel_configs
中将带node.kubernetes.io/instance-type: eklet
这种 label 的 node 排除)。 - TKE 节点上的 kubelet 证书是自签的,需要忽略证书校验,所以
insecure_skip_verify
要置为 true。 - kubelet 通过
/metrics/cadvisor
,/metrics
与/metrics/probes
路径分别暴露了容器 cadvisor 监控数据、kubelet 自身监控数据以及容器健康检查健康数据,为这三个不同路径分别配置采集 job 进行采集。
超级节点采集规则
- job_name: eks # 采集超级节点监控数据
honor_timestamps: true
metrics_path: '/metrics' # 所有健康数据都在这个路径
params: # 通常需要加参数过滤掉 ipvs 相关的指标,因为可能数据量较大,打高 Pod 负载。
collect[]:
- 'ipvs'
# - 'cpu'
# - 'meminfo'
# - 'diskstats'
# - 'filesystem'
# - 'load0vg'
# - 'netdev'
# - 'filefd'
# - 'pressure'
# - 'vmstat'
scheme: http
kubernetes_sd_configs:
- role: pod # 超级节点 Pod 的监控数据暴露在 Pod 自身 IP 的 9100 端口,所以使用 Pod 服务发现
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_tke_cloud_tencent_com_pod_type]
regex: eklet # 只采集超级节点的 Pod
action: keep
- source_labels: [__meta_kubernetes_pod_phase]
regex: Running # 非 Running 状态的 Pod 机器资源已释放,不需要采集
action: keep
- source_labels: [__meta_kubernetes_pod_ip]
separator: ;
regex: (.*)
target_label: __address__
replacement: ${1}:9100 # 监控指标暴露在 Pod 的 9100 端口
action: replace
- source_labels: [__meta_kubernetes_pod_name]
separator: ;
regex: (.*)
target_label: pod # 将 Pod 名字写到 "pod" label
replacement: ${1}
action: replace
metric_relabel_configs:
- source_labels: [__name__]
separator: ;
regex: (container_.*|pod_.*|kubelet_.*)
replacement: $1
action: keep
- 超级节点的监控数据暴露在每个 Pod 的 9100 端口的
/metrics
这个 HTTP API 路径(非 HTTPS),使用 Pod 服务发现(kubernetes_sd_configs
的 role 为pod
),用一个 job 就可以采集完。 - 超级节点的 Pod 支持通过
collect[]
这个查询参数来过滤掉不希望采集的指标,这样可以避免指标数据量过大,导致 Pod 负载升高,通常要过滤掉ipvs
的指标。 - 如果集群是普通节点与超级节点混用,确保只采集超级节点的 Pod (
relabel_configs
中只保留有tke.cloud.tencent.com/pod-type:eklet
这个注解的 Pod)。 - 如果 Pod 的 phase 不是 Running 也无法采集,可以排除。
container_
开头的指标是 cadvisor 监控数据,pod_
前缀指标是超级节点 Pod 所在子机的监控数据(相当于将node_exporter
的node_
前缀指标替换成了pod_
),kubelet_
前缀指标是超级节点 Pod 子机内兼容 kubelet 的指标(主要是 pvc 存储监控)。
kube-prometheus-stack 配置
如今都流行使用 kube-prometheus-stack 这个 helm chart 来自建 Prometheus,在 values.yaml
中进行自定义配置然后安装到集群,其中可以配置 Prometheus 原生的 scrape_config
(非 CRD),配置方法是将自定义的 scrape_config
写到 prometheus.prometheusSpec.additionalScrapeConfigs
字段下,下面是示例:
prometheus:
prometheusSpec:
additionalScrapeConfigs:
- job_name: "tke-cadvisor"
scheme: https
metrics_path: /metrics/cadvisor
tls_config:
insecure_skip_verify: true
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "tke-kubelet"
scheme: https
metrics_path: /metrics
tls_config:
insecure_skip_verify: true
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: "tke-probes"
scheme: https
metrics_path: /metrics/probes
tls_config:
insecure_skip_verify: true
authorization:
credentials_file: /var/run/secrets/kubernetes.io/serviceaccount/token
kubernetes_sd_configs:
- role: node
relabel_configs:
- source_labels: [__meta_kubernetes_node_label_node_kubernetes_io_instance_type]
regex: eklet
action: drop
- action: labelmap
regex: __meta_kubernetes_node_label_(.+)
- job_name: eks
honor_timestamps: true
metrics_path: '/metrics'
params:
collect[]: ['ipvs']
# - 'cpu'
# - 'meminfo'
# - 'diskstats'
# - 'filesystem'
# - 'load0vg'
# - 'netdev'
# - 'filefd'
# - 'pressure'
# - 'vmstat'
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_annotation_tke_cloud_tencent_com_pod_type]
regex: eklet
action: keep
- source_labels: [__meta_kubernetes_pod_phase]
regex: Running
action: keep
- source_labels: [__meta_kubernetes_pod_ip]
separator: ;
regex: (.*)
target_label: __address__
replacement: ${1}:9100
action: replace
- source_labels: [__meta_kubernetes_pod_name]
separator: ;
regex: (.*)
target_label: pod
replacement: ${1}
action: replace
metric_relabel_configs:
- source_labels: [__name__]
separator: ;
regex: (container_.*|pod_.*|kubelet_.*)
replacement: $1
action: keep
storageSpec:
volumeClaimTemplate:
spec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 100Gi
FAQ
为什么使用 collect[] 这种奇怪的参数过滤指标?
超级节点的 Pod 监控指标使用 collect[]
查询参数来过滤不需要的监控指标:
curl ${IP}:9100/metrics?collect[]=ipvs&collect[]=vmstat
为什么要使用这么奇怪的参数名?这是因为 node_exporter
就是用的这个参数,超级节点的 Pod 内部引用了 node_exporter
的逻辑,这里 是 node_exporter
的 collect[]
参数用法说明。
边栏推荐
- File operations of WEB penetration
- 企业公众号文章写作方向:如何写出读者认可的优质内容
- Advanced Algebra_Proof_The algebraic multiplicity of any eigenvalue of a matrix is greater than or equal to its geometric multiplicity
- 高等代数_证明_矩阵的任意特征值的代数重数大于等于其几何重数
- Jmeter combat | Repeated and concurrently grabbing red envelopes with the same user
- Safe fifth after-school exercise
- 游戏元宇宙发展趋势展望分析
- leetcode 204. Count Primes 计数质数 (Easy)
- (*゚ヮ゚)*【精品C语言整理】*(゚ヮ゚*)女盆友缠着你让你教她写代码怎么办?安排,三万字博文带你走遍C语言,从此不再害怕编程
- ImportError: `save_weights` requires h5py.问题解决
猜你喜欢
19 Lectures on Disassembly of Multi-merchant Mall System Functions - Invoice Management on the Platform
模拟数据之mockjs
可视化——Superset使用
迁移学习——Discriminative Transfer Subspace Learning via Low-Rank and Sparse Representation
render-props和高阶组件
Based on php animation peripheral mall management system (php graduation design)
365 days challenge LeetCode1000 questions - Day 046 Generate a string with odd number of each character + add two numbers + valid parentheses
SAP ABAP OData 服务如何支持删除(Delete)操作试读版
SOM网络1:原理讲解
C语言必杀技3行代码把运行速度提升4倍
随机推荐
SAP ABAP OData 服务如何支持删除(Delete)操作试读版
Small program -- subcontracting
多商户商城系统功能拆解19讲-平台端发票管理
Based on php online learning platform management system acquisition (php graduation design)
论文解读(GSAT)《Interpretable and Generalizable Graph Learning via Stochastic Attention Mechanism》
Yizhou Financial Analysis | The intelligent transformation of bank ATM machines is accelerated; the new Internet loan regulations bring challenges
number of solutions to solve a multivariate multi-degree equation
HCIP---企业网的架构
Safe fifth after-school exercise
C语言必杀技3行代码把运行速度提升4倍
基于php在线考试管理系统获取(php毕业设计)
Appendix A printf, varargs and stdarg A.3 stdarg.h ANSI version of varargs.h
C Expert Programming Chapter 1 C: Through the Fog of Time and Space 1.3 The Standard I/O Library and the C Preprocessor
Unity Shader general lighting model code finishing
Scala practice questions + answers
Flink cluster construction
LVS负载均衡群集
如何防范 DAO 中的治理攻击?
迁移学习——Discriminative Transfer Subspace Learning via Low-Rank and Sparse Representation
scikit-learn no moudule named six