运维训练营第 19 周作业
20230318 作业:
1.总结 prometheus 服务发现实现过程
2.总结 prometheus 标签重写 relabel_configs
3.kubernetes 环境中部署 prometheus 并基于 kubernetes_sd_config 实现 pod、node、endpoint 等监控目标动态发现
4.kubernetes 环境外部署 prometheus 并基于 kubernetes_sd_config 实现 pod、node、endpoint 等监控目标动态发现
扩展:
1.基于 HPA 控制器对 pod 副本实现弹性伸缩
prometheus 服务发现实现过程
Prometheuds 是基于 Pull 模式抓取监控数据,首先需要能够发现监控的目标对象 target。而 Prometheus 最终的监控,一般都是 pod,可以通过 service 来发现,就需要 service discovery(SD)。
目前支持很多种协议。
大致由 3 部分组成:
scrape_config:在 prometheus.yaml 中,job 生成一个个 discovery 的服务。
discovery manager:有定时周期触发任务,有变更,就将 targets 容器的 target 信息放入到 syncCh 通道中。
scrape 组件,监听 syncCh 通道,监控的 targets 信息传递给 scrape 组件,然后 reload 间 target 纳入监控。
具体的配置项可以看官方配置。
prometheus 标签重写 relabel_configs
通过 relabel_configs,采集数据后,写入数据前,通过 metric relabeling 进行配置。
relabel_config 里,每个配置块都是一个规则列表,规则依次应用于每个标记的对象。
比如这里会应用正则表达式的值,地址和端口,把它们合并为一个字符串。
prometheus 在 k8s 内实现服务发现
集群内的发现比较容易,因为默认在 pod 里,自带了 k8s 的密钥等信息。所以 Prometheus 一般会放在 k8s 的内部。
如果 pod 很多,可以过滤,比如配置只发现 myserver 和 magedu 的 ns 下的 pod。
prometheus 在 k8s 外实现服务发现
k8s 里需要加上 annotations:
api-server
先查看 api-server,在 default 的 ns 下,访问方式一般是 https,端口是 6443。
tls 相关证书可以通过指定 ca 证书路径,或者 insecure_skip_verify:true 跳过。
controller-manager
监听地址要修改为 127.0.0.1
scheduler
默认是 80 端口,需要指定为 10251 端口,同时指定 token,否则会返回 400。
4. state-metrics
默认是 8080 和 801 端口,需指定为 8080 端口。
kubelet
指标采集地址是/metrics/cadvisor,需要配置 https 访问,可以通过 insecure_skip_verify:true 跳过。
node exporter
默认是 10250,替换为 9100。
coreDNS
默认 53 端口,需指定为 9153。
etcd
默认是 127.0.0.1:2379 地址,需修改为 0.0.0.0:2381 端口。
参考资料
https://zhuanlan.zhihu.com/p/402856605
评论