#google-cloud #metrics #metrics-exporter #open-telemetry #gcp #exporter #cloud-monitoring

opentelemetry_gcloud_monitoring_exporter

提供将指标导出到 Google Cloud Monitoring 的支持

7 个版本

0.11.6 2024 年 8 月 23 日
0.11.5 2024 年 8 月 19 日

2080网页编程

Download history 729/week @ 2024-08-16

729 每月下载量

Apache-2.0

1MB
14K SLoC

OpenTelemetry Google Cloud Monitoring Exporter

此库提供将指标导出到 Google Cloud Monitoring 的支持。

关于资源检测,请参阅 opentelemetry-resourcedetector-gcp-rust

安装

cargo add opentelemetry_gcloud_monitoring_exporter - 导出器

cargo add opentelemetry_resourcedetector_gcp_rust - GCP 资源检测

或在 cargo.toml 中添加

[dependencies]
opentelemetry_gcloud_monitoring_exporter = { version = "0.11", features = [
    "tokio",
    "opentelemetry_0_24",
    "gcp_auth",
] }
tokio = { version = "1.0", features = ["full"] }
opentelemetry = { version = "0.24", features = ["metrics"] }
opentelemetry_sdk = { version = "0.24", features = ["metrics", "rt-tokio"] }
opentelemetry_resourcedetector_gcp_rust = "0.11"

使用

use opentelemetry::{metrics::MeterProvider as _, KeyValue};
use opentelemetry_gcloud_monitoring_exporter::{
    GCPMetricsExporter, GCPMetricsExporterConfig, MonitoredResourceDataConfig,
};
use opentelemetry_resourcedetector_gcp_rust::GoogleCloudResourceDetector;
use opentelemetry_sdk::{
    metrics::{PeriodicReader, SdkMeterProvider},
    runtime, Resource,
};
use serde_json::json;
use std::collections::HashMap;
use std::time::Duration;

#[tokio::main]
async fn main() -> Result<(), Box<dyn std::error::Error>> {
    let mut cfg = GCPMetricsExporterConfig::default();
    cfg.prefix = "custom.googleapis.com/test_service".to_string();
    let exporter = GCPMetricsExporter::new_gcp_auth(cfg).await?;
    let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
    let gcp_detector = GoogleCloudResourceDetector::new().await;
    let res = Resource::default().merge(&rname);
    SdkMeterProvider::builder()
        .with_resource(res)
        .with_reader(reader)
        .build();

    let meter = meter_provider.meter("user-event-test");

    let counter = meter
        .f64_counter("counter_f64_test")
        .with_description("test_decription")
        .with_unit("test_unit")
        .init();

    loop {
        // Record measurements using the Counter instrument.
        counter.add(
            1.0,
            &[
                KeyValue::new("mykey1", "myvalue1"),
                KeyValue::new("mykey2", "myvalue2"),
            ],
        );
        tokio::time::sleep(Duration::from_millis(300)).await;
    }
}

自定义 Google 监控中的指标资源

    let mut cfg = GCPMetricsExporterConfig::default();
    cfg.prefix = "custom.googleapis.com/test_service".to_string();

    // customize metric resource in google monitoring
    cfg.custom_monitored_resource_data = Some(
        // https://cloud.google.com/monitoring/api/resources#tag_global
        MonitoredResourceDataConfig {
            r#type: "global".to_string(),
            labels: HashMap::from([
                ("project_id".to_string(), "my-project".to_string()),
            ]),
        },
    );
    let exporter = GCPMetricsExporter::new_gcp_auth(cfg).await?;
    let reader = PeriodicReader::builder(exporter, runtime::Tokio).build();
    SdkMeterProvider::builder()
        .with_reader(reader)
        .build();

参考

云监控

OpenTelemetry 项目

此仓库的测试用例

opentelemetry-exporter-gcp-monitoring Python 版本

依赖项

~21–36MB
~688K SLoC