ServiceMonitor 是 Prometheus Operator 提供的一种 K8s 自定义资源(CRD),用来 “声明式” 地告诉 Prometheus 要监控哪些 Service,我们此前也记录了一篇部署prometheus的笔记,当时是手写的一个 configmap,写了一堆 scrape_configs 来实现服务自动发现的功能,可以查看这里:https://sulao.cn/post/1104,但是目前介绍 ServiceMonitor 以后我们就清楚,使用这个来做服务发现就很简单,配置也不像原来那样容易出错。
下面我们就来看看如何部署 ServiceMonitor,它是基于 Prometheus Operator。
目前官方部署推荐方式是 kube-prometheus
1.克隆官方仓库
git clone https://github.com/prometheus-operator/kube-prometheus.git
cd kube-prometheus2.先创建 CRD + Namespace
创建 namespace 和所有 CRD
kubectl apply -f manifests/setup等待 CRD 就绪(卡住就多等一会儿)
until kubectl get servicemonitors --all-namespaces; do sleep 2; done3.部署全套监控栈
kubectl apply -f manifests/4.检查pod状态
kubectl get pods -n monitoring主要检查以下类似名字的POD
prometheus-operator-xxx
prometheus-k8s-0
alertmanager-main-0
grafana-xxx
node-exporter-xxx
kube-state-metrics-xxx5.本地端口转发访问UI
临时使用以下可以使用以下方式,长期使用还是建议使用svc来暴露端口
prometheus UI
kubectl port-forward svc/prometheus-k8s 9090:9090 -n monitoringGrafana UI
kubectl port-forward svc/grafana 3000:3000 -n monitoringAlertmanager UI
kubectl port-forward svc/alertmanager-main 9093:9093 -n monitoring6.业务部分的service撰写
我们自己写的service必须要有label,且端口要有名字,例如这里叫metrics
apiVersion: v1
kind: Service
metadata:
name: my-app
namespace: monitoring
labels:
app: my-app # 给 Service 打标签
spec:
selector:
app: my-app
ports:
- name: metrics # 端口必须有名字!ServiceMonitor 靠名字匹配
port: 8080
targetPort: 80807.撰写ServiceMonitor
这里的port和service里面的port name名字一致,matchLabels.app匹配上面service里面的label
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: my-app-sm
namespace: monitoring
spec:
selector:
matchLabels:
app: my-app # 匹配上面 Service 的 label
namespaceSelector:
matchNames:
- monitoring
endpoints:
- port: metrics # 和 Service 的 port name 一致
path: /metrics
interval: 30s8.卸载kube-prometheus
kubectl delete -f manifests/
kubectl delete -f manifests/setup9简单说下Operator工作流
Prometheus Operator 自动 watch ServiceMonitor
Operator 动态生成 scrape_configs 给 Prometheus
Prometheus 抓 metrics
当你开始用 kube-prometheus / prometheus-operator 这套全家桶时:
Prometheus、Alertmanager、Grafana、exporters 都由 Operator 管理
不再手动写 prometheus.yml 到 ConfigMap
所有服务发现、抓取规则,都用:
ServiceMonitor:监控 K8s Service(如 node-exporter、各业务服务)
PodMonitor:直接监控 Pod
PrometheusRule:告警规则
内容版权声明:除非注明,否则皆为本站原创文章。
转载注明出处:https://sulao.cn/post/1174
评论列表