Skip to content

Java

Host metrics 是指从运行应用程序的主机的操作系统收集的指标,这些指标包括 CPU、内存、磁盘和网络使用情况。 了解主机指标至关重要,因为它可以帮助你识别可能影响应用程序整体性能的潜在问题或瓶颈。 在本教程中,我们将向你展示如何收集 Host metrics,将它们发送到 GreptimeDB 并进行数据可视化。

创建服务

为了充分体验 GreptimeCloud 的强大功能,你需要创建一个包含身份验证数据库的服务。打开 GreptimeCloud 控制台,注册并登录。然后单击 New Service 按钮并配置以下内容:

  • Service Name: 服务名称。
  • Description: 有关该服务的更多信息。
  • Region: 选择数据库所在的区域。
  • Plan: 选择要使用的定价计划。

现在创建服务,准备向其写入一些数据。

写入数据

准备

示例 Demo

在本节中,我们将创建一个快速开始的 Demo,并展示收集 JVM runtime metrics 并发送到 GreptimeDB 的核心代码。该 Demo 基于OTLP/HTTP。你可以在 GitHub 上获取整个 Demo 以作参考。

首先创建一个名为 quick-start-java 的新目录来托管我们的项目,然后使用 IDEA 在该目录中创建一个新项目。选择 Java 作为语言,Gradle 作为构建系统,JDK 17 作为项目 SDK,Groovy 作为 Gradle DSL,然后点击 Create 按钮。

在 build.gradle 中安装所需的包:

groovy
dependencies {
    implementation 'io.opentelemetry:opentelemetry-api:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-sdk:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-exporter-otlp:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-semconv:1.28.0-alpha'
    implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-metrics:1.26.0-alpha'
}
dependencies {
    implementation 'io.opentelemetry:opentelemetry-api:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-sdk:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-exporter-otlp:1.28.0'
    implementation 'io.opentelemetry:opentelemetry-semconv:1.28.0-alpha'
    implementation 'io.opentelemetry.instrumentation:opentelemetry-runtime-metrics:1.26.0-alpha'
}

安装完依赖后,编写代码创建一个 Metric Exporter 对象,用于将 metrics 发送到 GreptimeDB。 请参考 GreptimeDBGreptimeCloud 中的 OTLP 集成文档获取 exporter 的相关配置。

java
String endpoint = String.format("https://%s/v1/otlp/v1/metrics", dbHost);
String auth = username + ":" + password;
String b64Auth = new String(Base64.getEncoder().encode(auth.getBytes()));
OtlpHttpMetricExporter exporter = OtlpHttpMetricExporter.builder()
                .setEndpoint(endpoint)
                .addHeader("X-Greptime-DB-Name", db)
                .addHeader("Authorization", String.format("Basic %s", b64Auth))
                .setTimeout(Duration.ofSeconds(5))
                .build();
String endpoint = String.format("https://%s/v1/otlp/v1/metrics", dbHost);
String auth = username + ":" + password;
String b64Auth = new String(Base64.getEncoder().encode(auth.getBytes()));
OtlpHttpMetricExporter exporter = OtlpHttpMetricExporter.builder()
                .setEndpoint(endpoint)
                .addHeader("X-Greptime-DB-Name", db)
                .addHeader("Authorization", String.format("Basic %s", b64Auth))
                .setTimeout(Duration.ofSeconds(5))
                .build();

将 exporter 附加到 MeterProvider 并开始收集 JVM runtime metrics:

java
PeriodicMetricReader metricReader = PeriodicMetricReader
        .builder(exporter)
        .setInterval(Duration.ofSeconds(5))
        .build();
SdkMeterProvider meterProvider = SdkMeterProvider
        .builder()
        .setResource(resource)
        .registerMetricReader(metricReader)
        .build();

OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
        .setMeterProvider(meterProvider)
        .buildAndRegisterGlobal();
Runtime.getRuntime().addShutdownHook(new Thread(openTelemetrySdk::close));
BufferPools.registerObservers(openTelemetry);
Classes.registerObservers(openTelemetry);
Cpu.registerObservers(openTelemetry);
GarbageCollector.registerObservers(openTelemetry);
MemoryPools.registerObservers(openTelemetry);
Threads.registerObservers(openTelemetry);
PeriodicMetricReader metricReader = PeriodicMetricReader
        .builder(exporter)
        .setInterval(Duration.ofSeconds(5))
        .build();
SdkMeterProvider meterProvider = SdkMeterProvider
        .builder()
        .setResource(resource)
        .registerMetricReader(metricReader)
        .build();

OpenTelemetrySdk openTelemetrySdk = OpenTelemetrySdk.builder()
        .setMeterProvider(meterProvider)
        .buildAndRegisterGlobal();
Runtime.getRuntime().addShutdownHook(new Thread(openTelemetrySdk::close));
BufferPools.registerObservers(openTelemetry);
Classes.registerObservers(openTelemetry);
Cpu.registerObservers(openTelemetry);
GarbageCollector.registerObservers(openTelemetry);
MemoryPools.registerObservers(openTelemetry);
Threads.registerObservers(openTelemetry);

请参考 OpenTelemetry 文档 获取有关代码的更多详细信息。

恭喜你完成了 Demo 的核心部分!现在可以按照 GitHub 库README.md 文件中的说明运行完整的 Demo。

连接信息可以在 GreptimeCloud 控制台中找到。

数据可视化

在开发人员的日常工作中,可视化面板中的数据和监控指标非常重要。在 GreptimeCloud 控制台中,单击 Open Prometheus Workbench,然后单击 + New RulesetAdd Group,将组命名为 host-monitor 并添加面板。

要为关注的所有 Table 添加面板,请选择相应的 Table 并逐个单击 Add Panel。添加完所有必要的面板后,单击 save 按钮保存它们。之后你可以在日常工作中通过查看面板来监控指标。此外你可以为 Panel 设置警报规则,以便在指标超过阈值时收到通知。