> ## Documentation Index
> Fetch the complete documentation index at: https://docs.befailproof.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Single pod deployment

title: "نشر في pod واحد: مجمِّع البيانات + Sidecar التطبيق على EKS"
description: "توثيق نشر AgentEye في pod واحد: مجمِّع البيانات + Sidecar التطبيق على EKS."
-----------------------------------------------------------------------------------------

قم بتشغيل تطبيقك ومجمِّع البيانات AgentEye **في نفس Pod الخاص بـ Kubernetes** بحيث لا تعبر بيانات المراقبة حدود الشبكة أبداً أثناء جمعها. تشارك SDK التطبيق الخاص بك ومجمِّع البيانات في ملف حدث واحد داخل Pod، مما يعني نقل بيانات مراقبة منخفض الكمون داخل العملية بدون منفذ localhost معرّض، بدون شبكة خدمات يجب عبورها، وتكون دورة حياة مجمِّع البيانات مرتبطة مباشرة بالحمل الذي يراقبه. شهادة عميل mTLS التي يقدمها مجمِّع البيانات يتم تسليمها مباشرة إلى pod الخاص بك من AWS Secrets Manager، لذا فإن تدوير بيانات الاعتماد لا يتطلب نقل ملفات يدوي من جانبك.

نموذج sidecar + shared-spool الموصوف هنا غير مرتبط بسحابة معينة؛ يعمل وجود حاويتين تشتركان في ملف حدث `emptyDir` على أي توزيع Kubernetes. فقط مسار تسليم الشهادة في هذا الدليل (AWS Secrets Manager + Secrets Store CSI Driver + IRSA) مخصص لـ AWS / EKS. إذا كنت تعمل في مكان آخر، فاحتفظ بتخطيط Pod والملف وبدّل آلية التثبيت السرية لمنصتك للمرحلة 2 و 3.

> **متى تستخدم هذا النمط.** اختر single-pod عندما لا يجب أن يتصل تطبيقك عبر حدود الشبكة للوصول إلى مجمِّع البيانات (IPC داخل Pod منخفض الكمون، ربط دورة الحياة الوثيق، عزل Pod لكل مستأجر). لأساطيل التطبيقات المتعددة التي تشارك مجمِّع بيانات واحد لكل عقدة أو لكل مجموعة، انظر إلى [enterprise-docs/kubernetes-deployment.md](/ar/agenteye/kubernetes-deployment) بدلاً من ذلك.

***

## نظرة عامة

```
┌──────────────────────────────── Pod ─────────────────────────────────┐
│                                                                      │
│   ┌──────────────────────┐              ┌──────────────────────┐     │
│   │ your-app             │              │ agenteye-collector   │     │
│   │ (SDK writes JSONL)   │              │ (sweeps events/,     │     │
│   │                      │              │  uploads over mTLS)  │     │
│   └──────────┬───────────┘              └──────────┬───────────┘     │
│              │ writes                        reads │                 │
│              ▼                                     ▼                 │
│     ┌────────────────────────────────────────────────────┐           │
│     │  emptyDir: /var/lib/agenteye/{events,failed}/      │           │
│     │  (AGENTEYE_HOME - shared event spool)              │           │
│     └────────────────────────────────────────────────────┘           │
│                                                   ▲                  │
│                                                   │ reads cert       │
│                                          ┌────────┴─────────┐        │
│                                          │ CSI (read-only): │        │
│                                          │ /etc/agenteye/   │        │
│                                          │ tls/client.{crt, │        │
│                                          │   key}, ca.crt   │        │
│                                          └────────┬─────────┘        │
└───────────────────────────────────────────────────┼──────────────────┘
                                                    │ mounted by
                                                    │ Secrets Store CSI
                                                    │ (AWS provider +
                                                    │ IRSA)
                                           ┌────────┴──────────┐
                                           │ AWS Secrets       │
                                           │ Manager           │
                                           │ agenteye/mtls-    │
                                           │ client/<cluster>  │
                                           └────────┬──────────┘
                                                    ▲
                                                    │ push on issue /
                                                    │ renewal
                                           ┌────────┴──────────┐
                                           │ Exosphere         │
                                           │ delivers the cert │
                                           │ bundle into your  │
                                           │ Secrets Manager   │
                                           │ on renewal        │
                                           └───────────────────┘

Outbound: collector → AGENTEYE_URL (mTLS, using the CSI-mounted cert).
```

تدفقان للبيانات، مجلدان:

* **الأحداث (داخل Pod):** تكتب SDK التطبيق ملفات `.jsonl` إلى ملف `emptyDir` المشترك في `$AGENTEYE_HOME/events/`؛ يقرأها منظف المجمِّع ويرفعها. بدون منفذ localhost، بدون حلقة loopback، نقل نظيف عبر النظام الملفات المشتركة.
* **شهادة mTLS (pod ← cloud):** يثبت Secrets Store CSI Driver حزمة الشهادة من Secrets Manager في حجم للقراءة فقط على `/etc/agenteye/tls/`، مُحدّد لحاوية المجمِّع.

**طرفان مستقلان:**

| الطرف     | المسؤولية                                                                                                                                         |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------- |
| Exosphere | تُصدر شهادة عميل mTLS وتسلّم الحزمة إلى **حسابك** على AWS Secrets Manager تحت اسم مستقر. تعيد نشر الحزمة المجددة في نفس السر قبل انتهاء الصلاحية. |
| أنت       | قم بتثبيت Secrets Store CSI Driver، امنح وصول حسابك للخدمة بقراءة السر عبر IRSA، وطبّق بيان Pod. هذا كل شيء.                                      |

***

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

### في حسابك على AWS / مجموعة EKS الخاصة بك

* مجموعة EKS مع **موفر OIDC** مرتبط بها. أكّد باستخدام:

  ```bash theme={null}
  aws eks describe-cluster --name <your-cluster> \
    --query "cluster.identity.oidc.issuer" --output text
  ```

  إذا أرجعت الأوامر عنوان URL `https://oidc.eks.…`، فإن OIDC مُفعّل. إن لم يحدث، قم بربط واحد:

  ```bash theme={null}
  eksctl utils associate-iam-oidc-provider \
    --cluster <your-cluster> --approve
  ```

