Prometheus是由前Google工程师从2012年开始在Soundcloud以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了Prometheus作为监控告警工具。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境,比如 VM或者Docker等。
Prometheus生态系统由多个组件组成,其中有许多组件是可选的:
其中大多数组件都是用Go编写的,因此很容易构建和部署为静态二进制文件。
Prometheus的整体架构以及生态系统组件如下图所示:
Prometheus Server直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过Grafana或者其他工具来实现监控数据的可视化。
Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。
Prometheus的安装包可以在Prometheus处下载,解压后可以使用systemd进行管理。
bash# /usr/lib/systemd/system/prometheus.service
[Unit]
Description=prometheus service
[Service]
User=root
ExecStart=prometheus安装目录/prometheus/prometheus --config.file=prometheus安装目录/prometheus/prometheus.yml --storage.tsdb.path=prometheus安装目录/prometheus/data
TimeoutStopSec=10
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
启动Prometheus Server
bashsystemctl daemon-reload
systemctl enable prometheus --now
# 查看服务状态
systemctl status prometheus
可以通过http://服务器IP:9090访问Prometheus的管理界面,Graph界面可以用来查看监控数据,Status界面可以查看Prometheus Server的状态。
Prometheus Server仅仅是负责数据处理的中间件,还需要依靠其他组件来收集数据。NodeExporter是Prometheus的一个组件,可以采集到主机信息,用来监控服务器的资源使用情况,包括CPU,内存,磁盘,网络等。
可以在node_exporter下载NodeExporter二进制包,并在需要的服务器上运行,使用systemd进行管理。
bash# /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=NodeExporter
Wants=network-online.target
After=network-online.target
[Service]
User=root
ExecStart=node_exporter安装目录/node_exporter/node_exporter
[Install]
WantedBy=default.target
启动NodeExporter,可以通过http://服务器IP:9100/metrics查看NodeExporter的监控数据。
bashsystemctl daemon-reload
systemctl enable node_exporter --now
# 查看服务状态
systemctl status node_exporter
现在Prometheus Server与NodeExporter已经正常运行了,但此时Prometheus还获取不到任何数据,需要在Prometheus Server的配置文件中添加相应的配,采集NodeExporter的数据,才能让获取到监控数据。
bash# prometheus安装目录/prometheus/prometheus.yml
scrape_configs:
- job_name: "prometheus"
static_configs:
- targets: ["localhost:9090"]
- job_name: 'node_exporter'
static_configs:
- targets: ['被监控服务器IP:9100']
labels:
instance: node_exporter
使用systemctl reload prometheus.service重启Prometheus Server,然后可以在Prometheus Server的Graph界面中查看到NodeExporter的监控数据,同时可以在Status选项下的Targets界面中查看到被监控的服务器状态。
Grafana是一个跨平台的开源的度量分析和可视化工具,主要用于查询并可视化展示采集的数据,它提供了丰富的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标和日志的面板插件以及丰富的仪表盘插件,包括热图、折线图、图表等。
Grafana能够帮助用户快速的查看和编辑dashboard的前端。支持同时连接多种数据源,能够将时序时空数据库(TSDB)数据转换为漂亮的图表。
Grafana的安装包可以在Grafana处下载,或者通过apt-get进行安装。
bash# 在sources list(/etc/apt/sources.list.d/grafana.list)中添加Grafana源
deb [signed-by=/usr/share/keyrings/grafana.key] https://apt.grafana.com stable main
# 启动Grafana Server
apt-get update
apt-get install grafana
systemctl daemon-reload
systemctl enable grafana-server --now
systemctl status grafana-server
安装完成后,可以通过http://服务器IP:3000访问Grafana的管理界面,使用默认的用户名和密码admin/admin进行登录。
通过设置中的Data Sources,可以通过Add Data Sources添加数据源,选择Prometheus,并设置Prometheus的server url即可。
在Grafana中有Dashboard和Panel的概念,Dashboard可以理解成看板,而Panel则可以理解成图表,一个看板中一般包含了很多个图表。Panel有着高度的自由度,可以自行选择图表类型,以及对图表进行样式的调整,也可以选择其他人提供的模板,在Grafana Dashboard处可以下载模板并应用于看板中。
要使用Grafana的报警功能,首先需要配置一种通知方式,可以在Grafana服务端的conf/default.ini文件中配置邮件服务器的地址,端口,用户名和密码等信息。配置完成后,可以在Grafana的Alerting界面中配置报警规则,当监控数据达到某个阈值时,会发送邮件通知。
Prometheus的设置稍显复杂,如果想要一键式简单安装,可以参考nezha或是ServerStatus这类开源探针进行监控。
利用Prometheus+Grafana搭建监控系统