当前位置: 首页 > news >正文

Prometheus监控平台部署与应用

Prometheus监控平台部署与应用

  • 一、Prometheus 的架构介绍
    • 1、起源
    • 2、什么是 Prometheus
    • 3、Prometheus 的运行原理
    • 4、Prometheus 组件构成
    • 5、Prometheus 的特性
    • 6、Prometheus 的工作流程
    • 7、Grafana 介绍
  • 二、Prometheus安装
    • 1、资源清单
    • 2、基础环境
  • 三、部署 node_exporter
    • 1、被监控端安装node_exporter
    • 2、配置Prometheus
  • 四、Grafana的部署与应用
    • 1、安装Grafana
    • 2、启动服务并查看监听
    • 3、访问Grafana
    • 4、导入grafana的监控模板
  • 五、Prometheus告警
    • 1、安装告警组件alertmanager
    • 2、添加媒介
    • 3、测试

一、Prometheus 的架构介绍

1、起源

Prometheus 起源于 SoundCloud ,因为微服务迅速发展,导致实例数量以几何倍数递增,不得不考虑设计一个符合以下几个功能的监控系统:
多维数据模型,可以按照实例,服务,端点和方法之类的维度随意对数据进行切片和切块。
操作简单,可以随时随地部署监控服务,甚至在本地工作站上,而无需设置分布式存储后端或重新配置环境。
可扩展的数据收集和分散的架构,以便于可以可靠的监控服务的许多实例,独立团队可以部署独立的监控服务。
转化为一种查询语言,可以利用数据模型进行有效的警报和图形展示。

但是,当时的情况是,以上的功能都分散在各个系统之中,直到 2012 年 SoundCloud 某位大神启动了一个孵化项目, SoundCloud 才把所有功能集合到一起, 这时也就有了 Prometheus。 Prometheus 是用 Go 语言编写,从一开始就是开源的。尽管一直很低调,一开始还是获得了很多粉丝与贡献者;2016 年 Prometheus 成为继 Kubernetes 之后,成为 CNCF (Cloud Native Computing Foundation) 第二个成员。

2、什么是 Prometheus

Prometheus 具有足够的通用性,可以监控各个级别的实例:你自己的应用程序、第三方服务、主机或网络设备等等。此外 Prometheus 特别适用于监控动态云环境和 Kubernetes 云原生环境。

但是也需要注意的是 Prometheus 并不是万能的,目前并没有解决下面的一些问题:

日志和追踪(Prometheus 只处理指标,也称为时间序列)
基于机器学习或 AI 的异常检测
水平扩展、集群化的存储

3、Prometheus 的运行原理

通过 Http 协议周期性抓取被监控组件的状态。输出被监控组件信息的 Http 接口称为 exporter。 常用组件大部分都有 exporter 可以直接使用,比如 haproxy,Nginx,MySQL,Linux 系统信息(磁盘、内存、CPU、网络等)

4、Prometheus 组件构成

Prometheus 生态系统由多个组件构成,其架构如下图所示:
请添加图片描述
(1) Prometheus server
服务核心组件,采用 pull 方式收集数据,通过 http 协议传输。并存储时间序列数据

(2) Exporters/Jobs
负责收集不支持 Instrumentation 的目标对象的性能数据,并通过 HTTP 接口供 Prometheus Server 获取。

(3) Node-Exporter
用于收集各 node 节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点。

(4) Kube-State-Metrics
为 Prometheus 采集 k8s 资源数据的 exporter,通过监听 API Server 收集 kubernetes 集群内资源对象的状态指标数据,例如 pod、deployment、service 等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。需要注意的是 kube-state-metrics 只是简单的提供一个 metrics 数据,并不会存储这些指标数据,所以可以使用 Prometheus 来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等;调度了多少个 replicas?现在可用的有几个?多少个 Pod 是 running/stopped/terminated 状态?Pod 重启了多少次?有多少 Job 在运行中。

(5) cadvisor
用来监控容器内部使用资源的信息,比如 CPU、内存、网络 I/O、磁盘 I/O。

(6) blackbox-exporter
监控业务容器存活性。

(7) Service Discovery
服务发现,Prometheus 支持多种服务发现机制:文件,DNS,Consul,Kubernetes,OpenStack,EC2 等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus 查询到需要监控的 Target 列表,然后轮训这些 Target 获取监控数据。

(8) Alertmanager
是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组,并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等。

(9) Pushgateway
类似一个中转站,Prometheus 的 server 端只会使用 pull 方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的 server 拉取的中转站。可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后 Prometheus server 统一从 Pushgateway 拉取数据

(10) Grafana
是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件。

5、Prometheus 的特性

(1)提供多维度数据模型和灵活的查询语言:通过将监控指标关联多个 Tag,来将监控数据进行任意维度的组合;提供 HTTP 查询接口;可以很方便的结合 Grafana 等组件展示数据。
(2)支持服务器节点的本地存储,通过 prometheus 自带的时序数据库,可以完成每秒千万级的数据存储。不仅如此,在保存大量历史数据的场景中,prometheus 还可以对接第三方时序数据库如 OpenTSDB 等。
(3)定义了开放指标数据标准,以基于 HTTP 的 Pull 方式采集时序数据,只有实现了 prometheus 监控数据格式的监控数据才可以被 prometheus 采集;并支持以 Push 方式向中间网关推送时序数据,能更灵活地应对各种监控场景。
(4)支持通过静态文件配置和动态发现机制发现监控对象,自动完成数据采集。prometheus 目前已经支持 Kubernetes、Consul 等多种服务发现机制,可以减少运维人员的手动配置环节。
(5)支持多种多样的图表和界面展示,比如 Grafana 等。

6、Prometheus 的工作流程

请添加图片描述
在这里插入图片描述

7、Grafana 介绍

Grafana 是一款用 Go 语言开发的开源数据可视化工具,可以做数据监控和说几句统计,带有告警功能。
在这里插入图片描述

二、Prometheus安装

1、资源清单

操作系统配置主机名IP角色
openeuler 24.032C4Gprometheus192.168.10.108prometheus服务端
openeuler 24.032C4Ggrafana192.168.10.107grafana
openeuler 24.032C4Gserver01192.168.10.101被监控节点
window102C4G——192.168.10.10被监控节点

2、基础环境

(1) 关闭防火墙及内核保护

systemctl stop firewalld
systemctl disable firewalld
setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config

(2) 时间同步
请添加图片描述

mount linux.iso /mnt
cd /mnt
cp VMwareTools-10.3.26-22085142.tar.gz /root
cd
tar zxf VMwareTools-10.3.26-22085142.tar.gz
cd vmware-tools-distrib/
./vmware-install.pl

(3) 修改主机名
192.168.10.101

hostnamectl set-hostname server01
bash

192.168.10.107

hostnamectl set-hostname grafana
bash

192.168.10.108

hostnamectl set-hostname prometheus
bash

(4) 解压二进制包

tar zxf prometheus-2.48.0.linux-amd64.tar.gz

请添加图片描述
(5) 移动到合适位置

mv prometheus-2.48.0.linux-amd64 /usr/local/prometheus

请添加图片描述
(6) 优化路径

ln -s /usr/local/prometheus/prometheus /usr/local/bin/
ln -s /usr/local/prometheus/promtool /usr/local/bin/

请添加图片描述
(7) 加入守护进程

vim /lib/systemd/system/prometheus.service
[Unit]
Description=prometheus[Service]
Restart=on-failure
ExecStart=/usr/local/bin/prometheus --config.file=/usr/local/prometheus/prometheus.yml --web.listen-address=:9090[Install]
WantedBy=multi-user.target

(8) 重载守护进程后启动并查看监听

systemctl start prometheus
netstat -anpt | grep prometheus

请添加图片描述
(9) 访问测试
请添加图片描述

三、部署 node_exporter

Exporter 是 Prometheus 的指标数据收集组件。它负责从目标 Jobs 收集数据,并把收集到的数据转换为 Prometheus 支持的时序数据格式。和传统的指标数据收集组件不同的是,他只负责收集,并不向 Server 端发送数据,而是等待 Prometheus Server 主动抓取,node-exporter 默认的抓取 url 地址:http://ip:9100/metrics

1、被监控端安装node_exporter

192.168.10.101
(1) 解压源码包并放到合适目录下

tar zxf node_exporter-1.7.0.linux-amd64.tar.gz 
mv node_exporter-1.7.0.linux-amd64 /usr/local/node_export

请添加图片描述
(2) 加入守护进程

cat<<EOF>/lib/systemd/system/node_exporter.service
[Unit]
Description=node_exporter
After=network.target
[Service]
ExecStart=/usr/local/node_export/node_exporter
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

(3) 重载守护进程后启动并查看监听

systemctl daemon-reload
systemctl start node_exporter
netstat -anpt | grep node_exporter

请添加图片描述
(4) Windows 安装 node_exporter
上传 windows_exporter - 0.20.0 - amd64.msi 文件
注意:可以把 Windows 的防火墙关闭了
双击该文件即可
若对提取结果有格式等进一步需求,可补充说明 。

192.168.10.10
请添加图片描述

2、配置Prometheus

192.168.10.108

(1) 在配置文件中添加目标(target)

cat<<EOF>>/usr/local/prometheus/prometheus.yml- job_name: 'agent'static_configs:- targets: ["192.168.10.101:9100","192.168.10.10:9182"]
EOF

在这里插入图片描述
(2) 重启服务

systemctl restart prometheus

(3) 查看目标是否添加成功
在这里插入图片描述

四、Grafana的部署与应用

192.168.10.107

1、安装Grafana

 dnf -y install grafana-enterprise-10.2.2-1.x86_64.rpm

请添加图片描述

2、启动服务并查看监听

systemctl start grafana-server
systemctl status grafana-server
netstat -anpt | grep grafana

请添加图片描述

3、访问Grafana

(1) 登录
http://192.168.10.107:3000

默认端口:3000

初始账密:admin

请添加图片描述
(2) 设置数据源
点击DATA SOURCE添加
请添加图片描述
(3) 设置Prometheus为数据源
请添加图片描述

(4) 填写连接信息
URL:填写自己的Prometheus的地址
下拉点击保存并测试
请添加图片描述
请添加图片描述

4、导入grafana的监控模板

(1) 在home页面点击DASHBOARD
请添加图片描述
(2) 选择导入模板的方法
请添加图片描述
(3) 指定模板 ID
模板 ID 可以从 Grafana 官网获得,Grafana 为用户提供了大量的模板,简化了用户的管理难度。本案例中使用的模板 ID 为 12633,填写好 ID 后点击 “Load” 按钮。
https://grafana.com/grafana/dashboards/
注意:
12633:针对 Linux 的节点进行监控的模板
14694:针对 Windows 的节点进行监控的模板
用户也可以选择其他对应的模板进行创建。
请添加图片描述
(4) 选择数据源Prometheus并导入
请添加图片描述
(5) 查看
请添加图片描述
保存
在这里插入图片描述

五、Prometheus告警

1、安装告警组件alertmanager

192.168.10.108

(1) 安装altermanager

tar zxf alertmanager-0.26.0.linux-amd64.tar.gz
mv alertmanager-0.26.0.linux-amd64 /usr/local/alertmanager

(2) 添加alertmanager服务到守护进程
属性解析:web.listen-address 是与 prometheus 交互的端口

cat <<EOF>/usr/lib/systemd/system/alertmanager.service
[Unit]
Description=rxdtcfygvhbjkn
After=network.target
[Service]
Type=simple
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --web.listen-address=0.0.0.0:9093
Restart=on-failure
[Install]
WantedBy=multi-user.target
EOF

(3) 重载守护进程后启动服务并查看监听

systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager
netstat -anpt | grep 9093

请添加图片描述
(4) 访问alertmanager的web界面
alertmanager 的 web 界面使用 9093 的端口,登录的 url 如下

http://192.168.10.108:9093
请添加图片描述
(5) 将alertmanager增加到Prometheus

vim /usr/local/prometheus/prometheus.yml

请添加图片描述
(6) 创建规则文件

mkdir /usr/local/prometheus/rulesvim /usr/local/prometheus/rules/hoststats-alert.rules
groups:
- name: node1_alertsrules:- alert: HighNodeCpuexpr: instance:node_cpu:avg_rate1m > 10for: 1mlabels:severity: warningannotations:summary: Hgih Node CPU for 1 hourconsole: This is a Test- alert: HostOutOfMemoryexpr: node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10for: 2mlabels:severity: warningannotations:summary: Host out of memory (instance {{ $labels.instance }})description: "Node memory is filling up (< 10% left)\n  VALUE = {{ $value }}\n  LABELS = {{ $labels }}"- alert: InstanceDownexpr: up == 0for: 10slabels:severity: criticalannotations:summary: Host {{ $labels.instance }} of {{ $labels.job }} is Down!

该规则文件总共添加了三条规则,第一个规则是检测 CPU 负载,第二个是内存利用率的检测,第三个是主机 down 的检测。

(7) 修改Prometheus配置文件添加规则

vim /usr/local/prometheus/prometheus.yml

在这里插入图片描述
(8) 重启服务、查看监听、检查语法

systemctl restart prometheus
netstat -anpt | grep prometheus
promtool check config /usr/local/prometheus/prometheus.yml

2、添加媒介

(1) 编辑配置文件

