إرسال بيانات Prometheus إلى Azure Monitor باستخدام مصادقة هوية حمل عمل Microsoft Entra

توضح هذه المقالة كيفية إعداد الكتابة عن بعد لإرسال البيانات من مجموعة Prometheus المدارة من Azure Monitor باستخدام مصادقة هوية حمل عمل Microsoft Entra.

المتطلبات الأساسية

  • مطلوب إصدارات Prometheus أكبر من الإصدار 2.48 لمصادقة تطبيق Microsoft Entra ID.
  • Prometheus قيد التشغيل في نظام المجموعة. تفترض هذه المقالة أنه تم إعداد مجموعة Prometheus باستخدام مكدس kube-prometheus، ولكن يمكنك إعداد Prometheus باستخدام أساليب أخرى.

إعداد الكتابة عن بعد باستخدام هوية حمل عمل Microsoft Entra

تتضمن عملية إعداد الكتابة عن بعد في Prometheus باستخدام مصادقة هوية حمل عمل Microsoft Entra إكمال المهام التالية:

  1. قم بتمكين OpenID Connect ولاحظ عنوان URL المصدر.
  2. إعداد إخطار على الويب الخاص بالدخول المتحور.
  3. إعداد هوية حمل العمل.
  4. إنشاء تطبيق Microsoft Entra أو الهوية المدارة المعينة من قبل المستخدم ومنح الأذونات.
  5. تعيين دور Monitoring Metrics Publisher في قاعدة تجميع بيانات مساحة العمل إلى التطبيق.
  6. إنشاء أو تحديث حساب خدمة Kubernetes الخاص بك Prometheus pod.
  7. إنشاء بيانات اعتماد الهوية الموحدة بين الهوية ومصدر حساب الخدمة والموضوع.
  8. نشر حاوية sidecar لإعداد الكتابة عن بعد.

يتم وصف المهام في الأقسام التالية.

تمكين OpenID Connect والاستعلام عن المصدر

لتمكين OpenID Connect (OIDC) على نظام مجموعة AKS، اتبع الإرشادات الواردة في إنشاء موفر OpenID Connect على AKS.

بمجرد التمكين، قم بتدوين SERVICE_ACCOUNT_ISSUER الذي هو في الأساس عنوان URL لمصدر OIDC. للحصول على عنوان URL لمصدر OIDC، قم بتشغيل الأمر az aks show . استبدل القيم الافتراضية لاسم نظام المجموعة واسم مجموعة الموارد.

az aks show --name myAKScluster --resource-group myResourceGroup --query "oidcIssuerProfile.issuerUrl" -o tsv

بشكل افتراضي، يتم تعيين المصدر لاستخدام عنوان URL https://{region}.oic.prod-aks.azure.comالأساسي ، حيث تطابق قيمة الموقع {region} الذي يتم نشر نظام مجموعة AKS فيه.

بالنسبة للمجموعات المدارة الأخرى (Amazon Elastic Kubernetes Service وGoogle Kubernetes Engine)، راجع المجموعات المدارة - هوية حمل عمل Microsoft Entra. بالنسبة للمجموعات المدارة ذاتيا، راجع أنظمة المجموعات المدارة ذاتيا - هوية حمل عمل Microsoft Entra.

إعداد إخطار على الويب الخاص بالدخول المتحور

قم بإعداد إخطار على الويب الخاص بالدخول المتغير للحفاظ على بيانات الاعتماد الموحدة محدثة. راجع تحور إخطار على الويب للقبول - هوية حمل عمل Microsoft Entra لإعداده.

إعداد هوية حمل العمل

لإعداد هوية حمل العمل، قم بتصدير متغيرات البيئة التالية:

# [OPTIONAL] Set this if you're using a Microsoft Entra application
export APPLICATION_NAME="<your application name>"
    
# [OPTIONAL] Set this only if you're using a user-assigned managed identity
export USER_ASSIGNED_IDENTITY_NAME="<your user-assigned managed identity name>"
    
