1.1. Prometheus快速入门
1.1.1. Prometheus架构介绍
在学习Prometheus之前我们需要清晰的掌握其架构,Prometheus是由多个组件组成的的监控系统,主要有:Prometheus Server、Alertmanager、Pushgateway组成,这三个组件均为独立的应用服务,独立部署和运行,其中Prometheus Server中内置了Prometheus web UI。
Prometheus Server:
Promethedus Server是核心组件,负责数据的获取、存储、查询。Prometheus通过Pull的方式定期的从Jobs/Exporters中获取数据,并保存在内置的TSDB中;内置的Prometheus web UI可以让用户通过PromQL的方式进行数据的检索。
Exporters:
Exporters也是一个独立的组件,有官方提供的Exporters也有社区贡献的Exportes,它将监控采集的数据通过HTTP的方式暴露给Prometheus Server,Server定期获取数据。例如有一个Exporters叫做Node Exporter,它安装在受采集的主机上,为Server提供数据,有点类似于Zabbix监控系统中的Zabbix Agent。
Prometheus web UI:
Prometheus web UI是Server启动后内置的一个Web界面,通过该Web界面我们可以进行数据查询工作,不包含设置的相关功能。
PromQL:
PromQL是Prometheus内置的自定义的查询语言,提供对Prometheus Server中的TSDB这个时间序列数据库进行数据查询,支持数据聚合和一些逻辑运算,是一个相对简单的查询语言,而且PromQL也提供了一些内置函数,帮助我们进行数据处理。
Alertmanager:
Alertmanager是Promethedus的告警管理组件,它支持基于PromQL来创建告警规则,类似于Zabbix中的告警表达式,对获取到的数据进行计算和比较,如果满足PromQL定义的规则条件,就会产生报警。
Pushgateway:
Pushgateway可以理解为数据的一个中转站,例如当Prometheus Server不能直接和Exporters进行通信的场景下。
1.1.2. 安装Prometheus
学习Prometheus的第一步就是先部署一个实验环境,官方提供了多种方式进行Prometheus安装:
源码编译安装
下载预编译好的二进制文件
使用Docker部署
使用第三方工具:Ansible、SaltStack、Puppet、Chef。
为了方便学习,首先我们使用二进制方式部署,可以在这里https://prometheus.io/download/下载对应的预编译的二进制文件。
[root@linux-node1 ~]# cd /usr/local/src
[root@linux-node1 src]# wget
https://github.com/prometheus/prometheus/releases/download/v2.7.1/prometheus-2.7.1.linux-amd64.tar.gz
[root@linux-node1 src]# tar zxf prometheus-2.7.1.linux-amd64.tar.gz
[root@linux-node1 src]# mv prometheus-2.7.1.linux-amd64 /usr/local/
[root@linux-node1 src]# ln -s /usr/local/prometheus-2.7.1.linux-amd64/
/usr/local/prometheus
Prometheus配置
Prometheus的配置文件在prometheus.yml中,直接启动也会到命令的当前目录下寻找该文件。
[root@linux-node1 ~]# cd /usr/local/prometheus
[root@linux-node1 prometheus]# 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:
# 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']
启动Prometheus
默认情况下Prometheus会把数据写在启动目录的./data目录下,可以通过启动参数指定目录:--storage.tsdb.path="data/",更多参数可以通过—help查看
[root@linux-node1 prometheus]# ./prometheus –help
[root@linux-node1 prometheus]# ./prometheus
…
level=info ts=2019-02-12T08:04:03.799169159Z caller=main.go:620 msg="Starting
TSDB ..."
level=info ts=2019-02-12T08:04:03.835497463Z caller=main.go:635 msg="TSDB
started"
level=info ts=2019-02-12T08:04:03.835598421Z caller=main.go:695 msg="Loading
configuration file" filename=prometheus.yml
level=info ts=2019-02-12T08:04:03.83756508Z caller=main.go:722 msg="Completed
loading of configuration file" filename=prometheus.yml
level=info ts=2019-02-12T08:04:03.83760078Z caller=main.go:589 msg="Server is
ready to receive web requests."
level=info ts=2019-02-12T08:04:03.837641772Z caller=web.go:416 component=web
msg="Start listening for connections" address=0.0.0.0:9090
默认会在前台启动,并监听9090端口,会自动创建data目录,并存放数据。注意如何服务器时间不正确会有警告提示,请保证服务器时间同步。
放置在后台运行
[root@linux-node1 ~]# groupadd prometheus
[root@linux-node1 ~]# useradd -g prometheus -d /var/lib/prometheus -s /sbin/nologin prometheus
[root@linux-node1 ~]# vim /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/prometheus/prometheus \
--config.file=/usr/local/prometheus/prometheus.yml \
--storage.tsdb.path=/var/lib/prometheus
Restart=on-failure
[Install]
WantedBy=multi-user.target
后台启动
[root@linux-node1 ~]# systemctl enable prometheus
[root@linux-node1 ~]# systemctl start prometheus
查看启动状态
[root@linux-node1 ~]# netstat -ntlp | grep 9090
tcp6 0 0 :::9090 :::* LISTEN 61333/prometheus
1.1.3. 使用Node Exporter采集主机数据
[root@linux-node1 ~]# cd /usr/local/src
[root@linux-node1 src]# wget https://github.com/prometheus/node_exporter/releases/download/v0.17.0/node_exporter-0.17.0.linux-amd64.tar.gz
[root@linux-node1 src]# tar zxf node_exporter-0.17.0.linux-amd64.tar.gz
[root@linux-node1 src]# mv node_exporter-0.17.0.linux-amd64 /usr/local/
[root@linux-node1 src]# ln -s /usr/local/node_exporter-0.17.0.linux-amd64/ /usr/local/node_exporter
[root@linux-node1 ~]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/node_exporter/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
启动Node Exporter
[root@linux-node1 ~]# systemctl enable node_exporter
[root@linux-node1 ~]# systemctl start node_exporter
查看状态
[root@linux-node1 ~]# netstat -ntlp | grep 9100
tcp6 0 0 :::9100 :::* LISTEN 66239/node_exporter
默认情况下Node Exporter监听9100端口,通过/metrics暴露采集到的监控数据,Prometheus默认也从该地址获取数据。
配置Prometheus读取Node Exporter数据
[root@linux-node1 ~]# vim /usr/local/prometheus/prometheus.yml
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']
- job_name: 'linux-node1'
static_configs:
- targets: ['192.168.56.11:9100']
labels:
instance: linux-node1
重启prometheus
[root@linux-node1 ~]# systemctl restart prometheus
查看监控状态
登录Prometheus的Web控制台,StatusTargets如果可以linux-node1并且状态是UP的状态即为配置成功。
1.1.4. 使用Prometheus UI查看数据
现在Prometheus会定期的从http://192.168.56.11:9100/metrics获取数据,并存储,我们可以使用Prometheus UI来查看监控数据。
1.1.5. 使用Grafana进行数据可视化
1.安装Grafana
[root@linux-node1 ~]# vim /etc/yum.repos.d/grafana.repo
[grafana]
name=grafana
baseurl=https://packages.grafana.com/oss/rpm
repo_gpgcheck=1
enabled=1
gpgcheck=1
gpgkey=https://packages.grafana.com/gpg.key
sslverify=1
sslcacert=/etc/pki/tls/certs/ca-bundle.crt
[root@linux-node1 ~]# yum install -y grafana
2.配置Grafana
Grafana的配置文件在/etc/grafana/grafana.ini,默认情况下Grafana监听3000端口
[root@linux-node1 ~]# vim /etc/grafana/grafana.ini
3.启动Grafana
[root@linux-node1 ~]# systemctl enable grafana-server
[root@linux-node1 ~]# systemctl start grafana-server
[root@linux-node1 ~]# netstat -ntlp | grep 3000
tcp6 0 0 :::3000 :::* LISTEN 81427/grafana-serve
4.访问Grafana
访问http://192.168.56.11:3000,用户名和密码默认为admin/admin,第一次登陆会要求修改密码,请使用安全密码。
5.增加Prometheus数据源
点击
,然后选择
。
配置URL为:http://192.168.56.11:9090,并点击Save&Test。
6.设置Dashboard
数据源设置完毕后,就可以设置Dashboard图形展示,可以手动添加,也可以直接下载别人配置好保持的Json文件直接导入即可。
下载地址:https://grafana.com/dashboards/405,在右侧有Download Json按钮,下载该Json文件。
点击Home下的Import Dashboard
然后直接上传刚才下载的JSON文件。
导入完毕后,就可以在Grafana上查看对应节点的监控数据图表。你可以通过鼠标拖拽进行图表的自定义大小和位置的修改,效果如下: