إصدار المخطط 2.xتوثق هذه الصفحة مخطط Helm v2.x المعتمد على المخططات الفرعية. إذا كنت لا تزال تستخدم مخطط v1.x ذي القوالب المضمّنة، فراجع تهيئة Helm (v1.x). للاطلاع على خطوات الترحيل، راجع دليل الترقية.
يغطي هذا الدليل خيارات التهيئة لعمليات نشر ClickStack باستخدام Helm. للتثبيت الأساسي، راجع دليل النشر الرئيسي باستخدام Helm.
تنظّم مخطط Helm بالإصدار v2.x القيم حسب نوع مورد Kubernetes ضمن الكتلة hyperdx::
hyperdx:
ports: # Shared port numbers (Deployment, Service, ConfigMap, Ingress)
api: 8000
app: 3000
opamp: 4320
frontendUrl: "http://localhost:3000"
config: # → clickstack-config ConfigMap (non-sensitive env vars)
APP_PORT: "3000"
HYPERDX_LOG_LEVEL: "info"
secrets: # → clickstack-secret Secret (sensitive env vars)
HYPERDX_API_KEY: "..."
CLICKHOUSE_PASSWORD: "otelcollectorpass"
CLICKHOUSE_APP_PASSWORD: "hyperdx"
MONGODB_PASSWORD: "hyperdx"
deployment: # K8s Deployment spec (image, replicas, probes, etc.)
service: # K8s Service spec (type, annotations)
ingress: # K8s Ingress spec (host, tls, annotations)
podDisruptionBudget: # K8s PDB spec
tasks: # K8s CronJob specs
تمرّ جميع متغيرات البيئة عبر موردين ذوي اسمين ثابتين، يشترك فيهما كلٌّ من نشر HyperDX و OTEL Collector عبر envFrom:
clickstack-config ConfigMap — يُعبَّأ من hyperdx.config
clickstack-secret Secret — يُعبَّأ من hyperdx.secrets
لم يعد هناك ConfigMap منفصل مخصّص لـ OTEL. ويقرأ كلٌّ من عبئي العمل من المصادر نفسها.
بعد نشر ClickStack بنجاح، اضبط مفتاح API لتمكين جمع بيانات القياس عن بُعد:
- ادخل إلى مثيل HyperDX الخاص بك عبر مورد الإدخال المُعَدّ أو نقطة نهاية الخدمة
- سجّل الدخول إلى لوحة معلومات HyperDX ثم انتقل إلى إعدادات الفريق لإنشاء مفتاح API أو استرداده
- حدّث النشر لديك باستخدام مفتاح API بإحدى الطرق التالية:
الطريقة 1: التحديث باستخدام Helm upgrade مع ملف values
أضِف مفتاح API إلى values.yaml:
hyperdx:
secrets:
HYPERDX_API_KEY: "your-api-key-here"
ثم قم بترقية النشر:
helm upgrade my-clickstack clickstack/clickstack -f values.yaml
الطريقة 2: التحديث باستخدام Helm upgrade مع الخيار —set
helm upgrade my-clickstack clickstack/clickstack \
--set hyperdx.secrets.HYPERDX_API_KEY="your-api-key-here"
أعد تشغيل الحاويات القرنية لتطبيق التغييرات
بعد تحديث مفتاح API، أعد تشغيل الحاويات القرنية لكي تعتمد التهيئة الجديدة:
kubectl rollout restart deployment my-clickstack-clickstack-app
تنشئ مخطط Helm تلقائيًا Kubernetes secret (clickstack-secret) من قيم الإعداد الخاصة بك. ولا تحتاج إلى أي إعداد إضافي لـ secret إلا إذا أردت استخدام External Secret.
للتعامل مع البيانات الحساسة مثل مفاتيح API أو بيانات اعتماد قاعدة البيانات، يوفّر مخطط بالإصدار v2.x موردًا موحّدًا باسم clickstack-secret يُعبَّأ من hyperdx.secrets.
تتضمّن المخطط قيماً افتراضية لجميع الأسرار. يمكنك تجاوزها في values.yaml:
hyperdx:
secrets:
HYPERDX_API_KEY: "your-api-key"
CLICKHOUSE_PASSWORD: "your-clickhouse-otel-password"
CLICKHOUSE_APP_PASSWORD: "your-clickhouse-app-password"
MONGODB_PASSWORD: "your-mongodb-password"
استخدام Secret خارجي في Kubernetes
في عمليات النشر في بيئة الإنتاج، عندما تريد إبقاء بيانات الاعتماد منفصلة عن قيم Helm، استخدم Secret خارجيًا في Kubernetes:
# Create your secret
kubectl create secret generic my-clickstack-secrets \
--from-literal=HYPERDX_API_KEY=my-secret-api-key \
--from-literal=CLICKHOUSE_PASSWORD=my-ch-password \
--from-literal=CLICKHOUSE_APP_PASSWORD=my-ch-app-password \
--from-literal=MONGODB_PASSWORD=my-mongo-password
ثم أشر إليه ضمن values لديك:
hyperdx:
useExistingConfigSecret: true
existingConfigSecret: "my-clickstack-secrets"
لنشر واجهة مستخدم HyperDX وواجهة برمجة التطبيقات الخاصة به عبر اسم نطاق، فعِّل الإدخال في ملف values.yaml.
hyperdx:
frontendUrl: "https://hyperdx.yourdomain.com" # Must match ingress host
ingress:
enabled: true
host: "hyperdx.yourdomain.com"
ملاحظة مهمة حول الإعداديجب أن يتطابق hyperdx.frontendUrl مع اسم مضيف مورد الإدخال وأن يتضمن البروتوكول (على سبيل المثال، https://hyperdx.yourdomain.com). ويضمن ذلك أن تعمل جميع الروابط وملفات تعريف الارتباط وعمليات إعادة التوجيه المُنشأة على النحو الصحيح.
لتأمين عملية النشر باستخدام HTTPS:
1. أنشئ Secret لـ TLS باستخدام شهادتك ومفتاحك الخاص:
kubectl create secret tls hyperdx-tls \
--cert=path/to/tls.crt \
--key=path/to/tls.key
2. فعّل TLS في إعداد مورد الدخول الخاص بك:
hyperdx:
ingress:
enabled: true
host: "hyperdx.yourdomain.com"
tls:
enabled: true
tlsSecretName: "hyperdx-tls"
للاطلاع، إليك كيف يبدو مورد الإدخال الذي أُنشئ:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: hyperdx-app-ingress
annotations:
nginx.ingress.kubernetes.io/rewrite-target: /$1
nginx.ingress.kubernetes.io/use-regex: "true"
spec:
ingressClassName: nginx
rules:
- host: hyperdx.yourdomain.com
http:
paths:
- path: /(.*)
pathType: ImplementationSpecific
backend:
service:
name: my-clickstack-clickstack-app
port:
number: 3000
tls:
- hosts:
- hyperdx.yourdomain.com
secretName: hyperdx-tls
المشكلات الشائعة في الإدخال
إعداد المسار وإعادة الكتابة:
- بالنسبة إلى Next.js وغيرها من التطبيقات أحادية الصفحة، استخدم دائمًا مسار Regex وتعليمة إعادة كتابة كما هو موضح أعلاه
- لا تستخدم
path: / فقط من دون إعادة كتابة، لأن ذلك سيؤدي إلى تعطّل تقديم الموارد الثابتة
عدم تطابق frontendUrl و ingress.host:
- إذا لم يتطابقا، فقد تواجه مشكلات في ملفات تعريف الارتباط وعمليات إعادة التوجيه وتحميل الموارد
سوء تهيئة TLS:
- تأكد من أن secret الخاص بـ TLS صالح وأنه مُشار إليه بشكل صحيح في الإدخال
- قد تمنع المتصفحات المحتوى غير الآمن إذا وصلت إلى التطبيق عبر HTTP عندما يكون TLS مفعّلًا
إصدار متحكّم إدخال:
- تتطلب بعض الميزات (مثل مسارات Regex وعمليات إعادة الكتابة) إصدارات حديثة من متحكّم nginx إدخال
- تحقّق من إصدارك باستخدام:
kubectl -n ingress-nginx get pods -l app.kubernetes.io/name=ingress-nginx -o jsonpath="{.items[0].spec.containers[0].image}"
الإدخال لـ OTEL collector
إذا كنت بحاجة إلى تعريض نقاط نهاية OTEL collector (للتتبعات والمقاييس والسجلات) عبر الإدخال، فاستخدم إعداد additionalIngresses. ويُعد ذلك مفيدًا لإرسال بيانات القياس عن بُعد من خارج العنقود أو لاستخدام نطاق مخصص للـ OTEL collector.
hyperdx:
ingress:
enabled: true
additionalIngresses:
- name: otel-collector
annotations:
nginx.ingress.kubernetes.io/ssl-redirect: "false"
nginx.ingress.kubernetes.io/force-ssl-redirect: "false"
nginx.ingress.kubernetes.io/use-regex: "true"
ingressClassName: nginx
hosts:
- host: collector.yourdomain.com
paths:
- path: /v1/(traces|metrics|logs)
pathType: Prefix
port: 4318
name: otel-collector
tls:
- hosts:
- collector.yourdomain.com
secretName: collector-tls
- ينشئ هذا مورد إدخال منفصلًا لنقاط نهاية OTel collector
- يمكنك استخدام نطاق مختلف، وتهيئة إعدادات TLS محددة، وتطبيق تعليقات توضيحية مخصصة
- تتيح لك قاعدة مسار Regex توجيه جميع إشارات OTLP (التتبعات والمقاييس والسجلات) عبر قاعدة واحدة
إذا لم تكن بحاجة إلى إتاحة OTel collector خارجيًا، فيمكنك تخطي هذا الإعداد. بالنسبة إلى معظم المستخدمين، يكفي إعداد الإدخال العام.
بدلًا من ذلك، يمكنك استخدام additionalManifests لتعريف موارد إدخال مخصصة بالكامل، مثل AWS ALB Ingress.
يُنشر OTEL Collector عبر مخطط Helm الرسمي الخاص بـ OpenTelemetry Collector بوصفه المخطط الفرعي otel-collector:. قم بتهيئته مباشرةً ضمن otel-collector: في values الخاصة بك:
otel-collector:
enabled: true
mode: deployment
replicaCount: 3
resources:
requests:
memory: "128Mi"
cpu: "100m"
limits:
memory: "256Mi"
cpu: "200m"
nodeSelector:
node-role: monitoring
tolerations:
- key: monitoring
operator: Equal
value: otel
effect: NoSchedule
تتم مشاركة متغيرات البيئة (نقطة نهاية ClickHouse، وعنوان URL لـ OpAMP، وما إلى ذلك) عبر ConfigMap الموحّد clickstack-config وSecret clickstack-secret. كما أن extraEnvsFrom في المخطط الفرعي مُهيّأ مسبقًا للقراءة من كليهما.
اطّلع على مخطط Helm الخاص بـ OpenTelemetry Collector للاطلاع على جميع قيم المخطط الفرعي المتاحة.
تتولى إدارة MongoDB مشغّل MCK عبر مورد مخصص من النوع MongoDBCommunity. ويُعرَض قسم CR spec كما هو من mongodb.spec:
mongodb:
enabled: true
spec:
members: 1
type: ReplicaSet
version: "5.0.32"
security:
authentication:
modes: ["SCRAM"]
statefulSet:
spec:
volumeClaimTemplates:
- metadata:
name: data-volume
spec:
accessModes: ["ReadWriteOnce"]
storageClassName: "your-storage-class"
resources:
requests:
storage: 10Gi
يتم تعيين كلمة مرور MongoDB في hyperdx.secrets.MONGODB_PASSWORD. راجع وثائق MCK للاطلاع على جميع حقول CRD المتاحة.
تُدار ClickHouse بواسطة ClickHouse Operator عبر الموارد المخصصة ClickHouseCluster وKeeperCluster. وتُولَّد مواصفات CR لكليهما حرفيًا من values:
clickhouse:
enabled: true
port: 8123
nativePort: 9000
prometheus:
enabled: true
port: 9363
keeper:
spec:
replicas: 1
dataVolumeClaimSpec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 5Gi
cluster:
spec:
replicas: 1
shards: 1
dataVolumeClaimSpec:
accessModes: ["ReadWriteOnce"]
resources:
requests:
storage: 10Gi
تُؤخذ بيانات اعتماد مستخدم ClickHouse من hyperdx.secrets (وليس من clickhouse.config.users كما في v1.x). راجع دليل تهيئة ClickHouse Operator للاطّلاع على جميع حقول CRD المتاحة.
استكشاف أخطاء الإدخال وإصلاحها
تحقق من مورد الإدخال:
kubectl get ingress -A
kubectl describe ingress <ingress-name>
تحقق من سجلات وحدة تحكم الإدخال:
kubectl logs -l app.kubernetes.io/name=ingress-nginx -n ingress-nginx
اختبار عناوين URL للموارد:
استخدم curl للتحقق من أن الملفات الثابتة تُقدَّم كملفات JS لا كصفحات HTML:
curl -I https://hyperdx.yourdomain.com/_next/static/chunks/main-xxxx.js
# Should return Content-Type: application/javascript
أدوات المطوّر في المتصفح:
- تحقّق من علامة التبويب Network بحثًا عن أخطاء 404 أو ملفات تُرجع HTML بدلًا من JS
- ابحث عن أخطاء مثل
Unexpected token < في وحدة التحكّم (وهذا يشير إلى إرجاع HTML بدلًا من JS)
تحقّق من إعادة كتابة المسارات:
- تأكّد من أن مورد الإدخال لا يزيل مسارات الملفات أو يعيد كتابتها بشكل غير صحيح
امسح ذاكرة التخزين المؤقت للمتصفح وCDN:
- بعد إجراء التغييرات، امسح ذاكرة التخزين المؤقت للمتصفح وأي ذاكرة تخزين مؤقت لـ CDN/الوكيل لتجنّب تحميل ملفات قديمة
يمكنك تخصيص الإعدادات باستخدام خيارات --set:
helm install my-clickstack clickstack/clickstack --set key=value
بدلًا من ذلك، أنشئ ملف values.yaml مخصّصًا. لاسترجاع القيم الافتراضية:
helm show values clickstack/clickstack > values.yaml
طبِّق القيم المخصّصة لديك:
helm install my-clickstack clickstack/clickstack -f values.yaml