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

Prometheus 监控平台部署与应用

目录

  • 一. Prometheus 的架构介绍
    • 1. 起源
    • 2. 什么是 Prometheus
    • 3. Prometheus 的运行原理
    • 4. Prometheus 组件构成
    • 5. Prometheus 的特性
    • 6. Prometheus 的工作流程
    • 7. Grafana 介绍
  • 二. Prometheus 的安装
    • 1. 资源清单
    • 2. 基础环境
    • 3. 部署 Prometheus
    • 4. 访问测试
  • 三. 部署 node exporter
    • 1. 被监控端安装 node_exporter
    • 2. 配置 Prometheus
  • 四. Grafana 的部署与应用
    • 1. 部署 Grafana
    • 2. 浏览器访问 Grafana
    • 3. 用导入模板的方法添加 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生态系统由多个组件构成,其架构如下图所示:

在这里插入图片描述

组件说明
Prometheus server服务核心组件,采用pull方式收集数据,通过 http协议传输。并存储时间序列数据
Exporters/Jobs负责收集不支持 Instrumentation 的目标对象的性能数据,并通过 HTTP 接口供 PrometheusServer 获取
Node-Exporter用于收集各 node 节点的物理指标状态数据,如平均负载、CPU、内存、磁盘、网络等资源信息的指标数据,需要部署到所有运算节点
Kube-state-Metrics为 prometheus 采集 k8s 资源数据的 exporter,通过监听 APIServer 收集 kubernetes 集群内资源对象的状态指标数据,例如 pod、deployment、service 等等。同时它也提供自己的数据,主要是资源采集个数和采集发生的异常次数统计。 需要注意的是 kube-state-metrics 只是简单的提供一个metrics 数据,并不会存储这些指标数据,所以可以使用 Prometheus 来抓取这些数据然后存储,主要关注的是业务相关的一些元数据,比如 Deployment、Pod、副本状态等;调度了多少个replicas?现在可用的有几个?多少个 Pod是 running/stopped/terminated 状态?Pod重启了多少次?有多少 job 在运行中
cadvisor用来监控容器内部使用资源的信息,比如CPU、内存、网络I/0、磁盘 I/0
blackbox-exporter监控业务容器存活性
Service Discovery服务发现,Prometheus 支持多种服务发现机制:文件,DNS,Consul,Kubernetes,0penstack,EC2等等。基于服务发现的过程并不复杂,通过第三方提供的接口,Prometheus 查询到需要监控的Target列表,然后轮训这些 Target 获取监控数据
Alertmanager是一个独立的告警模块,从 Prometheus server 端接收到 alerts 后,会进行去重、分组, 并路由到相应的接收方,发出报警,常见的接收方式有:电子邮件,微信,钉钉等
Pushgateway类似一个中转站,Prometheus 的server端只会使用pull方式拉取数据,但是某些节点因为某些原因只能使用 push 方式推送数据,那么它就是用来接收 push 而来的数据并暴露给 Prometheus 的server 拉取的中转站。 可以理解成目标主机可以上报短期任务的数据到 Pushgateway,然后Prometheus server 统一从Pushgateway 拉取数据
Grafana是一个跨平台的开源的度量分析和可视化工具,可以将采集的数据可视化的展示,并及时通知给告警接收方。其官方库中具有丰富的仪表盘插件

5. Prometheus 的特性

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

6. Prometheus 的工作流程

在这里插入图片描述

(1)配置监控目标:在 Prometheus 配置文件中定义监控目标及其相应的指标
(2)拉取指标数据:Prometheus 会定期从监控目标拉取指标数据,并将数据存储到本地存储中
(3)存储指标数据:Prometheus 会使用一种自定义的时间序列数据库(TSDB)存储指标数据,以便进
行分析和查询
(4)分析指标数据:Prometheus 提供了一个表达式语言,可以基于时间序列数据进行数据处理和分析操作,比如计算归一化指标、统计分位数、处理异常值等
(5)查询指标数据:Prometheus 提供了一个基于 HTTP 的查询 API,可以用来执行査询操作和获取查询结果,获取到的查询数据可以通过图表和仪表盘的方式进行展示

7. Grafana 介绍

Grafana是一款用 Go 语言开发的开源数据可视化工具,可以做数据监控和说几句统计,带有告警功能。其特点如下:

