這個(gè)方案,可以基于prometheus operator,也可以基于kube-prometheus,這兩個(gè)是一回事嘛~
整個(gè)操作步驟,分為兩步:
一,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
這個(gè)yaml文件定義的要點(diǎn):namespaceSelector定義了所有namespace中采集,matchLabels過濾指定的label可采集,endpoints定義了采集的端點(diǎn)(端口,間隔,路徑)。
二,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'
如果要將一個(gè)Node.js應(yīng)用納入prometheus的采集,要改造兩點(diǎn):一是在metadata下新增一個(gè)labels,二是將ports下采集端口進(jìn)入命名。以契合前一個(gè)步驟中的定義。
PS:如果以后,有更多的node.js應(yīng)用需要prometheus監(jiān)控入庫,則只需要在service上加入label和ports命名,就可以了。ServiceMonitor是不再需要作改動(dòng)的(除非抓取的path改變,可以新建一個(gè)servicemonitor來對(duì)應(yīng))。
三,自己看~