使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序

2022-07-15 10:57:00 浏览数 (3)

手把手教你如何使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序的过程。

在本文中,我们将研究如何使用 Grafana 监控 Spring Boot 应用程序。我们将研究整个设置并创建一个简单的仪表板来查看一些指标。

部署在生产环境中的每个应用程序都需要某种监控来了解应用程序的执行情况。这将使您了解应用程序是否按方面执行,或者您是否需要采取一些措施以获得所需的性能水平。在现代世界中,这些数据称为应用程序性能指标 (APM)。现在已经有相当多的商业工具如Newrelic、Datadog APM等,都是提供这种能力的SAAS服务。

今天我们将研究两个开源工具,称为Grafana和Prometheus。Prometheus 以时间序列格式收集和存储指标数据,而 Grafana 使用 Prometheus 作为数据源在仪表板上可视化数据。

有了这个,让我们首先创建一个应用程序并使用 Grafana 对其进行监控。

创建一个 Spring Boot 应用程序

让我们访问https://start.spring.io并创建一个具有以下依赖项的简单应用程序。

  • Spring Boot 执行器(操作)
  • Prometheus(可观察性)
  • Spring Web(可选:仅用于创建简单的 REST 控制器。)

接下来,我们需要公开一个执行器端点,Prometheus 将通过该端点以 Prometheus 可以理解的格式收集指标数据。为此,我们需要添加以下属性。

代码语言:javascript复制
management:
  endpoints:
    web:
      exposure:
        include:
        - prometheus

接下来让我们添加一个简单的控制器,它会产生一些警告日志。我们将使用它来监控我们收到的警告数量。

代码语言:javascript复制
@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("监控测试......");
        return ResponseEntity.ok().body("All Ok");
    }

有了这个,让我们启动应用程序并打开以下 URL: http://localhost:8080/actuator/prometheus

了解指标数据

打开上面的endpoint后,你会发现一些metrics数据,格式如下

代码语言:javascript复制
jvm_memory_used_bytes{area="heap",id="G1 Survivor Space",} 1005592.0

第一部分即jvm_memory_used_bytes称为标签,而花括号内的字段称为属性。这些标签中的每一个都代表一个特定的指标,并且该属性为您提供了一种查询方式,以便您可以获取值。

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

配置Prometheus

要启动 Prometheus,我们将使用Prometheus docker 映像并为其提供一些配置以从我们的应用程序中收集指标数据。它通过创建将从端点抓取数据的作业来做到这一点。prometheus.yaml因此,让我们在配置文件中定义作业,如下所示。

代码语言:javascript复制
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 映像启动并运行。

代码语言:javascript复制
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 镜像并在我们的浏览器上docker compose up打开 URL 。http://localhost:9090

现在让我们搜索标签logback_events_total

如您所见,我们可以看到 Prometheus 在特定时间收集的指标。

如果您没有找到标签,您可以通过导航到“状态 > 目标”来检查作业是否正在运行。您应该像这样看到状态为“UP”。

因此,数据每 2 秒就会被摄取到 Prometheus 中。

现在让我们使用 Grafana 将其可视化。

在 Grafana 中可视化指标

我们将使用 Grafana 的 docker 镜像并将其添加到 docker -compose 文件中。

代码语言:javascript复制
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

配置 Grafana 数据源

我们先添加 Prometheus 数据源。为此,导航到“添加数据源”并选择 Prometheus。然后你只需要添加一个属性,即 Prometheus URL http://localhost:9090

点击“保存并测试”,现在,让我们创建我们的第一个仪表板

创建 Grafana 仪表板

单击左侧的“ ”图标,然后选择“创建仪表板”。现在让我们添加我们的第一个面板。

接下来,让我们在公制浏览器中查询一个标签,即logback_events_total

正如您在此处看到的,我们获得了所有类型日志的计数。这些计数当前来自我们应用程序的启动日志,并以时间序列格式显示。

让我们深入到仅查看警告日志。为此,我们必须添加如下属性level=”warn”。

而已。我们刚刚创建了一个简单的指标可视化面板来查看警告日志的数量。

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

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

让我们保存这个面板,然后我们开始吧。我们刚刚创建了第一个带有警告日志指标面板的 Grafana 仪表板。

现在,我们不需要从头开始创建仪表板。您可以从很多社区提供的仪表板。选择喜欢的仪表板使用。

在本文中,我们了解了如何使用 Prometheus 和 Grafana 监控 Spring Boot 应用程序的性能。

0 人点赞