特点说明
可视化快速和灵活的客户端图形具有多种选项,面板插件为许多不同的方式可视化指标和日志
报警可视化地为最重要的指标定义警报规则,Granfana将持续评估他们,并发送通知
通知警报更改状态时,他会发出通知,接受电子邮件通知
动态仪表盘使用模板变量创建动态和可重用的仪表盘,这些模板变量作为下拉菜单出现在仪表板顶部
混合数据源在同一个图中混合不同的数据源,可以根据每个查询指定数据源,这甚至适用于自定义数据源
注释注释来自不同数据源图标,将鼠标悬停在事件上可以显示完整的事件元数据和标记
过滤器过滤器允许您动态创建新的键~值,这些过滤器将自动应用于该数据源的所有查询

二. Prometheus 的安装

1. 资源清单

操作系统配置主机名IP角色
OpenEuler2C4Gserver01192.168.10.101被监控主机(linux主机)
Windows 102C4Gwin10192.168.10.10被监控主机(windows主机)
OpenEuler2C4Ggrafana192.168.10.105grafana 服务器
OpenEuler2C4Gprometheus192.168.10.106prometheus 服务器

2. 基础环境

(1)关闭防火墙和Selinux

systemctl stop firewalld
systemctl disable firewalldsetenforce 0
vim /etc/sysconfig/selinux
SELINUX=disabled

(2)修改主机名

101主机
[root@localhost ~]# hostnamectl set-hostname server01
[root@localhost ~]# bash105主机
[root@localhost ~]# hostnamectl set-hostname grafana
[root@localhost ~]# bash106主机
[root@localhost ~]# hostnamectl set-hostname prometheus
[root@localhost ~]# bash

3. 部署 Prometheus

(1)prometheus 的安装

tar zxf prometheus-2.48.0.linux-amd64.tar.gz 
mv prometheus-2.48.0.linux-amd64 /usr/local/prometheusln -s /usr/local/prometheus/prometheus /usr/local/bin/
ln -s /usr/local/prometheus/promtool /usr/local/bin/prometheus --version

在这里插入图片描述

(2)为 Prometheus 添加系统服务

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

在这里插入图片描述

(3)启动服务

systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheusnetstat -anpt | grep 9090

在这里插入图片描述

4. 访问测试

(1)浏览器访问 Prometheus 首页

http://192.168.10.106:9090

在这里插入图片描述

(2)查看被监控端的状态

点击 status 下 Targets

在这里插入图片描述

(3)查看详细监控信息

http://192.168.10.106:9090/metrics

在这里插入图片描述

三. 部署 node exporter

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

1. 被监控端安装 node_exporter

(1)Linux 安装 node_exporter

①:node_exporte 的安装

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

在这里插入图片描述

②:为 node_exporte 添加系统服务

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

在这里插入图片描述

③:启动服务

systemctl daemon-reload
systemctl start node_exporter
systemctl enable node_exporternetstat -anpt | grep 9100

在这里插入图片描述

(2)Windows 安装 node_exporter

上传 windows_exporter-0.20.0-amd64.msi 文件

注意:可以把 windows 的防火墙关闭了

双击该文件即可

在这里插入图片描述

在这里插入图片描述

备注:

Linux 主机的 exporter 进程监听的是TCP 9100 端口windows 主机的 exporter 进程监听的TCP 9182 端口

2. 配置 Prometheus

(1)进入 Prometheus 配置文件添加 target

vim /usr/local/prometheus/prometheus.yml- job_name: 'agent'  static_configs:- targets: ['192.168.10.101:9100','192.168.10.10:9182']

在这里插入图片描述

(2)重启 Prometheus 服务

重启完浏览器刷新访问 192.168.10.101:9090,打开普罗米修斯的监控页面 status 下 Targets 查看有没有添加成功.如图所示

systemctl restart prometheus

在这里插入图片描述

四. Grafana 的部署与应用

1. 部署 Grafana

(1)安装 Grafana

rpm -ivh grafana-enterprise-10.2.2-1.x86_64.rpm

在这里插入图片描述

(2)启动服务

systemctl start grafana-server
systemctl enable grafana-servernetstat -anpt | grep 3000

在这里插入图片描述

2. 浏览器访问 Grafana

(1)访问登录 Grafana

http://192.168.10.105:3000

默认端口为 3000

初始账号和密码都是 admin

在这里插入图片描述

(2)设置数据源

进入 Grafana,点击 DATA SOURCRE 添加数据源

在这里插入图片描述

