好用到炸天的 SQL数据库新年大礼包
点击蓝色“有关SQL”关注我哟
加个“星标”,天天与10000人一起快乐成长
图 | 榖依米
前两天,收到机工华章赵编辑的送书《数据库高效优化:架构、规范与SQL技巧》
前面的SQL开发部分,我略过了。此书最最最吸引我的地方有两个:
数据库画像,一直是我在思考做的事情:
数据库健康、性能监测平台
数据库的健康、性能监测平台,是对数据库画像的“像素级”应用。
说人话,数据库的每一个操作,都应该被我们捕捉到。只有全面掌控数据库的一举一动,我们才能正确掌舵数据库。
就像,我喜欢在家里按上 1-2个摄像头,设置关键入口的 snapshot 监控。出门之后,家里任何风吹草动,我都能了如指掌。
数据库也一样。
自己动手做一个监控平台的想法,早就有了。也动手写过,但就是搞不定可视化。用 Javascript 库搭建的柱状图,折线图,饼图,要多丑有多丑,偏偏自己还是颜控,受不了那种垃圾画面。
这个心病,一直折磨着我,把我带到了2021年。直到我遇见《数据库高效优化》,算是彻底解开了。
业界对数据库监测,有了强大的普罗米修斯计划,即 Prometheus. 对数据库爱好者来说,Prometheus 好用到爆炸!
所以,那个骂我的人,你可以闭嘴了!
于是我花了整个周末下午,整 5 个小时,搞定了这套数据库监控平台。以下是我的一些实践。
你完全可以不看这些实践,等你有需要再搜索具体实现。但你一定要知道,Prometheus 与 Grafana 带来的巨大好处!后台回复 Prometheus,我为你准备好了所有这些软件包
此图,是 Prometheus + Grafana 的灵魂
这个Dashboard,完全采用配置 + 拖拉方式生成。
如果你愿意,可以展示更多指标。我这里用了两个指标库。实际上可以有无数个。
这套平台,采用 Prometheus, mysqld_exporter 和 Grafana 软件包。
原理非常简单:
mysqld_exporter 采集 MySQL 服务器的性能数据,
Prometheus 抓取 mysqld_exporter 采集到的数据,
Grafana 这个可视化软件,则抓取 Prometheus 缓存的这些性能数据,用来作图。
更为惊奇的是,我们可以开发更多的 exporter “爬虫”,去爬取各类其他应用程序的性能数据,比如 Hadoop, Hive, Elasticsearch, Oracle 等等,甚至是崭露头角的 Clickhouse, 也有了适配器。
以下,是搭建这套平台的大体步骤,随版本不同,方法可能不同。所以我建议,等到你安装的时候,可以搜索谷歌,参考最新版本。
Prometheus 的安装
下载 Prometheus 安装包
后台回复 Prometheus ,即可下载所有本文涉及的软件,包括 Prometheus, Grafana, mysqld_exporter
解压缩 Prometheus 安装包,复制 Prometheus 和 Promtool 到 /usr/local/bin 下
在解压缩包目录下,修改配置文件,并将其复制到专有文件夹下
启动 Prometheus ,并同时指定配置文件
访问 http://localhost:9090 查看 Prometheus 的监控平台
mysqld_exporter 的安装
下载 mysqld_exporter 包 解压包,复制 mysqld_exporter 到 /usr/bin 系统目录下(不需要指定目录就可以执行) 编制 mysqld_exporter 配置文件 执行 mysqld_exporter ,同时指定配置文件,参数和自定义服务地址 配置 Prometheus 的配置文件,新建 yml 的 Job 配置参数
Grafana 的安装与数据可视化
下载Grafana 安装包 解压包,复制到 /usr/bin 启动 Grafana-server 添加 Prometheus 数据源 编制 mysql 指标报表,组驾驶舱(Dashboard)
重要的两个配置文件:
## Prometheus.yml
# my global config
global:
scrape_interval: 5s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 5s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
# - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
- job_name: 'local.mysql'
static_configs:
- targets: ['192.168.1.10:9104']
## mysql-export.cnf
[client]
user=MySQLAdmin
password=MySQLAdmin122
host=192.168.1.10
祝,周末快乐!
往期精彩: