【商城实战(96)】打造商城监控利器Prometheus与Grafana
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配,乃至运营推广策略,102 章内容层层递进。无论是想深入钻研技术细节,还是探寻商城运营之道,本专栏都能提供从 0 到 1 的系统讲解,助力你打造独具竞争力的电商平台,开启电商实战之旅。
目录
- 一、Prometheus 与 Grafana 简介
- 1.1 Prometheus 介绍
- 1.2 Grafana 介绍
- 1.3 二者协作关系
- 二、部署 Prometheus 监控系统
- 2.1 环境准备
- 2.2 引入依赖
- 2.3 配置 Prometheus
- 2.4 启动 Prometheus
- 2.5 示例代码与解释
- 三、配置 Grafana 可视化工具
- 3.1 安装 Grafana
- 3.2 添加 Prometheus 数据源
- 3.3 创建 Dashboard
- 3.4 示例操作与截图
- 四、设置监控告警规则
- 4.1 告警规则配置
- 4.2 配置 Alertmanager
- 4.3 告警通知测试
- 4.4 示例告警规则代码
- 五、总结与展望
一、Prometheus 与 Grafana 简介
在商城系统的运维与优化过程中,实时掌握系统的运行状态至关重要。Prometheus 与 Grafana 这两款强大的工具,为我们提供了全面监控和直观展示商城系统性能的解决方案。下面将对它们进行详细介绍。
1.1 Prometheus 介绍
Prometheus 是一款开源的系统监控和警报工具,最初由 SoundCloud 开发,目前是云原生计算基金会(CNCF)的项目之一 。它采用 Go 语言编写,具有高效、灵活和易于部署的特点。
Prometheus 的核心组件包括:
- Prometheus Server:负责收集、存储和查询时间序列数据。它通过 HTTP 协议周期性地从被监控目标(如服务器、应用程序等)拉取指标数据,并将这些数据存储在本地的时间序列数据库(TSDB)中。例如,在我们的商城系统中,Prometheus Server 可以定期从运行着 Spring Boot 后端服务的服务器上获取 CPU 使用率、内存使用量、接口响应时间等指标数据。同时,它提供了强大的 PromQL(Prometheus Query Language)查询语言,用于对存储的数据进行灵活查询和分析。比如,通过 PromQL 可以查询出过去一小时内商城订单接口的平均响应时间,以便评估接口性能。
- Client Libraries:用于检测应用程序代码的客户端库。在商城项目中,我们可以在移动前端(uniapp)、PC 前端(Element plus)以及后端(Spring Boot)代码中集成 Client Libraries,从而方便地将应用程序内部的各种指标数据暴露给 Prometheus Server 进行收集。以 Spring Boot 为例,通过引入相关依赖并进行简单配置,就可以将服务中的方法调用次数、数据库连接池状态等指标发送给 Prometheus Server。
- Exporters:将监控数据采集的端点通过 HTTP 服务的形式暴露给 Prometheus Server。在商城系统中,我们可以使用各种 Exporters 来收集不同组件的指标数据。例如,使用 Node Exporter 收集服务器的系统指标(如 CPU、内存、磁盘等),使用 MySQL Exporter 收集数据库相关指标(如查询执行时间、连接数等)。
Prometheus 在监控系统中的作用主要体现在以下几个方面:
- 数据收集:能够自动发现并定期采集被监控目标的各种性能指标数据,无论是物理服务器、虚拟机还是容器化应用,都能轻松应对。在商城的分布式架构中,它可以同时监控多个微服务实例的运行状态,确保系统的全面监控无死角。
- 数据存储:将采集到的时间序列数据存储在本地 TSDB 中,并且支持数据的持久化和高效查询。即使在系统重启或故障恢复后,依然能够获取历史数据进行分析。
- 数据查询:借助 PromQL,用户可以对存储的数据进行复杂的查询和分析,灵活地筛选、聚合和计算指标数据,为性能优化和故障排查提供有力支持。
1.2 Grafana 介绍
Grafana 是一款开源的数据可视化工具,它可以与多种数据源集成,将数据以直观、丰富的图表形式展示出来,帮助用户更好地理解和分析数据。
Grafana 的核心组件包括:
- Grafana Server:负责处理用户请求和渲染仪表板。它接收用户的操作指令,从配置的数据源中获取数据,并将数据转换为可视化的图表展示在用户界面上。当用户在浏览器中访问 Grafana 的 Web 界面,查看商城系统的监控图表时,Grafana Server 就会根据用户的选择,从 Prometheus 数据源获取相应的数据,并生成对应的图表。
- Data Sources:用于连接到各种数据源,Grafana 支持包括 Prometheus、InfluxDB、MySQL 等在内的多种数据源。在商城监控场景中,我们主要配置 Prometheus 作为数据源,使 Grafana 能够获取 Prometheus 收集到的商城系统指标数据。
- Dashboards:仪表板是 Grafana 中用于展示数据的主要界面,用户可以根据自己的需求创建、编辑和共享不同的仪表板。每个仪表板可以包含多个 Panel(面板),每个 Panel 用于展示特定类型的数据图表,如折线图、柱状图、饼图等。在商城监控中,我们可以创建一个综合仪表板,上面包含服务器性能指标面板、应用程序关键指标面板、订单统计面板等,以便全面了解商城系统的运行情况。
- Panels:面板是仪表盘中的基本单元,用于展示具体的数据可视化内容。Grafana 提供了丰富多样的 Panel 类型,用户可以根据数据特点和分析需求选择合适的面板来展示数据。例如,使用折线图展示商城订单量随时间的变化趋势,使用柱状图对比不同商品的销量等。
Grafana 的主要功能包括:
- 灵活的仪表板创建工具:用户可以通过简单的拖拽和配置操作,快速创建自定义的仪表板,展示自己关注的数据指标。无需复杂的编程知识,即可实现个性化的数据可视化需求。
- 支持多种数据源集成:能够与各种常见的数据源无缝对接,方便获取不同来源的数据进行统一展示和分析。在商城系统中,除了 Prometheus 数据源外,如果我们还需要展示数据库中的业务数据,也可以将 MySQL 等数据库配置为数据源,在同一个仪表板中同时展示系统性能指标和业务数据。
- 多样化的图表展示:提供多种类型的图表,如时序图、条形图、饼图、热力图、表格等,以满足不同数据类型和分析目的的可视化需求。通过直观的图表展示,用户能够更快速地发现数据中的规律和问题。
1.3 二者协作关系
Prometheus 和 Grafana 在商城监控系统中紧密协作,共同为我们提供全面的监控和可视化解决方案。
Prometheus 专注于数据的收集和存储,它通过各种组件收集商城系统各个层面的性能指标数据,并将这些数据以时间序列的形式存储在本地数据库中。而 Grafana 则负责将 Prometheus 收集到的数据进行可视化展示。它通过配置 Prometheus 作为数据源,从 Prometheus 中获取数据,并利用自身强大的可视化功能,将数据以各种直观的图表形式展示在仪表板上。这样,运维人员和开发人员可以通过 Grafana 的界面,实时、直观地了解商城系统的运行状态,及时发现潜在的性能问题和故障隐患。例如,当 Prometheus 采集到商城服务器 CPU 使用率过高的指标数据时,Grafana 可以将这一数据以折线图的形式展示出来,同时设置告警规则,当 CPU 使用率超过设定阈值时,及时发出告警通知,以便运维人员及时采取措施进行处理。
二、部署 Prometheus 监控系统
2.1 环境准备
在开始部署 Prometheus 监控系统之前,确保我们的开发环境已经准备就绪。后端使用 Spring Boot 作为开发框架,它具有快速开发、依赖管理方便等优势,能够大大提高开发效率。数据库则采用 MyBatis - plus,它是一个 MyBatis 的增强工具,在 MyBatis 的基础上只做增强不做改变,提供了强大的 CRUD 操作,并且无需手写 mapper 文件,能极大地简化数据库操作。
首先,需要安装 Java 环境,确保 Java 版本符合 Spring Boot 的要求,一般建议使用 Java 8 及以上版本。可以通过以下命令检查 Java 是否安装成功及版本信息:
java -version
接着,安装 Maven,它是一个项目管理和构建工具,用于管理项目的依赖和构建过程。在安装 Maven 后,配置好 Maven 的环境变量,以便在命令行中能够直接使用 Maven 命令。可以通过以下命令检查 Maven 是否安装成功及版本信息:
mvn -version
然后,创建一个新的 Spring Boot 项目,可以使用 Spring Initializr(https://start.spring.io/ )快速初始化项目结构,并添加 Web、Actuator 等依赖。Web 依赖用于创建 Web 服务,Actuator 依赖则提供了对应用程序运行时的监控和管理端点,方便 Prometheus 采集指标数据。
2.2 引入依赖
在 Spring Boot 项目的 pom.xml 文件中,引入 Spring Boot Actuator 和 Prometheus 相关依赖,以便暴露监控指标。具体依赖如下:
<dependencies><!-- Spring Boot Actuator 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Prometheus 依赖 --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><!-- 其他可能的依赖,如MyBatis - plus相关依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>最新版本</version></dependency><!-- 数据库驱动依赖,根据实际数据库类型引入 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency>
</dependencies>
Spring Boot Actuator 依赖提供了一系列的端点,用于监控和管理 Spring Boot 应用程序,如健康检查、指标监控等。Prometheus 依赖则负责将 Spring Boot 应用程序的指标数据暴露给 Prometheus Server,以便进行采集和监控。MyBatis - plus 相关依赖用于操作数据库,数据库驱动依赖则用于连接数据库。
2.3 配置 Prometheus
编写 prometheus.yml 配置文件,该文件用于设置 Prometheus 的全局配置、告警配置和数据采集目标等。以下是一个简单的 prometheus.yml 配置文件示例:
global:# 数据采集间隔,默认15秒scrape_interval: 15s# 评估规则的频率,默认15秒evaluation_interval: 15s# 告警配置
alerting:alertmanagers:- static_configs:- targets:- localhost:9093 # Alertmanager的地址和端口,这里假设Alertmanager运行在本地9093端口# 数据采集配置
scrape_configs:- job_name:'spring-boot-app'metrics_path: '/actuator/prometheus'scrape_interval: 5sstatic_configs:- targets: ['localhost:8080'] # Spring Boot应用程序的地址和端口,这里假设Spring Boot应用运行在本地8080端口
在这个配置文件中,global 部分设置了全局的数据采集间隔和评估规则频率。alerting 部分配置了 Alertmanager 的地址,用于接收 Prometheus 发送的告警信息。scrape_configs 部分定义了数据采集的目标,这里配置了一个名为’spring-boot-app’ 的任务,指定了从 Spring Boot 应用程序的 /actuator/prometheus 端点采集指标数据,采集间隔为 5 秒,目标地址为本地的 8080 端口。
2.4 启动 Prometheus
通过命令行启动 Prometheus,假设 Prometheus 的二进制文件位于当前目录下,可以使用以下命令启动:
./prometheus --config.file=prometheus.yml
其中,–config.file 参数指定了 Prometheus 的配置文件路径。启动成功后,可以在命令行中看到 Prometheus 的启动信息,并且可以通过访问 Prometheus 的 Web 界面(http://localhost:9090 )来查看监控数据。在 Web 界面中,可以使用 PromQL 查询语言对采集到的指标数据进行查询和分析,例如查询当前系统的 CPU 使用率、内存使用量等指标。
2.5 示例代码与解释
下面给出完整的 Spring Boot 项目中与 Prometheus 集成的示例代码,包括引入依赖、配置文件和启动类等,并详细解释每部分代码的作用。
pom.xml
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><groupId>com.example</groupId><artifactId>mall-monitoring</artifactId><version>1.0.0</version><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.6.3</version></parent><dependencies><!-- Spring Boot Actuator 依赖 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency><!-- Prometheus 依赖 --><dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId></dependency><!-- Spring Boot Web 依赖,用于创建Web服务 --><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><!-- MyBatis - plus 依赖 --><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>3.5.1</version></dependency><!-- 数据库驱动依赖,这里以MySQL为例 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
在 pom.xml 文件中,首先定义了项目的基本信息,如 groupId、artifactId 和 version。然后继承了 Spring Boot 的父工程,以便使用 Spring Boot 的依赖管理和插件。在 dependencies 部分,引入了 Spring Boot Actuator、Prometheus、Spring Boot Web、MyBatis - plus 和数据库驱动等依赖。Spring Boot Actuator 用于提供监控和管理端点,Prometheus 用于暴露指标数据,Spring Boot Web 用于创建 Web 服务,MyBatis - plus 用于操作数据库,数据库驱动用于连接数据库。在 build 部分,配置了 Spring Boot 的 Maven 插件,用于打包和运行项目。
application.yml
server:port: 8080 # 应用程序端口spring:application:name: mall-monitoring # 应用程序名称datasource:driver-class-name: com.mysql.cj.jdbc.Driver # 数据库驱动类url: jdbc:mysql://localhost:3306/mall?characterEncoding=utf-8&useSSL=false # 数据库连接URLusername: root # 数据库用户名password: 123456 # 数据库密码management:endpoints:web:exposure:include: '*' # 暴露所有端点metrics:export:prometheus:enabled: true # 启用Prometheus指标导出
在 application.yml 文件中,配置了应用程序的端口为 8080,应用程序名称为 mall-monitoring。在 spring.datasource 部分,配置了数据库的连接信息,包括驱动类、连接 URL、用户名和密码。在 management.endpoints.web.exposure 部分,配置了暴露所有端点,以便 Prometheus 能够访问到 /actuator/prometheus 端点。在 management.metrics.export.prometheus.enabled 部分,配置了启用 Prometheus 指标导出。
启动类 MallMonitoringApplication.java
import org.mybatis.spring.annotation.MapperScan;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;@SpringBootApplication
@MapperScan("com.example.mallmonitoring.mapper") // 扫描Mapper接口
public class MallMonitoringApplication {public static void main(String[] args) {SpringApplication.run(MallMonitoringApplication.class, args);}
}
启动类 MallMonitoringApplication 使用 @SpringBootApplication 注解标记这是一个 Spring Boot 应用程序,该注解包含了 @Configuration、@EnableAutoConfiguration 和 @ComponentScan 等多个注解的功能,能够自动配置 Spring 应用程序的基本设置,如自动扫描组件、启用自动配置等。@MapperScan 注解用于扫描 Mapper 接口,指定扫描的包路径为 com.example.mallmonitoring.mapper,这样 Spring Boot 在启动时会自动扫描该包下的 Mapper 接口,并将其注册为 Bean,以便在应用程序中使用。在 main 方法中,通过 SpringApplication.run 方法启动 Spring Boot 应用程序。
三、配置 Grafana 可视化工具
3.1 安装 Grafana
Grafana 提供了多种安装方式,以适用于不同的操作系统和环境。这里以在 Linux 系统上安装为例,首先需要从 Grafana 官方网站(https://grafana.com/grafana/download )下载适合系统的安装包。假设我们下载的是.deb 格式的安装包(适用于 Debian 或 Ubuntu 系统),下载完成后,通过以下命令进行安装:
sudo dpkg -i grafana-<version>-<architecture>.deb
其中,<version> 是 Grafana 的版本号,<architecture> 是系统的架构,如 amd64 等。安装完成后,启动 Grafana 服务:
sudo systemctl start grafana-server
并设置 Grafana 开机自启:
sudo systemctl enable grafana-server
启动成功后,通过浏览器访问 Grafana 的 Web 界面,默认地址为http://localhost:3000 ,首次登录使用默认用户名 admin 和密码 admin,登录后系统会提示修改密码,按照提示修改密码后即可进入 Grafana 主界面。
3.2 添加 Prometheus 数据源
登录 Grafana 后,在左侧导航栏中找到并点击 “Configuration”(配置)选项,然后选择 “Data Sources”(数据源)。在数据源页面,点击 “Add data source”(添加数据源)按钮,在数据源类型列表中选择 “Prometheus”。在出现的配置页面中,进行如下配置:
- Name:数据源名称,可自定义,例如 “Prometheus for Mall”。
- URL:Prometheus 服务的地址,假设 Prometheus 运行在本地,端口为 9090,则填写http://localhost:9090 。
- 其他配置:根据实际需求进行配置,如认证信息(如果 Prometheus 配置了认证)等,一般情况下保持默认配置即可。
配置完成后,点击 “Save & Test”(保存并测试)按钮,如果配置正确,会显示 “Data source is working”(数据源正常工作)的提示信息,表示数据源添加成功。
3.3 创建 Dashboard
在 Grafana 中创建 Dashboard 来展示 Prometheus 采集的数据。在左侧导航栏中点击 “Create”(创建)选项,然后选择 “Dashboard”(仪表板)。在打开的仪表板编辑页面中,点击 “Add panel”(添加面板)按钮来添加可视化图表。
在添加面板时,可以选择不同类型的图表,如折线图(Graph)、柱状图(Bar Chart)、饼图(Pie Chart)等。以添加折线图为例,在 “Panel Title”(面板标题)处输入图表的标题,如 “商城服务器 CPU 使用率”,在 “Panel Data Source”(面板数据源)中选择之前添加的 Prometheus 数据源。然后在 “Metrics”(指标)选项中,使用 PromQL 编写查询语句来获取所需的数据。例如,查询商城服务器 CPU 使用率的 PromQL 语句如下:
100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100)
这条语句通过计算 CPU 空闲时间的比率,进而得出 CPU 使用率。编写好查询语句后,点击 “Run queries”(运行查询)按钮,即可在图表区域看到根据查询结果生成的折线图。根据需要调整图表的其他设置,如颜色、线条样式、坐标轴标签等,以使其更直观和美观。
除了添加单个图表,还可以添加多个面板,并对面板进行布局调整,如将相关的面板放在同一行或同一列,使 Dashboard 的展示更加清晰和有条理。可以为 Dashboard 设置一个合适的名称,如 “Mall System Monitoring Dashboard”,并选择将其保存到合适的文件夹中,方便管理和查找。
3.4 示例操作与截图
- 登录 Grafana:打开浏览器,访问http://localhost:3000 ,输入用户名和密码(首次登录为 admin/admin,修改密码后使用新密码),进入 Grafana 主界面。
- 添加数据源:点击左侧导航栏的 “Configuration” -> “Data Sources”,在数据源页面点击 “Add data source”,选择 “Prometheus”,在配置页面填写名称为 “Prometheus for Mall”,URL 为http://localhost:9090 ,点击 “Save & Test”,显示 “Data source is working”,表示数据源添加成功。
- 创建 Dashboard 并添加面板:点击左侧导航栏的 “Create” -> “Dashboard”,在仪表板编辑页面点击 “Add panel”,选择 “Graph”(折线图),在 “Panel Title” 处输入 “商城服务器 CPU 使用率”,“Panel Data Source” 选择 “Prometheus for Mall”,在 “Metrics” 中输入 PromQL 查询语句 “100 - (avg by (instance) (irate (node_cpu_seconds_total {mode=“idle”}[5m])) * 100)”,点击 “Run queries”,即可看到生成的折线图,调整图表设置后,点击右上角的 “Apply” 应用设置。
- 保存 Dashboard:点击右上角的保存按钮,输入 Dashboard 名称 “Mall System Monitoring Dashboard”,选择保存文件夹,点击 “Save” 保存 Dashboard。
通过以上步骤,我们成功在 Grafana 中配置了 Prometheus 数据源,并创建了一个 Dashboard 来展示商城服务器的 CPU 使用率。按照类似的方法,可以继续添加其他面板,如内存使用率、订单量统计等,以全面展示商城系统的运行状态。
四、设置监控告警规则
4.1 告警规则配置
在 Prometheus 的配置体系中,告警规则的配置是保障系统稳定运行的关键一环。告警规则主要定义在独立的规则文件中,然后在 prometheus.yml 配置文件中通过rule_files字段进行引用 。
假设我们创建一个名为mall_alerts.yml的告警规则文件,其内容如下:
groups:
- name: mall-server-alertsrules:- alert: HighCpuUsageexpr: 100 - (avg by (instance) (irate(node_cpu_seconds_total{mode="idle"}[5m])) * 100) > 80for: 5mlabels:severity: warningannotations:summary: "高CPU使用率"description: "服务器 {{ $labels.instance }} 的CPU使用率超过80%,当前使用率为 {{ $value }}%"
在这段配置中:
- alert字段定义了告警规则的名称,这里为HighCpuUsage,方便在后续管理和识别告警。
- expr字段是基于 PromQL 表达式的告警触发条件。此表达式通过计算 CPU 空闲时间的比率,得出 CPU 使用率,当 CPU 使用率超过 80% 时,满足告警触发条件。irate函数用于计算最近 5 分钟内node_cpu_seconds_total指标的变化率,avg by (instance)表示按实例进行平均值计算。
- for字段设置了评估等待时间为 5 分钟。这意味着只有当 CPU 使用率超过 80% 的状态持续 5 分钟后,才会真正触发告警,避免因短暂的性能波动而产生过多误告警。
- labels字段用于添加自定义标签,这里定义了severity(严重程度)为warning,方便在后续对告警进行分类和处理。
- annotations字段用于存储额外的信息,summary提供了告警的简要描述,description则给出了更详细的信息,包括触发告警的服务器实例和当前 CPU 使用率。通过{{ $labels.instance }}和{{ $value }}等模板变量,可以在告警信息中动态显示相关值。
4.2 配置 Alertmanager
Alertmanager 是 Prometheus 生态系统中负责处理告警通知的组件,它接收来自 Prometheus 的告警信息,并根据配置将这些信息发送到指定的接收者,如电子邮件、即时通讯工具等。
首先,从 Prometheus 官方网站下载 Alertmanager 的安装包,假设下载的是适用于 Linux 系统的alertmanager--.tar.gz格式的安装包。下载完成后,解压安装包:
tar -xvf alertmanager-<version>-<architecture>.tar.gz
cd alertmanager-<version>-<architecture>
接下来,编辑 Alertmanager 的配置文件alertmanager.yml,以下是一个简单的配置示例:
global:resolve_timeout: 5m# 配置邮件发送服务器信息smtp_smarthost:'smtp.example.com:587'smtp_from: 'your_email@example.com'smtp_auth_username: 'your_email@example.com'smtp_auth_password: 'your_password'smtp_require_tls: trueroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'email'receivers:
- name: 'email'email_configs:- to:'recipient_email@example.com'send_resolved: true
在这个配置文件中:
- global部分定义了全局配置,resolve_timeout设置为 5 分钟,表示 Alertmanager 在 5 分钟内未收到同一告警的更新时,将该告警标记为已解决。smtp_smarthost、smtp_from、smtp_auth_username、smtp_auth_password和smtp_require_tls分别配置了邮件发送服务器的地址、发件人邮箱、邮箱用户名、密码以及是否启用 TLS 加密。
- route部分定义了告警的路由规则。group_by指定按alertname对告警进行分组,group_wait表示当收到告警时,等待 10 秒,看是否有更多相关告警一起发送,以减少通知数量。group_interval表示如果上次告警信息发送成功,等待 10 秒才发送新的告警数据。repeat_interval表示如果问题没有解决,每隔 1 小时再次发送告警数据。receiver指定了默认的接收者为email。
- receivers部分定义了具体的接收者配置,这里配置了一个名为email的接收者,通过email_configs设置接收告警的邮箱地址为recipient_email@example.com,并设置send_resolved为true,表示当告警状态从触发变为已解决时,也发送通知。
配置完成后,启动 Alertmanager:
./alertmanager --config.file=alertmanager.yml
4.3 告警通知测试
为了验证告警通知是否正常工作,我们可以模拟系统性能异常,触发之前配置的告警规则。例如,通过压力测试工具对商城系统的服务器进行 CPU 压力测试,使 CPU 使用率超过 80% 并持续 5 分钟以上。
在压力测试过程中,观察 Prometheus 的 Web 界面(http://localhost:9090/alerts ),可以看到告警规则的状态变化。当 CPU 使用率达到告警阈值并持续 5 分钟后,告警状态会从Pending变为Firing。
同时,检查 Alertmanager 的日志文件,查看是否接收到了来自 Prometheus 的告警信息。如果配置正确,Alertmanager 会根据配置将告警信息发送到指定的邮箱。登录接收告警的邮箱,查看是否收到了告警邮件,邮件内容应包含之前在告警规则中定义的summary和description等信息,以及具体的告警实例和指标值。通过这样的测试流程,可以确保告警通知系统能够正常工作,在系统出现性能异常时及时通知相关人员进行处理。
4.4 示例告警规则代码
以下再给出几个针对商城系统不同指标的告警规则示例代码,进一步加深对告警规则配置的理解。
- 高内存使用率告警
groups:
- name: mall-server-alertsrules:- alert: HighMemoryUsageexpr: (node_memory_MemTotal_bytes - node_memory_MemAvailable_bytes) / node_memory_MemTotal_bytes * 100 > 90for: 5mlabels:severity: warningannotations:summary: "高内存使用率"description: "服务器 {{ $labels.instance }} 的内存使用率超过90%,当前使用率为 {{ $value }}%"
此规则通过计算服务器已使用内存占总内存的百分比,当超过 90% 且持续 5 分钟时触发告警。
- 接口高响应时间告警
假设商城系统的接口响应时间指标为http_request_duration_seconds,以 95% 分位数作为衡量标准,当接口响应时间超过 1 秒时触发告警:
groups:
- name: mall-interface-alertsrules:- alert: HighInterfaceResponseTimeexpr: avg by (job) (http_request_duration_seconds{quantile="0.95"}) > 1for: 2mlabels:severity: criticalannotations:summary: "接口高响应时间"description: "服务 {{ $labels.job }} 的95%分位数接口响应时间超过1秒,当前响应时间为 {{ $value }} 秒"
- 数据库连接池高使用率告警
如果使用的是 HikariCP 连接池,假设监控指标为hikaricp_connections_active(活跃连接数)和hikaricp_connections_max(最大连接数),当活跃连接数占最大连接数的比例超过 80% 时触发告警:
groups:
- name: mall-database-alertsrules:- alert: HighDatabaseConnectionPoolUsageexpr: (hikaricp_connections_active / hikaricp_connections_max) * 100 > 80for: 3mlabels:severity: warningannotations:summary: "数据库连接池高使用率"description: "数据库 {{ $labels.instance }} 的连接池使用率超过80%,当前使用率为 {{ $value }}%"
通过这些不同类型的告警规则示例,可以根据商城系统的实际需求和关键指标,灵活配置告警规则,及时发现和处理系统中的性能问题和潜在故障。
五、总结与展望
通过本次对 Prometheus 与 Grafana 监控系统的搭建,我们成功构建了一个能够实时监控商城系统性能的有效工具。在部署 Prometheus 监控系统时,我们从环境准备开始,逐步引入依赖、配置 Prometheus 并成功启动,实现了对服务器与应用性能指标的收集。通过在 Spring Boot 项目中集成相关组件,利用 Prometheus 的强大功能,将商城系统各个层面的关键指标进行采集和存储,为后续的分析和告警提供了数据基础。
配置 Grafana 可视化工具的过程中,我们完成了从安装 Grafana 到添加 Prometheus 数据源,再到创建 Dashboard 展示数据的一系列操作。通过直观的图表展示,运维人员和开发人员能够清晰地了解商城系统的运行状态,快速发现潜在的性能问题。
在设置监控告警规则环节,我们详细配置了告警规则和 Alertmanager,确保在系统出现性能异常或故障时能够及时发出通知,使相关人员能够迅速采取措施进行处理,从而保障商城系统的稳定运行。
监控系统对于商城性能优化和稳定运行具有不可忽视的重要性。通过实时监控各项性能指标,我们能够及时发现系统中的瓶颈和潜在问题,为性能优化提供数据支持。例如,通过监控接口响应时间,我们可以找出响应较慢的接口,进而对其进行优化,提高用户体验。同时,告警规则的设置能够在问题发生时及时通知相关人员,减少故障对商城业务的影响,确保商城系统的稳定运行。
展望未来,监控系统的发展方向将朝着智能化、云原生和大数据监控等方向迈进。智能化监控将利用人工智能和机器学习技术,自动学习和识别系统的正常行为模式,当出现异常情况时能够更准确地发出告警,并提供问题的解决方案。随着云计算的普及,云原生监控将成为必然趋势,需要考虑云环境的特点和需求,提供对容器、微服务等云原生技术的监控支持。大数据监控则可以通过对大量监控数据的分析和挖掘,发现系统中的潜在问题和趋势,为系统优化提供更有力的支持。
在未来的工作中,我们可以进一步改进监控系统。持续优化监控指标,根据商城业务的发展和系统架构的变化,不断调整和完善监控指标体系,确保监控指标能够准确反映系统的性能和状态。加强监控系统的自动化和智能化程度,例如实现告警的自动分类和处理,以及根据监控数据自动生成优化建议等。还可以探索更多的数据可视化方式,使监控数据的展示更加直观和易于理解,为商城系统的运维和优化提供更好的支持。
相关文章:
【商城实战(96)】打造商城监控利器Prometheus与Grafana
【商城实战】专栏重磅来袭!这是一份专为开发者与电商从业者打造的超详细指南。从项目基础搭建,运用 uniapp、Element Plus、SpringBoot 搭建商城框架,到用户、商品、订单等核心模块开发,再到性能优化、安全加固、多端适配…...
Megatron-LM中的deepseek-v3实现
Megatron-LM:https://github.com/NVIDIA/Megatron-LM/tree/main 使用此仓库构建的著名的库也有很多,如: Colossal-AI, HuggingFace Accelerate, and NVIDIA NeMo Framework.Pai-Megatron-Patch工具是阿里人工智能平台PAI算法团队研发,ai-Megatron-Patch…...
SpringCloud如何整合DeepSeek
SpringCloud 整合 DeepSeek 的核心目标是通过微服务架构调用其分布式文件系统(如 3FS)或 API 服务。以下从技术选型、整合步骤和关键配置三个方面展开说明: 一、技术选型与架构分析 DeepSeek 服务类型 3FS 分布式文件系统:基于 RD…...
蓝桥杯备考:多米诺骨牌
这道题要求上下方格子和之差要最小,其实就是算每个上下格子的差求和的最小值 这道题其实是动态规划01背包问题 我们直接按步骤做吧 step1:定义状态表示f[i][j]表示从1到i个编号的差值里选出刚好j个数的最小操作次数 step2:推导状态转移方程 如图这就是我们的状态…...
wireshark开启对https密文抓包
HTTPS抓包解密指南 通常情况下,Wireshark只能抓取HTTP的明文包,对于HTTPS的报文需要特殊设置才能抓取。如果不进行设置,抓取到的都是TLS加密报文,这对调试工作造成了很大困难。 前言 提到HTTPS抓包,基本都绕不开SSL…...
AudioFlinger与AudioPoliceManager初始化流程
AF/APF启动流程 在启动AudioSeriver服务的过程中会对启动AF/APF。main_audioserver.cpp有如下代码: AudioFlinger::instantiate();AudioPolicyService::instantiate();AF初始化流程 1.AudioFlinger::instantiate() 1.1 AudioFlinger构造函数 void AudioFlinger:…...
网路传输层UDP/TCP
一、端口号 1.端口号 1.1 五元组 端口号(port)标识了一个主机上进行通信的不同的应用程序. 如图所示, 在一个机器上运行着许多进程, 每个进程使用的应用层协议都不一样, 比如FTP, SSH, SMTP, HTTP等. 当主机接收到一个报文中, 网络层一定封装了一个目的ip标识我这台主机, …...
Python大数据处理 基本的编程方法
目录 一、实验目的 二、实验要求 三、实验代码 四、实验结果 五、实验体会 一、实验目的 体会基本的python编程方法;学习python中的各类函数;了解python读取与写入文件的方法。 二、实验要求 输入2000年后的某年某月某日,判断这一天是…...
STM32F103_LL库+寄存器学习笔记06 - 梳理串口与串行发送“Hello,World“
导言 USART是嵌入式非常重要的通讯方式,它的功能强大、灵活性高且用途广泛。只停留在HAL库层面上用USART只能算是入门,要加深对USART的理解,必须从寄存器层面入手。接下来,先从最简单的USART串行发送开始。 另外,在接…...
硬件基础--14_电功率
电功率 电功率:指电流在单位时间内做的功(表示用电器消耗电能快慢的一个物理量)。 单位:瓦特(W),简称瓦。 公式:PUI(U为电压,单位为V,i为电流,单位为A,P为电功率,单位为W)。 单位换算:进位为1000ÿ…...
【C#语言】C#文件操作实战:动态路径处理与安全写入
文章目录 ⭐前言⭐一、场景痛点⭐二、完整实现代码⭐三、关键技术解析🌟1、动态路径处理🌟2、智能目录创建🌟3、安全的文件写入 ⭐四、进阶扩展方案🌟1、用户自定义路径选择🌟2、异常处理增强🌟3、异步写入…...
Vue.js 完全指南:从入门到精通
1. Vue.js 简介 1.1 什么是 Vue.js? Vue.js(通常简称为 Vue)是一个用于构建用户界面的渐进式 JavaScript 框架。所谓"渐进式",意味着 Vue 的设计是由浅入深的,你可以根据自己的需求选择使用它的一部分或全部功能。 Vue 最初由尤雨溪(Evan You)在 2014 年创…...
在Git仓库的Readme上增加目录页
一般在编写Readme时想要增加像文章那样的目录,方便快速跳转,但是Markdown语法并没有提供这样的方法,但是可以通过超链接结合锚点的方式来实现,如下图是我之前一个项目里写的Readme: 例如有下面几个Readme内容ÿ…...
C# SolidWorks 二次开发 -各种菜单命令增加方式
今天给大家讲一讲solidworks中各种菜单界面,如下图,大概有13处,也许还不完整哈。 1.CommandManager选项卡2.下拉选项卡3.菜单栏4.下级菜单5.浮动工具栏6.快捷方式工具栏7.FeatureManager工具栏区域8.MontionManager区域 ModelView?9.任务窗…...
分布式架构-Spring技术如何能实现分布式事务
在Spring技术栈中实现分布式事务,可通过多种成熟方案实现跨服务或跨数据库的事务一致性管理。以下是主要实现方式及技术要点: 一、基于Seata框架的AT模式 核心组件 TC (Transaction Coordinator):全局事务协调器(独立部署…...
【RocketMQRocketMQ Dashbord】Springboot整合RocketMQ
【RocketMQ&&RocketMQ Dashbord】Springboot整合RocketMQ 【一】Mac安装RocketMQ和RocketMQ Dashbord【1】安装RocketMQ(1)下载(2)修改 JVM 参数(3)启动测试(4)关闭测试&…...
vue 3 深度指南:从基础到全栈开发实践
目录 一、环境搭建与项目初始化 1. 前置依赖安装 2. 项目初始化与结构解析 二、核心概念与语法深度解析 1. MVVM 模式与响应式原理 2. 模板语法与指令进阶 3. 组件化开发 三、进阶开发与全栈集成 1. 路由管理(Vue Router) 2. 状态管理…...
《白帽子讲 Web 安全》之跨站请求伪造
引言 在数字化时代,网络已深度融入人们生活的方方面面,Web 应用如雨后春笋般蓬勃发展,为人们提供着便捷高效的服务。然而,繁荣的背后却潜藏着诸多安全隐患,跨站请求伪造(CSRF)便是其中极为隐蔽…...
K8S学习之基础五十:k8s中pod时区问题并通过kibana查看日志
k8s中pod默认时区不是中国的,挂载一个时区可以解决 vi pod.yaml apiVersion: v1 kind: Pod metadata:name: counter spec:containers:- name: countimage: 172.16.80.140/busybox/busybox:latestimagePullPolicy: IfNotPresentargs: [/bin/sh,-c,i0;while true;do …...
nginx代理前端请求
一,项目配置 我在 ip 为 192.168.31.177 的机器上使用 vue3 开发前端项目,项目中使用 axios 调用后端接口。 这是 axios 的配置: import axios from axios;const request axios.create({baseURL: http://192.168.31.177:8001,// 设置请求…...
LibVLC —— 《基于Qt的LibVLC专业开发技术》视频教程
🔔 LibVLC/VLC 相关技术、疑难杂症文章合集(掌握后可自封大侠 ⓿_⓿)(记得收藏,持续更新中…) 《基于Qt的LibVLC专业开发技术》课程视频,(CSDN课程主页、51CTO课程主页) 适合具有一些C++/Qt编程基础,想要进一步提高或涉足音视频行业的。本课程分7章节,共计35小节。…...
Android生态大变革,谷歌调整开源政策,核心开发不再公开
“开源”这个词曾经是Android的护城河,如今却成了谷歌的烫手山芋。最近谷歌宣布调整Android的开源政策,核心开发将全面转向私有分支。翻译成人话就是:以后Android的核心更新,不再公开共享了。 这操作不就是开源变节吗,…...
Android Gradle 插件问题:The option ‘android.useDeprecatedNdk‘ is deprecated.
问题与处理策略 问题描述 在 Android 项目中,报如下警告 The option android.useDeprecatedNdk is deprecated. The current default is false. It has been removed from the current version of the Android Gradle plugin. NdkCompile is no longer supported…...
【web应用安全】关于web应用安全的几个主要问题的思考
文章目录 防重放攻击1. **Token机制(一次性令牌)**2. **时间戳 超时验证**3. **Nonce(一次性随机数)**4. **请求签名(如HMAC)**5. **HTTPS 安全Cookie**6. **幂等性设计****综合防御策略建议****注意事项…...
Git 基础入门:从概念到实践的版本控制指南
一、Git 核心概念解析 1. 仓库(Repository) Git 的核心存储单元,包含项目所有文件及其完整历史记录。分为本地仓库(开发者本地副本)和远程仓库(如 GitHub、GitLab 等云端存储),支持…...
银行分布式新核心的部署架构(两地三中心)
银行的核心系统对可用性和性能要求均非常严苛,所以一般都采用两地三中心部署模式。 其中: 同城两个主数据中心各自部署一套热备,平时两个中心同时在线提供服务,进行负载均衡假如其中一个数据中心出现异常,则由另外一个…...
Spring 及 Spring Boot 条件化注解(15个)完整列表及示例
Spring 及 Spring Boot 条件化注解完整列表及示例 1. 所有条件化注解列表 Spring 和 Spring Boot 提供了以下条件化注解(共 15 个),用于在配置类或方法上实现条件化注册 Bean 或配置: 注解名称作用来源框架Conditional自定义条件…...
MantisBT在Windows10上安装部署详细步骤
MantisBT 是一款基于 Web 的开源缺陷跟踪系统,以下是在 Windows 10 上安装部署 MantisBT 的详细步骤: 1. 安装必要的环境 MantisBT 是一个基于 PHP 的 Web 应用程序,因此需要安装 Web 服务器(如 Apache)、PHP 和数据…...
9.4分漏洞!Next.js Middleware鉴权绕过漏洞安全风险通告
今日,亚信安全CERT监控到安全社区研究人员发布安全通告,Next.js 存在一个授权绕过漏洞,编号为 CVE-2025-29927。攻击者可能通过发送精心构造的 x-middleware-subrequest 请求头绕过中间件安全控制,从而在未授权的情况下访问受保护…...
处理json,将接口返回的数据转成list<T>,和几个时间处理方法的工具类
接口或者其他方式返回json格式,也可以直接处理里边只有list的json数据 //第一种json格式,包含分页信息 {"code": 200,"msg": null,"data": {"records": [{"风速": "0.0","电流"…...
