部署一套完整的 Prometheus+Grafana 智能监控告警系统
01概述
1.1 Grafana介绍Grafana是一个跨平台的开源的度量分析和可视化工具,可以通过将采集的数据查询然后可视化的展示,并及时通知。它主要有以下六大特点:• 展示方式: 快速灵活的客户端图表,面板插件有许多不同方式的可视化指标和日志,官方库中具有丰富的仪表盘插件,比如热图、折线图、图表等多种展示方式;• 数据源: Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB等;• 通知提醒: 以可视方式定义最重要指标的警报规则,Grafana将不断计算并发送通知,在数据达到阈值时通过Slack、PagerDuty等获得通知;• 混合展示: 在同一图表中混合使用不同的数据源,可以基于每个查询指定数据源,甚至自定义数据源;• 注释: 使用来自不同数据源的丰富事件注释图表,将鼠标悬停在事件上会显示完整的事件元数据和标记;• 过滤器: Ad-hoc过滤器允许动态创建新的键/值过滤器,这些过滤器会自动应用于使用该数据源的所有查询。简单来讲,它是一个多用途的监控工具,同时通过邮件等方式进行有效的预警通知,丰富的直观的可视化界面,多种数据源配置是其优点所在;1.2 Prometheus对比Zabbix和Zabbix类似,Prometheus也是一个近年比较火的开源监控框架,和Zabbix不同之处在于Prometheus相对更灵活点,模块间比较解耦,比如告警模块、代理模块等等都可以选择性配置。服务端和客户端都是开箱即用,不需要进行安装。zabbix则是一套安装把所有东西都弄好,很庞大也很繁杂。zabbix的客户端agent可以比较方便的通过脚本来读取机器内数据库、日志等文件来做上报。而Prometheus的上报客户端则分为不同语言的SDK和不同用途的exporter两种,比如如果你要监控机器状态、mysql性能等,有大量已经成熟的exporter来直接开箱使用,通过http通信来对服务端提供信息上报(server去pull信息);而如果你想要监控自己的业务状态,那么针对各种语言都有官方或其他人写好的sdk供你使用,都比较方便,不需要先把数据存入数据库或日志再供zabbix-agent采集。zabbix的客户端更多是只做上报的事情,push模式。而Prometheus则是客户端本地也会存储监控数据,服务端定时来拉取想要的数据。界面来说zabbix比较陈旧,而prometheus比较新且非常简洁,简洁到只能算一个测试和配置平台。要想获得良好的监控体验,搭配Grafana还是二者的必走之路。1.3 Grafana结构图

1.4 通俗讲Prometheus作为一个中间点,而Grafana作为可视化展示,后面的exporter作为监控,exporter将需要获取的数据获取并连接到Prometheus,而Prometheus连接到Grafana,直观展示被监控者状态;
02监控系统搭建
2.1 安装Prometheus下载并解压
wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
tar xvfz prometheus-2.7.2.linux-amd64.tar.gz
运行Prometheus server
cd prometheus-2.7.2.linux-amd64
./prometheus --config.file=prometheus.yml
配置Prometheus在Prometheus.yml中有配置文件,我们可以对其进行配置,当然第一次安装也可以不管;
$catprometheus.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:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
-job_name:'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
-targets: ['localhost:9090']
其大致可分为四部分:• global: 全局配置,其中scrape_interval
表示抓取一次数据的间隔时间,evaluation_interval
表示进行告警规则检测的间隔时间;• alerting: 告警管理器(Alertmanager)的配置,目前还没有安装Alertmanager;• rule_files: 告警规则有哪些;• scrapeconfigs: 抓取监控信息的目标。一个jobname就是一个目标,其targets就是采集信息的IP和端口。这里默认监控了Prometheus自己,可以通过修改这里来修改Prometheus的监控端口。Prometheus的每个exporter都会是一个目标,它们可以上报不同的监控信息,比如机器状态,或者mysql性能等等,不同语言sdk也会是一个目标,它们会上报你自定义的业务监控信息。访问prometheus
输入: "ip地址”+":9090
" 在浏览器中进行访问,如果出现可视化界面说明成功;
示例:186.163.15.42:9090
直接在自己电脑中访问如果访问不了,请检查防火墙是否开启9090端口2.2 添加机器状态监控(监控服务器CPU,硬盘,网络等状态)下载且解压并运行
// 下载最新版本,可以在github的release中对最新版本右键获取下载链接
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
解压
tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
进入解压出的目录
cd node_exporter-0.17.0.linux-amd64
运行监控采集服务
./node_exporter
监听9100端口
- • 本Centos中访问:
curl http://localhost:9100/metrics
- • 电脑浏览器中访问:
ip地址:9100
如果访问有内容显示则成功启动服务的时候可使用nohup后台启动,如果是直接图中所示内容启动则重开连接去Prometheus的配置文件中加上这个exporter的地址先回到根目录
cd ~
进入prometheus
cd prometheus-2.7.2.linux-amd64/
编辑配置文件prometheus.yml
vim prometheus.yml
没有vim可以下载或者使用vi也可以添加target:
scrape_configs:
-job_name:'prometheus'
static_configs:
-targets: ['localhost:9090']
-job_name:'server'
static_configs:
-targets: ['localhost:9100']
2.3 安装Grafana下载并解压Grafana
wget https://dl.grafana.com/oss/release/grafana-6.0.0.linux-amd64.tar.gz
tar -zxvf grafana-6.0.0.linux-amd64.tar.gz
这个页面给出的是最新版本的安装命令,右上角可以选择切换其他版本的安装命令。解压后会出现 grafana-6.0.0 目录,进入该目录,然后就可以运行Grafana了;安装插件进入Grafana服务器的该Grafana的lib目录下,然后输入以下命令更新插件:./grafana-cli plugins install grafana-piechart-panel
进入Grafana目录
cd grafana-6.0.0
启动Grafana
./bin/grafana-server web
在Grafana展示监控信息安装并启动Grafana后,浏览器输入IP:3000
来访问Grafana,管理员账号密码默认是admin/admin
。首次登陆会让你修改管理员密码,然后就可以登录查看了。添加数据源

选择Prometheus

先输入名称,然后填入http://ip+9090
然后直接点Save&Test,成功后则直接点击Dashboards选择展示面板

点击导入,可一个也可以全部导入

选择左侧边栏的 + 号,点击Imput, 在Grafana.com Dashboard中输入: 8919

输入号码后点击确定,然后再prometheus选择对应的Prometheus,点击Import即可

查看效果左边侧栏选择方块,点击Manage,然后点击刚刚创建的,即可成功展示!

展示效果如图所示:

03搭建其他服务器监控系统
3.1 前述这次的教程是配置其他服务器的监控系统,所以假设上面的已经做好了监控系统的Prometheus类似于一个注册中心,我们可以只需要配置一个Prometheus,而在其他服务器,只需要安装nodeexporter,它们的数据流转就是通过exporter采集数据信息,然后告诉prometheus它的位置;而Prometheus则存储exporter的信息供Grafana询问;Grafana则负责信息的展示;所以可以只配置一个Prometheus,而其他服务器或者本机的服务器的exporter只需要在这一个Promethes中给出它的jobname,targets地址等信息即可;这里介绍了又重新下载了一个Prometheus的方式,不下载的话可直接跳过从教程: 3.5 添加机器状态监控开始3.2 安装Prometheus连接需要被安装的服务器,安装Prometheus:
wget https://github.com/prometheus/prometheus/releases/download/v2.7.2/prometheus-2.7.2.linux-amd64.tar.gz
tar xvfz prometheus-2.7.2.linux-amd64.tar.gz
3.3 启动Prometheus下载最新版本,可以在github的release中对最新版本右键获取下载链接
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
解压
tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
进入解压出的目录
cd node_exporter-0.17.0.linux-amd64
运行监控采集服务
./node_exporter
3.4 配置Prometheus
$1nbsp;cat 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:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090']
如无其他特殊需求可不做改变;3.5 添加机器状态监控
// 下载最新版本,可以在github的release中对最新版本右键获取下载链接
wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
解压
tar xvfz node_exporter-0.17.0.linux-amd64.tar.gz
进入解压出的目录
cd node_exporter-0.17.0.linux-amd64
运行监控采集服务
./node_exporter
可使用后台运行进程命令启动也可以;访问:http://ip:9100/metrics
即可验证,如果有对应界面则配置成功
3.6 配置Prometheus.yml文件
scrape_configs:
-job_name:'prometheus'
static_configs:
-targets: ['localhost:9090']
-job_name:'server'
static_configs:
-targets: ['localhost:9100']
如果prometheus不在本服务器,则将server下的targets中的localhost改为对应的ip地址;重新启动一下3.7 配置Grafana进入Grafana服务器的该Grafana的lib目录下,然后输入以下命令更新插件:
./grafana-cli plugins install grafana-piechart-panel
更新插件后重新启动服务3.8 配置可视化界面3.9 查看效果
04邮件报警
4.1 Grafana服务器配置关闭服务
ctrl+c
grafana web
• 如果grafana监控系统没有开启,则无需关闭;进入grafana目录
cd grafana-6.0.0
编辑配置文件conf
vim defaults.ini
yum install vim

smtp.qq.com:465
编辑完退出:
ESC+:wq+Enter
返回上一级
cd ..
启动服务4.2 Grafana 可视化界面配置添加输入具体警告内容

如果成功就能接收到邮件,否则查看服务器内配置是否正确;4.3 邮件报警总结此功能可以具体对某些仪表盘的数据设立阀值,如果超过此值则触发报警,具体的应用具体分析,后面补充;
05搭建MySQL监控系统
5.1 步骤概述概述
- 下载安装Mysql并配置账号密码
- 导入sql文件
- 安装mysqld_exporter
- 对mysqld_exporter进行操作
- 运行mysql_exporter
- 加入Prometheus.yml配置
- 配置可视化界面
5.2 下载安装Mysql如果是对已有的mysql进行操作,请忽略此步骤;下载mysql的repo源:
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
mysql-community-release-el7-5.noarch.rpm
rpm -ivh mysql-community-release-el7-5.noarch.rpm
安装mysql:
yum install mysql-server -y
修改权限,否则会报错:
chown -R root:root /var/lib/mysql
重启mysql服务:
service mysqld restart
登录并重置密码:
## 直接回车进入mysql控制台
mysql -u root
mysql > use mysql;
mysql > update user set password=password('123456') where user='root';
mysql > exit;
5.3 导入sql文件1.下载my2.sqlhttps://codeload.github.com/john1337/my2Collector/zip/master2.解压文件后将此文件夹内的sql文件放入要监控的Mysql服务器中3.使用命令登录mysqlmysql -u用户名 -p密码 示例: mysql -uroot -proot4.使用命令导入sql文件
source /root/my2.sql
后面的是具体地址,如果位置不对则相应变化5.当出现一系列执行成功,则说明完成;5.4 对mysqld_exporter进行操作先下载并解压:
https://github.com/prometheus/mysqld_exporter/releases/download/v0.10.0/mysqld_exporter-0.10.0.linux-amd64.tar.gz
tar -xvf mysqld_exporter-0.10.0.linux-amd64.tar.gz
创建.my.cnf 文件
vim vi.my.cnf
创建效果如下:
[client]
user=root
password=root
账号密码只要连接得上mysql即可,也可单独为其分配账号;mysql_exporter
./mysqld_exporter -config.my-cnf=".my.cnf" &
5.5 加入Prometheus.yml配置
-job_name:mysql
static_configs:
-targets: ['mysql的ip地址:9104']
这里9104不要改动,配好后保存重启Prometheus,然后点击Status->Targets,如果发现mysql的State为Up 状态,则说明已经配置好了如果没有配置好,则可以注意一下是否mysql开启了远程访问,一般新安装的msyql都是仅本机可访问;开启远程访问可百度;5.6 配置可视化界面先点击小齿轮添加DataSource,然后点击Mysql,输入对应的ip+端口号,以及账号密码等信息,点击Save&Test进行测试,如果反馈成功则说明配置成功点击+ 图标,然后选择Import ,可选择官方文档中的仪表盘,这里我使用的是: 7991输入7991点Load可自动加载https://grafana.com/dashboards
加载后配置相关的名称地址,以及加载的数据源等信息,点击添加后即可在 小方块 图标的Manage下展示;效果图如下:

06开放API
6.1 概述在我们使用server类型的访问模式中,访问数据通常有两种形式;一种是直接使用用户登录,获取到的Cookie进行验证;一种是通过 API令牌机制进行资源请求校验;Admin HTTP API目前不支持API令牌。API令牌目前仅链接到组织和组织角色。他们无法获得服务器管理员的许可,只有用户才能获得该权限。因此,为了使用这些API调用,您必须使用Basic Auth,Grafana用户必须具有Grafana Admin权限。(默认管理员用户被调用admin并且有权使用此API。)https://grafana.com/docs/http_api/admin/
6.2 关于用户登录验证请求资源无法使用HTTP API的部分,可以使用RestTemplate等工具模拟登录验证,获取Cookie请求资源;而请求资源我们可以使用F12 获取请求的接口地址,需要哪些资源,直接到相关站点界面获取接口地址,模拟登录即可做对应的操作;这部分不多加介绍,下面介绍使用HTTP API的方式;6.3 创建API 令牌创建API KEY

点击保存

将Key后面的内容作为 Authorization中的Bearer 后的内容:

里面的权限为Viewer,Eidtor,和Admin,权限为只能看,可以部分写,以及全部权限;6.4 验证HTTP资源/操作 接口示例:

6.5 创建API Key 示例:请求ip地址和请求头填写内容:

请求体内填写内容:

权限类别可分为Viewer,Editor和Admin,Viewer只能查看,Editor可以一些界面进行操作,而Admin是拥有所有权限的角色;secondsToLive
api_key_max_seconds_to_live
6.6 删除API Key示例:先通过查询接口查询到所有Api Key列表

拿到需要删除的ApiKey的id,然后使用Delete请求方式,在最后带id即可删除对应id的ApiKey,图示如下:

只要支持HTTP API的均可使用此方式,具体的请求路径和对应资源可进入官方文档查看:https://grafana.com/docs/http_api/dashboard/
07监控RabbitMQ
7.1 下载并解压下载:
wget https://github.com/kbudde/rabbitmq_exporter/releases/download/v1.0.0-RC5/rabbitmq_exporter-1.0.0-RC5.linux-amd64.tar.gz
没有wget等命令请自行搜索下载解压:
tar -xvf rabbitmq_exporter-1.0.0-RC5.linux-amd64.tar.gz
进入目录:
cd rabbitmq_exporter-1.0.0-RC5.linux-amd64
执行命令:
RABBIT_USER=guest RABBIT_PASSWORD=guest OUTPUT_FORMAT=JSON PUBLISH_PORT=9099 RABBIT_URL=http://localhost:15672 nohup ./rabbitmq_exporter 2>&1 &
注意里面的PABBIT_USER的账号,以及后面的密码,请按实际账号密码输入,以及端口等;7.2 加入Prometheus.yml进入有Prometheus的服务器,进入Prometheus,编辑prometheus.yml
vim prometheus.yml
配置如下内容:
-job_name:'RabbitMQ'
static_configs:
-targets: ['Rabbit的ip地址:9099']
这里的ip地址写Rabbit的地址,端口号默认都写9099;7.3 进入Grafana配置RabbitMQ地址1.浏览器输入:ip地址+3000 进入Grafana 默认账户和密码都是adminData Sources

