k8s使用ServiceMonitor来做服务发现

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-prometheus

2.先创建 CRD + Namespace

创建 namespace 和所有 CRD

kubectl apply -f manifests/setup

等待 CRD 就绪(卡住就多等一会儿)

until kubectl get servicemonitors --all-namespaces; do sleep 2; done

3.部署全套监控栈

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-xxx

5.本地端口转发访问UI

临时使用以下可以使用以下方式,长期使用还是建议使用svc来暴露端口

prometheus UI

kubectl port-forward svc/prometheus-k8s 9090:9090 -n monitoring

Grafana UI

kubectl port-forward svc/grafana 3000:3000 -n monitoring

Alertmanager UI

kubectl port-forward svc/alertmanager-main 9093:9093 -n monitoring

6.业务部分的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: 8080

7.撰写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: 30s

8.卸载kube-prometheus

kubectl delete -f manifests/
kubectl delete -f manifests/setup

9简单说下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

评论列表

0%