使用Prometheus和Grafana监控Spring Boot应用

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

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<String> 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应用程序的现成仪表板。但是,在尝试使用时会遇到一些问题,因为数据无法正确地可视化。所以这里对仪表板进行了更新。

图片图片

责任编辑:武晓燕 来源: Java学研大本营
相关推荐

2021-07-01 11:29:45

KubernetesGrafana监控

2022-05-18 08:32:05

服务监控Prometheus开源

2022-07-11 09:36:38

SpringJava开发

2022-02-09 20:39:52

Actuator应用监控

2020-11-10 09:19:23

Spring BootJava开发

2020-11-20 08:15:40

Grafana + P

2023-12-27 08:47:41

PrometheusLinux架构

2023-12-28 08:01:17

SpringAPI数据

2020-12-30 05:34:25

监控PrometheusGrafana

2018-10-22 15:34:31

Spring Boo监控视化

2021-02-03 12:47:09

Spring Boot应用监控

2023-04-26 00:01:04

2022-07-29 21:23:54

Grafana微服务

2023-02-28 22:52:47

2021-05-18 07:30:36

开发Spring Boot日志

2023-10-11 09:58:07

2018-06-27 14:50:06

Cloud StudiSpring Boot应用

2023-07-27 08:53:44

2022-05-19 08:21:02

vmalert监控

2022-07-08 08:00:31

Prometheus监控
点赞
收藏

51CTO技术栈公众号