prometheus-operator監控mysql服務


本次不講理論,直接上乾貨,理論百度能找到一大堆,直接上個人步驟。
node

建立sql,建立mysql-exporter鏈接mysql須要的用戶,授予相應權限。python

CREATE USER 'mysqlexporter'@"%"  IDENTIFIED BY 'mysqlexporter';
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'mysqlexporter'@'%'  IDENTIFIED BY 'mysqlexporter' WITH MAX_USER_CONNECTIONS 30; 
GRANT select on performance_schema.* to "mysqlexporter"@"%" IDENTIFIED BY 'mysqlexporter';
flush privileges;

cat mysql-exporter-service-account.yamlmysql

apiVersion: v1
kind: ServiceAccount
metadata:
  name: mysql-exporter

cat mysql-exporter-cluster-role.yamlsql

kind: ClusterRole
metadata:
  name: mysql-exporter
rules:
- apiGroups: ["authentication.k8s.io"]
  resources:
  - tokenreviews
  verbs: ["create"]
- apiGroups: ["authorization.k8s.io"]
  resources:
  - subjectacce***eviews
  verbs: ["create"]

cat mysql-exporter-cluster-role-binding.yamlapi

kind: ClusterRoleBinding
metadata:
  name: mysql-exporter
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: mysql-exporter
subjects:
- kind: ServiceAccount
  name: mysql-exporter
  namespace: monitoring

cat mysql-exporter-service-account.yamlapp

apiVersion: v1
kind: ServiceAccount
metadata:
  name: mysql-exporter

cat mysql-exporter-cluster-role-binding.yamlide

apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRoleBinding
metadata:
  name: mysql-exporter
roleRef:
  apiGroup: rbac.authorization.k8s.io
  kind: ClusterRole
  name: mysql-exporter
subjects:
- kind: ServiceAccount
  name: mysql-exporter
  namespace: monitoring
[root@max01 mysql-exporter]# cat mysql-exporter-cluster-role.yaml
apiVersion: rbac.authorization.k8s.io/v1beta1
kind: ClusterRole
metadata:
  name: mysql-exporter
rules:
- apiGroups: ["authentication.k8s.io"]
  resources:
  - tokenreviews
  verbs: ["create"]
- apiGroups: ["authorization.k8s.io"]
  resources:
  - subjectacce***eviews
  verbs: ["create"]

運行mysql-exporter容器,利用第一步建立的帳戶密碼信息,經過DATA_SOURCE_NAME環境變量傳入鏈接mysql實例的信息spa

cat mysql-exporter-deployment.yaml3d

apiVersion: apps/v1
kind: Deployment
metadata:
  name: mysql-exporter
  namespace: monitoring
spec:
  replicas: 3
  selector:
    matchLabels:
      k8s-app: mysql-exporter
  template:
    metadata:
      labels:
        k8s-app: mysql-exporter
      name: mysql-exporter
    spec:
      containers:
      - image: prom/mysqld-exporter:latest
        imagePullPolicy: "IfNotPresent"
        env:
          - name: DATA_SOURCE_NAME
            value: "mysqlexporter:mysqlexporter@(192.168.10.135:3306)/mysql" 
        args:
          - "--collect.info_schema.processlist"
          - "--collect.info_schema.innodb_metrics"
          - "--collect.info_schema.tablestats"
          - "--collect.info_schema.userstats"
          - "--collect.engine_innodb_status"
          - "--collect.slave_hosts"
        name: mysql-exporter
        ports:
          - containerPort: 9104
            name: mysql-metrics

須要暴露mysql-exporter的9104端口。orm

cat mysql-exporter-service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    k8s-app: mysql-exporter
  name: mysql-exporter
  namespace: monitoring
spec:
  type: NodePort
  ports:
    - name: mysql-metrics
      port: 9104
      protocol: TCP
      targetPort: 9104
      nodePort: 30104
  selector:
    k8s-app: mysql-exporter

用kubectl get svc -n monitoring查看mysql-exporter的服務

圖片.png

cat prometheus-k8s-service-monitor-mysql-exporter.yaml

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: mysql-exporter
  namespace: monitoring
  labels:
    k8s-app: mysql-exporter
spec:
  jobLabel: k8s-app
  selector:
    matchLabels:
      k8s-app: mysql-exporter
  namespaceSelector:
    matchNames:
    - monitoring
  endpoints:
   - port: mysql-metrics
     scheme: http
     interval: 30s
     bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token
     tlsConfig:
       insecureSkipVerify: true

根據暴露的30104端口查看是否能獲取數據,是否能夠正常獲取到mysql信息;其中mysql_up 爲1表示正常採集到數據。

圖片.png

登陸prometheus查看targets

圖片.png

登陸grafana查看數據

圖片.png

至此,mysql監控完畢。

相關文章
相關標籤/搜索