转载自:https://cloud.tencent.com/developer/article/1433280

文章目录1、Prometheus & Grafana 介绍1.1、Prometheus 介绍1.2、Grafana 介绍2、环境、软件准备3、Prometheus 安装配置3.1、 二进制源码安装3.2、 Docker 镜像安装3.3、源码编译安装4、MySQL Server Exporter 安装配置5、Grafana 安装并配置 DataSources5.1、HomeBrew 安装5.2、二进制包安装5.3、配置 DataSources6、仪表盘配置(MySQL monitoring using Prometheus)

1、Prometheus & Grafana 介绍

1.1、Prometheus 介绍

Prometheus 是一套开源的系统监控、报警、时间序列数据库的组合,最初有 SoundCloud 开发的,后来随着越来越多公司使用,于是便独立成开源项目。我们常用的 Kubernetes 容器集群管理中,通常会搭配 Prometheus 一起来进行监控。Prometheus 基本原理是通过 Http 协议周期性抓取被监控组件的状态,而输出这些被监控的组件的 Http 接口为 Exporter,现在各个公司常用的 Exporter 都已经提供了,可以直接安装使用,如 haproxy_exporterblockbox_exportermysqld_exporternode_exporter 等等,更多支持的组件可查看 这里

Prometheus 官网架构图如下:

Prometheus 具有以下特点:

  • 是一个时间序列由指标名称和键值对定义的多维数据模型
  • 支持灵活的查询语言
  • 不依赖分布式存储,单个服务器节点就可以
  • 时间序列集合通过 Http 上的 Pull 模型来进行
  • 支持通过中间网关推送时间
  • 通过服务发现或静态配置来发现目标
  • 支持多种模式的图形和仪表盘

1.2、Grafana 介绍

Grafana 是一个可视化仪表盘,它拥有美观的图标和布局展示,功能齐全的仪表盘和图形编辑器,默认支持 CloudWatch、Graphite、Elasticsearch、InfluxDB、Mysql、PostgreSQL、Prometheus、OpenTSDB 等作为数据源。我们可以将 Prometheus 抓取的数据,通过 Grafana 优美的展示出来,非常直观。

2、环境、软件准备

本次演示环境,我是在本机 MAC OS 上操作,以下是安装的软件及版本:

  • go: go1.10.3 darwin/amd64
  • prometheus: 2.3.2.darwin-amd64
  • node_exporter: 0.16.0.darwin-amd64
  • mysqld_exporter: 0.11.0.darwin-amd64
  • grafana: 5.2.2.darwin-amd64

注意:这里 prometheusnode_exportermysqld_exporter 都是 GO 语言开发,其运行环境依赖 GO,所以本机需要安装好 GO 环境,这里忽略 GO 的安装过程,着重介绍下其他几个的安装配置过程。实际应用中,如果运行在 Linux 环境下,以上各个软件也要安装系统对应版本。

3、Prometheus 安装配置

Prometheus 安装方式有多种,可以二进制源码安装、Docker 启动安装或源码编译安装。

3.1、 二进制源码安装

首先,下载 Prometheus 二进制源码安装包,可以访问 Prometheus download 页面下载指定版本。

