istio学习笔记(5)-prometheus配置改造
source link: http://vearne.cc/archives/39424
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
istio学习笔记(5)-prometheus配置改造
版权声明 本站原创文章 由 萌叔 发表
转载请注明 萌叔 | http://vearne.cc
警告:本文仅用于萌叔自己总结之用,对其它人而言可能毫无营养,没有阅读价值。
要让一个k8s + istio的集群真正能够在生产可用,我们需要考虑如下几类指标。
- Node Metrics
- Container Resource Metrics
- Kubernetes API Server
- Etcd metrics
- Kube state-metrics
对于准备上集群的服务而言,我们会比较关注
1. 服务所在容器的CPU、内存、网络流量、磁盘使用率等
2. 业务指标:QPS、StatusCode、ErrorCode、请求延迟、缓存使用情况,连接池等
其中很大一部分其实都是标准指标,所有的服务都应该会有。另外istio已经对container的输入和输出流量进行了拦截,基于这些条件。萌叔希望达到如下效果
- 1) 通过prometheus的自动发现功能,发现并监控Container Resource Metrics
- 2) 通过prometheus的自动发现功能,发现并监控envoy拦截到的部分指标
- 3)通过prometheus的自动发现功能,发现并监控app暴露的prometheus metrics
- 4) 对于标准指标实现在grafana上的自动配置(生成Dashboard和Graph)
显然对于1)2)中的指标都是标准指标
根据参考资料4的说法
spec:
template:
metadata:
annotations:
prometheus.io/scrape: true # determines if a pod should be scraped. Set to true to enable scraping.
prometheus.io/path: /metrics # determines the path to scrape metrics at. Defaults to /metrics.
prometheus.io/port: 80 # determines the port to scrape metrics at. Defaults to 80.
服务本身如果想暴露自己的指标,可以通过在pod上增加注释prometheus.io/scrape
prometheus.io/path
prometheus.io/port
。 但是实际使用中我发现注入了istio之后,这3项的值已经被修改为
prometheus.io/path: /stats/prometheus
prometheus.io/port: '15020'
prometheus.io/scrape: 'true'
app本身的待监控地址无法正常暴露
另外,envoy通过http://{envoy}:15090/stats/prometheus
地址也暴露服务被拦截并采集到的标准指标,有一定的价值。
对于这2部分指标,都应该采集到,所以需要对prometheus的配置进行改造。
3. 配置改造
如果读者是使用的Helm安装的prometheus,那么你会发现,Prometheus实例所在的Pod(名称形如:xxx-prometheus-server-c64894d95-k9fmq)中,有2个容器。
name image comment prometheus-server-configmap-reload jimmidyson/configmap-reload:v0.4.0 辅助容器 prometheus-server prom/prometheus:v2.21.0 主容器这2个容器通过共享卷通讯Deployment
名称形如
# 定义 volume
volumes:
- name: config-volume
configMap:
name: monitor-prometheus-server
defaultMode: 420
# 2个容器都会挂载同一个volume
"volumeMounts": [{
"name": "config-volume",
"readOnly": true,
"mountPath": "/etc/config"
}],
ConfigMap
名字形如 xxx-prometheus-server
kind: ConfigMap
apiVersion: v1
metadata:
name: monitor-prometheus-server
namespace: monitoring
labels:
app: prometheus
chart: prometheus-7.1.8
component: server
heritage: Tiller
release: monitor
data:
alerts: ...
prometheus.yml: ...
rules: |
{}
ConfigMap
挂载以后,对应的key、value会被映射成/”/etc/config”中的文件
prometheus-server-configmap-reload负责监视”/etc/config”文件夹,如果文件有发生变化,它会执行webhook,请求 “POST http://127.0.0.1:9090/-/reload”, 让prometheus-server重载配置
直接修改 ConfigMap
即可增加2个job
# 3.1 负责发现并抓取app暴露的监控端口
- job_name: myk8s-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- action: keep
regex: true
source_labels:
- __meta_kubernetes_pod_annotation_myk8s_scrape
- action: replace
regex: (.+)
source_labels:
- __meta_kubernetes_pod_annotation_myk8s_path
target_label: __metrics_path__
- action: replace
regex: ([^:]+)(?::\d+)?;(\d+)
replacement: $1:$2
source_labels:
- __address__
- __meta_kubernetes_pod_annotation_myk8s_port
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: kubernetes_namespace
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: kubernetes_pod_name
# 3.2 负责发现并抓取envoy暴露的监控端口
- job_name: envoy-pods
kubernetes_sd_configs:
- role: pod
relabel_configs:
- action: keep
regex: true
source_labels:
- __meta_kubernetes_pod_annotation_myk8s_scrape
- action: replace
regex: (.+)
replacement: /stats/prometheus
target_label: __metrics_path__
- action: replace
regex: ([^:]+)(?::\d+)?
replacement: $1:15090
source_labels:
- __address__
target_label: __address__
- action: labelmap
regex: __meta_kubernetes_pod_label_(.+)
- action: replace
source_labels:
- __meta_kubernetes_namespace
target_label: kubernetes_namespace
- action: replace
source_labels:
- __meta_kubernetes_pod_name
target_label: kubernetes_pod_name
3.1 负责发现并抓取app暴露的监控端口
注意: pod的注释部分需要有
myk8s/scrape: true
myk8s/port: 9090
myk8s/path: /metrics
3.2 负责发现并抓取envoy暴露的监控端口
pod的注释部分需要有
myk8s/scrape: true
请我喝杯咖啡
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK