Prometheus+Grafana搭建监控系统

【关于监控的题外话】

传统单机监控软件:TOP/htop/glances  传统单机监控系统:cacti/nagios/ntop

现代分布式监控系统:Zabbix/centreon/Ganglia

开源程度并且轻量级的监控系统:Open-Falcon

云计算智能化大数据时代的并且数据展示效果极佳的监控系统:Grafana+influendb+各种采集监控插件例如Prometheus

以上后两者,采用API对接,解决了集群服务器监控的难题。

笔者看来, 监控不应该只是监控,除了及时有效的报警,更应该”好看”,因为视觉上的感受更能给我们直观的感受,更能从绚丽的走势中发现异常, 如果你觉得监控就应该像老牌监控nagios,cacti一样,我想也没什么不对的,因为也许那是你们最适合的,但,你还是可以瞧瞧这个监控能给你带来什么。

Architecture[架构]

This diagram illustrates the architecture of Prometheus and some of its ecosystem components:

Prometheus scrapes metrics from instrumented jobs, either directly or via an intermediary push gateway for short-lived jobs. It stores all scraped samples locally and runs rules over this data to either aggregate and record new time series from existing data or generate alerts. Grafana or other API consumers can be used to visualize the collected data.

它的服务过程是这样的 Prometheus daemon 负责定时去目标上抓取 metrics(指标) 数据,每个抓取目标需要暴露一个http服务的接口给它定时抓取。
Prometheus支持通过配置文件、文本文件、zookeeper、Consul、DNS SRV lookup等方式指定抓取目标。
Alertmanager 是独立于Prometheus的一个组件,可以支持Prometheus的查询语句,提供十分灵活的报警方式。
Prometheus支持很多方式的图表可视化,例如十分精美的Grafana,自带的Promdash,以及自身提供的模版引擎等等,还提供HTTP API的查询方式,自定义所需要的输出。

PushGateway这个组件是支持Client主动推送 metrics 到PushGateway,而Prometheus只是定时去Gateway上抓取数据。

客户端SDK

官方提供的客户端类库有gojavascalapythonruby,其他还有很多第三方开发的类库,支持nodejsphperlang等。

参考:https://prometheus.io/docs/introduction/overview/


prometheus监控方案

 简介

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。

prometheus 是一个开源的系统监控和告警的工具包,其采用pull方式采集时间序列,通过http协议传输。

简单地讲就是一个时间序列化数据库,我的理解就是将数据打上标签,以时间维度存储。

 可视化

prometheus官方的dashboard不怎么给力,目前将grafana集成了进去。grafana可以自定义数据源,并且保存多个dashboard,针对不同的系统可以使用不同的dashboard来进行监控。

 Grafana各个组件

Prometheus中存储的数据,通过Grafana很优美的展现出来。

Prometheus Server: Prometheus服务端,由于存储及收集数据,提供相关api对外查询用。

Exporter: 类似传统意义上的被监控端的agent,有区别的是,它不会主动推送监控数据到server端,而是等待server端定时来手机数据,即所谓的主动监控。
Pushagateway: 用于网络不可直达而居于exporter与server端的中转站。
Alertmanager: 报警组件,将报警的功能单独剥离出来放在alertmanager。

Web UI: Prometheus的web接口,可用于简单可视化,及语句执行或者服务状态监控。

Prometheus适用的场景

Prometheus在记录纯数字时间序列方面表现非常好。它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。它的搭建过程对硬件和服务没有很强的依赖关系。

Prometheus不适用的场景

Prometheus它的价值在于可靠性,甚至在很恶劣的环境下,你都可以随时访问它和查看系统服务各种指标的统计信息。如果你对统计数据需要100%的精确,它并不适用,例如:它不适用于实时计费系统。


 软件安装

Prometheus