(3)设置 Prometheus 为数据源

在这里插入图片描述

(4)填写连接信息

URL 填写 http://192.168.10.106:9090 写成自己的 Prometheus 地址即可

在这里插入图片描述

然后点击最下面的 Save & test

在这里插入图片描述

3. 用导入模板的方法添加 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 告警

1. 安装告警组件 alertmanager

(1)安装 alertmanager

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

在这里插入图片描述

(2)添加 alertmanager 服务

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

在这里插入图片描述

(3)启动服务

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

在这里插入图片描述

(4)访问 alertmanager 的 WEB 页面

alertmanager 的 web 界面使用 9093 的端口,登录的 url 如下

http://192.168.10.106:9093

在这里插入图片描述

(5)将 alertmanager 增加到 prometheus

vim /usr/local/prometheus/prometheus.ymlalerting:alertmanagers:- static_configs:- targets:- 192.168.10.106:9093mkdir /usr/local/prometheus/rules
vim /usr/local/prometheus/rules/hoststats-alert.rulesgroups:
- 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 的检测

vim /usr/local/prometheus/prometheus.ymlrule_files:-  /usr/local/prometheus/rules/*.rules

在这里插入图片描述

(6)检查 Prometheus 配置文件的语法

promtool check config /usr/local/prometheus/prometheus.yml

在这里插入图片描述

(7)重启 Prometheus

systemctl restart prometheus

2. 添加邮箱告警媒介

(1)编写邮箱告警文件

vim /usr/local/alertmanager/alertmanager.ymlglobal:resolve_timeout: 5msmtp_smarthost: 'smtp.qq.com:587'smtp_from: '260531926@qq.com'smtp_auth_username: '260531926@qq.com'smtp_auth_password: 'bmwrnqwlabeecbad'smtp_hello: 'qq.com'smtp_require_tls: true
global:resolve_timeout: 5msmtp_smarthost: 'smtp.qq.com:587'smtp_from: '260531926@qq.com'smtp_auth_username: '260531926@qq.com'smtp_auth_password: 'cfkmahdyhaugcajg'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: '260531926@qq.com'send_resolved: true# 规则主动失效措施,如果不想用的话可以取消掉
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

在这里插入图片描述

(2)启动服务

systemctl restart alertmanager
netstat -anpt | grep alertmanager

在这里插入图片描述

3. 测试

(1)关闭任意被监控主机(101主机)

然后等待邮件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

(2)启动关闭的节点

然后等待邮件

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

http://www.lryc.cn/news/614605.html

相关文章:

  • 【代码随想录day 14】 力扣 104.二叉树的最大深度
  • 三种 SSE 对比
  • 【LLM开发学习】
  • 十三、抽象队列同步器AQS
  • ClickHouse集群部署实践---3分片2副本集群
  • 【C#】掌握并发利器:深入理解 .NET 中的 Task.WhenAll
  • 宝龙地产债务化解解决方案一:基于资产代币化与轻资产转型的战略重构
  • MMBFJ310LT1G一款N沟道JFE 晶体管适用于高频放大器和振荡器等射频应用MMBFJ310LT1
  • 【vue】Vue 重要基础知识清单
  • 全面解析软件工程形式化说明技术
  • Vue 服务端渲染(SSR)详解
  • 页面tkinter
  • 初始化完数据库提示缺少server文件的处理方法
  • C 语言链表数据结构
  • 接口为什么要设计出v1和v2
  • 升级的MS9122S USB投屏控制芯片(HD输出)
  • Prometheus 通过读取文件中的配置来监控目标
  • 安科瑞EMS3.0:打造“零碳工厂”的智能能源神经中枢
  • 【Spring Boot 快速入门】八、登录认证(一)基础登录与认证校验
  • 用 “故事 + 价值观” 快速建立 IP 信任感
  • Shell脚本实现自动封禁恶意扫描IP
  • 後端開發技術教學(三) 表單提交、數據處理
  • vscode EIDE 无法编译,提示 “文件名、目录名或卷标语法不正确;
  • WPF 表格中单元格使用下拉框显示枚举属性的一种方式
  • 数据大集网:重构企业贷获客生态的线上获客新范式​
  • Ignite内部事件总线揭秘
  • Android 之 OOM的产生和解决办法
  • K-Means 聚类
  • 嵌入式第二十三课 !!!树结构与排序(时间复杂度)
  • AD布线时,如何设置线宽和线间距?简单