应用监控(Prometheus + Grafana)

news/2024/5/18 13:26:03

可用于应用监控的系统有很多,有的需要埋点(切面)、有的需要配置Agent(字节码增强)。现在使用另外一个监控系统 —— Grafana。

Grafana 监控面板

 这套监控主要用到了 SpringBoot Actuator + Prometheus + Grafana 三个模块组合的起来使用的监控。非常轻量好扩展使用。

  1. Actuator - 数据上报、Prometheus - 数据采集、Grafana - 数据展示

  2. 本章节的内容主要为代码中的配置和监控的配置。

环境配置

 本节所需的监控配置,已经放到了 chatgpt-data 的 dev-ops 包下了。你只需要确保本地或者云服务器已经安装了Docker,那么就可以执行安装了。

1. Grafana.ini

这一部分是小傅哥通过第一次默认安装后,再通过 docker 脚本 docker container cp grafana:/etc/grafana/ ./docs/dev-ops/ 从容器中拷贝下来的配置。因为我们需要做一些默认的配置处理。

端口修改

# The http port to use

http_port = 4000

  1. Grafana 默认配置的是 3000 端口,但这个端口很多时候都被占用了。所以如果你的也占用了,那么可以在这里修改下。

连接配置

[database]

# You can configure the database connection by specifying type, host, name, user and password

# as separate properties or as on string using the url properties.

# Either "mysql", "postgres" or "sqlite3", it's your choice

type = mysql

host = host.docker.internal:3306

name = grafana

user = root

# If the password contains # or ; you have to wrap it with triple quotes. Ex """#password;"""

password = 123456

  1. 为了让 Grafana 的配置具有迁移性,也不至于删除在安装就丢失配置,那么这里可以选择配置数据库进行使用。

  2. 注意;你需要先在本地安装MySQL以及创建出一个grafana数据库。—— 连接后,会自动建表。

注意:host那里设置localhost或者ipv4地址都连接失败,设置host.docker.internal成功,目前不知道原因

2. datasource.yml

apiVersion: 1

datasources:

- name: Prometheus

type: prometheus

access: proxy

url: http://prometheus:9090

isDefault: true

  1. 注意;因为 Grafana 使用的是 Prometheus 数据源,所以你需要在这里配置上。当然也可以不配置,在启动的 Grafana 线上进行配置。

3. prometheus.yml

global:

scrape_interval: 15s

scrape_configs:

- job_name: 'x-api-app'

metrics_path: '/actuator/prometheus'

static_configs:

- targets: [ '192.168.158.77:8080' ]

  1. 这里配置的是 prometheus.yml 对需要采集的 SpringBoot 应用访问地址。注意你需要替换为你的服务器IP和服务端口。

应用配置

POM 配置

chatgpt-data-app 模块下

<!-- 监控;actuator-上报、prometheus-采集、grafana-展示 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId>
</dependency>
  1. actuator、prometheus 是监控所需的内容,aspectjweaver 是本节需要使用 prometheus 添加自定义的埋点,而这个会用到切面。

chatgpt-data-trigger 模块下

<!-- 监控;actuator-上报、prometheus-采集、grafana-展示 -->
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency><groupId>io.micrometer</groupId><artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

代码配置

1. 启动监听服务

@EnableAspectJAutoProxy
@Configuration
public class PrometheusConfiguration {@Beanpublic CollectorRegistry collectorRegistry() {return new CollectorRegistry();}@Beanpublic PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config, CollectorRegistry collectorRegistry) {return new PrometheusMeterRegistry(config, collectorRegistry, Clock.SYSTEM);}@Beanpublic TimedAspect timedAspect(MeterRegistry registry) {return new TimedAspect(registry);}@Beanpublic CountedAspect countedAspect(MeterRegistry registry) {return new CountedAspect(registry);}}

2. 自定义监控埋点

