监控系统简介
Prometheus 是一套开源的系统监控报警框架。需要指出的是,由于数据采集可能会有丢失,所以 Prometheus 不适用对采集数据要 100% 准确的情形。但如果用于记录时间序列数据,Prometheus 具有很大的查询优势,此外, Prometheus 适用于微服务的体系架构。 prometheus可以理解为一个数据库+数据抓取工具,工具从各处抓来统一的数据,放入prometheus这一个时间序列数据库中。那如何保证各处的数据格式是统一的呢?就是通过这个exporter。exporter也是用GO写的程序,它开放一个 http接口,对外提供格式化的数据。所以在不同的环境下,需要编写不同的 exporter。
当前使用到的组件和功能
prometheus是最主要的组件,负责采集数据,发出告警。node_exporter提供数据采集服务接口。alertmanager处理警告。prometheus-webhookdingtalk发送警告。grafana显示数据。
Prometheus的基本架构
Prometheus Server
Prometheus Server是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 Prometheus Server可以通过静态配置管理监控目标,也可以配合使用Service Discovery的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Server需要对采集到的监控数据进行存储,Prometheus Server本身就是一个时序数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。最后Prometheus Server对外提供了自定义的PromQL语言,实现对数据的查询以及分析。
Prometheus Server内置的Express Browser UI,通过这个UI可以直接通过PromQL实现数据的查询以及可视化。
Prometheus Server的联邦集群能力可以使其从其他的Prometheus Server实例中获取数据,因此在大规模监控的情况下,可以通过联邦集群以及功能分区的方式对Prometheus Server进行扩展。Exporters
Exporter将监控数据采集的端点通过HTTP服务的形式暴露给Prometheus Server,Prometheus Server通过访问该Exporter提供的Endpoint端点,即可获取到需要采集的监控数据。
一般来说可以将Exporter分为2类:
- 直接采集:这一类Exporter直接内置了对Prometheus监控的支持,比如cAdvisor,Kubernetes,Etcd,Gokit等,都直接内置了用于向Prometheus暴露监控数据的端点。
- 间接采集:间接采集,原有监控目标并不直接支持Prometheus,因此我们需要通过Prometheus提供的Client Library编写该监控目标的监控采集程序。例如: Mysql Exporter,JMX Exporter,Consul Exporter等。
AlertManager
在Prometheus Server中支持基于PromQL创建告警规则,如果满足PromQL定义的规则,则会产生一条告警,而告警的后续处理流程则由AlertManager进行管理。在AlertManager中我们可以与邮件,Slack等等内置的通知方式进行集成,也可以通过Webhook自定义告警处理方式。AlertManager即Prometheus体系中的告警处理中心。
PushGateway
由于Prometheus数据采集基于Pull模型进行设计,因此在网络环境的配置上必须要让Prometheus Server能够直接与Exporter进行通信。 当这种网络需求无法直接满足时,就可以利用PushGateway来进行中转。可以通过PushGateway将内部网络的监控数据主动Push到Gateway当中。而Prometheus Server则可以采用同样Pull的方式从PushGateway中获取到监控数据。
1、整体环境部署
整体环境配置在外网的服务器上,node_exporter配置在需要监控的内网 IP服务器上。 prometheus、node_exporter、Alertmanager都解压到/usr/local/src/prometheus/ 下,grafana安装包rpm安装,go语言安装到/usr/local/go/,prometheus-webhook-dingtalk安装在go语言src目录下。
1.1、添加文件夹
# prometheus软链接文件夹
mkdir ‐p /usr/local/prometheus
mkdir /usr/local/prometheus/prometheus
mkdir /usr/local/prometheus/node_exporte
mkdir /usr/local/prometheus/alertmanager
# prometheus源码文件夹
mkdir ‐p /usr/local/src/prometheus
# prometheus数据存放文件夹
mkdir ‐p /xtdata/prometheus/data
# prometheus数据存放文件夹权限设置
chown -R prometheus:prometheus /xtdata/prometheus/data
1.2、添加不可登录的prometheus的prometheus用户
#创建用户组
groupadd prometheus
#添加不可登录的prometheus的prometheus用户
useradd -g prometheus -s /sbin/nologin prometheus
2、Prometheus安装及配置
2.1、下载及解压安装包
从https://prometheus.io/download/获取最新安装包
cd /usr/local/src/prometheus
wget https://github.com/prometheus/prometheus/releases/download/v2.25.0/prometheus-2.25.0.linux-amd64.tar.gz
tar -xvf prometheus-2.25.0.linux-amd64.tar.gz
ln -s /usr/local/src/prometheus/prometheus-2.25.0.linux-amd64 /usr/local/prometheus/prometheus
# 设置prom etheus目录的权限为prometheus.prometheus
chown -R prometheus:prometheus /usr/local/prometheus/prometheus
2.2、设置环境变量
也可以不设置,使用时最好为绝对路径
vim /etc/profile
PATH=/usr/local/prometheus/prometheus/bin:$PATH:$HOME/bin source
#使环境变量生效
/etc/profile