这是《Golang 微服务监控浅谈》的子篇,本篇介绍一下怎么使用kubernetes prometheus operator监控集群外部节点。
一、 什么是Prometheus Operator?
Prometheus Operator(下面简称PO) 是一个流行的k8s集群监控套件,项目地址:https://github.com/prometheus-operator/kube-prometheus。
Prometheus可以通过ServiceMonitor来定义你的服务监控规则规则,具体的prometheus配置规则不在本篇讨论范围,感兴趣的朋友可以翻翻PO的配置 ,这里面有各种工作负载的配置方法。
二、在k8s中监控外部资源
本文介绍了怎么使用ServiceMonitor采集node_expoter数据,其他业务监控基本类似,可以通过《Golang 微服务监控浅谈》看到监控业务服务的案例。
1.外部服务器安装expoter
docker安装node_expoterdocker run -d --name=node_exporter \ --restart=always \ -v /:/host:ro,rslave \ -p 10.150.22.2:9100:9100 \ prom/node-exporter:latest \ --path.rootfs=/host
|
本篇旨在介绍怎么在k8s中监控外部资源,当然不仅限于node,可以是任意类型的服务,比如Mysql、Redis、etcd等。案例中10.150.22.2非集群节点。
2.为外部资源(服务器)创建Service
外部资源的服务定义与普通服务定义非常相似,不需要定义Pod Selector。
Kubernetes Service配置cat <<EOF | kubectl apply -f - apiVersion: v1 kind: Service metadata: name: node-exporter namespace: monitoring labels: app: node-exporter app.kubernetes.io/name: node-exporter spec: type: ClusterIP ports: - name: metrics port: 9100 protocol: TCP targetPort: 9100 EOF
|
这样我就有了一个无POD的service,但目前这个svc并不能访问,因为缺少Endpoint。
3.为Service创建一个Endpoints
Kubernetes endpointscat << EOF | kubectl apply -f - apiVersion: v1 kind: Endpoints metadata: name: node-exporter namespace: monitoring labels: app: node-exporter app.kubernetes.io/name: node-exporter subsets: - addresses: - ip: 10.150.22.2 # 这里是外部资源列表 ports: - name: metrics port: 9100 EOF
|
检查Service于Endpoints是否正常产生关联kubectl describe svc -n monitoring node-exporter
|
查看Endpoint部分时候包含了上面的IP列表,如果没有再次检查上面的的配置正否正确。Name: node-exporter Namespace: monitoring ... Port: metrics 9100/TCP TargetPort: 9100/TCP Endpoints: 10.150.22.2:9100
|
需要注意的是Service名称必须和Endpoints名称一致才能使用Service指向对应的资源
4.配置ServiceMonitor
服务创建完成需要配置一个ServiceMonitor来监控服务监控采集地址,默认情况下监控采集地址为 http://:/metrics。
配置ServiceMonitorcat << EOF | kubectl apply -f - apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: name: node-exporter namespace: monitoring labels: app: node-exporter release: prometheus spec: selector: matchLabels: #Service选择器 app: node-exporter namespaceSelector: #Namespace选择器 matchNames: - monitoring endpoints: - port: metrics #采集节点端口(svc定义) interval: 10s #采集频率根据实际需求配置,prometheus默认15s path: /metrics #默认地址/metrics EOF
|
更多关于ServiceMonitor的配置可以使用explain功能
kubectl explainkubectl explain ServiceMonitor.spec.endpoints
|
5.Kubernetes集群中查看监控数据
1、) Prometheus Targets
2、) Grafana Dashboard