目录
(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,以及合理拓扑,参见:
grafana&prometheus生产级容器化监控-1:生产级容器化
(2).前置准备
容器化mysql数据库实例,可以使用:
https://github.com/hepyu/k8s-app-config/tree/master/yaml/min-cluster-allinone/mysql-min
参考文章:
kubernetes-5:使用helm与yaml两种方式进行mysql容器化
创建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).相关文章
grafana&prometheus生产级容器化监控-1:生产级容器化
kubernetes-5:使用helm与yaml两种方式进行mysql容器化
percona官方grafana-dashboards:
https://github.com/percona/grafana-dashboards