Milvus
Zilliz
الصفحة الرئيسية
  • دليل الإدارة
  • Home
  • Docs
  • دليل الإدارة

  • المراقبة والتنبيهات والسجلات

  • السجلات

  • تكوين جرافانا لوكي

تكوين Grafana Loki

يوفر هذا الدليل إرشادات حول كيفية تكوين Loki لتجميع السجلات و Grafana للاستعلام عن السجلات وعرضها لمجموعة Milvus.

في هذا الدليل، سوف تتعلم كيفية:

  • نشر Loki و Promtail على مجموعة Milvus باستخدام Helm.
  • تكوين تخزين الكائنات ل Loki.
  • الاستعلام عن السجلات باستخدام Grafana.

كمرجع، سيتم إهمال برومتيل، لذا سنقدم لك سبيكة، والتي تم اقتراحها رسميًا من قبل مختبرات Grafana باعتبارها الوكيل الجديد لجمع سجلات Kubernetes وإعادة توجيهها إلى Loki.

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

نشر لوكي

لوكي هو نظام تجميع سجلات مستوحى من بروميثيوس. انشر Loki باستخدام Helm لجمع السجلات من مجموعة ميلفوس العنقودية.

1. إضافة مستودع المخططات البيانية لـ Grafana's Helm

أضف مستودع مخططات Grafana إلى Helm وقم بتحديثه:

helm repo add grafana https://grafana.github.io/helm-charts
helm repo update

2. تكوين تخزين الكائنات لـ Loki

اختر أحد خيارات التخزين التالية وأنشئ ملف تكوين loki.yaml:

  • الخيار 1: استخدام MinIO للتخزين

    loki:
      commonConfig:
        replication_factor: 1
      auth_enabled: false
    
    minio:
      enabled: true
    
  • الخيار 2: استخدام AWS S3 للتخزين

    في المثال التالي، استبدل <accessKey> و <keyId> بمفتاح ومعرف الوصول إلى S3 الخاص بك، و s3.endpoint بنقطة نهاية S3، و s3.region بمنطقة S3.

    loki:
      commonConfig:
        replication_factor: 1
      auth_enabled: false
      storage:
        bucketNames:
          chunks: loki-chunks
          ruler: loki-ruler
          admin: loki-admin
        type: 's3'
        s3:
          endpoint: s3.us-west-2.amazonaws.com
          region: us-west-2
          secretAccessKey: <accessKey>
          accessKeyId: <keyId>
    

3. تثبيت Loki

قم بتشغيل الأوامر التالية لتثبيت Loki:

kubectl create ns loki
helm install --values loki.yaml loki grafana/loki -n loki

نشر السبيكة

سنعرض لك تكوين السبيكة.

1. إنشاء تكوين السبيكة

سوف نستخدم alloy.yaml التالي لجمع سجلات جميع كبسولات Kubernetes وإرسالها إلى Loki عبر loki-gate:

alloy:
  enableReporting: false
  resources: {}
  configMap:
    create: true
    content: |-
      loki.write "default" {
        endpoint {
          url = "http://loki-gateway/loki/api/v1/push"
        }
      }

      discovery.kubernetes "pod" {
        role = "pod"
      }

      loki.source.kubernetes "pod_logs" {
        targets    = discovery.relabel.pod_logs.output
        forward_to = [loki.write.default.receiver]
      }

      // Rewrite the label set to make log query easier
      discovery.relabel "pod_logs" {
        targets = discovery.kubernetes.pod.targets
        rule {
          source_labels = ["__meta_kubernetes_namespace"]
          action = "replace"
          target_label = "namespace"
        }

        // "pod" <- "__meta_kubernetes_pod_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_name"]
          action = "replace"
          target_label = "pod"
        }

        // "container" <- "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "container"
        }

        // "app" <- "__meta_kubernetes_pod_label_app_kubernetes_io_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name"]
          action = "replace"
          target_label = "app"
        }

        // "job" <- "__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_namespace", "__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "job"
          separator = "/"
          replacement = "$1"
        }

        // L"__path__" <- "__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"
        rule {
          source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
          action = "replace"
          target_label = "__path__"
          separator = "/"
          replacement = "/var/log/pods/*$1/*.log"
        }

        // "container_runtime" <- "__meta_kubernetes_pod_container_id"
        rule {
          source_labels = ["__meta_kubernetes_pod_container_id"]
          action = "replace"
          target_label = "container_runtime"
          regex = "^(\\S+):\\/\\/.+$"
          replacement = "$1"
        }
      }

2. تثبيت السبيكة

helm install  --values promtail.yaml promtail grafana/promtail -n loki

الاستعلام عن السجلات باستخدام Grafana

انشر Grafana وقم بتكوينه للاتصال بـ Loki للاستعلام عن السجلات.

1. نشر غرافانا

قم بتثبيت Grafana باستخدام الأوامر التالية:

kubectl create ns monitoring
helm install my-grafana grafana/grafana --namespace monitoring

قبل أن تتمكن من الوصول إلى جرافانا، تحتاج إلى استرداد كلمة المرور admin:

kubectl get secret --namespace monitoring my-grafana -o jsonpath="{.data.admin-password}" | base64 --decode ; echo

ثم، قم بإعادة توجيه منفذ Grafana إلى جهازك المحلي:

export POD_NAME=$(kubectl get pods --namespace monitoring -l "app.kubernetes.io/name=grafana,app.kubernetes.io/instance=my-grafana" -o jsonpath="{.items[0].metadata.name}")
kubectl --namespace monitoring port-forward $POD_NAME 3000

2. إضافة لوكي كمصدر بيانات في جرافانا

بمجرد تشغيل Grafana، تحتاج إلى إضافة Loki كمصدر بيانات للاستعلام عن السجلات.

  1. افتح متصفح ويب وانتقل إلى 127.0.0.1:3000. قم بتسجيل الدخول باستخدام اسم المستخدم admin وكلمة المرور التي تم الحصول عليها مسبقًا.
  2. في القائمة اليمنى، اختر اتصالات > إضافة اتصال جديد.
  3. في الصفحة التي تظهر، اختر Loki كنوع مصدر البيانات. يمكنك إدخال لوكي في شريط البحث للعثور على مصدر البيانات.
  4. في إعدادات مصدر بيانات Loki، حدد الاسم وعنوان URL، ثم انقر فوق حفظ واختبار.

DataSource مصدر البيانات

3. الاستعلام عن سجلات ميلفوس

بعد إضافة Loki كمصدر للبيانات، استعلم عن سجلات ميلفوس في غرافانا:

  1. في قائمة الجانب الأيسر، انقر فوق استكشاف.
  2. في الزاوية العلوية اليسرى من الصفحة، اختر مصدر بيانات لوكي.
  3. استخدم متصفح التسمية لتحديد التسميات والاستعلام عن السجلات.

Query استعلام