目前在服务器监控领域,除了老牌的Zabbix和nagios外,Prometheus和Grafana也是目前较为流行的监控方案,本文介绍Prometheus和Grafana的配置方法。
1、什么是Grafana?
Grafana是一个图形化工具,它可以从很多种数据源(例如Prometheus)中读取数据信息,使用很漂亮的图表来展示数据,并且有很多开源的dashborad可以使用,制作自己的dashboard也很简单,总之,可以快速地搭建起一个非常精美的监控平台。
2、什么是TSDB?
TSDB(Time Series Database)时间序列数据库,简单来说就是存储随时间变化的数据的数据库。什么是随时间变化的数据呢?举个简单的例子,比如,CPU使用率,典型的随时间变化的量,这一秒是50%,下一秒也许就是80%了。或者是温度,今天是20度,明天可能就是18度了。
常见的TSDB(时间序列数据库):influxDB,RRDtool,Graphite,OpenTSDB,Kdb+,Druid,KairosDB,Prometheus等。
3、什么是Prometheus?
Prometheus(中文名:普罗米修斯)是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。2016年由Google发起Linux基金会旗下的原生云基金会(Cloud Native Computing Foundation),将Prometheus纳入其下第二大开源项目。
Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。
Prometheus获取数据的策略是Pull而不是Push,也就是说,它会自己去抓取,而不用你来推送。抓取使用的是HTTP协议,在配置文件中指定目标程序的端口,路径及间隔时间即可。这也就意味着任何程序想要使用Prometheus存储数据都很简单,定义一个HTTP接口即可。
4、什么是exporter?
prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入prometheus这一个时间序列数据库中。那如何保证各处的数据格式是统一的呢?就是通过这个exporter. Exporter是一类数据采集组件的总称。Exporter负责从目标处搜集数据,并将其转化为Prometheus支持的格式,它开放了一个http接口(以便Prometheus来抓取数据)。与传统的数据采集组件不同的是,Exporter并不向中央服务器发送数据,而是等待中央服务器(如Prometheus等)主动前来抓取。
Prometheus提供多种类型的Exporter用于采集各种不同服务的运行状态。目前支持的有数据库、硬件、消息中间件、存储系统、HTTP服务器、JMX等。https://github.com/prometheus这里有很多写好的exporter,我们可以直接使用。本文使用的node-exporter是用来收集节点上的metrics监控数据的。
1、selinux和firewalld状态为disabled
2、各主机信息如下:
主机 | ip |
---|---|
server1(prometheus,Grafana) | 172.25.83.1 |
server2(node_exporter(监听TCP 9100 端口)) | 172.25.83.2 |
server3(node_exporter(监听TCP 9100 端口)) | 172.25.83.3 |
配置server2:
1、安装node_exporter ,并进行解压
[root@server2 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v0.16.0/node_exporter-0.16.0.linux-amd64.tar.gz
[root@server2 ~]# ls
node_exporter-0.16.0.linux-amd64.tar.gz
[root@server2 ~]# tar zxf node_exporter-0.16.0.linux-amd64.tar.gz
[root@server2 ~]# ls
node_exporter-0.16.0.linux-amd64 node_exporter-0.16.0.linux-amd64.tar.gz
2、启动node_exporter,并查看9100端口是否存在
[root@server2 ~]# cd node_exporter-0.16.0.linux-amd64
[root@server2 node_exporter-0.16.0.linux-amd64]# nohup ./node_exporter &
[1] 2072
[root@server2 node_exporter-0.16.0.linux-amd64]# nohup: ignoring input and appending output to ‘nohup.out’ #直接敲击空格,退出即可。
[root@server2 node_exporter-0.16.0.linux-amd64]# netstat -antulpe | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 0 23219 2072/./node_exporte
配置server3:(配置同server2)
配置server1:
1、下载Prometheus对应的安装包并进行安装
[root@server1 ~]# wget https://github.com/prometheus/prometheus/releases/download/v2.4.3/prometheus-2.4.3.linux-amd64.tar.gz
[root@server1 ~]# ls
prometheus-2.4.3.linux-amd64.tar.gz
[root@server1 ~]# tar zxf prometheus-2.4.3.linux-amd64.tar.gz
[root@server1 ~]# ll
total 87896
drwxr-xr-x 4 3434 3434 132 Oct 4 2018 prometheus-2.4.3.linux-amd64
-r--r--r-- 1 root root 35229462 Apr 21 21:02 prometheus-2.4.3.linux-amd64.tar.gz
2、编写prometheus.yml文件
[root@server1 ~]# cd prometheus-2.4.3.linux-amd64
[root@server1 prometheus-2.4.3.linux-amd64]# ls
console_libraries LICENSE prometheus promtool
consoles NOTICE prometheus.yml
[root@server1 prometheus-2.4.3.linux-amd64]# vim prometheus.yml #添加2个新的job。其中31-41行是新添加的内容
1 # my global config
2 global:
3 scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
4 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
5 # scrape_timeout is set to the global default (10s).
6
7 # Alertmanager configuration
8 alerting:
9 alertmanagers:
10 - static_configs:
11 - targets:
12 # - alertmanager:9093
13
14 # Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
15 rule_files:
16 # - "first_rules.yml"
17 # - "second_rules.yml"
18
19 # A scrape configuration containing exactly one endpoint to scrape:
20 # Here it's Prometheus itself.
21 scrape_configs:
22 # The job name is added as a label `job=` to any timeseries scraped from this config.
23 - job_name: 'prometheus'
24
25 # metrics_path defaults to '/metrics'
26 # scheme defaults to 'http'.
27
28 static_configs:
29 - targets: ['localhost:9090']
30
31 - job_name: 'linux1'
32 static_configs:
33 - targets: [172.25.83.2:9100]
34 labels:
35 instance: server1
36
37 - job_name: 'linux2'
38 static_configs:
39 - targets: [172.25.83.3:9100]
40 labels:
41 instance: server2
3、启动prometheus服务,并查看监听端口9090是否存在
[root@server1 prometheus-2.4.3.linux-amd64]# pwd
/root/prometheus-2.4.3.linux-amd64
[root@server1 prometheus-2.4.3.linux-amd64]# nohup ./prometheus & #直接敲击空格,退出即可。
[1] 2326
[root@server1 prometheus-2.4.3.linux-amd64]# nohup: ignoring input and appending output to ‘nohup.out’
[root@server1 prometheus-2.4.3.linux-amd64]# netstat -antulpe | grep 9090
tcp 0 0 127.0.0.1:39702 127.0.0.1:9090 ESTABLISHED 0 27535 2326/./prometheus
tcp6 0 0 :::9090 :::* LISTEN 0 27533 2326/./prometheus
4、测试:
Prometheus自带一个比较简单的Web(监听9090端口)可以查看表达式搜索结果/报警配置/prometheus配置/exporter状态等。
访问http://ip:9090的界面如下图:
在Status菜单下,有Configuration,Rule,Targets等。
(1)Status——>Configuration展示Promethis.yml配置,如下:
(2)Status——>Targets展示监控具体的监控目标
(3)绘图:
访问:http://ip:9090/metrics,查看从exporter具体能抓到的数据,如下:
访问http://ip:9090,在输入框任意输入1个exporter能抓取到的值(也可以在Execute后面的下拉框中进行选择),点击“Execute”与“Graph”按扭,即可见相应抓取数据的图形,同时可对时间与unit作调整,如下:我这里填入的是(go_goroutines)
http://docs.grafana.org/installation/这里提供了在不同系统上安装Grafana的方法,此处提供redhat的rpm包的安装方法(官方安装文档在此https://grafana.com/grafana/download?platform=linux)。
1、下载Grafana对应的安装包并进行安装
[root@server1 ~]# wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana-4.6.2-1.x86_64.rpm
[root@server1 ~]# yum install grafana-4.6.2-1.x86_64.rpm -y
2、配置文件
配置文件位于/etc/grafana/grafana.ini,这里暂时保持默认配置即可。
3、启动grafana-server服务,并查看监听端口3000是否存在
[root@server1 ~]# systemctl start grafana-server
[root@server1 ~]# netstat -antulpe | grep 3000
tcp6 0 0 :::3000 :::* LISTEN 996 28756 2451/grafana-server
4、添加数据源
(1)登陆
访问:http://ip:3000,默认帐号/密码:admin/admin
(2)添加数据源
在登陆首页,点击“Add data source”按钮,跳转到添加数据源页面,配置如下:
Name:prometheus(该名字随意给)
Type:Prometheus
URL:http://localhost:9090
Access:proxy
取消default的勾选,其余默认,点击“Add”,如下:
在“Dashboards”页签下有“import”自带的模板,如下:
点击“Add”之后,显示的界面
当看到datasource is working的提示时候,表明你的prometheus工作是正常的。
接着回到首页,添加一个dashboard,配置单个指标的可视化监控面板:
点击“New dashboard”
点击“Graph”
点击“Panel Title”——>“Edit”
在default的下拉菜单中选择之前自己添加的资源的名字(我这里是prometheus),并在下面的横栏中填入需要监控的目标,具体的可以监控的指标在 Prometheus 的首页看到,即 http:/ip:9090/graph
在Execute后面的下拉菜单中。
编写之后的页面如下:
点击后面的“小眼睛“进行查看即可