TL;DR 🔗
如果各类业务系统提供**/metrics**接口,并且指标数据满足prometheus时序数据的要求,就可以通过**serviceMonitor**获取监控指标:
cat <<EOF | kubectl apply -f -
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app: kube-prometheus-redis
release: kube-prometheus-stack ## CRD prometheus 通过 spec.serviceMonitorSelector 找到此标签来匹配此ServiceMonitor
name: kube-prometheus-redis
namespace: kube-prometheus-stack ## 与"helm install kube-prometheus-stack"时的 namespace 保持一致
spec:
namespaceSelector:
matchNames:
- default ## 被监控业务所在的 namespace
endpoints:
- port: http-metrics ## 被监控业务 service 的 port name
selector:
matchLabels:
app.kubernetes.io/instance: redis ## 被监控业务 service selector
app.kubernetes.io/name: redis
EOF
Description 🔗
开源监控方案 kube-prometheus-stack 会提取node基础设施和 k8s 各类resource等监控指标,但并不关心业务系统;自行开发的业务系统一般都会暴露出一系列监控指标用来监控,如果需要自定义监控指标就要配合使用serviceMonitor来收集。下图是prometheus-operator提供的自定义资源(Prometheus和serviceMonitor)与 k8s资 源(service和pod)关系图: