Prometheus
1、Prometheus 概述
Prometheus(普罗米修斯)是一套开源的监控&报警&时间序列数据库的组合,起始是由SoundCloud 公司开发的。现在最常见的 Docker、Mesos、Kubernetes 容器管理系统中,通常会搭配Prometheus 进行监控。
- Prometheus 基本原理是通过 HTTP 协议周期性抓取被监控组件的状态,这样做的好处是任意组件只要提供 HTTP 接口就可以接入监控系统,不需要任何 SDK 或者其他的集成过程。这样做非常适合虚拟化,环境比如 VM 或者 Docker 。
- 输出被监控组件信息的 HTTP 接口被叫做 exporter。目前互联网公司常用的组件大部分都有
exporter 可以直接使用,比如 Varnish、Haproxy、Nginx、MySQL、Linux 系统信息 (包括磁盘、
内存、CPU、网络等等),具体支持的源看:https://github.com/prometheus
2、Prometheus 架构图解
Prometheus 各组件运行流程如下:
-
1、Prometheus Server:Prometheus Sever 是 Prometheus 组件中的核心部分,负责实现对监控数据的获取,存储及查询。Prometheus Server 可以通过静态配置管理监控目标,也可以配合使用Service Discovery(服务发现)的方式动态管理监控目标,并从这些监控目标中获取数据。其次Prometheus Sever 需要对采集到的数据进行存储,Prometheus Server 本身就是一个实时数据库,将采集到的监控数据按照时间序列的方式存储在本地磁盘当中。Prometheus Server 对外提供了自义的PromQL,实现对数据的查询以及分析。另外 Prometheus Server 的联合集群能力可以使其从其他的Prometheus Server 实例中获取数据。
-
2、Exporters:Exporter将监控数据采集的端点通过 HTTP 服务的形式暴露给Prometheus Server,Prometheus Server 通过访问该 Exporter 提供的 Endpoint 端点,即可以获取到需要采集的监控数据。
可以将 Exporter 分为 2 类:- (1)、直接采集:这一类 Exporter 直接内置了对 Prometheus 监控的支持,比如 cAdvisor,Kubernetes,Etcd,Gokit 等,都直接内置了用于向 Prometheus 暴露监控数据的端点。
- (2)、间接采集:原有监控目标并丌直接支持 Prometheus,因此需要通过 Prometheus 提供的 Client Library 编写该监控目标的监控采集程序。例如:Mysql Exporter,JMX Exporter,Consul Exporter等。
-
3、AlertManager:在 Prometheus Server 中支持基于 Prom QL 创建告警原则,如果满足 Prom QL 定义的觃则,则会产生一条告警。常见的接收斱方式有:电子邮件,webhook 等。
-
4、PushGateway:Prometheus 数据采集基于 Prometheus Server 从 Exporter pull 数据,因此当网络环境允许 Prometheus Server和 Exporter 进行通信时,可以使用 PushGateway 来进行中转。
AlertManager:在 Prometheus Server 中支持基于 Prom QL 创建告警,如果满足 Prom QL 定义的觃则,则会产生一条告警。常见的接收斱式有:电子邮件,webhook 等。
3、Prometheus 的工作流程
- 1、Prometheus server 定期从配置好的 jobs 和 exporters 中拉取 metrics,或者接收来自Pushgateway 发送过来的 metrics,或者从其它的 Prometheus server 中拉metrics。
- 2、Prometheus server 在本地存储收集到的 metrics,并运行定义好的 alerts.rules,记录新的时间序列或者向 Alert manager 推送警报。
- 3、Alertmanager 根据配置文件,对接收到的警报进行处理,发出告警。
- 4、在图形界面中,可规化采集数据。
4、搭建Prometheus过程
- 步骤一:配置epel源
步骤二:安装并且配置Prometheus
yum install go -y #安装go语言,因为Prometheus是用go语言写的
tar zxvf prometheus-2.7.1.linux-amd64.tar.gz -C /usr/local/
cd /usr/local/
cd prometheus-2.7.1.linux-amd64/
vim prometheus.yml
30 - job_name: system-status #每一个job_name都是一个监控项,这里代表监控操作系统状态
31 static_configs:
32 - targets: ['192.168.0.103:9100'] #被监控主机IP地址和端口
33 labels:
34 instance: server3 #实例名称,在grafana中表示对应的主机
35
36 - job_name: mysql-status #监控mysql数据库状态
37 static_configs:
38 - targets: ['192.168.0.103:9104'] #目标主机IP地址和端口
39 labels:
40 instance: server3-mysql #实例名称,在 grafana 中表示对应的主机
./prometheus --config.file=prometheus.yml &
- 步骤三:在浏览器中输入http://192.168.0.102:9090
- 步骤四:启动用于采集linux系统的exporter服务
- 步骤五:在server3上安装数据库,并且配置mysqld_exporter用于监控 server3上的mysql服务
yum install -y mariadb-server mariadb
systemctl start mariadb
mysql_secure_installation
mysql -uroot -predhat
GRANT REPLICATION CLIENT,PROCESS ON *.* TO 'mysql_monitor'@'localhost'
-> identified by '123456';
在 web 界面,再次查看监控信息已经成功添加linux和mysql节点,已经up了