Micrometer Stackdriver 监控
Stackdriver Monitoring 是一个具有内置仪表板的维度时间序列 SaaS。
1. 安装 micrometer-registry-stackdriver
建议使用 Micrometer(或您的框架,如果有)提供的 BOM,您可以在此处查看如何配置它 here。以下示例假设您正在使用 BOM。
1.1. Gradle
在配置好 BOM 之后,添加以下依赖:
implementation 'io.micrometer:micrometer-registry-stackdriver'
由于此依赖项的版本由 BOM 定义,因此不需要指定版本。
1.2. Maven
在 配置 完 BOM 后,添加以下依赖:
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-stackdriver</artifactId>
</dependency>
此依赖项不需要指定版本,因为它由 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();
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
对于大多数环境,您需要创建并配置凭据以将指标推送到 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
在托管环境(如 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");
你也可以使用 StackdriverConfig
方法中的 resourceLabels
来配置资源标签。根据配置的 resourceType
,会有一些必需的资源标签。请参阅关于选择受监控的资源类型的文档。
在多个应用程序或实例中使用 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();
}
你也可以使用 Spring Boot Actuator 通用标签配置 来配置通用标签:
spring.application.name=my-application
management.metrics.tags.application=${spring.application.name}