文章目录
- 1. Prometheus介绍
- 1.1. Prometheus简介
- 1.2. Prometheus架构
- 1.2.1. Prometheus Server
- 1.2.2. 指标采集
- 1.2.3. 服务发现
- 1.2.4. 告警管理
- 1.2.5. 图形化展示
- 1.3. 对比Zabbix
- 2. Prometheus部署服务端
- 2.1 下载安装
- 2.2 创建Prometheus用户
- 2.3 配置systemctl管理
- 3. 部署监控端node_exporter
- 3.1 下载安装包
- 3.2 创建Prometheus用户
- 3.3 解压安装包
- 3.4 配置systemctl管理
- 3.5 配置Prometheus配置文件
- 4. 部署Grafana
- 4.1 下载Grafana
- 4.2 导入官网的Dashboard(仪表盘)
- 4.3 配置自己的Dashboard(仪表盘)
- 5. 扩展
- 5.1 Grafana显示错误----Panel plugin not found:table-old
1. Prometheus介绍
1.1. Prometheus简介
Prometheus 是一款基于时序数据库的开源监控告警系统,非常适合Kubernetes集群的监控。Prometheus的基本原理是通过HTTP协议周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口就可以接入监控。不需要任何SDK或者其他的集成过程。这样做非常适合做虚拟化环境监控系统,比如VM、Docker、Kubernetes等。输出被监控组件信息的HTTP接口被叫做exporter 。目前互联网公司常用的组件大部分都有exporter可以直接使用,比如Varnish、Haproxy、Nginx、MySQL、Linux系统信息(包括磁盘、内存、CPU、网络等等)。Promethus有以下特点:
- 支持多维数据模型:由度量名和键值对组成的时间序列数据
- 内置时间序列数据库TSDB
- 支持PromQL查询语言,可以完成非常复杂的查询和分析,对图表展示和告警非常有意义
- 支持HTTP的Pull方式采集时间序列数据
- 支持PushGateway采集瞬时任务的数据
- 支持服务发现和静态配置两种方式发现目标
- 支持接入Grafana
1.2. Prometheus架构
组件说明
-
prometheusserver
:是Prometheus组件中的核心部分,负责实现对监控数据的获取,存储以及查询。 -
exporter
:简单说是采集端,通过http服务的形式保留一个url地址,ndpoint端点,即可获取到需要采集的监控数据。 -
AlertManager
:在prometheus中,支持基于PromQL创建告警规则,如果满足定义的规则,则会产生一条告警信息,进入AlertManager进行处理。可以集成邮件,微信或者通过webhook自定义报警。 -
Pushgateway
:由于Prometheus数据采集采用pull方式进行设置的,内置必须保证prometheusserver和对应的exporter必须通信,当网络情况无法直接满足时,可以使用pushgateway来进行中转,可以通过pushgateway将内部网络数据主动push到gateway里面去,而prometheus采用pull方式拉取pushgateway中数据。
总结
- prometheus负责从pushgateway和job中采集数据,存储到后端Storatge中,可以通过PromQL进行查询,推送alerts信息到AlertManager。AlertManager根据不同的路由规则进行报警通知。
1.2.1. Prometheus Server
主要负责数据采集和存储,提供PromQL查询语言的支持。包含了三个组件:
- Retrieval: 获取监控数据
- TSDB: 时间序列数据库(Time Series Database),我们可以简单的理解为一个优化后用来处理时间序列
- 数据的软件,并且数据中的数组是由时间进行索引的。具备以下特点:
- 大部分时间都是顺序写入操作,很少涉及修改数据
- 删除操作都是删除一段时间的数据,而不涉及到删除无规律数据
- 读操作一般都是升序或者降序
- HTTP Server: 为告警和出图提供查询接口
1.2.2. 指标采集
- Exporters: Prometheus的一类数据采集组件的总称。它负责从目标处搜集数据,并将其转化为Prometheus支持的格式。与传统的数据采集组件不同的是,它并不向中央服务器发送数据,而是等待中央服务器主动前来抓取
- Pushgateway: 支持临时性Job主动推送指标的中间网关
1.2.3. 服务发现
- Kubernetes_sd: 支持从Kubernetes中自动发现服务和采集信息。而Zabbix监控项原型就不适合Kubernets,因为随着Pod的重启或者升级,Pod的名称是会随机变化的。
- file_sd: 通过配置文件来实现服务的自动发现
1.2.4. 告警管理
通过相关的告警配置,对触发阈值的告警通过页面展示、短信和邮件通知的方式告知运维人员。
1.2.5. 图形化展示
通过ProQL语句查询指标信息,并在页面展示。虽然Prometheus自带UI界面,但是大部分都是使用Grafana出图。另外第三方也可以通过 API 接口来获取监控指标。
1.3. 对比Zabbix
Zabbix | Prometheus |
后端用 C 开发,界面用 PHP 开发,定制化难度很高。 | 后端用 golang 开发,前端是 Grafana,JSON 编辑即可解决。定制化难度较低。 |
集群规模上限为 10000 个节点。 | 支持更大的集群规模,速度也更快。 |
更适合监控物理机环境,以IP地址为监控标识 | 更适合云环境的监控,对 OpenStack,Kubernetes 有更好的集成。 |
监控数据存储在关系型数据库内,如 MySQL,很难从现有数据中扩展维度。 | 监控数据存储在基于时间序列的数据库内,便于对已有数据进行新的聚合。 |
安装简单,zabbix-server 一个软件包中包括了所有的服务端功能。 | 安装相对复杂,监控、告警和界面都分属于不同的组件。 |
图形化界面比较成熟,界面上基本上能完成全部的配置操作。 | 界面相对较弱,很多配置需要修改配置文件。 |
主要使用场景区别是,Zabbix适合用于虚拟机、物理机的监控,因为每个监控指标是以 IP 地址作为标识进行区分的。而Prometheus的监控指标是由多个 label 组成,IP地址并不是唯一的区分指标,Prometheus 强大在可以支持自动发现规则,因此适合于容器环境。
从自定义监控项角度而言,Prometheus 开发难度较大,zabbix配合shell脚本更加方便。Prometheus在监控虚拟机上业务时,可能需要安装多个 exporter,而zabbix只需要安装一个 Agent。
Prometheus 采用拉数据方式,即使采用的是push-gateway,prometheus也是从push-gateway拉取数据。而Zabbix可以推可以拉。
2. Prometheus部署服务端
操作系统 | ip地址 | 主机名 | 应用 |
CentOS 7.8 | 192.168.153.205 | grafana | grafana |
CentOS 7.4 | 192.168.153.143 | prometheus | prometheus,alertmanager |
CentOS 7.4 | 192.168.153.144 | node1 | node_exporter |
prometheus官网
2.1 下载安装
[root@prometheus ~]#cd /usr/local/src/
[root@prometheus ~]#wget https://github.com/prometheus/prometheus/releases/download/v2.31.0-rc.0/prometheus-2.31.0-rc.0.linux-amd64.tar.gz
[root@prometheus ~]# tar -xzvf prometheus-2.31.0-rc.0.linux-amd64.tar.gz -C /usr/local/
[root@prometheus local]# mv prometheus-2.31.0-rc.0.linux-amd64/ prometheus
[root@prometheus local]# cd prometheus/
[root@prometheus prometheus]# mkdir data #创建数据存放目录
2.2 创建Prometheus用户
[root@prometheus ~]#groupadd prometheus
[root@prometheus ~]#useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
2.3 配置systemctl管理
[root@prometheus prometheus]# vim /usr/lib/systemd/system/prometheus.service
[root@prometheus prometheus]# cat /usr/lib/systemd/system/prometheus.service
[Unit]
Description=https://prometheus.io
[Service]
Restart=on-failure
ExecStart=/usr/local/prometheus/prometheus --storage.tsdb.path=/usr/local/prometheus/data --config.file=/usr/local/prometheus/prometheus.yml
[Install]
WantedBy=multi-user.target
[root@prometheus prometheus]# cp prometheus.yml prometheus.yml.bak
[root@prometheus prometheus]# systemctl start prometheus
3. 部署监控端node_exporter
3.1 下载安装包
[root@node1 ~]# systemctl stop firewalld
[root@node1 ~]# setenforce 0
[root@node1 ~]# cd /usr/local/src/
[root@node1 ~]# wget https://github.com/prometheus/node_exporter/releases/download/v1.1.2/node_exporter-1.1.2.linux-amd64.tar.gz
3.2 创建Prometheus用户
[root@node1 ~]#groupadd prometheus
[root@node1 ~]# useradd -g prometheus -m -d /var/lib/prometheus -s /sbin/nologin prometheus
3.3 解压安装包
[root@node1 ~]# tar -xvzf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/
[root@node1 ~]# cd /usr/local/
[root@node1 local]# mv node_exporter-1.2.2.linux-amd64/ node_exporter
[root@node1 node_exporter]# nohup ./node_exporter & #这样启动也可以,但是我不是
[root@node1 node_exporter]# netstat -tnlp
3.4 配置systemctl管理
[root@node1 node_exporter]# vim /usr/lib/systemd/system/node_exporter.service
[Unit]
Description=Prometheusnode_exporter
[Service]
User=nobody
ExecStart=/usr/local/node_exporter/node_exporter --log.level=error
ExecStop=/usr/bin/killallnode_exporter
[Install]
WantedBy=default.target
[root@node1 node_exporter]# systemctl start node_exporter #配置完成之后,这样启动
3.5 配置Prometheus配置文件
#来到监控节点
[root@prometheus prometheus]# pwd
/usr/local/prometheus
[root@prometheus prometheus]# vim prometheus.yml #在最后面添加监控主机
- job_name: "node1"
static_configs:
- targets: ["192.168.153.144:9100"]
[root@prometheus prometheus]# ./promtool check config prometheus.yml #检查配置文件语法有无问题
[root@prometheus prometheus]# systemctl restart prometheus
4. 部署Grafana
安装方式:
- 选择rpm安装。
- 二进制安装。(我这里是rpm安装)
4.1 下载Grafana
[root@grafana ~]# wget https://dl.grafana.com/oss/release/grafana-7.5.2-1.x86_64.rpm
[root@grafana ~]# yum -y install grafana-7.5.2-1.x86_64.rpm
[root@grafana ~]# systemctl start grafana-server
[root@grafana ~]# netstat -tnlp
默认账号:admin ; 默认密码:admin
登录之后,需要修改密码,自行修改即可
下面我们把prometheus服务器收集的数据做为一个数据源添加到 grafana,让grafana可以得到prometheus的数据。
4.2 导入官网的Dashboard(仪表盘)
4.3 配置自己的Dashboard(仪表盘)
5. 扩展
5.1 Grafana显示错误----Panel plugin not found:table-old
Grafana导入node_exporter图标后,显示Panel plugin not found:table-old.
通常这种情况为Import获取官方模板造成的情况 原因为不兼容,下载版本高的grafana即可
- 如图中报错版本为:grafana-5.3.4-1
- 升级grafana版本为:grafana-7.5.4-1
下载地址:https://wget.52liangzy.top/prom/grafana-7.5.4-1.x86_64.rpm
查看自己的Grafana版本
[root@lzy prom]#grafana-server -v
升级步骤:
[root@lzy prom]# wget https://wget.52liangzy.top/prom/grafana-7.5.4-1.x86_64.rpm
[root@lzy prom]# yum install initscripts fontconfig
[root@lzy prom]# rpm -Uvh grafana-7.5.4-1.x86_64.rpm //升级grafana,源数据会保留
[root@lzy prom]# systemcat restart grafana
访问grafana: