首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

grafana&prometheus生产级容器化监控-3:监控mysql

目录

(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

代码语言:javascript
复制
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的数据库列表中:

代码语言:javascript
复制
 - 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列表中:

代码语言:javascript
复制
- 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实例:

代码语言:javascript
复制
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

下一篇
举报
领券