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

توضح هذه المقالة كيفية إعداد الكتابة عن بعد لإرسال البيانات من خادم Prometheus المدار ذاتيا يعمل في نظام مجموعة Azure Kubernetes Service (AKS) أو مجموعة Kubernetes الممكنة في Azure Arc باستخدام مصادقة Microsoft Entra وحاوية سيارة جانبية يوفرها Azure Monitor. لاحظ أنه يمكنك أيضا تكوين الكتابة عن بعد مباشرة في تكوين Prometheus لنفس الشيء.

إشعار

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

تكوينات نظام المجموعة

تنطبق هذه المقالة على تكوينات نظام المجموعة التالية:

  • نظام مجموعة Azure Kubernetes Service
  • أنظمة مجموعة Kubernetes المُمكّنة في Azure Arc
  • نظام مجموعة Kubernetes قيد التشغيل في سحابة مختلفة أو محلية

إشعار

بالنسبة لمجموعة AKS أو مجموعة Kubernetes الممكنة في Azure Arc، نوصي باستخدام مصادقة الهوية المدارة. لمزيد من المعلومات، راجع خدمة Azure Monitor المدارة للكتابة عن بعد ل Prometheus للهوية المدارة.

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

الإصدارات المدعومة

  • مطلوب إصدارات Prometheus أكبر من الإصدار 2.48 لمصادقة تطبيق Microsoft Entra ID.

مساحة عمل Azure Monitor

تتناول هذه المقالة إرسال مقاييس Prometheus إلى مساحة عمل Azure Monitor. لإنشاء مساحة عمل Azure monitor، راجع إدارة مساحة عمل Azure Monitor.

الأذونات

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

إعداد تطبيق لمعرف Microsoft Entra

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

  1. تسجيل تطبيق باستخدام معرف Microsoft Entra.
  2. احصل على معرف العميل لتطبيق Microsoft Entra.
  3. تعيين دور Monitoring Metrics Publisher في قاعدة تجميع بيانات مساحة العمل إلى التطبيق.
  4. إنشاء مخزن مفاتيح Azure وإنشاء شهادة.
  5. إضافة شهادة إلى تطبيق Microsoft Entra.
  6. أضف برنامج تشغيل CSI والتخزين لنظام المجموعة.
  7. نشر حاوية sidecar لإعداد الكتابة عن بعد.

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

تسجيل تطبيق باستخدام معرف Microsoft Entra

أكمل الخطوات لتسجيل تطبيق باستخدام معرف Microsoft Entra وإنشاء كيان خدمة.

الحصول على معرف العميل لتطبيق Microsoft Entra

  1. في مدخل Microsoft Azure، انتقل إلى قائمة معرف Microsoft Entra وحدد تسجيلات التطبيق.
  2. في قائمة التطبيقات، انسخ قيمة معرف التطبيق (العميل) للتطبيق المسجل.

لقطة شاشة تعرض التطبيق أو معرف العميل لتطبيق Microsoft Entra.

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

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

  1. في قائمة الموارد لمساحة عمل Azure Monitor، حدد Overview. بالنسبة لقاعدة جمع البيانات، حدد الارتباط.

    لقطة شاشة تعرض قاعدة جمع البيانات المستخدمة من قبل مساحة عمل Azure Monitor.

  2. في قائمة الموارد لقاعدة جمع البيانات، حدد Access control (IAM).

  3. حدد Add، ثم حدد Add role assignment.

    لقطة شاشة تعرض إضافة تعيين دور على صفحات التحكم في الوصول.

  4. حدد دور Monitoring Metrics Publisher، ثم حدد Next.

    لقطة شاشة تعرض قائمة بتعيينات الأدوار.

  5. حدد المستخدم أو المجموعة أو كيان الخدمة، ثم اختر تحديد الأعضاء. حدد التطبيق الذي قمت بإنشائه، ثم اختر تحديد.

    لقطة شاشة توضح تحديد التطبيق.

  6. لإكمال تعيين الدور، حدد Review + assign.

