Mikrométer-metrikák Java-hoz

A KÖVETKEZŐRE VONATKOZIK: NoSQL

Az Azure Cosmos DB-hez készült Java SDK a Micrometer használatával implementálja az ügyfélmetrikákat olyan népszerű megfigyelhetőségi rendszerekben, mint a Prometheus. Ez a cikk utasításokat és kódrészleteket tartalmaz a metrikák Prometheusba való lekaparásához, amely ebből a mintából származik. Az SDK által biztosított metrikák teljes listája itt található. Ha az ügyfelek az Azure Kubernetes Service-ben (AKS) vannak üzembe helyezve, a Prometheushoz készült Azure Monitor felügyelt szolgáltatást is használhatja egyéni kaparással, a dokumentációt itt tekintheti meg.

Metrikák felhasználása a Prometheusból

Innen letöltheti a prometheust. A Micrometer-metrikák az Azure Cosmos DB-hez készült Java SDK Prometheus használatával történő használatához először győződjön meg arról, hogy importálta a beállításjegyzékhez és az ügyfélhez szükséges kódtárakat:

<dependency>
    <groupId>io.micrometer</groupId>
    <artifactId>micrometer-registry-prometheus</artifactId>
    <version>1.6.6</version>
</dependency>

<dependency>
    <groupId>io.prometheus</groupId>
    <artifactId>simpleclient_httpserver</artifactId>
    <version>0.5.0</version>
</dependency>

Az alkalmazásban adja meg a prometheus beállításjegyzéket a telemetriai konfigurációhoz. Figyelje meg, hogy különböző diagnosztikai küszöbértékeket állíthat be, amelyek segítenek korlátozni a leggyakrabban használt metrikákat:

//prometheus meter registry
PrometheusMeterRegistry prometheusRegistry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);

//provide the prometheus registry to the telemetry config
CosmosClientTelemetryConfig telemetryConfig = new CosmosClientTelemetryConfig()
        .diagnosticsThresholds(
                new CosmosDiagnosticsThresholds()
                        // Any requests that violate (are lower than) any of the below thresholds that are set
                        // will not appear in "request-level" metrics (those with "rntbd" or "gw" in their name).
                        // The "operation-level" metrics (those with "ops" in their name) will still be collected.
                        // Use this to reduce noise in the amount of metrics collected.
                        .setRequestChargeThreshold(10)
                        .setNonPointOperationLatencyThreshold(Duration.ofDays(10))
                        .setPointOperationLatencyThreshold(Duration.ofDays(10))
        )
        // Uncomment below to apply sampling to help further tune client-side resource consumption related to metrics.
        // The sampling rate can be modified after Azure Cosmos DB Client initialization – so the sampling rate can be
        // modified without any restarts being necessary.
        //.sampleDiagnostics(0.25)
        .clientCorrelationId("samplePrometheusMetrics001")
        .metricsOptions(new CosmosMicrometerMetricsOptions().meterRegistry(prometheusRegistry)
                //.configureDefaultTagNames(CosmosMetricTagName.PARTITION_KEY_RANGE_ID)
                .applyDiagnosticThresholdsForTransportLevelMeters(true)
        );

Indítsa el a helyi HttpServer-kiszolgálót, hogy elérhetővé tegye a mérőszámregisztrációs mérőszámokat a Prometheus számára:

try {
    HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
    server.createContext("/metrics", httpExchange -> {
        String response = prometheusRegistry.scrape();
        int i = 1;
        httpExchange.sendResponseHeaders(200, response.getBytes().length);
        try (OutputStream os = httpExchange.getResponseBody()) {
            os.write(response.getBytes());
        }
    });
    new Thread(server::start).start();
} catch (IOException e) {
    throw new RuntimeException(e);
}

Győződjön meg arról, hogy a következőt clientTelemetryConfig hozza létre CosmosClient:

//  Create async client
client = new CosmosClientBuilder()
    .endpoint(AccountSettings.HOST)
    .key(AccountSettings.MASTER_KEY)
    .clientTelemetryConfig(telemetryConfig)
    .consistencyLevel(ConsistencyLevel.SESSION) //make sure we can read our own writes
    .contentResponseOnWriteEnabled(true)
    .buildAsyncClient();

Amikor hozzáadja az alkalmazásügyfél végpontját prometheus.yml, adja hozzá a tartománynevet és a portot a "célokhoz". Ha például a prometheus ugyanazon a kiszolgálón fut, mint az alkalmazásügyfél, az alábbiak szerint targets adhat hozzálocalhost:8080:

scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: "prometheus"

    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.

    static_configs:
      - targets: ["localhost:9090", "localhost:8080"]

Most már használhatja a Prometheus metrikáit:

Screenshot of metrics graph in Prometheus explorer.

További lépések