跳到主要内容

Micrometer Stackdriver 监控

DeepSeek V3 中英对照 Stackdriver Micrometer Stackdriver Monitoring

Stackdriver Monitoring 是一个具有内置仪表板的维度时间序列 SaaS。

1. 安装 micrometer-registry-stackdriver

建议使用 Micrometer(或您的框架,如果有)提供的 BOM,您可以在此处查看如何配置它 here。以下示例假设您正在使用 BOM。

1.1. Gradle

在配置好 BOM 之后,添加以下依赖:

implementation 'io.micrometer:micrometer-registry-stackdriver'
groovy
备注

由于此依赖项的版本由 BOM 定义,因此不需要指定版本。

1.2. Maven

配置 完 BOM 后,添加以下依赖:

<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-stackdriver</artifactId>
</dependency>
xml
备注

此依赖项不需要指定版本,因为它由 BOM 定义。

2. 配置

以下示例配置了 Stackdriver:

StackdriverConfig stackdriverConfig = new StackdriverConfig() {
@Override
public String projectId() {
return MY_PROJECT_ID;
}

@Override
public String get(String key) {
return null;
}
}

MeterRegistry registry = StackdriverMeterRegistry.builder(stackdriverConfig).build();
java

StackdriverConfig 是一个带有一组默认方法的接口。如果在 get(String k) 的实现中,你将其绑定到一个属性源而不是返回 null,则可以覆盖默认配置。例如,Micrometer 的 Spring Boot 支持将前缀为 management.metrics.export.stackdriver 的属性直接绑定到 StackdriverConfig

management.metrics.export.stackdriver:
project-id: MY_PROJECT_ID
resource-type: global

# You will probably want to disable Stackdriver Monitoring publishing in a local development profile.
enabled: true

# The interval at which metrics are sent to Stackdriver Monitoring. The default is 1 minute.
step: 1m
yml

对于大多数环境,您需要创建并配置凭据以将指标推送到 Stackdriver Monitoring。在大多数情况下,您应该创建一个具有 Stackdriver Monitoring 权限的服务账户,并将 GOOGLE_APPLICATION_CREDENTIALS 环境变量配置为服务账户密钥文件的路径。以下示例展示了如何执行此操作:

export PROJECT_ID=MY_PROJECT_ID
export APP_NAME=MY_APP

# Create a service account
gcloud iam service-accounts create $APP_NAME

# Grant the service account Stackdriver Monitoring writer permission
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member serviceAccount:$APP_NAME@$PROJECT_ID.iam.gserviceaccount.com \
--role roles/monitoring.metricWriter

# Create a key JSON file
gcloud iam service-accounts keys create $HOME/$APP_NAME-key.json \
--iam-account $APP_NAME@$PROJECT_ID.iam.gserviceaccount.com

# Configure GOOGLE_APPLICATION_CREDENTIALS env var
export GOOGLE_APPLICATION_CREDENTIALS=$HOME/$APP_NAME-key.json
none

在托管环境(如 Google App Engine、Google Cloud Run 和 Google Cloud Function)中运行时,您无需配置此环境变量。在这些环境中,服务账户会自动与应用程序实例关联。底层的 Stackdriver Monitoring 客户端库可以自动检测并使用这些凭据。

3. Stackdriver 标签

Micrometer 指标标签会被映射到 Stackdriver 指标标签。通过标签,您可以进一步按标签进行过滤或分组。有关标签的更多信息,请参阅 Micrometer 概念。以下示例展示了如何按标签进行过滤:

MeterRegistry registry = StackdriverMeterRegistry.builder(stackdriverConfig).build();
registry.config().commonTags("application", "my-application");
java

你也可以使用 StackdriverConfig 方法中的 resourceLabels 来配置资源标签。根据配置的 resourceType,会有一些必需的资源标签。请参阅关于选择受监控的资源类型的文档。

important

在多个应用程序或实例中使用 Micrometer 时,必须确保每个应用程序或实例的 Stackdriver 标签是唯一的。否则,你可能会看到诸如 One or more TimeSeries could not be written: One or more points were written more frequently than the maximum sampling period configured 的错误。如果使用的资源类型不是 global,资源标签可能已经使每个应用程序实例的指标唯一。如果没有,使用主机名或平台提供的实例 ID 作为通用标签可能是实现这一点的好选择。

4. Spring Boot

Spring Boot 为 Micrometer 的 StackdriverMeterRegistry 提供了自动配置。更多信息,请参阅 Spring Boot 文档

你可以手动配置或注册 StackdriverMeterRegistry。除了使用 Spring Boot Actuator 外,确保你创建了 StackdriverMeterRegistry bean:

@Bean
StackdriverConfig stackdriverConfig() {
return new StackdriverConfig() {
@Override
public String projectId() {
return MY_PROJECT_ID;
}

@Override
public String get(String key) {
return null;
}
}
}

@Bean
StackdriverMeterRegistry meterRegistry(StackdriverConfig stackdriverConfig) {
return StackdriverMeterRegistry.builder(stackdriverConfig).build();
}
java

你也可以使用 Spring Boot Actuator 通用标签配置 来配置通用标签:

spring.application.name=my-application
management.metrics.tags.application=${spring.application.name}
none