cat <<EOF>/usr/local/alertmanager/alertmanager.yml
global:resolve_timeout: 5msmtp_smarthost: 'smtp.qq.com:587'smtp_from: '2675318058@qq.com'smtp_auth_username: '2675318058@qq.com'smtp_auth_password: 'usummzumlqvhebed'smtp_hello: 'qq.com'smtp_require_tls: true
# 路由配置
route:group_by: ['alertname', 'cluster']group_wait: 10sgroup_interval: 10srepeat_interval: 10sreceiver: 'email'
# 收信人员
receivers:
- name: 'email'email_configs:- to: '386192155@qq.com'send_resolved: true
# 规则主动失效措施,如果不想用的话可以取消掉
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']
EOFglobal:resolve_timeout: 5m  # 告警解决状态的超时时间,5分钟。若告警恢复,超过此时间未再触发,标记为已解决smtp_smarthost: 'smtp.qq.com:587'  # 发送邮件的 SMTP 服务器及端口,这里是 QQ 邮箱的 SMTP 地址smtp_from: '2675318058@qq.com'  # 发件人邮箱,用 QQ 邮箱发送告警邮件smtp_auth_username: '2675318058@qq.com'  # SMTP 认证的用户名,即发件人邮箱smtp_auth_password: 'usummzumqlvhebed'  # SMTP 认证密码(QQ 邮箱需开启 SMTP 服务并设置授权码,这里填的应是授权码 )smtp_hello: 'qq.com'  # HELO 命令中使用的域名,与邮箱域名对应smtp_require_tls: true  # 是否要求使用 TLS 加密连接发送邮件,保障邮件传输安全route:group_by: ['alertname', 'cluster']  # 按告警名称、集群维度分组,相同组的告警会合并处理group_wait: 10s  # 等待 10 秒,收集同组告警,再一起发送通知,避免频繁告警group_interval: 10s  # 同组告警,两次通知的时间间隔,10 秒repeat_interval: 10s  # 重复告警通知的间隔,10 秒,若告警持续触发,到间隔时间会再次发通知receiver: 'email'  # 指定接收告警的接收器,这里关联下面定义的名为 email 的接收器receivers:
- name: 'email'  # 接收器名称为 emailemail_configs:  # 邮件通知配置- to: '386192155@qq.com'  # 收件人邮箱,接收告警邮件send_resolved: true  # 告警恢复(解决)时,是否发送恢复通知邮件inhibit_rules:
- source_match:  # 源匹配条件,满足条件的告警会触发抑制severity: 'critical'  # 源告警的 severity(严重程度)为 critical(严重)target_match:  # 目标匹配条件,被抑制的告警需满足severity: 'warning'  # 目标告警的 severity 为 warning(警告)equal: ['alertname', 'dev', 'instance']  # 当源和目标告警在这些标签(alertname、dev、instance )上值相等时,触发抑制,即严重告警触发后,同标签的警告告警不再重复通知

(2) 重启服务并查看监听

systemctl restart alertmanager
netstat -anpt | grep alertmanager

3、测试

(1) 挂起虚拟机
最初为绿色
在这里插入图片描述
接着黄色挂起
在这里插入图片描述
最后红色停止
在这里插入图片描述
在这里插入图片描述
恢复虚拟机后
在这里插入图片描述

http://www.xdnf.cn/news/1266697.html

相关文章:

  • rotary_emb 位置编码 加速
  • 书生浦语第五期-L1G4-InternLM 论文分类微调实践(XTuner 版)
  • 大模型在垂直场景的创新应用:搜索、推荐、营销与客服新玩法
  • 笔试——Day33
  • 基于深度强化学习的Atari中的SpaceInvaders
  • Effective C++ 条款31: 将文件间的编译依存关系降至最低
  • AI 大模型企业级应用落地挑战与解决方案
  • [Oracle] MAX()和MIN()函数
  • QT第一讲- Qt初探
  • 轻量化阅读应用实践:21MB无广告电子书阅读器测评
  • 政府数字化大屏系统 - Flask实现方案
  • 6.6 ASPICE验证过程的缺陷管理
  • ESP32之wifi_HTTP
  • Linux-JSON Schema
  • 大模型SSE流式输出技术
  • 【Python 高频 API 速学 ③】
  • 信息安全及防火墙总结
  • 【排序算法】②希尔排序
  • 束搜索(Beam Search):原理、演进与挑战
  • AI鉴伪技术:守护数字时代的真实性防线
  • PromptPilot打造高效AI提示词
  • llama-factory代码详解(一)--model_args.py
  • C++实现MATLAB矩阵计算程序
  • 【传奇开心果系列】Flet框架实现的功能丰富设计现代化的管理仪表盘组件自定义模板
  • 掌握长尾关键词SEO优化技巧
  • Redis 持久化策略深度剖析:从原理到实战,守护数据不丢失
  • axios 发请求
  • 制作浏览器CEFSharp133+X86+win7 之 javascript交互(二)
  • C++-AVL树
  • 词向量基础:从独热编码到分布式表示的演进