* [Secrets Store CSI Driver](https://secrets-store-csi-driver.sigs.k8s.io/) و [موفر AWS](https://github.com/aws/secrets-store-csi-driver-provider-aws) مثبتان في المجموعة (انظر § المرحلة 2).

* AWS CLI v2 و `kubectl` على محطة العمل الخاصة بك.

### التنسيق مع Exosphere

قبل النشر، يسلّم Exosphere حزمة عميل mTLS إلى Secrets Manager في حسابك على AWS ويوفر:

* **اسم السر** (الاتفاقية: `agenteye/mtls-client/<your-cluster>`)
* **منطقة AWS** التي يوجد السر فيها
* **عنوان URL لخادم AgentEye** لتكوين المجمِّع به
* **مفتاح API** المجمِّع الخاص بك (انظر [enterprise-docs/api-keys.md](/ar/agenteye/api-keys))

***

## المرحلة 1: ما يسلّمه Exosphere

لا تُنشِئ شهادة عميل mTLS بنفسك. تُصدرها Exosphere وتسلّم الحزمة مباشرة إلى Secrets Manager في حسابك على AWS، لذا فإن مادة بيانات الاعتماد الوحيدة التي تصل إلى بيئتك هي السر المنتهي والجاهز للتثبيت.

ما يصل إلى حسابك:

| الخاصية  | القيمة                                                                                                 |
| -------- | ------------------------------------------------------------------------------------------------------ |
| اسم السر | `agenteye/mtls-client/<cluster-name>` (مستقر عبر التجديد)                                              |
| المنطقة  | منطقة AWS التي رشحتها لمجموعة EKS الخاصة بك                                                            |
| الحمولة  | سر JSON واحد بثلاثة مفاتيح (`client.crt`, `client.key`, و `ca.crt`)، يحمل كل منها مادة مشفرة بصيغة PEM |
| الوسم    | `AgentEyeCluster=<cluster-name>`                                                                       |

عند التجديد، يتم تحديث نفس السر في الموقع بإصدار جديد، لذا فإن ARN والاسم لا يتغيران أبداً؛ `SecretProviderClass` وسياسة IAM الخاصة بك تستمر في العمل بدون تغيير. لدورة حياة الشهادة (الصلاحية، وتيرة التجديد، تنبيهات انتهاء الصلاحية) انظر [enterprise-docs/kubernetes-deployment.md](/ar/agenteye/kubernetes-deployment).

***

## المرحلة 2: تثبيت Secrets Store CSI Driver + موفر AWS

تخطَّ هذه الخطوة إذا كنت تقوم بتشغيل حمل عمل آخر يثبت أسرار AWS عبر CSI.

```bash theme={null}
# CSI Driver
helm repo add secrets-store-csi-driver \
  https://kubernetes-sigs.github.io/secrets-store-csi-driver/charts
helm install -n kube-system csi-secrets-store \
  secrets-store-csi-driver/secrets-store-csi-driver \
  --set syncSecret.enabled=true \
  --set enableSecretRotation=true \
  --set rotationPollInterval=1h

# AWS provider
kubectl apply -f \
  https://raw.githubusercontent.com/aws/secrets-store-csi-driver-provider-aws/main/deployment/aws-provider-installer.yaml
```

**تحقق:**

```bash theme={null}
kubectl get pods -n kube-system | grep -E 'csi-secrets-store|aws-provider'
```

متوقع: `Running` لكل pod.

> **لماذا `rotationPollInterval=1h`؟** عندما ينشر Exosphere شهادة مجددة، يتم تحديث Secrets Manager في الموقع. يقرأ CSI Driver السر على هذه الفترة ويعيد كتابة الملفات المثبتة. يقرأ المجمِّع ملفات الشهادة مرة واحدة فقط عند بدء التشغيل، لذا فإنه يبدأ تقديم الشهادة المجددة فقط بعد إعادة تشغيل العملية؛ انظر § تجديد الشهادة لمعرفة كيفية تشغيل واحدة.

***

## المرحلة 3: امنح Pod وصول القراءة إلى السر (IRSA)

### 3.1 إنشاء سياسة IAM

احفظ بـ `agenteye-mtls-reader-policy.json`:

```json theme={null}
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Sid": "ReadAgentEyeMtlsBundle",
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:DescribeSecret"
      ],
      "Resource": "arn:aws:secretsmanager:<region>:<account-id>:secret:agenteye/mtls-client/<cluster-name>-*"
    }
  ]
}
```

استبدل `<region>` و `<account-id>` و `<cluster-name>`. اللاحقة `-*` تطابق لاحقة عشوائية بستة أحرف تضيفها AWS لكل ARN سري.

أنشئ السياسة:

```bash theme={null}
aws iam create-policy \
  --policy-name AgentEyeMtlsReader-<cluster-name> \
  --policy-document file://agenteye-mtls-reader-policy.json
```

### 3.2 إنشاء دور IAM وربطه بـ ServiceAccount الخاص بـ Pod

```bash theme={null}
eksctl create iamserviceaccount \
  --name agenteye-pod \
  --namespace <your-namespace> \
  --cluster <your-cluster> \
  --role-name AgentEyePodRole-<cluster-name> \
  --attach-policy-arn arn:aws:iam::<account-id>:policy/AgentEyeMtlsReader-<cluster-name> \
  --approve
```

ينشئ هذا `ServiceAccount` باسم `agenteye-pod` مع تعليق `eks.amazonaws.com/role-arn` يشير إلى الدور الجديد.

### 3.3 أذونات IAM المطلوبة: ملخص

| الإذن                           | النطاق                                                                           | السبب                                                                        |
| ------------------------------- | -------------------------------------------------------------------------------- | ---------------------------------------------------------------------------- |
| `secretsmanager:GetSecretValue` | `arn:aws:secretsmanager:<region>:<acct>:secret:agenteye/mtls-client/<cluster>-*` | يقرأ CSI Driver حزمة الشهادة عند كل تثبيت + دورة تجديد.                      |
| `secretsmanager:DescribeSecret` | نفسه                                                                             | يستدعي CSI Driver `DescribeSecret` للكشف عن تغييرات الإصدار بين الاستطلاعات. |

**لا تمنح** `secretsmanager:PutSecretValue` أو `secretsmanager:UpdateSecret` أو `secretsmanager:DeleteSecret` لـ Pod. يقرأ Pod السر فقط؛ كتابة إصدارات جديدة يتم التعامل معها بواسطة Exosphere عند إصدار الشهادة أو تجديدها.

إذا تم تشفير السر باستخدام مفتاح KMS مُدار من قبل العميل (ليس مفتاح `aws/secretsmanager` الافتراضي)، امنح أيضاً:

```json theme={null}
{
  "Effect": "Allow",
  "Action": ["kms:Decrypt"],
  "Resource": "arn:aws:kms:<region>:<acct>:key/<key-id>",
  "Condition": {
    "StringEquals": {
      "kms:ViaService": "secretsmanager.<region>.amazonaws.com"
    }
  }
}
```

***

## المرحلة 4: نشر Pod

### 4.1 SecretProviderClass

`agenteye-mtls-spc.yaml`:

```yaml theme={null}
apiVersion: secrets-store.csi.x-k8s.io/v1
kind: SecretProviderClass
metadata:
  name: agenteye-mtls
  namespace: <your-namespace>
spec:
  provider: aws
  parameters:
    objects: |
      - objectName: "agenteye/mtls-client/<cluster-name>"
        objectType: "secretsmanager"
        jmesPath:
          - path: '"client.crt"'
            objectAlias: "client.crt"
          - path: '"client.key"'
            objectAlias: "client.key"
          - path: '"ca.crt"'
            objectAlias: "ca.crt"
```

يخبر كتلة `jmesPath` موفر AWS بتقسيم السر JSON إلى ثلاثة ملفات منفصلة على القرص. الاقتباس في `'"client.crt"'` مطلوب لأن JMESPath يتعامل مع `.` كعامل فرعي.

```bash theme={null}
kubectl apply -f agenteye-mtls-spc.yaml
```

### 4.2 بيان Pod / Deployment

**كيف تتحدث الحاويتان مع بعضهما البعض.** لا تتصل SDK AgentEye والمجمِّع عبر مقبس شبكة؛ لا يوجد منفذ HTTP محلي. تكتب SDK دفعات الأحداث كملفات `.jsonl` إلى `$AGENTEYE_HOME/events/`، والمجمِّع يراقب هذا المجلد بشكل مستمر ويرفع كل ملف. بالنسبة لـ sidecar pod هذا يعني:

* تثبت كلا الحاويتين نفس حجم `emptyDir` في نفس المسار.
* تعيّن كلا الحاويتين `AGENTEYE_HOME` إلى ذلك المسار.
* يجب أن تحتوي صورة التطبيق الخاصة بك على AgentEye SDK مثبت ومُكَوَّن (انظر [enterprise-docs/python-sdk.md](/ar/agenteye/python-sdk)).

> عند عدم تعيين `AGENTEYE_HOME`، يُوجّه كل من SDK والمجمِّع إلى `~/.agenteye` افتراضياً، والحاويتان لهما دلائل رئيسية مختلفة، لذا ستصلان إلى ملفين منفصلين وسيفشل النقل صامتاً. عيّن `AGENTEYE_HOME` إلى نفس المسار الصريح في **كلا** الحاويتين. يمسك § 4.3 التحقق وصف استكشاف الأخطاء المطابق هذا إذا تم تفويته.

`agenteye-pod.yaml` (Deployment بنسخة واحدة، قم بالتوسع حسب الحاجة):

```yaml theme={null}
apiVersion: apps/v1
kind: Deployment
metadata:
  name: my-app-with-collector
  namespace: <your-namespace>
spec:
  replicas: 1
  selector:
    matchLabels:
      app: my-app-with-collector
  template:
    metadata:
      labels:
        app: my-app-with-collector
    spec:
      serviceAccountName: agenteye-pod
      containers:
        - name: app
          image: <your-app-image>
          env:
            # SDK writes event JSONL files into $AGENTEYE_HOME/events/
            - name: AGENTEYE_HOME
              value: /var/lib/agenteye
          volumeMounts:
            - name: agenteye-spool
              mountPath: /var/lib/agenteye

        - name: agenteye-collector
          # Pin to a versioned :v<version> tag for production; :beta-latest
          # tracks the current beta build (:latest exists only for stable releases).
          image: ghcr.io/agenteye-enterprise/collector:beta-latest
          args: ["start"]
          env:
            # Must match the app container's AGENTEYE_HOME so the collector
            # sweeps the same directory the SDK writes to.
            - name: AGENTEYE_HOME
              value: /var/lib/agenteye
            - name: AGENTEYE_URL
              value: "https://ingest.example.agenteye.com/events"
            - name: AGENTEYE_KEY
              valueFrom:
                secretKeyRef:
                  name: agenteye-collector-api-key
                  key: key
            - name: AGENTEYE_TLS_CERT
              value: /etc/agenteye/tls/client.crt
            - name: AGENTEYE_TLS_KEY
              value: /etc/agenteye/tls/client.key
            # Only when the AgentEye server presents a cert not signed by a
            # publicly-trusted CA (e.g. self-signed by an in-cluster issuer
            # because you have no real DNS domain). The CSI mount already
            # exposes ca.crt alongside the client cert/key.
            - name: AGENTEYE_TLS_CA
              value: /etc/agenteye/tls/ca.crt
          volumeMounts:
            - name: agenteye-spool
              mountPath: /var/lib/agenteye
            - name: agenteye-mtls
              mountPath: /etc/agenteye/tls
              readOnly: true
          livenessProbe:
            exec:
              command: ["agenteye-collector", "health"]
            initialDelaySeconds: 10
            periodSeconds: 30

      volumes:
        # Shared event spool between app and collector. emptyDir is fine:
        # events are transient and the collector drains them before pod
        # termination on graceful shutdown.
        - name: agenteye-spool
          emptyDir: {}
        # mTLS cert bundle, mounted read-only into the collector only.
        - name: agenteye-mtls
          csi:
            driver: secrets-store.csi.k8s.io
            readOnly: true
            volumeAttributes:
              secretProviderClass: agenteye-mtls
```

السر `agenteye-collector-api-key` يحمل مفتاح API المجمِّع (انظر [enterprise-docs/api-keys.md](/ar/agenteye/api-keys) للإمداد).

**طبّق:**

```bash theme={null}
kubectl apply -f agenteye-pod.yaml
```

### 4.3 تحقق

```bash theme={null}
# Pod should be Running with 2/2 containers ready
kubectl get pods -n <your-namespace> -l app=my-app-with-collector

# Confirm the cert bundle was mounted
kubectl exec -n <your-namespace> deploy/my-app-with-collector \
  -c agenteye-collector -- ls -l /etc/agenteye/tls/
```

متوقع: `client.crt` و `client.key` و `ca.crt` جميعها موجودة وللقراءة فقط، مملوكة من قبل مستخدم الحاوية.

**تأكّد من رؤية ملف الأحداث المشترك لكلا الحاويتين:**

```bash theme={null}
# In the collector, should show the events/ and failed/ subdirs that
# the collector auto-creates on startup:
kubectl exec -n <your-namespace> deploy/my-app-with-collector \
  -c agenteye-collector -- ls /var/lib/agenteye/

# In the app, should show the same directory contents:
kubectl exec -n <your-namespace> deploy/my-app-with-collector \
  -c app -- ls /var/lib/agenteye/
```

إذا تباعدت القائمتان، فإن الحجم لم يتم تثبيته في كلا الحاويتين (أو اختلفت `AGENTEYE_HOME`)؛ انظر § استكشاف الأخطاء والإصلاح.

**اختبار نهاية إلى نهاية:**

```bash theme={null}
kubectl exec -n <your-namespace> deploy/my-app-with-collector \
  -c agenteye-collector -- agenteye-collector flush
```

متوقع: يرفع المجمِّع أي أحداث في الطابور ويطبع ملخص `Done: N/N uploaded, 0 failed.`. إذا كان الملف فارغاً يطبع `No pending files.` ويخرج بدون التحقق من أي شيء — لذا قم بتشغيل هذا فقط بعد أن يفرغ التطبيق حدثاً واحداً على الأقل.

لاحظ أن `flush` يخرج برمز غير صفري **فقط** من أجل أعطال الإعداد المحلي: الإعدادات المفقودة (لا URL / مفتاح تم حله) أو شهادة TLS غير قابلة للقراءة / غير قابلة للتحليل (تحقق من § استكشاف الأخطاء والإصلاح). **مفتاح API خاطئ لا يغير كود الخروج** — التحميل يحصل على `401`، يتم نقل الملف إلى `failed/`، والأمر لا يزال يطبع `[FAILED] …` لكل ملف زائد `Done: 0/N uploaded, N failed.` ويخرج `0`. للكشف عن مفتاح سيء أو تحميل مرفوض، اقرأ مخرجات `Done:`/`[FAILED]` أو تحقق من الملفات التي تصل إلى `$AGENTEYE_HOME/failed/`، ليس كود الخروج.

***

## تجديد الشهادة

شهادة العميل صالحة لمدة 90 يوماً ويتم تجديدها تلقائياً حوالي 15 يوماً قبل انتهاء الصلاحية؛ ينشر Exosphere الحزمة المجددة في نفس سر Secrets Manager. من هناك، يكون التدفق داخل Pod:

1. الحصول على سر Secrets Manager إصدار `AWSCURRENT` جديد. ARN والاسم لا يتغيران.
2. ضمن `rotationPollInterval` (افتراضياً 1 ساعة؛ انظر § المرحلة 2)، يقرأ CSI Driver الإصدار الجديد ويعيد كتابة الملفات تحت `/etc/agenteye/tls/`.
3. يحمّل المجمِّع ملفات الشهادة **مرة واحدة فقط عند بدء التشغيل**، لذا فإنه يستمر في تقديم الشهادة السابقة حتى إعادة تشغيل العملية. للتبديل إلى المادة المجددة، أعد تشغيل المجمِّع؛ إعادة التشغيل المتحركة كافية:

   ```bash theme={null}
   kubectl rollout restart deploy/my-app-with-collector -n <your-namespace>
   ```

   لجعل هذا تلقائياً، أضف sidecar يراقب `/etc/agenteye/tls/` (على سبيل المثال مع `inotifywait`) وينطلق عند تغيير الملفات.

لأن الشهادة السابقة تبقى صالحة لمدة تقريباً 15 يوماً بعد التجديد، لديك نافذة واسعة لإجراء إعادة التشغيل بدون انقطاع في الاستيعاب. ينشر Exosphere الحزمة المجددة لك؛ الإجراء الروتيني الوحيد من جانبك هو التأكد من إعادة تشغيل المجمِّع ضمن تلك النافذة.

***

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

| العرض                                                                                                                            | السبب المحتمل                                                                                                         | الإصلاح                                                                                                                                                                                                    |
| -------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Pod عالق في `ContainerCreating`، تُظهر الأحداث `MountVolume.SetUp failed for volume "agenteye-mtls"`                             | لا يمكن لموفر CSI الوصول إلى Secrets Manager                                                                          | تحقق من ربط IRSA بشكل صحيح: `kubectl describe sa agenteye-pod -n <ns>` يُظهر تعليق `eks.amazonaws.com/role-arn`. افحص CloudTrail لاستدعاء AssumeRole.                                                      |
| خطأ: `AccessDeniedException: not authorized to perform secretsmanager:GetSecretValue`                                            | نطاق سياسة IAM إلى ARN خاطئ                                                                                           | لاحقة ARN السرية عشوائية؛ استخدم `agenteye/mtls-client/<cluster>-*` مع البدل، ليس ARN الدقيق.                                                                                                              |
| خطأ: `ParameterNotFound` من موفر AWS                                                                                             | عدم تطابق اسم السر بين `SecretProviderClass.objects[].objectName` والسر الذي سلّمه Exosphere                          | تأكّد من الاسم الدقيق مع `aws secretsmanager list-secrets --filters Key=tag-key,Values=AgentEyeCluster`.                                                                                                   |
| خطأ `jmesPath`، تم تثبيت ملف واحد فقط                                                                                            | بناء جملة JMESPath                                                                                                    | الأرقام في مفاتيح JSON تتطلب اقتباساً مزدوجاً: `'"client.crt"'`، ليس `client.crt`.                                                                                                                         |
| السجل `tls: bad certificate` بعد التجديد                                                                                         | لم يستطلع CSI Driver الإصدار الجديد حتى الآن، أو لا يزال المجمِّع يعمل مع الشهادة السابقة التي حمّلها عند بدء التشغيل | تأكّد من تحديث الملفات المثبتة (`ls -l /etc/agenteye/tls/`)، ثم أعد تشغيل المجمِّع لتحميلها: `kubectl rollout restart deploy/my-app-with-collector -n <ns>`. انظر § تجديد الشهادة.                         |
| حاوية المجمِّع crashloops مع `no such file or directory: /etc/agenteye/tls/client.crt`                                           | لم يتم ملء الحجم حتى الآن عند بدء التشغيل الأول؛ مسبار بدء التشغيل عدواني جداً                                        | أضف تأخير ابتدائي صغير أو استخدم initContainer ينتظر وجود الملف: `until [ -f /etc/agenteye/tls/client.crt ]; do sleep 1; done`.                                                                            |
| pod CSI Driver `OOMKilled`                                                                                                       | حدود الذاكرة الافتراضية منخفضة جداً للمجموعات التي تحتوي على العديد من SecretProviderClasses                          | زيادة `--set linux.resources.limits.memory=200Mi` في تثبيت Helm.                                                                                                                                           |
| التطبيق يعمل بشكل نظيف، `agenteye-collector flush` يُبلّغ `No pending files.`، لكن لوحة معلومات AgentEye الخاصة بك لا تظهر أحداث | التطبيق والمجمِّع لا يشتركان في ملف الأحداث                                                                           | تحقق من (أ) كلا الحاويتين تثبتان نفس `agenteye-spool` emptyDir في نفس المسار، و (ب) كلاهما يعيّن `AGENTEYE_HOME` إلى ذلك المسار. قم بتشغيل الفحصات `ls /var/lib/agenteye/` من § 4.3؛ يجب أن تطابق القوائم. |

**السجلات المراد الحصول عليها أولاً:**

```bash theme={null}
kubectl logs -n kube-system -l app=secrets-store-csi-driver --tail=100
kubectl logs -n kube-system -l app=csi-secrets-store-provider-aws --tail=100
kubectl describe pod -n <your-namespace> -l app=my-app-with-collector
```

***

## المرجع: الملفات على القرص في Pod

يحتوي Pod على مساران للبيانات على القرص:

### حزمة شهادة mTLS: `/etc/agenteye/tls/` (CSI، قراءة فقط، المجمِّع فقط)

مثبتة بواسطة Secrets Store CSI Driver من AWS Secrets Manager.

| الملف        | المحتويات                  | المستخدمة من قبل المجمِّع كـ                                                           |
| ------------ | -------------------------- | -------------------------------------------------------------------------------------- |
| `client.crt` | شهادة عميل مشفرة بصيغة PEM | `AGENTEYE_TLS_CERT`                                                                    |
| `client.key` | مفتاح خاص مشفر بصيغة PEM   | `AGENTEYE_TLS_KEY`                                                                     |
| `ca.crt`     | شهادة CA مشفرة بصيغة PEM   | `AGENTEYE_TLS_CA` (اختياري، فقط عندما لا تكون شهادة خادم AgentEye موقعة من قبل CA عام) |

الثلاثة مثبتة للقراءة فقط ومملوكة من قبل مستخدم الحاوية. يتم إعادة كتابتها بواسطة CSI Driver عند تدوير السر.

### ملف الأحداث: `$AGENTEYE_HOME/` (emptyDir، قراءة وكتابة مشتركة بين كلا الحاويتين)

مشترك عبر حجم `emptyDir` باسم `agenteye-spool`.

| المسار                          | مكتوب بواسطة               | يُقرأ بواسطة            | الغرض                                                   |
| ------------------------------- | -------------------------- | ----------------------- | ------------------------------------------------------- |
| `$AGENTEYE_HOME/events/*.jsonl` | التطبيق (AgentEye SDK)     | منظف المجمِّع           | دفعات الأحداث التي فرغتها SDK، في انتظار التحميل.       |
| `$AGENTEYE_HOME/failed/`        | المجمِّع (عند فشل التحميل) | أنت (عند تصحيح الأخطاء) | ملفات JSONL لم يتمكن المجمِّع من تحميلها بعد المحاولات. |
| `$AGENTEYE_HOME/config.json`    | أنت (اختياري)              | المجمِّع                | ملف اختياري لإعدادات المجمِّع (بديل لمتغيرات env).      |

يتم إنشاء كل من دلائل `events/` و `failed/` تلقائياً بواسطة المجمِّع عند بدء التشغيل؛ لا يلزم `initContainer`.

***

## الوثائق ذات الصلة

* [enterprise-docs/collector-installation.md](/ar/agenteye/collector-installation): خيارات ملف المجمِّع الثنائي، مرجع إعدادات mTLS، أوضاع daemon.
* [enterprise-docs/kubernetes-deployment.md](/ar/agenteye/kubernetes-deployment): نشر متعدد الأجهزة، داخليات إصدار الشهادة، تنبيهات دورة الحياة والصلاحية.
* [enterprise-docs/api-keys.md](/ar/agenteye/api-keys): إمداد مفتاح API المجمِّع الذي استهلكته Pod.
* [enterprise-docs/troubleshooting.md](/ar/agenteye/troubleshooting): فهرس استكشاف الأخطاء على مستوى المجموعة.