官网下载(https://prometheus.io/),支持Linux、Mac、Windows系统,很好很强大。

由于Prometheus是go语言写的,所以不需要编译,安装的过程非常简单,仅需要解压然后运行。

注:为了演示方便,这里node_exporter, Prometheus server, grafana都安装再同一台机器,系统环境为centos6.8.

Prometheus+Grafana搭建监控系统_第1张图片

目录下的prometheus可以直接启动(Go语言的特性直接启动无需安装),然后通过localhost:9090端口访问,但是由于没有配置exporter来导入数据,暂时是没有数据的。 
Prometheus+Grafana搭建监控系统_第2张图片

安装exporter

prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入prometheus这一个时间序列数据库中。那如何保证各处的数据格式是统一的呢?就是通过这个exporter。exporter也是用GO写的程序,它开放一个http接口,对外提供格式化的数据。所以在不同的环境下,需要编写不同的exporter。好在已经有很多写好的exporter,我们可以直接使用,(本句是一句废话为了更好的排版显示)(https://github.com/prometheus这里可以找到很多exporter)我们这里直接使用mysqld_exporter(prometheus.io/download/#mysqld_exporter)。当然也要下载对应系统的版本。

下载node_exporter

node_exporter收集远程机器的监控数据,提供给Prometheus定时来抓取。

Prometheus+Grafana搭建监控系统_第3张图片

安装node_exporter

  1. tar xvfz node_exporter-*.tar.gz
  2. cd node_exporter-*
nohup ./node_exporter &

安装Prometheus

  1. tar xvfz prometheus-*.tar.gz
  2. cd prometheus-*

编辑prometheus.yml, 将node_exporter添加到Prometheus目标对象,因为这里node_exporter和Prometheus安装在同一台机器,使用localhost即可,node_exporter端口9100。

  1. - job_name: 'node'
  2. static_configs:
  3. - targets: [ 'localhost:9100']

使用配置文件启动Prometheus

nohup ./prometheus --config.file=prometheus.yml &

go写的东西,直接打包成二进制包了,其本上没有别的依赖。

这时候Prometheus应该正确启动了,如果报错,请检查配置文件。(注意:yml格式是对缩进有要求的。)

Prometheus默认是有多少个CPU内核就使用多少OS线程,主要是由GOMAXPROCS 这个环境变量控制的,开发GO的应该都清楚。一般默认就好了,太高的话可能会带来意想不到的后果。
Prometheus默认大概会占用3G左右的内存,如果想调小一点,得修改配置文件,或者添加启动参数。

验证Prometheus是否安装成功

Prometheus+Grafana搭建监控系统_第4张图片

grafana部署

http://docs.grafana.org/installation/rpm/

1、安装

1
2
3
wget https: / / s3 - us - west - 2.amazonaws .com / grafana - releases / release / grafana - 4.2 . 0 - 1.x86_64 .rpm
sudo yum install initscripts fontconfig  - y
sudo rpm  - Uvh grafana - 4.2 . 0 - 1.x86_64 .rpm

2、启动服务service grafana-server start

3、访问页面http://localhost:3000 ,默认账号、密码admin/admin

Prometheus+Grafana搭建监控系统_第5张图片

4、Prometheus 和 Grafana 的对接

https://prometheus.io/docs/visualization/grafana/

Prometheus+Grafana搭建监控系统_第6张图片

参考文章:http://www.cnblogs.com/sfnz/p/6566951.html

 

MySQL的dashboards(Grafana)

https://github.com/percona/grafana-dashboards

1
2
git clone https: / / github.com / percona / grafana - dashboards.git
cp  - r grafana - dashboards / dashboards  / var / lib / grafana / dashboards

编辑Grafana配置文件

1
2
3
4
vi  / etc / grafana / grafana.ini
[dashboards.json]
enabled  =  true
path  =  / var / lib / grafana / dashboards

重启service grafana-server restart

Prometheus+Grafana搭建监控系统_第7张图片

 

mysql监控部署

在需要监控的mysql上安装 node_exporter和 mysqld_exporter

下载 https://prometheus.io/download/

 

1
2
3
tar  - xvf node_exporter - 0.14 . 0.linux - amd64.tar.gz
cd node_exporter - 0.14 . 0.linux - amd64
nohup . / node_exporter &
1
2
3
4
5
6
7
8
9
tar  - xvf mysqld_exporter - 0.10 . 0.linux - amd64.tar.gz
cd mysqld_exporter - 0.10 . 0.linux - amd64
 
vi .my.cnf
[client]
user = root
password = root
 
. / mysqld_exporter  - config.my - cnf = ".my.cnf"  &

服务端配置,文件prometheus.yml

1
2
3
4
5
6
7
8
9
10
scrape_configs:
   -  job_name:  'prometheus'
     static_configs:
       -  targets: [ 'localhost:9090' ]
 
   -  job_name:  'mysql'
     static_configs:
       -  targets: [ '10.10.83.162:9104' ]
         labels:
           instance: db - 10.10 . 83.162

Prometheus+Grafana搭建监控系统_第8张图片

 

redis监控部署

下载 https://github.com/oliver006/redis_exporter/releases

1
2
tar  - xvf redis_exporter - v0. 11.linux - amd64.tar.gz
nohup  / opt / redis_exporter  - redis.addr  "redis://10.10.83.162:16379"  &

grafana配置

下载 redis_exporter-0.11.tar.gz

1
2
3
tar  - xvf redis_exporter - 0.11 .tar.gz
cd redis_exporter - 0.11 
cp  * json  / var / lib / grafana / dashboards /

服务端配置,文件prometheus.yml

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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:  'mysql'
     static_configs:
       -  targets: [ '10.10.83.162:9104' ]
         labels:
           instance: db - 10.10 . 83.162
 
   -  job_name: redis_exporter
     static_configs:
       -  targets: [ '10.10.83.162:9121' ]
         labels:
           instance: redis - 10.10 . 83.162


【参考帮助文档】

官方网址:https://prometheus.io/

GitHub网址:https://github.com/prometheus/prometheus

软件下载地址:https://prometheus.io/download/

第三方中文介绍:https://github.com/1046102779/prometheus

Grafana+Prometheus打造全方位立体监控系统-http://blog.51cto.com/itstyle/1980064

基于Grafana和Prometheus的监视系统 - https://www.jianshu.com/p/339db34e4afe

使用Prometheus+Grafana搭建监控系统实践https://www.linuxidc.com/Linux/2018-01/150354.htm (比较详细)

你可能感兴趣的:(Prometheus+Grafana搭建监控系统)