إنشاء مخزن مفاتيح Azure وإنشاء شهادة

  1. إذا لم يكن لديك مخزن مفاتيح Azure بالفعل، فبادر بإنشاء مخزن.
  2. إنشاء شهادة باستخدام الإرشادات الواردة في إضافة شهادة إلى Key Vault.
  3. قم بتنزيل الشهادة بتنسيق CER باستخدام الإرشادات الموجودة في تصدير شهادة من Key Vault.

إضافة شهادة إلى تطبيق Microsoft Entra

  1. في قائمة الموارد لتطبيق Microsoft Entra، حدد الشهادات والأسرار.

  2. في علامة التبويب Certificates ، حدد Upload certificate وحدد الشهادة التي قمت بتنزيلها.

    لقطة شاشة تعرض تحميل شهادة لتطبيق Microsoft Entra.

تحذير

الشهادات لها تاريخ انتهاء صلاحية. تقع على عاتق المستخدم مسؤولية الحفاظ على صلاحية الشهادات.

إضافة برنامج تشغيل CSI والتخزين لنظام المجموعة

إشعار

تكوين برنامج تشغيل Azure Key Vault CSI هو واحد فقط من الطرق للحصول على شهادة مثبتة على جراب. تحتاج حاوية الكتابة عن بعد إلى مسار محلي إلى شهادة في الجراب فقط للقيمة <AZURE_CLIENT_CERTIFICATE_PATH> في الخطوة نشر حاوية sidecar لإعداد الكتابة عن بعد.