@Timed(value = "no_pay_notify_order_job", description = "定时任务,订单支付状态更新")@Scheduled(cron = "0/3 * * * * ?")public void exec() {// ...}

  1. 你可以使用监控提供的注解,来对需要监控的方法进行埋点。@Timed 这样就可以采集到数据,在监控中配置了。

3. YML 配置

# 监控
management:endpoints:web:exposure:include: "*" # 暴露所有端点,包括自定义端点endpoint:metrics:enabled: truehealth:show-details: always # 显示详细的健康检查信息metrics:export:prometheus:enabled: true # 启用Prometheusprometheus:enabled: true # 启用Prometheus端点jmx:enabled: true # 启用JMX监控system:cpu:enabled: true # 启用CPU监控memory:enabled: true # 启用内存监控

 可以访问 http://127.0.0.1:9090/service-discovery?search= - 查看采集数据。

监控配置

地址:http://127.0.0.1:4000/dashboards

介绍:Grafana 的监控,需要新建监控仪表。也可以使用导入功能。导入功能可以导入 Grafana 官网提供的各项模板,非常好用。

**常用代码**

4.1 CPU

sum(system_cpu_usage{job="x-api-app"}) / sum(system_cpu_count{job="x-api-app"}) * 100

4.2 磁盘

disk_free_bytes{job="x-api-app"}

4.3 连接池

hikaricp_connections{pool="HikariPool-1", job="x-api-app"}

4.4 请求量

sum by(instance, uri, exception) (increase(no_pay_notify_order_job_seconds_count{method="exec", job="x-api-app"}[5m]))

4.5 响应时间

sum by (uri) (increase(http_server_requests_seconds_sum{uri=~"/api/v1/chatgpt/chat/completions"}[1m]))

/sum by (uri) (increase(http_server_requests_seconds_count{uri=~"/api/v1/chatgpt/chat/completions"}[1m]))


http://www.mrgr.cn/p/78870448

相关文章

《QT实用小工具·四十九》QT开发的轮播图

1、概述 源码放在文章末尾 该项目实现了界面轮播图的效果&#xff0c;包含如下特点&#xff1a; 左右轮播 鼠标悬浮切换&#xff0c;无需点击 自动定时轮播 自动裁剪和缩放不同尺寸图片 任意添加、插入、删除 单击事件&#xff0c;支持索引和自定义文本 界面美观&#xff0c;圆…

在Docker内部使用gdb调试器报错-Operation not permitted

在docker内部使用gdb调试时刻遇到了gdb如下报错信息:warning: Error disabling address space randomization: Operation not permitted原因 地址随机化是linux一项安全特性,它允许内核进程启动每次加载库的时候都在随机化的分布在进程虚拟内存地址空间上(早期固定的库要加载到…

Redis__三大日志

文章目录 &#x1f60a; 作者&#xff1a;Lion J &#x1f496; 主页&#xff1a; https://blog.csdn.net/weixin_69252724 &#x1f389; 主题&#xff1a;Redis__三大日志 ⏱️ 创作时间&#xff1a;2024年04月30日 ———————————————— 对于MySQL来说, 有…

Ubuntu如何更换 PyTorch 版本

环境&#xff1a; Ubuntu22.04 WLS2 问题描述&#xff1a; Ubuntu如何更换 PyTorch 版本考虑安装一个为 CUDA 11.5 编译的 PyTorch 版本。如何安装旧版本 解决方案&#xff1a; 决定不升级CUDA版本&#xff0c;而是使用一个与CUDA 11.5兼容的PyTorch版本&#xff0c;您可…

展开说说:Android Fragment完全解析-卷三

本文章分析了Fragment的管理器FragmentManager、事务FragmentTransaction 、以及完整的声明周期和动态加载Fragment的原理解析。 1、Fragment管理器 FragmentManager 类负责在应用的 fragment 上执行一些操作&#xff0c;如添加、移除或替换操作&#xff0c;以及将操作添加到…

csapp-bomblab(自信满满版)

反汇编bomb文件 要查看机器代码文件的内容,有一类称为反汇编器(disassembler,assembler是汇编程序,dis-加在某些词语前表示相反的意思)的程序非常有用。这些程序根据机器代码产生一种类似于汇编代码的格式。在linux系统中,带‘-d’命令行标志的程序OBJDUMP(表示“object…

Bash脚本语法解析(典例精讲)

参考资料:https://github.com/AUTOMATIC1111/stable-diffusion-webuihttps://razeen.me/posts/the-ultimate-programmers-guide-to-bash-scripting/众所周知.sh文件是Linux系统中的脚本文件。(与之相对的还有windows系统上对应cmd的bat文件,对应powershell的ps1文件?)因此…

Windows系统,在Pycharm里面(python3.9)下载dlib的依赖包的具体步骤

原文作者:传送门 1、进入网址 轮子地址 然后选择这个下载:2、保存到自己的项目里面,然后使用pip的命令下载pip命令如下: pip install dlib-19.23.0-cp39-cp39-win_amd64.whl使用pip list的命令查看已经下载的包: dlib依赖包下载完成!

小程序账号设置以及request请求的封装

一般开发在小程序时&#xff0c;都会有测试版和正式版&#xff0c;这样在开发时会比较方便。 在开发时。产品经理都会给到测试账号和正式账号&#xff0c;后端给的接口也都会有测试环境用到的接口和正式环境用到的接口。 这里讲一讲我这边如何去做的。 1.在更目录随便命名一…

pytorch笔记:ModuleDict

1 介绍 在 PyTorch 中&#xff0c;nn.ModuleDict 是一个方便的容器&#xff0c;用于存储一组子模块&#xff08;即 nn.Module 对象&#xff09;的字典这个容器主要用于动态地管理多个模块&#xff0c;并通过键来访问它们&#xff0c;类似于 Python 的字典 2 特点 组织性 nn…

KKView远程控制2.0版本发布,TeamViewer面临巨大挑战

KKView远程控制2.0版本发布&#xff0c;TeamViewer面临巨大挑战 近日&#xff0c;备受瞩目的远程控制软件KKView发布了其全新2.0版本&#xff0c;KKView以其独特的创新性和用户友好的设计&#xff0c;为远程办公、远程培训等领域提供了更加高效、便捷的解决方案。 KKView远程…

ctfshow——SQL注入

文章目录 SQL注入基本流程普通SQL注入布尔盲注时间盲注报错注入——extractvalue()报错注入——updataxml()Sqlmap的用法 web 171——正常联合查询web 172——查看源代码、联合查询web 173——查看源代码、联合查询web 174——布尔盲注web 176web 177——过滤空格web 178——过…

AI代理架构的发展:从单一到多代理系统的演进及其影响分析

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

O2OA开发平台前端源码级二次开发(Vue3,React)

在使用O2OA进行项目定制化开发时&#xff0c;我们可以开发新的前端组件&#xff08;x_component&#xff09;以扩展O2OA来实现更多的业务。这种新增前端组件或者前端业务的开发通常会配合后端自定义应用实现的服务来完成系统内数据的交互。在当系统默认的界面不符合系统UI/UE设…

Python进阶篇笔记

一、面向对象 1、面向过程与面向对象面向过程:把程序流程化 面向对象:把程序抽象成类,类与类之间有联系2、类与对象 对象就是容器,是用来存放数据和功能的,对象就是数据和功能的集合 类的作用是吧对象做区分和归类,以及解决不同对象存相同数据的问题。类也是容器,也是用…

团队作业3—需求改进系统设计

这个作业属于哪个课程 软件工程这个作业要求在哪里 团队作业3—需求改进&系统设计这个作业的目标 1、需求&&原型改进 2、系统设计 3、Alpha任务分配计划 4、测试计划其他参考文献 架构设计、Scrum/Sprint、测试的计划和执行这个作业所属团队 SuperNewCode团队成员 …

搭建大型分布式服务(三十七)SpringBoot 整合多个kafka数据源-取消限定符

系列文章目录 文章目录 系列文章目录前言一、本文要点二、开发环境三、原项目四、修改项目五、测试一下五、小结 前言 本插件稳定运行上百个kafka项目&#xff0c;每天处理上亿级的数据的精简小插件&#xff0c;快速上手。 <dependency><groupId>io.github.vipjo…

【C语言—猜数字小游戏】

一、游戏规则 电脑自动生成一个1~100范围内的随机数&#xff0c;由玩家猜测本轮生成的随机数是什么&#xff0c;系统根据玩家猜测数据的⼤⼩给出猜⼤了或猜⼩了的反馈&#xff0c;直到玩家猜对&#xff0c;游戏结束。 如何生成随机数&#xff1a;【C语言】/*如何生成随机值*/-C…