# Environment variables for the Kubernetes service account and federated identity credential
export SERVICE_ACCOUNT_NAMESPACE="<namespace where Prometheus pod is running>"
export SERVICE_ACCOUNT_NAME="<name of service account associated with Prometheus pod. See below for more details>"
export SERVICE_ACCOUNT_ISSUER="<your service account (or OIDC) issuer URL>"

بالنسبة SERVICE_ACCOUNT_NAMEإلى ، تحقق لمعرفة ما إذا كان حساب خدمة (منفصل عن حساب الخدمة الافتراضي ) مقترنا بالفعل بجراب Prometheus. ابحث عن قيمة serviceaccountName أو serviceAccount (مهملة) في spec جراب Prometheus الخاص بك. استخدم هذه القيمة إذا كانت موجودة. للعثور على حساب الخدمة المقترن بجراب Prometheus، قم بتشغيل الأمر kubectl أدناه:

kubectl get pods/<Promethuespodname> -o yaml

serviceAccount إذا serviceaccountName لم يكن موجودا، أدخل اسم حساب الخدمة الذي تريد إقرانه بجراب Prometheus الخاص بك.

إنشاء تطبيق Microsoft Entra أو الهوية المدارة المعينة من قبل المستخدم ومنح الأذونات

إنشاء تطبيق Microsoft Entra أو هوية مدارة يعينها المستخدم ومنح الإذن لنشر المقاييس إلى مساحة عمل Azure Monitor:

# create a Microsoft Entra application
az ad sp create-for-rbac --name "${APPLICATION_NAME}"

# create a user-assigned managed identity if you use a user-assigned managed identity for this article
az identity create --name "${USER_ASSIGNED_IDENTITY_NAME}" --resource-group "${RESOURCE_GROUP}"

تعيين دور Monitoring Metrics Publisher في قاعدة تجميع بيانات مساحة العمل للتطبيق أو الهوية المدارة

للحصول على معلومات حول تعيين الدور، راجع تعيين دور Monitoring Metrics Publisher على قاعدة تجميع بيانات مساحة العمل إلى الهوية المدارة.

إنشاء أو تحديث حساب خدمة Kubernetes الخاص بك Prometheus pod

غالبا ما يتم إنشاء حساب خدمة Kubernetes وربطه بالجراب الذي يقوم بتشغيل حاوية Prometheus. إذا كنت تستخدم مكدس kube-prometheus، فإن التعليمات البرمجية تنشئ تلقائيا حساب خدمة prometheus-kube-prometheus-prometheus.

إذا لم يكن هناك حساب خدمة Kubernetes باستثناء حساب الخدمة الافتراضي مقترن ب Prometheus، قم بإنشاء حساب خدمة جديد خصيصا للحجيرة التي تقوم بتشغيل Prometheus.

لإنشاء حساب الخدمة، قم بتشغيل الأمر kubectl التالي:

cat <<EOF | kubectl apply -f -
apiVersion: v1
kind: service account
metadata:
  annotations:
    azure.workload.identity/client-id: ${APPLICATION_CLIENT_ID:-$USER_ASSIGNED_IDENTITY_CLIENT_ID}
  name: ${SERVICE_ACCOUNT_NAME}
  namespace: ${SERVICE_ACCOUNT_NAMESPACE}
EOF

إذا كان حساب خدمة Kubernetes غير حساب الخدمة الافتراضي مقترنا بالجراب الخاص بك، أضف التعليق التوضيحي التالي إلى حساب الخدمة الخاص بك:

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/client-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_CLIENT_ID}" –overwrite

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

kubectl annotate sa ${SERVICE_ACCOUNT_NAME} -n ${SERVICE_ACCOUNT_NAMESPACE} azure.workload.identity/tenant-id="${APPLICATION_OR_USER_ASSIGNED_IDENTITY_TENANT_ID}" –overwrite

إنشاء بيانات اعتماد الهوية الموحدة بين الهوية ومصدر حساب الخدمة والموضوع