Add data source
http://promethues
这里的URL不是写RabbitMQ的服务器地址,而是Prometheus的地址,注意不要弄错; Data source is working
6.点击左侧的 + 图标,选择Import,在第一个输入框中输入 2121 ,然后点击 Load

7.点击左侧小方块图标,点击Manage 选择刚刚配好的,点击进入即可展示,效果图如下:

08监控Redis
8.1 下载并解压下载:
wget https://github.com/oliver006/redis_exporter/releases/download/v1.0.3/redis_exporter-v1.0.3.linux-amd64.tar.gz
解压:8.2 启动 Redis_exporter无密码:
./redis_exporter redis//192.168.1.120:6379 &
有密码
redis_exporter -redis.addr 192.168.1.120:6379 -redis.password 123456****
里面的ip地址和端口号请根据自身实际来8.3 配置Prometheus.yml进入prometheus的服务器,然后进入prometheus.yml,进行编辑:
vim prometheus.yml
编辑:内容如下:
- job_name: redis
static_configs:
- targets: ['ip地址:9121']
8.4 检查Redis状态进入地址
Premetheus的ip地址:9090/targets
如果显示State的结果为 UP 则说明成功。8.5 配置Grafana的数据源登录网站:
Grafana的ip地址:3000
添加数据源,如果之前已经在Grafana中添加了此DataSource(指向了安装有Prometheus的ip地址和对应端口),则无需重新添加,在导入面板的时候,可以直接引用此DataSource;8.6 配置展示面板先进行登陆,登陆后点击 + 号选择Import在第一个框框内输入: 731注意,也可以自己找其他的展示面板,在官方的面板页面找到数据源为Prometheus的Redis展示面板,在上方所说的对应位置输入它的编号即可https://grafana.com/dashboards
8.7 直接查看,展示效果图如下

09监控TiDB
9.1 下载二进制包并解压下载9.2 启动服务进入目录:
cd node_exporter-0.15.2.linux-amd64
node_exproter
./node_exporter --web.listen-address=":9100" \ --log.level="info" &
9.3 在Prometheus.yml中配置进入Prometheus所在的服务器,并进入该Prometheus目录
cd prometheus-2.2.1.linux-amd64
编辑 prometheus.yml
vim prometheus.yml
新增内容如下:
-job_name:'tidb'
honor_labels:true # 不要覆盖 job 和实例的 label
static_configs:
-targets: ['tidb所在服务器ip地址:10080']
ip地址:9090/targets
9.4 启动Grafana服务
./prometheus \
--config.file="./prometheus.yml" \
--web.listen-address=":9090" \
--web.external-url="http://192.168.199.113:9090/" \
--web.enable-admin-api \
--log.level="info" \
--storage.tsdb.path="./data.metrics" \
--storage.tsdb.retention="15d" &
9.5 启动Grafana并配置DataSource按照正常命令启动,如果已经启动过则无需改;如果前面已经对此Prometheus的DataSource进行过配置,则无需再次配置,在导入展示面板的时候直接指向此已经写好的展示面板即可;9.6 导入Grafana面板Import Dashboard
Upload .json File
https://github.com/pingcap/tidb-ansible/tree/master/scripts
- 注意:TiDB 面板对应的 JSON 文件为tidb.json 。 (我们可以通过上面的链接进入找到此tidb.json然后将内容复制出来命名为tidb.json然后导入)
- 点击 Load。
- 选择一个 Prometheus 数据源。(以前对这个Prometheus创建过数据源,我们可以重复利用,直接指向即可)
- 点击 Import,Prometheus 面板即导入成功。
9.7 在Mangae 里面可以直接预览,展示效果图如下
