تكامل Kubernetes مع ClickStack - حزمة ClickHouse للرصد
يستخدم ClickStack مكوّن OTel collector من OpenTelemetry لجمع السجلات والمقاييس وأحداث Kubernetes من مجموعات Kubernetes وإعادة توجيهها إلى ClickStack. نحن ندعم تنسيق سجلات OTel الأصلي، ولا نحتاج إلى أي تهيئة إضافية خاصة بأي مورّد.يغطي هذا الدليل ما يلي:
السجلات
مقاييس البنية التحتية
لإرسال مقاييس على مستوى التطبيق أو APM/traces، ستحتاج أيضًا إلى إضافة تكامل اللغة المقابل إلى تطبيقك.
لجمع السجلات والمقاييس من كل عقدة ومن العنقود نفسه، سنحتاج إلى نشر جامعَي OpenTelemetry منفصلين. سيُنشر أحدهما كـ DaemonSet لجمع السجلات والمقاييس من كل عقدة، وسيُنشر الآخر كعملية نشر لجمع السجلات والمقاييس من العنقود نفسه.
سيجمع الـ DaemonSet السجلات والمقاييس من كل عقدة في العنقود، لكنه لن يجمع أحداث Kubernetes أو المقاييس على مستوى العنقود بالكامل.نزّل ملف البيان الخاص بـ DaemonSet:
# deployment.yamlmode: deploymentimage: repository: otel/opentelemetry-collector-contrib tag: 0.123.0# نحتاج إلى جامع واحد فقط من هذه الجوامع، لأن أي عدد أكبر سيؤدي إلى إنتاج بيانات مكررةreplicaCount: 1presets: kubernetesAttributes: enabled: true # عند التمكين، سيستخرج المعالج جميع labels الخاصة بـ pod المرتبط ويضيفها كسمات resource. # سيكون الاسم الدقيق لـ label هو المفتاح. extractAllPodLabels: true # عند التمكين، سيستخرج المعالج جميع annotations الخاصة بـ pod المرتبط ويضيفها كسمات resource. # سيكون الاسم الدقيق لـ annotation هو المفتاح. extractAllPodAnnotations: true # يهيّئ الـ collector لجمع أحداث Kubernetes. # يضيف k8sobject receiver إلى logs pipeline ويجمع أحداث Kubernetes افتراضيًا. # مزيد من المعلومات: https://opentelemetry.io/docs/kubernetes/collector/components/#kubernetes-objects-receiver kubernetesEvents: enabled: true # يهيّئ Kubernetes Cluster Receiver لجمع metrics على مستوى cluster. # يضيف k8s_cluster receiver إلى metrics pipeline ويضيف القواعد اللازمة إلى ClusterRole. # مزيد من المعلومات: https://opentelemetry.io/docs/kubernetes/collector/components/#kubernetes-cluster-receiver clusterMetrics: enabled: trueextraEnvs: - name: YOUR_OTEL_COLLECTOR_ENDPOINT valueFrom: configMapKeyRef: name: otel-config-vars key: YOUR_OTEL_COLLECTOR_ENDPOINTconfig: exporters: otlphttp: endpoint: "${env:YOUR_OTEL_COLLECTOR_ENDPOINT}" compression: gzip service: pipelines: logs: exporters: - otlphttp metrics: exporters: - otlphttp
k8s_deployment.yaml
# deployment.yamlmode: deploymentimage: repository: otel/opentelemetry-collector-contrib tag: 0.123.0# نحتاج إلى جامع واحد فقط من هذه الجوامع، لأن أي عدد أكبر سيؤدي إلى إنتاج بيانات مكررةreplicaCount: 1presets: kubernetesAttributes: enabled: true # عند التمكين، سيستخرج المعالج جميع labels الخاصة بـ pod المرتبط ويضيفها كسمات resource. # سيكون الاسم الدقيق لـ label هو المفتاح. extractAllPodLabels: true # عند التمكين، سيستخرج المعالج جميع annotations الخاصة بـ pod المرتبط ويضيفها كسمات resource. # سيكون الاسم الدقيق لـ annotation هو المفتاح. extractAllPodAnnotations: true # يهيّئ الـ collector لجمع أحداث Kubernetes. # يضيف k8sobject receiver إلى logs pipeline ويجمع أحداث Kubernetes افتراضيًا. # مزيد من المعلومات: https://opentelemetry.io/docs/kubernetes/collector/components/#kubernetes-objects-receiver kubernetesEvents: enabled: true # يهيّئ Kubernetes Cluster Receiver لجمع metrics على مستوى cluster. # يضيف k8s_cluster receiver إلى metrics pipeline ويضيف القواعد اللازمة إلى ClusterRole. # مزيد من المعلومات: https://opentelemetry.io/docs/kubernetes/collector/components/#kubernetes-cluster-receiver clusterMetrics: enabled: trueextraEnvs: - name: HYPERDX_API_KEY valueFrom: secretKeyRef: name: hyperdx-secret key: HYPERDX_API_KEY optional: true - name: YOUR_OTEL_COLLECTOR_ENDPOINT valueFrom: configMapKeyRef: name: otel-config-vars key: YOUR_OTEL_COLLECTOR_ENDPOINTconfig: exporters: otlphttp: endpoint: "${env:YOUR_OTEL_COLLECTOR_ENDPOINT}" compression: gzip headers: authorization: "${env:HYPERDX_API_KEY}" service: pipelines: logs: exporters: - otlphttp metrics: exporters: - otlphttp
لربط السجلات والمقاييس والتتبعات على مستوى التطبيق ببيانات Kubernetes الوصفية
(مثل اسم الكبسولة، ومساحة الأسماء، وما إلى ذلك)، ستحتاج إلى تمرير بيانات Kubernetes الوصفية
إلى تطبيقك باستخدام متغير البيئة OTEL_RESOURCE_ATTRIBUTES.فيما يلي مثال على كائن نشر يمرّر بيانات Kubernetes الوصفية إلى
التطبيق باستخدام متغيرات البيئة:
# my_app_deployment.yamlapiVersion: apps/v1kind: Deploymentmetadata: name: app-deploymentspec: replicas: 1 selector: matchLabels: app: app template: metadata: labels: app: app # Combined with the Kubernetes Attribute Processor, this will ensure # the pod's logs and metrics will be associated with a service name. service.name: <MY_APP_NAME> spec: containers: - name: app-container image: my-image env: # ... other environment variables # Collect K8s metadata from the downward API to forward to the app - name: POD_NAME valueFrom: fieldRef: fieldPath: metadata.name - name: POD_UID valueFrom: fieldRef: fieldPath: metadata.uid - name: POD_NAMESPACE valueFrom: fieldRef: fieldPath: metadata.namespace - name: NODE_NAME valueFrom: fieldRef: fieldPath: spec.nodeName - name: DEPLOYMENT_NAME valueFrom: fieldRef: fieldPath: metadata.labels['deployment'] # Forward the K8s metadata to the app via OTEL_RESOURCE_ATTRIBUTES - name: OTEL_RESOURCE_ATTRIBUTES value: k8s.pod.name=$(POD_NAME),k8s.pod.uid=$(POD_UID),k8s.namespace.name=$(POD_NAMESPACE),k8s.node.name=$(NODE_NAME),k8s.deployment.name=$(DEPLOYMENT_NAME)