好用到炸天的 SQL数据库新年大礼包

共 2989字,需浏览 6分钟

 ·

2021-02-02 04:49

点击蓝色“有关SQL”关注我哟

加个“星标”,天天与10000人一起快乐成长


图 | 榖依米


前两天,收到机工华章赵编辑的送书《数据库高效优化:架构、规范与SQL技巧》


前面的SQL开发部分,我略过了。此书最最最吸引我的地方有两个:

数据库画像,一直是我在思考做的事情

数据库画像,怎么做?

数据库健康、性能监测平台

为什么我们需要一个 SQL 数据库审核平台


数据库的健康、性能监测平台,是对数据库画像的“像素级”应用。

说人话,数据库的每一个操作,都应该被我们捕捉到。只有全面掌控数据库的一举一动,我们才能正确掌舵数据库。

就像,我喜欢在家里按上 1-2个摄像头,设置关键入口的 snapshot 监控。出门之后,家里任何风吹草动,我都能了如指掌。

数据库也一样。


自己动手做一个监控平台的想法,早就有了。也动手写过,但就是搞不定可视化。用 Javascript 库搭建的柱状图,折线图,饼图,要多丑有多丑,偏偏自己还是颜控,受不了那种垃圾画面。

这个心病,一直折磨着我,把我带到了2021年。直到我遇见《数据库高效优化》,算是彻底解开了。



业界对数据库监测,有了强大的普罗米修斯计划,即 Prometheus. 对数据库爱好者来说,Prometheus 好用到爆炸!

所以,那个骂我的人,你可以闭嘴了



于是我花了整个周末下午,整 5 个小时,搞定了这套数据库监控平台。以下是我的一些实践。

你完全可以不看这些实践,等你有需要再搜索具体实现。但你一定要知道,Prometheus 与 Grafana 带来的巨大好处!后台回复 Prometheus,我为你准备好了所有这些软件包


此图,是 Prometheus + Grafana 的灵魂


这个Dashboard,完全采用配置 + 拖拉方式生成。

如果你愿意,可以展示更多指标。我这里用了两个指标库。实际上可以有无数个。

这套平台,采用 Prometheus, mysqld_exporter 和 Grafana 软件包。

原理非常简单:

  1. mysqld_exporter 采集 MySQL 服务器的性能数据,

  2. Prometheus 抓取 mysqld_exporter 采集到的数据,

  3.  Grafana 这个可视化软件,则抓取 Prometheus 缓存的这些性能数据,用来作图。

更为惊奇的是,我们可以开发更多的 exporter “爬虫”,去爬取各类其他应用程序的性能数据,比如 Hadoop, Hive,  Elasticsearch, Oracle 等等,甚至是崭露头角的 Clickhouse, 也有了适配器。

以下,是搭建这套平台的大体步骤,随版本不同,方法可能不同。所以我建议,等到你安装的时候,可以搜索谷歌,参考最新版本


 Prometheus 的安装

  1. 下载 Prometheus 安装包

后台回复 Prometheus ,即可下载所有本文涉及的软件,包括 Prometheus, Grafana, mysqld_exporter

  1. 解压缩 Prometheus 安装包,复制 Prometheus 和 Promtool 到 /usr/local/bin 下

  2. 在解压缩包目录下,修改配置文件,并将其复制到专有文件夹下

  3. 启动 Prometheus ,并同时指定配置文件

  4. 访问 http://localhost:9090 查看 Prometheus 的监控平台


mysqld_exporter 的安装

  1. 下载 mysqld_exporter 包
  2. 解压包,复制 mysqld_exporter 到 /usr/bin 系统目录下(不需要指定目录就可以执行)
  3. 编制 mysqld_exporter 配置文件
  4. 执行 mysqld_exporter ,同时指定配置文件,参数和自定义服务地址
  5. 配置 Prometheus 的配置文件,新建 yml 的 Job 配置参数

Grafana 的安装与数据可视化

  1. 下载Grafana 安装包
  2. 解压包,复制到 /usr/bin
  3. 启动 Grafana-server
  4. 添加 Prometheus 数据源
  5. 编制 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

祝,周末快乐!



--完--





往期精彩:


本号精华合集(三)

如何写好 5000 行的 SQL 代码

如何提高阅读 SQL 源代码的快感

我在面试数据库工程师候选人时,常问的一些题

零基础 SQL 数据库小白,从入门到精通的学习路线与书单










浏览 12
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报
评论
图片
表情
推荐
点赞
评论
收藏
分享

手机扫一扫分享

分享
举报