$ cd ~/tmp
$ wget https://github.com/prometheus/prometheus/releases/download/v2.3.2/prometheus-2.3.2.darwin-amd64.tar.gz
$ tar -zxvf prometheus-2.3.2.darwin-amd64.tar.gz
$ tree prometheus-2.3.2.darwin-amd64
prometheus-2.3.2.darwin-amd64
|-- LICENSE
|-- NOTICE
|-- console_libraries
| |-- menu.lib
| `-- prom.lib
|-- consoles
| |-- index.html.example
| |-- node-cpu.html
| |-- node-disk.html
| |-- node-overview.html
| |-- node.html
| |-- prometheus-overview.html
| `-- prometheus.html
|-- prometheus
|-- prometheus.yml
`-- promtool

启动 Prometheus,使用默认配置文件 prometheus.yml 启动。

$ cd prometheus-2.3.2
$ ./prometheus
level=info ts=2018-07-31T07:09:59.112915066Z caller=main.go:222 msg="Starting Prometheus" version="(version=2.3.2, branch=HEAD, revision=71af5e29e815795e9dd14742ee7725682fa14b7b)"
level=info ts=2018-07-31T07:09:59.113018589Z caller=main.go:223 build_context="(go=go1.10.3, user=root@5258e0bd9cc1, date=20180712-14:08:00)"
level=info ts=2018-07-31T07:09:59.11303192Z caller=main.go:224 host_details=(darwin)
level=info ts=2018-07-31T07:09:59.11304525Z caller=main.go:225 fd_limits="(soft=4864, hard=9223372036854775807)"
level=info ts=2018-07-31T07:09:59.113726479Z caller=main.go:533 msg="Starting TSDB ..."
level=info ts=2018-07-31T07:09:59.114182265Z caller=web.go:415 component=web msg="Start listening for connections" address=0.0.0.0:9090
level=info ts=2018-07-31T07:09:59.118617867Z caller=main.go:543 msg="TSDB started"
level=info ts=2018-07-31T07:09:59.118678076Z caller=main.go:603 msg="Loading configuration file" filename=prometheus.yml
level=info ts=2018-07-31T07:09:59.120520499Z caller=main.go:629 msg="Completed loading of configuration file" filename=prometheus.yml
level=info ts=2018-07-31T07:09:59.120546718Z caller=main.go:502 msg="Server is ready to receive web requests."

此时,Prometheus 服务就在本地启动起来了,浏览器访问 http://localhost:9090 访问 Web 页面。

Prometheus 默认提供一些 metric 指标来供我们选择监控,通过地址 http://localhost:9090/metric 可以看到所有指标列表。

例如,我们选择了 go_gc_duration_seconds_count 这个监控 go 执行 gc 持续时间秒数指标,点击 “Execute” 后,使用默认的 Promdash 页面展示,一段时间后,监控结果如下:

3.2、 Docker 镜像安装

Docker 镜像启动很简单,只需要一条命令即可,使用默认配置的话,可以直接使用如下命令启动。

$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 prometheus/prometheus

我们也可以使用自己的 prometheus.yml 配置文件,并且挂载数据目录到主机,来启动镜像。

$ docker run --name prometheus -d -p 127.0.0.1:9090:9090 \
-v /tmp/prometheus.yml:/etc/prometheus/prometheus.yml \
-v /tmp/prometheus-data:/prometheus-data \
prom/prometheus

3.3、源码编译安装

源码编译安装,我们需要本地有一个运行的 GO 环境,而且版本不低于 1.10.x

$ mkdir -p $GOPATH/src/github.com/prometheus
$ cd $GOPATH/src/github.com/prometheus
$ git clone https://github.com/prometheus/prometheus.git
$ cd prometheus
$ make build
$ ./prometheus --config.file=your_config.yml

4、MySQL Server Exporter 安装配置

现在,Prometheus 服务本地已经启动了,接下来,我们需要安装并运行 Exporter,它的主要作用是持续输出监控的组件信息并格式化,同时提供 Http 接口供 Prometheus 服务来抓取。Exporter 也是通过 GO 语言编写的,Prometheus GitHub 已经为我们提供了很多实用的 Exporter,直接拿来使用即可。

首先,下载 mysql_exporter 二进制文件到本地。

$ cd ~/tmp
$ wget https://github.com/prometheus/mysqld_exporter/releases/download/v0.11.0/mysqld_exporter-0.11.0.darwin-amd64.tar.gz
$ tar -zxvf mysqld_exporter-0.11.0.darwin-amd64.tar.gz
$ tree mysqld_exporter-0.11.0.darwin-amd64
mysqld_exporter-0.11.0.darwin-amd64
├── LICENSE
├── NOTICE
└── mysqld_exporter

接着,需要配置要监控的数据库,为 mysql_exporter 创建一个指定账户用来连接数据库(当然,也可以直接用 root 或者其他有权限的账户,不过建议创建一个专有账户)。

CREATE USER 'exporter'@'localhost' IDENTIFIED BY 'password' WITH MAX_USER_CONNECTIONS 3;
GRANT PROCESS, REPLICATION CLIENT, SELECT ON *.* TO 'exporter'@'localhost';

然后,需要配置一下数据库连接认证信息并启动 Exporter,有两种方式配置:

  • 使用环境变量方式 $ export DATA_SOURCE_NAME='exporter:password@(localhost:3306)/' $ ./mysqld_exporter
  • 使用配置文件方式
$ vim ~/.my.cnf
[client]
host=localhost
port=3306
user=exporter
password=password $ ./mysqld_exporter

注意:mysqld_exporter 默认使用 ~/.my.cnf 作为数据库认证文件,如果我们指定其他路径文件,需要启动时指定路径,例如:./mysqld_exporter --config.my-cnf="<file_path>/.my.cnf"

查看日志输出,Exporter 启动成功。

$ ./mysqld_exporter
INFO[0000] Starting mysqld_exporter (version=0.11.0, branch=HEAD, revision=5d7179615695a61ecc3b5bf90a2a7c76a9592cdd) source="mysqld_exporter.go:206"
INFO[0000] Build context (go=go1.10.3, user=root@3d3ff666b0e4, date=20180629-15:01:12) source="mysqld_exporter.go:207"
INFO[0000] Enabled scrapers: source="mysqld_exporter.go:218"
INFO[0000] --collect.slave_status source="mysqld_exporter.go:222"
INFO[0000] --collect.info_schema.tables source="mysqld_exporter.go:222"
INFO[0000] --collect.global_status source="mysqld_exporter.go:222"
INFO[0000] --collect.global_variables source="mysqld_exporter.go:222"
INFO[0000] Listening on :9104 source="mysqld_exporter.go:232"

此时,本地浏览器访问 http://localhost:9104/metrics 可以看到 mysql 相关的所有监控指标列表。

现在,Prometheus 和 mysqld_exporter 服务都已经启动起来了,那么接下来就需要将二者关联起来,让 Prometheus 来定时抓取 Exporter 提供的数据。我们需要修改 Prometheus 的配置文件 prometheus.yml 增加 mysql 相关 exporter job。

$ cd ~/tmp/prometheus-2.3.2.darwin-amd64
$ vim prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # 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:
scrape_configs: - job_name: 'prometheus'
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus - job_name: 'mysql'
static_configs:
- targets: ['localhost:9104']
labels:
instance: mysql

说明一下:增加了一个 job_name 为 mysql 的任务,targets 为指向 mysqld_exporter 提供的 Http 接口服务,labels 为该 job 配置一个标签,方便下边 Grafana 页面显示,下边会讲到。

修改完成后,重启 Prometheus 服务。此时,我们再次访问 http://localhost:9090/,点击 “Status” 下 “Targets” 可以查看所有的 Targets 了,这里就有默认的 prometheus 和新配置的 mysql 啦!

此时,我们就可以在下拉列表中选择 mysql 相关的指标监控了,例如选择 mysql_global_status_uptime 指标,一段时间后,监控页面如下:

不过,大家有没有觉得 Prometheus 自带的图形并不美观,而且功能单一,此时,Grafana 该上台了,我们要使用 Grafana 作为 Prometheus 的展示仪表盘,功能强大而且界面美观。

5、Grafana 安装并配置 DataSources

Grafana 安装也很方便,根据官网文档 Grafana Install,里面有针对各个系统提供的安装方法。参照 Mac 上安装方案,可以采用 HomeBrew 安装或者二进制源码安装方式。

5.1、HomeBrew 安装

# 安装 Grafana
$ brew update
$ brew install grafana # 安装 homebrew/services 服务
$ brew tap homebrew/services
# 启动 Grafana 服务
$ brew services start grafana

5.2、二进制包安装

$ cd ~/tmp
$ wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-5.2.2.darwin-amd64.tar.gz
$ tar -zxvf grafana-5.2.2.darwin-amd64.tar.gz
$ cd grafana-5.2.2
$ ./bin/grafana-server web
INFO[07-31|17:58:14] Starting Grafana logger=server version=5.2.2 commit=aeaf7b2 compiled=2018-07-25T19:17:28+0800
INFO[07-31|17:58:14] Config loaded from logger=settings file=/Users/wanyang3/tmp/grafana-5.2.2/conf/defaults.ini
INFO[07-31|17:58:14] Path Home logger=settings path=/Users/wanyang3/tmp/grafana-5.2.2
INFO[07-31|17:58:14] Path Data logger=settings path=/Users/wanyang3/tmp/grafana-5.2.2/data
INFO[07-31|17:58:14] Path Logs logger=settings path=/Users/wanyang3/tmp/grafana-5.2.2/data/log
INFO[07-31|17:58:14] Path Plugins logger=settings path=/Users/wanyang3/tmp/grafana-5.2.2/data/plugins
INFO[07-31|17:58:14] Path Provisioning logger=settings path=/Users/wanyang3/tmp/grafana-5.2.2/conf/provisioning
INFO[07-31|17:58:14] App mode production logger=settings
INFO[07-31|17:58:14] Initializing SqlStore logger=server
INFO[07-31|17:58:14] Connecting to DB logger=sqlstore dbtype=sqlite3
INFO[07-31|17:58:14] Starting DB migration logger=migrator
INFO[07-31|17:58:14] Initializing SearchService logger=server
INFO[07-31|17:58:14] Initializing PluginManager logger=server
INFO[07-31|17:58:14] Starting plugin search logger=plugins
INFO[07-31|17:58:14] Initializing InternalMetricsService logger=server
INFO[07-31|17:58:14] Initializing AlertingService logger=server
INFO[07-31|17:58:14] Initializing HTTPServer logger=server
INFO[07-31|17:58:14] Initializing CleanUpService logger=server
INFO[07-31|17:58:14] Initializing NotificationService logger=server
INFO[07-31|17:58:14] Initializing ProvisioningService logger=server
INFO[07-31|17:58:14] Initializing RenderingService logger=server
INFO[07-31|17:58:14] Initializing TracingService logger=server
INFO[07-31|17:58:14] Initializing Stream Manager
INFO[07-31|17:58:14] HTTP Server Listen logger=http.server address=0.0.0.0:3000 protocol=http subUrl= socket=

启动完成后,本地浏览器访问 http://localhost:3000 即可打开 Grafana Web 页面,使用默认管理员账户: admin 密码:admin 登录并修改初始密码后,即可开始体验 Grafana,页面是不是很美观。

5.3、配置 DataSources

接下来,我们需要添加一个 Prometheus 类型的数据源,将二者关联起来,点击 “Add data source” 按钮,填写 Prometheus 相关信息,如下:

Type 处选择 Prometheus,URL 处填写 Prometheus 连接地址,因为我们上边服务安装在本地,所以这里填写 http://localhost:9090,其他默认即可,填写完毕,点击下方 “Save & Test” 按钮,如果配置成功,会提示 Data source is working 消息。

此时,已经添加好了 Prometheus 数据源,Grafana 默认给该类型监控提供了三个 Dashboard,我们可以直接在页面上点击 “Import” 即可,此时在 Dashboard 页面选择其中的一个类型,就可以看到监控数据图形啦!例如,这里我们选择 Prometheus 2.0 Stats 类型 Dashboard,一段时间后,看到的监控页面如下:

6、仪表盘配置(MySQL monitoring using Prometheus)

最后,我们需要在 Grafana 上添加 Mysql Prometheus 类型的 Dashboard,当然对应的 Dashboard Json 文件,可以直接拿现成的来用,别人写的比较全面,也比较好。这些 Dashboard Json 文件可以从 这里 找到,我们可以 Clone 到本地,导入到 Grafana 里面即可。

$ cd ~/tmp/
$ git clone https://github.com/percona/grafana-dashboards.git
$ tree grafana-dashboards/dashboards/
grafana-dashboards/dashboards/
├── Advanced_Data_Exploration.json
├── Amazon_RDS___Aurora_MySQL__Metrics.json
├── CPU_Utilization_Details_Cores.json
├── Cross_Server_Graphs.json
├── Disk_Performance.json
├── Disk_Space.json
├── Home_Dashboard.json
├── MongoDB_Cluster_Summary.json
├── MongoDB_InMemory.json
├── MongoDB_MMAPv1.json
├── MongoDB_Overview.json
├── MongoDB_ReplSet.json
├── MongoDB_RocksDB.json
├── MongoDB_WiredTiger.json
├── MySQL_Amazon_Aurora_Metrics.json
├── MySQL_Command_Handler_Counters_Compare.json
├── MySQL_InnoDB_Compression.json
├── MySQL_InnoDB_Metrics.json
├── MySQL_InnoDB_Metrics_Advanced.json
├── MySQL_MyISAM_Aria_Metrics.json
├── MySQL_MyRocks_Metrics.json
├── MySQL_Overview.json
├── MySQL_Performance_Schema.json
├── MySQL_Query_Response_Time.json
├── MySQL_Replication.json
├── MySQL_Table_Statistics.json
├── MySQL_TokuDB_Metrics.json
├── MySQL_User_Statistics.json
├── Network_Overview.json
├── Overview_NUMA_metrics.json
├── PXC_Galera_Cluster_Overview.json
├── PXC_Galera_Graphs.json
├── Prometheus.json
├── Prometheus_Exporter_Status.json
├── Prometheus_Exporters_Overview.json
├── ProxySQL_Overview.json
├── Summary_Dashboard.json
├── System_Overview.json
├── Trends_Dashboard.json
├── pmm-add-instance.json
├── pmm-qan.json
├── pmm-settings.json
└── pmm-summary.json

这里就是我们需要的 Dashboard Json 文件,包含 Mysql、MongoDB、System、pmm 等,可以直接拿来使用。点击 “Import” 进入页面后,点击 “Upload .json File” 按钮,选择本地 MySQL_Overview.json 文件,点击 “Import” 即可完成导入,

此时,我们就可以从页面上直观的看到 Prometheus 收集到的 Mysql 相关的各个指标监控的,例如:Mysql Connection、Mysql Questions、Mysql Thread Cache、Mysql Network Traffic 等等一系列指标。同时,还可以调整查询区间范围,编译每一个指标信息,查看每个指标信息详情,自定义拖拽排版面板等功能,功能很强大。

还记得上边 Prometheus 配置文件中的 labels 么,我们配置为 mysql,在这里 Grafana 页面上边 Host 就自动关联了 mysql,如果没填 labels,这里会显示 localhost:9104,不是很直观的哈!

参考资料

初试 Prometheus + Grafana 监控系统搭建并监控 Mysql的更多相关文章

  1. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)

    一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip influxdb-1.2.2_windows_amd64.zip grafana-4.2.0.wind ...

  2. Windows下本机简易监控系统搭建(Telegraf+Influxdb+Grafana)--转

    原文地址:http://www.cnblogs.com/liugh/p/6683488.html 一.文件准备 1.1 文件名称 telegraf-1.2.1_windows_amd64.zip in ...

  3. 使用 Prometheus + Grafana 对 Kubernetes 进行性能监控的实践

    1 什么是 Kubernetes? Kubernetes 是 Google 开源的容器集群管理系统,其管理操作包括部署,调度和节点集群间扩展等. 如下图所示为目前 Kubernetes 的架构图,由 ...

  4. Kubernetes使用prometheus+grafana做一个简单的监控方案

    前言 本文介绍在k8s集群中使用node-exporter.prometheus.grafana对集群进行监控.其实现原理有点类似ELK.EFK组合.node-exporter组件负责收集节点上的me ...

  5. 分布式监控系统Zabbix3.2监控数据库的连接数

    在 分布式监控系统Zabbix3.2跳坑指南 和 分布式监控系统Zabbix3.2给异常添加邮件报警 已经介绍了如何安装以及报警.此篇通过介绍监控数据库的3306端口连接数来了解如何监控其它端口和配置 ...

  6. 阶段2-新手上路\项目-移动物体监控系统\Sprint3-移动监控主系统设计与开发

    移动图像监控系统 去找一些相关开源程序进行移植:百度搜索-linux 移动监控 motion是一套免费开源的移动图像监测程序 前面我们已经使用了很多开源软件,他们的使用方法都是大同小异的 1).先在当 ...

  7. 移动物体监控系统-sprint3移动监控主系统设计与开发

    一.移动监控的原理 通过获取摄像头图像,比较前后每一帧的图像数据,从而实现移动物体监控.所有移动监控原理都是这样,只是图像帧的对比的算法不一样. 二.移动物体监控系统的实现 选择开源的移动监控软件mo ...

  8. Collectd+InfluxDB+Grafana监控系统搭建

    环境配置 节点 配置 类型 操作系统 Sched 2G 2CPU 50GB ens3=>192.168.200.11 KVM虚拟机 CentOS 7 Nova 4G 2CPU 50GB ens3 ...

  9. Telegraf+Influxdb+Grafana(Windows下本机简易监控系统搭建)

    1.文件名称 telegraf-1.5.0_windows_amd64.zip influxdb-1.4.2_windows_amd64.zip grafana-4.6.3.windows-x64.z ...

随机推荐

  1. 5-4 Seata 分布式事务管理

    下载Seata https://github.com/seata/seata/releases https://github.com/seata/seata/releases/download/v1. ...

  2. Note -「序列元素在线段树上的深度」 感悟

    0x01 前言 想法源于一道你谷的毒瘤题目. 这个方面的知识点好像挺新颖的. 于是和 JC 一起想出了该命题的 \(O(n)\) 解法. 0x02 算法本身 总所周知,线段树上的节点都对应表示的原序列 ...

  3. [SWPU2019]Web1-1|SQL注入

    1.打开之后界面如下: 2.查看源代码.登录注入等未发现有用信息,结果如下: 3.进行注册试试,注册时发现admin账户已被注册,随便注册一个账户并登录,结果如下: 申请发布广告页面如下: 4.发布广 ...

  4. 2022.7.9 单向链表&数组优化

    相比起数组,链表解决了数组不方便移动,插入,删除元素的弊端,但相应的,链表付出了更加大的内存牺牲换来的这些功能的实现. 链表概述 包含单链表,双链表,循环单链表,实际应用中的功能不同,但实现方式都差不 ...

  5. day01--MarkDown语法格式

    MarkDown语法格式 标题 一级标题 一级标题: 井号+空格+标题名字 二级标题 二级标题: 双井号+空格+标题名字 三级标题 三级标题: 三井号+空格+标题名字 ......... 字体 斜体( ...

  6. python获取本机的安装所有应用( Windows)

    Windows获取本机的安装所有应用 采用操作注册表的方式,理论上其他可通过操作注册表方式的动作均可 import winreg def get_window_software(hive, flag) ...

  7. IDEA自定义liveTemplates(方法模板、类模板)

    IDEA自定义liveTemplates(方法模板.类模板) 前言,搞这个模板有何意义? 降低大家写方法注释的成本,统一风格.有时候不是开发同学不爱写注释,而是没有合适的载体和空间. IDEA模板设置 ...

  8. Javaweb06-JDBC

    1.jdbc.properties配置文件 jdbc.properties driverClass=com.mysql.jdbc.Driver jdbcUrl=jdbc:mysql://localho ...

  9. Oracle-查询之函数

    DQL语句:查询语句用于查询表中数据DQL必须包含的两个部分:select 子句 和from 子句select子句:指定要查询的内容,可以指定表中的具体字段,*号,函数,或者表达式from子句:指定数 ...

  10. Excel 运算符(三):文本连接符

    文本连接符&用来合并文本串.比如,连接"计算机"和"基础"两个文本串:"计算机基础"&"基础",最终结果 ...