应用监控(Prometheus + Grafana)

本文涉及的产品
可观测可视化 Grafana 版,10个用户账号 1个月
可观测监控 Prometheus 版,每月50GB免费额度
简介: 应用监控(Prometheus + Grafana)

可用于应用监控的系统有很多,有的需要埋点(切面)、有的需要配置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 {
 
    @Bean
    public CollectorRegistry collectorRegistry() {
        return new CollectorRegistry();
    }
 
    @Bean
    public PrometheusMeterRegistry prometheusMeterRegistry(PrometheusConfig config, CollectorRegistry collectorRegistry) {
        return new PrometheusMeterRegistry(config, collectorRegistry, Clock.SYSTEM);
    }
 
    @Bean
    public TimedAspect timedAspect(MeterRegistry registry) {
        return new TimedAspect(registry);
    }
 
    @Bean
    public 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: true
    health:
      show-details: always # 显示详细的健康检查信息
  metrics:
    export:
      prometheus:
        enabled: true # 启用Prometheus
  prometheus:
    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]))


相关实践学习
通过可观测可视化Grafana版进行数据可视化展示与分析
使用可观测可视化Grafana版进行数据可视化展示与分析。
目录
相关文章
|
7天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第26天】Prometheus与Grafana是智能运维中的强大组合,前者是开源的系统监控和警报工具,后者是数据可视化平台。Prometheus具备时间序列数据库、多维数据模型、PromQL查询语言等特性,而Grafana支持多数据源、丰富的可视化选项和告警功能。两者结合可实现实时监控、灵活告警和高度定制化的仪表板,广泛应用于服务器、应用和数据库的监控。
51 3
|
8天前
|
Prometheus 监控 Cloud Native
基于Docker安装Grafana和Prometheus
Grafana 是一款用 Go 语言开发的开源数据可视化工具,支持数据监控和统计,并具备告警功能。通过 Docker 部署 Grafana 和 Prometheus,可实现系统数据的采集、展示和告警。默认登录用户名和密码均为 admin。配置 Prometheus 数据源后,可导入主机监控模板(ID 8919)进行数据展示。
41 2
|
6天前
|
Prometheus 运维 监控
智能运维实战:Prometheus与Grafana的监控与告警体系
【10月更文挑战第27天】在智能运维中,Prometheus和Grafana的组合已成为监控和告警体系的事实标准。Prometheus负责数据收集和存储,支持灵活的查询语言PromQL;Grafana提供数据的可视化展示和告警功能。本文介绍如何配置Prometheus监控目标、Grafana数据源及告警规则,帮助运维团队实时监控系统状态,确保稳定性和可靠性。
34 0
|
2月前
|
Prometheus 监控 Cloud Native
介绍如何使用Prometheus进行监控
介绍如何使用Prometheus进行监控
188 3
|
2月前
|
Prometheus 监控 Cloud Native
docker安装prometheus+Granfan并监控容器
【9月更文挑战第14天】本文介绍了在Docker中安装Prometheus与Grafana并监控容器的步骤,包括创建配置文件、运行Prometheus与Grafana容器,以及在Grafana中配置数据源和创建监控仪表盘,展示了如何通过Prometheus抓取数据并利用Grafana展示容器的CPU使用率等关键指标。
|
3月前
|
Prometheus 监控 Cloud Native
自定义grafana_table(数据源Prometheus)
综上所述,自定义 Grafana 表格并将 Prometheus 作为数据源的关键是理解 PromQL 的查询机制、熟悉 Grafana 面板的配置选项,并利用 Grafana 强大的转换和自定义功能使数据展示更为直观和有洞见性。随着对这些工具更深入的了解,您将可以创建出更高级的监控仪表盘,以支持复杂的业务监控需求。
243 1
|
3月前
|
Prometheus 监控 Cloud Native
prometheus学习笔记之Grafana安装与配置
prometheus学习笔记之Grafana安装与配置
|
2月前
|
运维 Kubernetes 监控
Loki+Promtail+Grafana监控K8s日志
综上,Loki+Promtail+Grafana 监控组合对于在 K8s 环境中优化日志管理至关重要,它不仅提供了强大且易于扩展的日志收集与汇总工具,还有可视化这些日志的能力。通过有效地使用这套工具,可以显著地提高对应用的运维监控能力和故障诊断效率。
257 0
|
5月前
|
Prometheus 监控 Cloud Native
基于Prometheus和Grafana的监控平台 - 环境搭建
基于Prometheus和Grafana的监控平台 - 环境搭建
|
3月前
|
存储 Prometheus 监控
Grafana 与 Prometheus 集成:打造高效监控系统
【8月更文第29天】在现代软件开发和运维领域,监控系统已成为不可或缺的一部分。Prometheus 和 Grafana 作为两个非常流行且互补的开源工具,可以协同工作来构建强大的实时监控解决方案。Prometheus 负责收集和存储时间序列数据,而 Grafana 则提供直观的数据可视化功能。本文将详细介绍如何集成这两个工具,构建一个高效、灵活的监控系统。
366 1