prometheus operator监控mongodb


首先创建mongodb服务,仅用于测试,所以没做持久化

cat mongo.yaml

apiVersion: v1
kind: Service
metadata:
  name: mongo
  labels:
    app: mongo
spec:
  ports:
  - name: mongo
    port: 27017
    targetPort: 27017
  clusterIP: None
  selector:
    app: mongo
---
apiVersion: v1
kind: Service
metadata:
  name: mongo-service
  labels:
    app: mongo
spec:
  ports:
  - name: mongo-http
    port: 27017
    nodePort: 31014
  selector:
    app: mongo
  type: NodePort
---
apiVersion: apps/v1
kind: StatefulSet
metadata:
  name: mongo
spec:
  selector:
    matchLabels:
      app: mongo
  serviceName: "mongo"
  replicas: 2
  podManagementPolicy: Parallel
  template:
    metadata:
      labels:
        app: mongo
    spec:
      terminationGracePeriodSeconds: 10
      affinity:
         podAntiAffinity:
           requiredDuringSchedulingIgnoredDuringExecution:
           - labelSelector:
               matchExpressions:
               - key: "app"
                 operator: In
                 values:
                 - mongo
             topologyKey: "kubernetes.io/hostname"
      containers:
      - name: mongo
        image: mongo:latest
        command:
        - mongod
        - "--bind_ip_all"
        - "--replSet"
        - rs0
        ports:
        - containerPort: 27017
kubectl apply -f mongo.yaml

查看创建的mongo,kubectl get pods

图片.png

kubectl get svc

图片.png

mongo创建完成。

创建mongo-exporter服务,deployment需要创建在monitoring namespace下,此namespace为kube-prometheus命名空间

cat mongo-exporter.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mongo-exporter
  namespace: monitoring
  labels:
    k8s-app: mongo-exporter
spec:
  selector:
    matchLabels:
      k8s-app: mongo-exporter
  template:
    metadata:
      labels:
        k8s-app: mongo-exporter
    spec:
      containers:
      - name: mongo-exporter
        image: noenv/mongo-exporter:latest
        args: ["--web.listen-address=:9104", "--mongodb.uri", "mongodb://192.168.10.135:31014"]
        ports:
        - containerPort: 9104
          name: http
kubectl apply -f mongo-exporter.yaml
kubectl get pod -n monitoring
mongo-exporter-7699dd8b9b-vvqr4                          1/1     Running   0          15h

创建service

cat mongo-exporter-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: mongo-exporter
  name: mongo-exporter
  namespace: monitoring
spec:
  type: NodePort
  ports:
  - name: http
    port: 9104
    nodePort: 30017
    targetPort: http
  selector:
    k8s-app: mongo-exporter
kubectl  apply -f mongo-exporter-service.yaml
kubectl get svc -n monitoring 
mongo-exporter                          NodePort    10.97.60.32      <none>        9104:30017/TCP               15h

然后创建serviceaccount

cat mongo-exporter-account.yaml

apiVersion: v1
kind: ServiceAccount
metadata:
  name: mongo-exporter
  namespace: monitoring

创建servicemonitor

cat mongo-exporter-serviceMonitor.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  labels:
    k8s-app: mongo-exporter
  name: mongo-exporter
  namespace: monitoring
spec:
  endpoints:
  - interval: 30s
    port: http
  jobLabel: k8s-app
  selector:
    matchLabels:
      k8s-app: mongo-exporter

创建完毕之后,查看mongo的metrics

图片.png

在prometheus中查看mongodb-exporter Targets

图片.png

通过grafana查看mongo

图片.png

至此,mongodb监控完毕。

猜你喜欢

转载自blog.51cto.com/zyxjohn/2542022