مشاركة عبر


مقاييس ميكرومتر ل Java

ينطبق على: NoSQL

يقوم Java SDK ل Azure Cosmos DB بتنفيذ مقاييس العميل باستخدام Micrometer للأجهزة في أنظمة المراقبة الشائعة مثل Prometheus. تتضمن هذه المقالة إرشادات وقصاصات برمجية لاستخراج المقاييس في Prometheus، مأخوذة من هذه العينة. يتم توثيق القائمة الكاملة للمقاييس التي توفرها SDK هنا. إذا تم نشر عملائك على خدمة Azure Kubernetes (AKS)، يمكنك أيضا استخدام خدمة Azure Monitor المدارة ل Prometheus مع استخراج مخصص، راجع الوثائق هنا.

استهلاك المقاييس من Prometheus

يمكنك تنزيل prometheus من هنا. لاستهلاك مقاييس Micrometer في Java SDK ل Azure Cosmos DB باستخدام Prometheus، تأكد أولا من استيراد المكتبات المطلوبة للسجل والعميل:

<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>

في التطبيق الخاص بك، قم بتوفير سجل prometheus إلى تكوين بيانات تتبع الاستخدام. لاحظ أنه يمكنك تعيين حدود تشخيصية مختلفة، مما سيساعد على الحد من المقاييس المستهلكة لتلك التي تهتم بها أكثر:

//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)
        );

ابدأ تشغيل خادم HttpServer المحلي لعرض مقاييس سجل العدادات إلى Prometheus:

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);
}

تأكد من اجتيازك clientTelemetryConfig عند إنشاء 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();

عند إضافة نقطة النهاية لعميل التطبيق الخاص بك إلى prometheus.yml، أضف اسم المجال والمنفذ إلى "الأهداف". على سبيل المثال، إذا كان prometheus يعمل على نفس الخادم مثل عميل التطبيق الخاص بك، يمكنك الإضافة localhost:8080 إلى targets كما يلي:

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"]

الآن يمكنك استهلاك المقاييس من Prometheus:

لقطة شاشة للرسم البياني للمقاييس في مستكشف Prometheus.

الخطوات التالية