编辑
2023-03-14
灌水
00
请注意,本文编写于 959 天前,最后修改于 665 天前,其中某些信息可能已经过时。

目录

Prometheus简介
Prometheus的优势
Prometheus的组件
Prometheus的架构
运行Prometheus
运行NodeExporter
Grafana
安装Grafana
添加Prometheus数据源
添加Dashboard
配置报警功能
其他服务器监控工具

img.jpg

Prometheus简介

Prometheus是由前Google工程师从2012年开始在Soundcloud以开源软件的形式进行研发的系统监控和告警工具包,自此以后,许多公司和组织都采用了Prometheus作为监控告警工具。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。这样做非常适合虚拟化环境,比如 VM或者Docker等。


Prometheus的优势

  • 由指标名称和和键/值对标签标识的时间序列数据组成的多维数据模型。
  • 强大的查询语言PromQL。
  • 不依赖分布式存储;单个服务节点具有自治能力。
  • 时间序列数据是服务端通过HTTP协议主动拉取获得的。
  • 可以通过中间网关来推送时间序列数据。
  • 可以通过静态配置文件或服务发现来获取监控目标。
  • 支持多种类型的图表和仪表盘。

Prometheus的组件

Prometheus生态系统由多个组件组成,其中有许多组件是可选的:

  • Prometheus Server作为服务端,用来存储时间序列数据。
  • 客户端库用来检测应用程序代码。
  • 用于支持临时任务的推送网关。
  • Exporter用来监控HAProxy,StatsD,Graphite等特殊的监控目标,并向Prometheus提供标准格式的监控样本数据。
  • alartmanager用来处理告警。
  • 各种支持工具。

其中大多数组件都是用Go编写的,因此很容易构建和部署为静态二进制文件。


Prometheus的架构

Prometheus的整体架构以及生态系统组件如下图所示: w4te.png Prometheus Server直接从监控目标中或者间接通过推送网关来拉取监控指标,它在本地存储所有抓取到的样本数据,并对此数据执行一系列规则,以汇总和记录现有数据的新时间序列或生成告警。可以通过Grafana或者其他工具来实现监控数据的可视化。


运行Prometheus

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

bash
systemctl daemon-reload systemctl enable prometheus --now # 查看服务状态 systemctl status prometheus

可以通过http://服务器IP:9090访问Prometheus的管理界面,Graph界面可以用来查看监控数据,Status界面可以查看Prometheus Server的状态。


运行NodeExporter

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的监控数据。

bash
systemctl 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是一个跨平台的开源的度量分析和可视化工具,主要用于查询并可视化展示采集的数据,它提供了丰富的可视化展示方式,包括快速灵活的客户端图表,拥有不同方式的可视化指标和日志的面板插件以及丰富的仪表盘插件,包括热图、折线图、图表等。

Grafana能够帮助用户快速的查看和编辑dashboard的前端。支持同时连接多种数据源,能够将时序时空数据库(TSDB)数据转换为漂亮的图表。


安装Grafana

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进行登录。


添加Prometheus数据源

通过设置中的Data Sources,可以通过Add Data Sources添加数据源,选择Prometheus,并设置Prometheus的server url即可。 grafana.png


添加Dashboard

在Grafana中有Dashboard和Panel的概念,Dashboard可以理解成看板,而Panel则可以理解成图表,一个看板中一般包含了很多个图表。Panel有着高度的自由度,可以自行选择图表类型,以及对图表进行样式的调整,也可以选择其他人提供的模板,在Grafana Dashboard处可以下载模板并应用于看板中。 dashboard.png


配置报警功能

要使用Grafana的报警功能,首先需要配置一种通知方式,可以在Grafana服务端的conf/default.ini文件中配置邮件服务器的地址,端口,用户名和密码等信息。配置完成后,可以在Grafana的Alerting界面中配置报警规则,当监控数据达到某个阈值时,会发送邮件通知。


其他服务器监控工具

Prometheus的设置稍显复杂,如果想要一键式简单安装,可以参考nezha或是ServerStatus这类开源探针进行监控。


利用Prometheus+Grafana搭建监控系统