这个方案,可以基于prometheus operator,也可以基于kube-prometheus,这两个是一回事嘛~
整个操作步骤,分为两步:
一,ServiceMonitor的建立
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: nodejs-app-monitor
namespace: monitoring
spec:
endpoints:
- port: nodejs-app-port
interval: 10s
path: /metrics
honorLabels: true
selector:
matchLabels:
app: nodejs-app
namespaceSelector:
any: true
这个yaml文件定义的要点:namespaceSelector定义了所有namespace中采集,matchLabels过滤指定的label可采集,endpoints定义了采集的端点(端口,间隔,路径)。
二,K8s service的改造
---
apiVersion: v1
kind: Service
metadata:
name: 'app-node-demo'
namespace: 'frontend'
labels:
app: nodejs-app
spec:
ports:
- name: nodejs-app-port
port: 3000
targetPort: 3000
selector:
name: 'app-node-demo'
如果要将一个Node.js应用纳入prometheus的采集,要改造两点:一是在metadata下新增一个labels,二是将ports下采集端口进入命名。以契合前一个步骤中的定义。
PS:如果以后,有更多的node.js应用需要prometheus监控入库,则只需要在service上加入label和ports命名,就可以了。ServiceMonitor是不再需要作改动的(除非抓取的path改变,可以新建一个servicemonitor来对应)。
三,自己看~