تجاوزات أخذ العينات - Azure Monitor Application Insights ل Java

إشعار

ميزة تجاوزات أخذ العينات موجودة في GA، بدءا من 3.5.0.

تسمح لك عمليات منع أخذ العينات بتخطي النسبة المئوية الافتراضية لأخذ العينات، على سبيل المثال:

  • اضبط النسبة المئوية لأخذ العينات على 0 (أو قيمة صغيرة) من اجل إجراء فحوصات صحية مزعجة.
  • اضبط النسبة المئوية لأخذ العينات على 0 (أو قيمة صغيرة) لمكالمات التبعية المزعجة.
  • قم بتعيين النسبة المئوية لأخذ العينات إلى 100 لنوع طلب مهم (على سبيل المثال، /login) على الرغم من تكوين أخذ العينات الافتراضي إلى شيء أقل.

المصطلحات

قبل التعرف على تجاوزات أخذ العينات، يجب أن تفهم مصطلح المدى . الامتداد هو مصطلح عام لـ:

  • طلب وارد.
  • تبعية صادرة (على سبيل المثال، مكالمة عن بعد لخدمة أخرى).
  • تبعية في العملية (على سبيل المثال، العمل الذي يتم بواسطة المكونات الفرعية للخدمة).

لتجاوزات أخذ العينات، تعد مكونات الامتداد هذه مهمة:

  • السمات

تمثل سمات الامتداد كلاً من الخصائص القياسية والمخصصة لطلب معين أو تبعية.

الشروع في العمل

للبدء، أنشئ ملف تهيئة باسم applicationinsights.json . احفظه في نفس الدليل باسم applicationinsights-agent-*.jar. استخدم النموذج الأتي.

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 0
      },
      {
        "telemetryType": "request",
        "attributes": [
          ...
        ],
        "percentage": 100
      }
    ]
  }
}

طريقة العمل

telemetryType(telemetryKindفي Application Insights 3.4.0) يجب أن يكون واحدا من requestأو dependencytrace أو (سجل) أو exception.

عند بدء فترة، يتم استخدام نوع الامتداد والسمات الموجودة عليه في ذلك الوقت للتحقق مما إذا كان أي من تجاوزات العينة يتطابق.

يمكن أن يكون إما strict أو regexp. يتم تنفيذ تطابقات التعبير العادي مقابل قيمة السمة بأكملها، لذلك إذا كنت تريد مطابقة قيمة تحتوي على abc في أي مكان بداخلها، فأنت بحاجة إلى استخدام .*abc.*. يمكن أن يحدد تجاوز أخذ العينات معايير سمات متعددة، وفي هذه الحالة يجب أن تتطابق جميعها لتجاوز أخذ العينات للمطابقة.

إذا كان أحد تجاوزات أخذ العينات مطابقًا، فسوف يتم استخدام النسبة المئوية لأخذ العينات لتحديد ما لو كان سيتم أخذ عينة من النطاق أم لا.

يتم استخدام أول تجاوز لأخذ العينات يتطابق فقط.

إذا لم تتطابق تجاوزات العينات:

  • إذا كان هذا هو النطاق الأول في التتبع، فسيتم استخدام تكوين أخذ العينات من المستوى الأعلى.
  • إذا لم يكن النطاق الأول في التتبع، فسيتم استخدام قرار أخذ العينات الأصل.

مثال: ألغي جمع القياس عن بعد للفحوصات الصحية

يمنع هذا المثال جمع بيانات تتبع الاستخدام لجميع الطلبات إلى /health-checks.

يمنع هذا المثال أيضا جمع أي امتدادات انتقال البيانات من الخادم (التبعيات) التي عادة ما يتم جمعها ضمن /health-checks.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/health-check",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

مثال: وقف جمع القياس عن بعد لاستدعاء التبعية الصاخب

يمنع هذا المثال جمع بيانات تتبع الاستخدام لجميع GET my-noisy-key مكالمات redis.

{
  "connectionString": "...",
  "sampling": {
    "overrides": [
      {
        "telemetryType": "dependency",
        "attributes": [
          {
            "key": "db.system",
            "value": "redis",
            "matchType": "strict"
          },
          {
            "key": "db.statement",
            "value": "GET my-noisy-key",
            "matchType": "strict"
          }
        ],
        "percentage": 0
      }
    ]
  }
}

مثال: قم بجمع 100٪ من القياس عن بعد لنوع طلب مهم

يجمع هذا المثال 100٪ من بيانات تتبع الاستخدام ل /login.

نظرا لأن نطاقات انتقال البيانات من الخادم (التبعيات) تحترم قرار أخذ العينات الخاص بالوالد (في غياب أي تجاوز لأخذ العينات لهذا النطاق المتلقين للمعلومات)، يتم جمعها أيضا لجميع طلبات "/تسجيل الدخول".

{
  "connectionString": "...",
  "sampling": {
    "percentage": 10
  },
  "sampling": {
    "overrides": [
      {
        "telemetryType": "request",
        "attributes": [
          {
            "key": "url.path",
            "value": "/login",
            "matchType": "strict"
          }
        ],
        "percentage": 100
      }
    ]
  }
}

سمات الامتداد المتوفرة لأخذ العينات

تستند أسماء سمات النطاق إلى الاصطلاحات الدلالية OpenTelemetry. (HTTP، المراسلة، قاعدة البيانات، RPC)

https://github.com/open-telemetry/semantic-conventions/blob/main/docs/README.md

إشعار

لمشاهدة المجموعة الدقيقة من السمات التي تم التقاطها بواسطة Application Insights Java للتطبيق الخاص بك، قم بتعيين مستوى التشخيص الذاتي لتصحيح الأخطاء، وابحث عن رسائل تصحيح الأخطاء بدءا من النص "exporting span".

إشعار

تتوفر السمات المعينة في بداية النطاق فقط لأخذ العينات، لذلك يمكن تصفية السمات مثل http.response.status_code أو مدة الطلب التي يتم التقاطها لاحقا من خلال ملحقات OpenTelemetry Java. فيما يلي نموذج ملحق يمتد لعوامل التصفية استنادا إلى مدة الطلب.

استكشاف الأخطاء وإصلاحها

إذا كنت تستخدم regexp ولم يعمل تجاوز أخذ العينات، فجرب regex .* . إذا كان أخذ العينات يعمل الآن، فهذا يعني أن لديك مشكلة مع regex الأول وقراءة وثائق regex هذه.

إذا لم يعمل مع .*، فقد تواجه مشكلة في بناء الجملة في .application-insights.json file انظر إلى سجلات Application Insights وتحقق من ملاحظة رسائل تحذير.