إنشاء بيانات اعتماد موحدة باستخدام Azure CLI.

الهوية المُدارة التي يعيّنها المُستخدم

az identity federated-credential create \
   --name "kubernetes-federated-credential" \
   --identity-name "${USER_ASSIGNED_IDENTITY_NAME}" \
   --resource-group "${RESOURCE_GROUP}" \
   --issuer "${SERVICE_ACCOUNT_ISSUER}" \
   --subject "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}"

تطبيق Microsoft Entra

# Get the ObjectID of the Microsoft Entra app.

export APPLICATION_OBJECT_ID="$(az ad app show --id ${APPLICATION_CLIENT_ID} --query id -otsv)"

# Add a federated identity credential.

cat <<EOF > params.json
{
  "name": "kubernetes-federated-credential",
  "issuer": "${SERVICE_ACCOUNT_ISSUER}",
  "subject": "system:serviceaccount:${SERVICE_ACCOUNT_NAMESPACE}:${SERVICE_ACCOUNT_NAME}",
  "description": "Kubernetes service account federated credential",
  "audiences": [
    "api://AzureADTokenExchange"
  ]
}
EOF

az ad app federated-credential create --id ${APPLICATION_OBJECT_ID} --parameters @params.json

نشر حاوية sidecar لإعداد الكتابة عن بعد

هام

يجب أن تحتوي جراب Prometheus على التسمية التالية: azure.workload.identity/use: "true"

تتطلب حاوية sidecar للكتابة عن بعد قيم البيئة التالية:

  • INGESTION_URL: نقطة نهاية استيعاب المقاييس المعروضة في صفحة نظرة عامة لمساحة عمل Azure Monitor
  • LISTENING_PORT: 8081 (أي منفذ مدعوم)
  • IDENTITY_TYPE: workloadIdentity
  1. انسخ YAML التالي واحفظه في ملف. يستخدم YAML المنفذ 8081 كمنفذ الاستماع. إذا كنت تستخدم منفذا مختلفا، فعدل هذه القيمة في YAML.

    prometheus:
      prometheusSpec:
        externalLabels:
              cluster: <AKS-CLUSTER-NAME>
        podMetadata:
            labels:
                azure.workload.identity/use: "true"
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write    
        remoteWrite:
        - url: 'http://localhost:8081/api/v1/write'
    
        containers:
        - name: prom-remotewrite
          image: <CONTAINER-IMAGE-VERSION>
          imagePullPolicy: Always
          ports:
            - name: rw-port
              containerPort: 8081
          env:
          - name: INGESTION_URL
            value: <INGESTION_URL>
          - name: LISTENING_PORT
            value: '8081'
          - name: IDENTITY_TYPE
            value: workloadIdentity
    
  2. استبدل القيم التالية في YAML:

    قيمة ‏‏الوصف
    <CLUSTER-NAME> اسم نظام مجموعة AKS الخاص بك.
    <CONTAINER-IMAGE-VERSION> mcr.microsoft.com/azuremonitor/containerinsights/ciprod/prometheus-remote-write/images:prom-remotewrite-20240617.1
    إصدار صورة حاوية الكتابة عن بعد.
    <INGESTION-URL> قيمة نقطة نهاية استيعاب المقاييس من صفحة نظرة عامة لمساحة عمل Azure Monitor.
  3. استخدم Helm لتطبيق ملف YAML وتحديث تكوين Prometheus الخاص بك:

    # set a context to your cluster 
    az aks get-credentials -g <aks-rg-name> -n <aks-cluster-name> 
    
    # use Helm to update your remote write config 
    helm upgrade -f <YAML-FILENAME>.yml prometheus prometheus-community/kube-prometheus-stack -namespace <namespace where Prometheus pod resides> 
    

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

للحصول على معلومات التحقق واستكشاف الأخطاء وإصلاحها، راجع استكشاف أخطاء الكتابة عن بعد وإصلاحها والخدمة المدارة من Azure Monitor للكتابة عن بعد في Prometheus.

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