转载自: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. java controller 异常捕获

    package com.aiyusheng.framework.exception; import lombok.Data; /** * base异常类 * @author :cza * @date ...

  2. 40+倍提升,详解 JuiceFS 元数据备份恢复性能优化之路

    JuiceFS 支持多种元数据存储引擎,且各引擎内部的数据管理格式各有不同.为了便于管理,JuiceFS 自 0.15.2 版本提供了 dump 命令允许将所有元数据以统一格式写入到 JSON 文件进 ...

  3. pyhon推荐的命名规范

    类别 public Internal Modules(模块) low_with_under _low_with_under Packages(包) low_with_under   Classes(类 ...

  4. surging作者出具压测结果

    前言 首先回应下@wen-wen 所贴的压测报告,我也把我和客户压测碰到的问题,和压测结果贴出来,这个结果是由客户提供的.不会有任何的舞弊手脚问题 问题一:Task.Run慎用 首先在最新的社区版本已 ...

  5. 电子表格分两级:Excel和WPS是一级,未来5年,75%的人将用二级

    你印象中的电子表格软件是哪些? 估计绝大多数人,都认为电子表格软件不就是Excel和WPS吗?顶多再加上永中office么,难道还有其他的电子表格软件不成? 没有错,excel和WPS,还有永中,确实 ...

  6. html + css 01: 3d立方体

    html + css实现3d立方体 css代码 /*页面背景色*/ body{ background-color: black; background-repeat:no-repeat; } /*** ...

  7. ShardingSphere数据库读写分离

    码农在囧途 最近这段时间来经历了太多东西,无论是个人的压力还是个人和团队失误所带来的损失,都太多,被骂了很多,也被检讨,甚至一些不方便说的东西都经历了,不过还好,一切都得到了解决,无论好坏,这对于个人 ...

  8. 非root用户linux下安装FFTW

    一.环境准备 确保g++可用本次编译是基于 GNU C++ 环境的,因此务必确定g++编译器可用,使用如下命令验证:命令:g++ --version出现类似如下输出则表明编译器可用: 二.下载FFTW ...

  9. 人理解迭代,神则体会递归,从电影艺术到Python代码实现神的逆向思维模式

    原文转载自「刘悦的技术博客」https://v3u.cn/a_id_186 "从来如此,便对么?",鲁迅先生在<狂人日记>中借狂人之口在月光下发出的质疑与呐喊,是的,从 ...

  10. cad工具快速选择特性里面是空的解决方法

    工具-选项-文件中,支持文件搜索路径中 添加,再浏览,找到"C:\Program Files\Common Files\Autodesk Shared"确定就OK了.