Micrometer لجافا: دليل شامل مع أمثلة عملية
1. ما هي Micrometer ولماذا تحتاجها؟
Micrometer هي مكتبة لجمع مقاييس تطبيقات Java (ولغات JVM الأخرى)، توفر واجهة موحدة فوق أنظمة المراقبة الشهيرة مثل Prometheus و Graphite و Datadog و InfluxDB و New Relic وغيرها. تطبق المكتبة مواصفات Micrometer Observation API وتُعتبر المعيار الفعلي لجمع المقاييس في نظام Spring Boot البيئي (بدءًا من الإصدار 2.0).
لماذا تحتاجها؟ في بنية الخدمات المصغرة الحديثة، من الضروري فهم ما يحدث في تطبيقك: عدد الطلبات المُعالجة، زمن الاستجابة، استهلاك الذاكرة، وعدد مرات حدوث الأخطاء. تتيح لك Micrometer توحيد جمع هذه البيانات دون الارتباط بنظام مراقبة معين. تكتب الكود مرة واحدة، ويمكنك التبديل بين Prometheus أو Graphite أو CloudWatch بمجرد تغيير التبعية في ملف pom.xml أو build.gradle.
توفر المكتبة مجموعة غنية من الأدوات: العدادات (Counter)، المدرجات التكرارية (Histogram)، الموقتات (Timer)، توزيعات الملخص (DistributionSummary)، بالإضافة إلى دعم العلامات (tags) للتجميع متعدد الأبعاد للمقاييس. التكامل المدمج مع JVM (جامع القمامة، الخيوط، الذاكرة) والأطر الشهيرة (Spring، Hibernate، Jetty، Tomcat) يجعلها لا غنى عنها لمراقبة بيئات الإنتاج.
2. التثبيت
يتم توزيع Micrometer عبر Maven Central. لمشاريع Java، يُستخدم Maven أو Gradle. فيما يلي الأوامر الدقيقة لإضافة التبعيات.
Maven (pom.xml)
<!-- الوحدة الأساسية لـ Micrometer -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-core</artifactId>
<version>1.14.5</version> <!-- تحقق من أحدث إصدار على mvnrepository.com -->
</dependency>
<!-- التسجيل لـ Prometheus -->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.14.5</version>
</dependency>
Gradle (build.gradle)
dependencies {
implementation 'io.micrometer:micrometer-core:1.14.5'
implementation 'io.micrometer:micrometer-registry-prometheus:1.14.5'
}
ملاحظة مهمة: إذا كنت تستخدم Spring Boot، يكفي إضافة spring-boot-starter-actuator و micrometer-registry-prometheus — سيقوم Spring Boot تلقائيًا بتكوين MeterRegistry.
3. البداية السريعة — مثال عملي بسيط
لننشئ تطبيقًا بسيطًا لوحدة التحكم يجمع المقاييس ويصدرها بتنسيق Prometheus.
import io.micrometer.core.instrument.Counter;
import io.micrometer.core.instrument.MeterRegistry;
import io.micrometer.prometheus.PrometheusConfig;
import io.micrometer.prometheus.PrometheusMeterRegistry;
public class QuickStart {
public static void main(String[] args) throws InterruptedException {
// 1. إنشاء سجل المقاييس لـ Prometheus
PrometheusMeterRegistry registry = new PrometheusMeterRegistry(PrometheusConfig.DEFAULT);
// 2. إنشاء عداد
Counter counter = Counter.builder("my.counter")
.description("مثال على عداد")
.tag("env", "test")
.register(registry);
// 3. زيادة العداد في حلقة
for (int i = 0; i < 5; i++) {
counter.increment();
Thread.sleep(1000);
}
// 4. طباعة المقاييس بتنسيق Prometheus
System.out.println("=== مقاييس Prometheus ===");
System.out.println(registry.scrape());
}
}
المخرجات في وحدة التحكم:
=== مقاييس Prometheus ===
# HELP my_counter_total مثال على عداد
# TYPE my_counter_total counter
my_counter_total{env="test"} 5.0