هذه الخطوة مطلوبة فقط إذا لم تقم بتشغيل موفر Azure Key Vault لبرنامج تشغيل CSI لمخزن الأسرار عند إنشاء نظام المجموعة الخاص بك.

  1. لتشغيل موفر Azure Key Vault لبرنامج تشغيل CSI لمخزن الأسرار لنظام مجموعتك، قم بتشغيل أمر Azure CLI التالي:

    az aks enable-addons --addons azure-keyvault-secrets-provider --name <aks-cluster-name> --resource-group <resource-group-name>
    
  2. لمنح الهوية حق الوصول إلى خزنة المفاتيح، قم بتشغيل هذه الأوامر:

    # show client id of the managed identity of the cluster
    az aks show -g <resource-group> -n <cluster-name> --query addonProfiles.azureKeyvaultSecretsProvider.identity.clientId -o tsv
    
    # set policy to access keys in your key vault
    az keyvault set-policy -n <keyvault-name> --key-permissions get --spn <identity-client-id>
    
    # set policy to access secrets in your key vault
    az keyvault set-policy -n <keyvault-name> --secret-permissions get --spn <identity-client-id>
    
    # set policy to access certs in your key vault
    az keyvault set-policy -n <keyvault-name> --certificate-permissions get --spn <identity-client-id>
    
  3. قم بإنشاء SecretProviderClass عن طريق حفظ YAML التالي في ملف يسمى secretproviderclass.yml. استبدل قيم userAssignedIdentityIDkeyvaultNametenantIdالكائنات و لاستردادها من مخزن المفاتيح الخاص بك. للحصول على معلومات حول القيم التي يجب استخدامها، راجع توفير هوية للوصول إلى موفر Azure Key Vault لبرنامج تشغيل CSI لمخزن الأسرار.

    # This is a SecretProviderClass example using user-assigned identity to access your key vault
    apiVersion: secrets-store.csi.x-k8s.io/v1
    kind: SecretProviderClass
    metadata:
      name: azure-kvname-user-msi
    spec:
      provider: azure
      parameters:
        usePodIdentity: "false"
        useVMManagedIdentity: "true"          # Set to true for using managed identity
        userAssignedIdentityID: <client-id>   # Set the client ID of the user-assigned managed identity to use
        keyvaultName: <key-vault-name>        # Set to the name of your key vault
        cloudName: ""                         # [OPTIONAL for Azure] if not provided, the Azure environment defaults to AzurePublicCloud
        objects:  |
          array:
            - |
              objectName: <name-of-cert>
              objectType: secret              # object types: secret, key, or cert
              objectFormat: pfx
              objectEncoding: base64
              objectVersion: ""
        tenantId: <tenant-id>                 # The tenant ID of the key vault
    
  4. قم بالتطبيق SecretProviderClass عن طريق تشغيل الأمر التالي على نظام المجموعة:

    kubectl apply -f secretproviderclass.yml
    

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

  1. انسخ YAML التالي واحفظه في ملف. يستخدم YAML المنفذ 8081 كمنفذ الاستماع. إذا كنت تستخدم منفذا مختلفا، فعدل هذه القيمة في YAML.

    prometheus:
      prometheusSpec:
        externalLabels:
          cluster: <CLUSTER-NAME>  
    
        ##	Azure Managed Prometheus currently exports some default mixins in Grafana.  
        ##  These mixins are compatible with data scraped by Azure Monitor agent on your 
        ##  Azure Kubernetes Service cluster. These mixins aren't compatible with Prometheus 
        ##  metrics scraped by the Kube Prometheus stack. 
        ##  To make these mixins compatible, uncomment the remote write relabel configuration below:
        ##	writeRelabelConfigs:
        ##	  - sourceLabels: [metrics_path]
        ##	    regex: /metrics/cadvisor
        ##	    targetLabel: job
        ##	    replacement: cadvisor
        ##	    action: replace
        ##	  - sourceLabels: [job]
        ##	    regex: 'node-exporter'
        ##	    targetLabel: job
        ##	    replacement: node
        ##	    action: replace  
        ## https://prometheus.io/docs/prometheus/latest/configuration/configuration/#remote_write
        remoteWrite:
          - url: 'http://localhost:8081/api/v1/write'
        
        # Additional volumes on the output StatefulSet definition.
        # Required only for Microsoft Entra ID based auth
        volumes:
          - name: secrets-store-inline
            csi:
              driver: secrets-store.csi.k8s.io
              readOnly: true
              volumeAttributes:
                secretProviderClass: azure-kvname-user-msi
        containers:
          - name: prom-remotewrite
            image: <CONTAINER-IMAGE-VERSION>
            imagePullPolicy: Always
            # Required only for Microsoft Entra ID based auth
            volumeMounts:
              - name: secrets-store-inline
                mountPath: /mnt/secrets-store
                readOnly: true
            ports:
              - name: rw-port
                containerPort: 8081
            livenessProbe:
              httpGet:
                path: /health
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            readinessProbe:
              httpGet:
                path: /ready
                port: rw-port
                initialDelaySeconds: 10
                timeoutSeconds: 10
            env:
              - name: INGESTION_URL
                value: '<INGESTION_URL>'
              - name: LISTENING_PORT
                value: '8081'
              - name: IDENTITY_TYPE
                value: aadApplication
              - name: AZURE_CLIENT_ID
                value: '<APP-REGISTRATION-CLIENT-ID>'
              - name: AZURE_TENANT_ID
                value: '<TENANT-ID>'
              - name: AZURE_CLIENT_CERTIFICATE_PATH
                value: /mnt/secrets-store/<CERT-NAME>
              - name: CLUSTER
                value: '<CLUSTER-NAME>'
    
  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.
    <APP-REGISTRATION -CLIENT-ID> معرف العميل للتطبيق الخاص بك.
    <TENANT-ID> معرف المستأجر لتطبيق Microsoft Entra.
    <CERT-NAME> اسم الشهادة.
    <CLUSTER-NAME> اسم نظام المجموعة الذي يعمل عليه Prometheus.
  3. افتح Azure Cloud Shell وحمل ملف YAML.

  4. استخدم Helm لتطبيق ملف YAML وتحديث تكوين Prometheus الخاص بك:

    # set the 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.

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