目錄
(1).前置閱讀
(2).前置準備
(3).容器化生產規劃
(4).使用mysqld-exporter監控mysql實例
1.鏡像選擇
2.容器化配置
(5).容器化步驟
(6).關鍵配置
1.prometheus-storage-mysql-configmap.yaml
2.datasource.yml
3.provision.yml
4.exporter-deployment-storage-mysql-apollo.yaml
(7).特別注意
(8).最終效果
(9).相關文章
(1).前置閱讀
需要先行部署grafana/prometheus,以及合理拓撲,參見:
(2).前置準備
容器化mysql數據庫實例,可以使用:
https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/mysql-min
參考文章:
創建exporter專用用戶:
CREATE USER 'exporter'@'%' IDENTIFIED BY 'exporterpwd';
GRANT PROCESS, REPLICATION CLIENT ON *.* TO 'exporter'@'%';
GRANT SELECT ON performance_schema.* TO 'exporter'@'%';
在本例中,圖簡略,使用的是之前已經存在的用戶密碼:apollo/admin,但生產環境必須使用新的mysql用戶,這樣更加安全可靠,也方便監控。
(3).容器化生產規劃
原始圖片位於:
https://github.com/hepyu/k8s-app-config/blob/master/product/standard/grafana-prometheus-pro/images/grafana-prometheus%E7%94%9F%E4%BA%A7%E7%BA%A7%E5%AE%9E%E8%B7%B5.jpg
如上圖所示:
容器化多個prometheus實例
由於當數據量很大(metrics很多)或者grafana選擇的時間跨度很大時,prometheus的吞吐性能會很有問題,再加上會有很多人通過grafana查看各業務數據,如果生產環境只部署一個prometheus,肯定是有問題的,prometheus會經常性崩潰。
同時,這樣也可以設置不同的數據保存時間,比如對於mq來說,我希望保留更長時間的數據。
(4).使用mysqld-exporter監控mysql實例
1.鏡像選擇
使用percona公司的mysqld-exporter組件監控Mysql數據庫實例:
https://github.com/prometheus/mysqld_exporter
注:
percona出了很多關於mysql的產品,比如binlog分析等工具。
筆者提供mysqld-exporter的容器化配置,位於:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/exporter-storage-mysql
2.容器化配置
建立新的prometheus實例,專門用於存放mysql實例的metrics,同時dashboards導入方式選擇provisioning方式(也可以選擇grafana的plugin的方式導入percona-mysql的dashboard,但是這種方式無法自定義目錄)。
筆者提供生產級容器化配置,位於:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro
prometheus-storage-mysql容器化配置:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/prometheus-storage-mysql
dashboard位置,從percona的grafana-dashboard中拷貝出mysql相關的dashboards:
https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql
(5).容器化步驟
大體步驟,注意本例配置默認使用local pv(生產環境需要換成雲存儲),需要使用者自行創建。
1.cd https://github.com/hepyu/k8s-app-config/tree/master/product/standard/grafana-prometheus-pro
#Kubectl apply -f grafana-prometheus-image-repo-secret.yaml (生產環境使用)
Kubectl apply -f grafana-prometheus-namespace.yaml
2.cd grafana-prometheus-pro/prometheus-storage-mysql
Kubectl apply -f .
3.cd grafana-prometheus-pro/grafana
Kubectl apply -f .
(6).關鍵配置
1.prometheus-storage-mysql-configmap.yaml
相對路徑:prometheus-storage-mysql/prometheus-storage-mysql-configmap.yaml
配置服務發現,從k8s的那些pod拉取metrics:
label_exporter=mysql, namespace=monitor的pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_exporter, __meta_kubernetes_namespace]
action: keep
regex: mysql;monitor
2.datasource.yml
相對路徑:grafana/provisioning/datasources
將數據庫prometheus-storage-mysql放到grafana的數據庫列表中:
- name: prometheus-storage-mysql
type: prometheus
access: proxy
orgId: 1
url: http://prometheus-storage-mysql:9090
isDefault: false
jsonData:
tlsAuth: false
tlsAuthWithCACert: false
3.provision.yml
相對路徑:grafana/provisioning/dashboards
將mysql-dashboards放到grafana的dashboards列表中:
- name: 'storage-mysql'
orgId: 1
folder: 'storage-mysql'
folderUid: ''
type: file
options:
path: /var/lib/grafana/k8s-app-config/product/standard/grafana-prometheus-pro/grafana/provisioning/dashboards/storage-mysql
4.exporter-deployment-storage-mysql-apollo.yaml
相對路徑:exporter-storage-mysql/exporter-deployment-storage-mysql-apollo.yaml
配置要監控的目標mysql實例:
containers:
- name: exporter-mysql-apollo
#生產環境換成自己的鏡像倉庫
image: prom/mysqld-exporter:v0.11.0
env:
- name: DATA_SOURCE_NAME
value: "apollo:admin@(mysql-min.mysql-min:3306)/"
(7).特別注意
需要注意,如果使用的是雲RDS,關於mysql宿主機的監控dashboard是沒有數據的,如果是獨立部署的mysql,mysqld_exporter一定要和mysql實例在一臺機器,這樣才能收集到mysql宿主機的信息,比如磁盤,io等。
(8).最終效果
(9).相關文章
percona官方grafana-dashboards:
https://github.com/percona/grafana-dashboards
閱讀更多 實戰架構 的文章