使用Prometheus和Grafana监控Spring Boot应用

2023年 12月 27日 36.9k 0

1 简介

每个部署到生产环境的应用程序都需要监控方式来评估其性能情况,这可以帮助开发人员判断应用程序是否按预期运行,是否需要采取措施以达到期望的性能水平。这些数据被称为应用程序性能指标(APM),现在有许多商业工具如Newrelic、Datadog APM等提供这些功能的SAAS服务。

本文介绍两个开源工具:Grafana和Prometheus。Prometheus以时间序列格式收集和存储指标数据,而Grafana使用Prometheus作为数据源,在仪表板上可视化这些数据。

我们从创建一个应用程序并使用Grafana进行监控开始。

2 创建Spring Boot应用程序

访问https://start.spring.io,创建一个带有以下依赖项的简单应用程序。

  • Spring Boot Actuator(运维)
  • Prometheus(可观测性)
  • Spring Web(可选:仅用于创建一个简单的REST控制器。)

接下来,需要通过一个管理端点暴露出来,Prometheus将使用该端点以Prometheus可理解的格式收集指标数据。为此,添加以下属性。

management:
  endpoints:
    web:
      exposure:
        include:
        - prometheus

然后,添加一个简单的控制器,用于生成一些警告日志。将使用它来监控收到的警告数量。

@RestController
@SpringBootApplication
public class PrometheusIntegrationApplication {

    final static Logger logger = LoggerFactory.getLogger(PrometheusIntegrationApplication.class);

    public static void main(String[] args) {
        SpringApplication.run(PrometheusIntegrationApplication.class, args);
    }

    @GetMapping("/something")
    public ResponseEntity createLogs() {
        logger.warn("Just checking");
        return ResponseEntity.ok().body("All Ok");
    }

有了这些,来启动应用程序并打开以下URL。

http://localhost:8080/actuator/prometheus

3 理解指标数据

在打开上述端点后,会发现以下格式的一些指标数据:

jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1005592.0

第一部分jvm_memory_used_bytes被称为标签(label),而花括号内的字段被称为属性(attribute)。每个标签代表一个特定的指标,属性提供了一种查询方式,以获取值。

接下来,配置Prometheus来读取这些数据。

4 配置Prometheus

为了启动Prometheus,使用一个Prometheus Docker镜像,并提供一些配置来从应用程序中收集指标数据。它通过创建作业来从端点抓取数据。因此,在prometheus.yaml配置文件中定义作业,如下所示。

scrape_configs:
  - job_name: 'Spring Boot Application input'
    metrics_path: '/actuator/prometheus'
    scrape_interval: 2s
    static_configs:
      - targets: ['localhost:8000']
        labels:
          application: "My Spring Boot Application"

在这里,定义了一个作业,每2秒调用应用程序上的管理端点以获取指标数据。

接下来,创建一个docker-compose文件,用于启动和运行Prometheus Docker镜像。

services:
  prometheus:
      image: prom/prometheus:v2.35.0
      network_mode: host
      container_name: prometheus
      restart: unless-stopped
      volumes:
        - ./data/prometheus/config:/etc/prometheus/
      command:
        - "--config.file=/etc/prometheus/prometheus.yaml"

在这里,将配置文件挂载到/etc/prometheus位置,并将配置文件的位置作为命令的参数。为了简单起见,使用了主机网络模式,这样Prometheus可以直接访问应用程序端点。

有了这些,使用docker compose up启动docker镜像,并在浏览器上打开URL http://localhost:9090。

现在搜索标签logback_events_total。

图片图片

正如所看到的,可以看到Prometheus在特定时间收集的指标。

如果找不到该标签,可以通过导航到“Status > Targets”来检查作业是否正在运行。应该看到状态为“UP”,如下所示。

图片图片

因此,通过这种方式,数据每2秒就会被摄入到Prometheus中。

现在使用Grafana来可视化这些数据。

5 在Grafana中可视化指标

使用Grafana的Docker镜像,将其添加到docker-compose文件中。

grafana:
    image: grafana/grafana-oss:8.5.2
    pull_policy: always
    network_mode: host
    container_name: grafana
    restart: unless-stopped
    links:
      - prometheus:prometheus
    volumes:
      - ./data/grafana:/var/lib/grafana
    environment:
      - GF_SECURITY_ADMIN_PASSWORD=admin
      - GF_SERVER_DOMAIN=localhost

在这里,也使用了主机网络模式,以便和Grafana可以轻松访问Prometheus端点。

接下来,打开URL http://localhost:3000,使用用户名和密码“admin”访问Grafana。

6 配置Grafana数据源

首先,添加Prometheus数据源。在"添加数据源"中选择Prometheus,然后只需添加一个属性,即Prometheus的URL:http://localhost:9090。

图片图片

点击"保存并测试",现在,创建第一个仪表板。

7 创建Grafana仪表板

点击左侧的"+"图标,选择"创建仪表板"。现在,添加第一个面板。

接下来,在指标浏览器中查询一个标签,例如logback_events_total。

图片图片

正如在这里所看到的,我们可以得到各种类型日志的计数。这些计数目前来自应用程序的启动日志,并以时间序列的形式显示。

我们仅查看警告日志。为此,需要在属性中添加level="warn",如下所示。

图片图片

刚刚创建了一个简单的指标可视化面板,用于查看警告日志的数量。

通常,我们希望查看一定时间内错误或警告日志的速率。这将帮助我们了解系统是否存在问题。为此,可以使用rate函数来计算一段时间内日志的速率。

因此,在触发Spring Boot应用程序上的控制器端点后,它生成了一些警告日志,从而得到了这个图表。

图片图片

保存这个面板,完成了。刚刚创建了第一个具有警告日志指标面板的Grafana仪表板。

图片图片

现在不需要从头开始创建仪表板。实际上,有许多社区提供的仪表板可供使用。因此,可以从这里使用针对Spring Boot应用程序的现成仪表板。但是,在尝试使用时会遇到一些问题,因为数据无法正确地可视化。所以这里对仪表板进行了更新。

图片图片

相关文章

JavaScript2024新功能:Object.groupBy、正则表达式v标志
PHP trim 函数对多字节字符的使用和限制
新函数 json_validate() 、randomizer 类扩展…20 个PHP 8.3 新特性全面解析
使用HTMX为WordPress增效:如何在不使用复杂框架的情况下增强平台功能
为React 19做准备:WordPress 6.6用户指南
如何删除WordPress中的所有评论

发布评论