نظرة عامة
تُعد AWS CloudWatch خدمة مراقبة لموارد AWS وتطبيقاتها. ورغم أن CloudWatch يوفّر تجميع السجلات، فإن توجيه السجلات إلى ClickStack يتيح لك ما يلي:
- تحليل السجلات إلى جانب المقاييس والتتبعات ضمن منصة موحّدة
- الاستعلام عن السجلات باستخدام واجهة SQL في ClickHouse
- خفض التكاليف من خلال أرشفة بيانات CloudWatch Logs أو تقليل مدة الاحتفاظ بها في CloudWatch
يوضّح هذا الدليل كيفية توجيه سجلات CloudWatch إلى ClickStack باستخدام OpenTelemetry Collector.
التكامل مع مجموعات سجلات CloudWatch الحالية
يوضح هذا القسم كيفية تهيئة OpenTelemetry Collector لسحب السجلات من مجموعات سجلات CloudWatch الحالية لديك وتمريرها إلى ClickStack.
إذا أردت اختبار هذا التكامل قبل تهيئة بيئة الإنتاج لديك، يمكنك استخدام مجموعة البيانات التجريبية الخاصة بنا في قسم مجموعة البيانات التجريبية.
المتطلبات الأساسية
- مثيل ClickStack قيد التشغيل
- حساب AWS يتضمن مجموعات سجلات CloudWatch
- بيانات اعتماد AWS مع أذونات IAM المناسبة
الحصول على مفتاح API لـ ClickStack
يرسل OpenTelemetry Collector البيانات إلى نقطة نهاية OTLP الخاصة بـ ClickStack، والتي تتطلب المصادقة.
- افتح HyperDX على عنوان URL الخاص بـ ClickStack (على سبيل المثال، http://localhost:8080)
- أنشئ حسابًا أو سجّل الدخول إذا لزم الأمر
- انتقل إلى إعدادات الفريق → مفاتيح API
- انسخ مفتاح API للاستيعاب الخاص بك

احفظ هذا في متغير بيئة:
export CLICKSTACK_API_KEY="your-api-key-here"تهيئة بيانات اعتماد AWS
صدِّر بيانات اعتماد AWS كمتغيرات بيئة. وتعتمد الطريقة على نوع authentication المستخدم لديك:
لمستخدمي AWS SSO (موصى به لمعظم organizations):
# Login to SSO
aws sso login --profile YOUR_PROFILE_NAME
# Export credentials to environment variables
eval $(aws configure export-credentials --profile YOUR_PROFILE_NAME --format env)
# Verify credentials work
aws sts get-caller-identityاستبدل YOUR_PROFILE_NAME باسم ملف تعريف AWS SSO لديك (على سبيل المثال، AccountAdministrators-123456789).
لمستخدمي IAM الذين لديهم بيانات اعتماد طويلة الأجل:
export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_REGION="us-east-1"
# Verify credentials work
aws sts get-caller-identityأذونات IAM المطلوبة:
يحتاج حساب AWS المرتبط ببيانات الاعتماد هذه إلى سياسة IAM التالية لقراءة السجلات من CloudWatch Logs:
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "CloudWatchLogsRead",
"Effect": "Allow",
"Action": [
"logs:DescribeLogGroups",
"logs:FilterLogEvents"
],
"Resource": "arn:aws:logs:*:YOUR_ACCOUNT_ID:log-group:*"
}
]
}استبدل YOUR_ACCOUNT_ID بمعرّف حساب AWS لديك.
تهيئة مستقبِل CloudWatch
أنشئ ملف otel-collector-config.yaml يتضمن تهيئة مستقبِل CloudWatch.
اكتشاف مجموعات السجلات المتاحة في حسابك
قبل تعديل الإعداد، اعرض مجموعات السجلات الموجودة في منطقتك حتى تتمكن من اختيار أسماء فعلية (والتأكد من أن المنطقة صحيحة):
aws logs describe-log-groups --region us-east-1 \
--query 'logGroups[].logGroupName' --output tableمثال على المخرجات:
-------------------------------
| DescribeLogGroups |
+-----------------------------+
| /aws-glue/jobs/error |
| /aws-glue/jobs/logs-v2 |
| /aws-glue/jobs/output |
| /aws-glue/sessions/error |
| /aws-glue/sessions/output |
+-----------------------------+استخدم الأسماء الواردة في هذه القائمة مباشرةً في كتلة groups.named ضمن المثال 1 أدناه. بالنسبة إلى الحساب أعلاه، سيصبح قسم named-groups كما يلي:
groups:
named:
/aws-glue/jobs/error:
/aws-glue/jobs/logs-v2:
/aws-glue/jobs/output:
/aws-glue/sessions/error:
/aws-glue/sessions/output:بدلاً من ذلك، إذا كانت المجموعات التي تريدها تشترك في بادئة واحدة (هنا /aws-glue/)، فاستخدم المثال 2 مع prefix: /aws-glue/ بدلاً من إدراجها بشكل فردي.
المثال 1: مجموعات سجلات محددة بالاسم (مُوصى به)
تجمع هذه التهيئة السجلات من مجموعات سجلات محددة بالاسم:
receivers:
awscloudwatch:
region: us-east-1
logs:
poll_interval: 1m
max_events_per_request: 100
groups:
named:
/aws/lambda/my-function:
/aws/ecs/my-service:
/aws/eks/my-cluster/cluster:
processors:
batch:
timeout: 10s
exporters:
otlphttp:
endpoint: http://localhost:4318
headers:
authorization: ${CLICKSTACK_API_KEY}
service:
pipelines:
logs:
receivers: [awscloudwatch]
processors: [batch]
exporters: [otlphttp]مثال 2: الاكتشاف التلقائي لمجموعات السجلات ذات البادئة
تكتشف هذه التهيئة تلقائيًا ما يصل إلى 100 مجموعة سجلات تبدأ بالبادئة /aws/lambda، وتجمع السجلات منها:
receivers:
awscloudwatch:
region: us-east-1
logs:
poll_interval: 1m
max_events_per_request: 100
groups:
autodiscover:
limit: 100
prefix: /aws/lambda
processors:
batch:
timeout: 10s
exporters:
otlphttp:
endpoint: http://localhost:4318
headers:
authorization: ${CLICKSTACK_API_KEY}
service:
pipelines:
logs:
receivers: [awscloudwatch]
processors: [batch]
exporters: [otlphttp]معلمات التهيئة:
region: منطقة AWS التي توجد فيها مجموعات السجلاتpoll_interval: عدد مرات التحقق من السجلات الجديدة (على سبيل المثال،1m،5m)max_events_per_request: الحد الأقصى لعدد أحداث السجل التي يمكن جلبها في كل طلبgroups.autodiscover.limit: الحد الأقصى لعدد مجموعات السجلات التي يمكن اكتشافهاgroups.autodiscover.prefix: تصفية مجموعات السجلات حسب البادئةgroups.named: إدراج أسماء مجموعات السجلات المطلوب جمعها صراحةً
للاطلاع على مزيد من خيارات التهيئة، راجع وثائق CloudWatch receiver.
استبدل ما يلي:
${CLICKSTACK_API_KEY}→ يستخدم متغير البيئة الذي عيّنته سابقًاhttp://localhost:4318→ نقطة نهاية ClickStack الخاصة بك (استخدم مضيف ClickStack إذا كنت تشغّله عن بُعد)us-east-1→ منطقة AWS الخاصة بك- أسماء/بادئات مجموعات السجلات → مجموعات سجلات CloudWatch الفعلية لديك
ابدأ تشغيل المُجمِّع
أنشئ ملف docker-compose.yaml:
services:
otel-collector:
image: otel/opentelemetry-collector-contrib:latest
command: ["--config=/etc/otel-config.yaml"]
volumes:
- ./otel-collector-config.yaml:/etc/otel-config.yaml
environment:
- AWS_ACCESS_KEY_ID
- AWS_SECRET_ACCESS_KEY
- AWS_SESSION_TOKEN
- AWS_REGION
- CLICKSTACK_API_KEY
restart: unless-stopped
extra_hosts:
- "host.docker.internal:host-gateway"ثم شغّل المجمِّع:
docker compose up -dاعرض سجلات المجمِّع:
docker compose logs -f otel-collectorتحقّق من السجلات في HyperDX
بمجرد تشغيل الـ collector:
- افتح HyperDX على http://localhost:8080 (أو على عنوان URL الخاص بـ ClickStack)
- انتقل إلى عرض السجلات
- انتظر دقيقة إلى دقيقتين حتى تظهر السجلات (بحسب فترة الاستطلاع لديك)
- ابحث عن السجلات القادمة من مجموعات سجلات CloudWatch الخاصة بك

ابحث عن هذه السمات الأساسية في السجلات:
ResourceAttributes['aws.region']: منطقة AWS الخاصة بك (على سبيل المثال: "us-east-1")ResourceAttributes['cloudwatch.log.group.name']: اسم مجموعة سجلات CloudWatchResourceAttributes['cloudwatch.log.stream']: اسم دفق السجلBody: المحتوى الفعلي لرسالة السجل

مجموعة البيانات التجريبية
للمستخدمين الذين يرغبون في اختبار تكامل سجلات CloudWatch قبل تهيئة بيئة AWS الإنتاجية، نوفر مجموعة بيانات تجريبية تحتوي على سجلات مُولَّدة مسبقًا تعرض أنماطًا واقعية من عدة خدمات AWS.
تنزيل مجموعة البيانات التجريبية
curl -O https://datasets-documentation.s3.eu-west-3.amazonaws.com/clickstack-integrations/aws/cloudwatch/cloudwatch-logs.jsonlتتضمن مجموعة البيانات 24 ساعة من سجلات CloudWatch من عدة خدمات:
- وظائف Lambda: معالجة المدفوعات، وإدارة الطلبات، والمصادقة
- خدمات ECS: بوابة API مع تحديد المعدل ومهلات
- المهام الخلفية: معالجة على دفعات مع أنماط إعادة المحاولة
تشغيل ClickStack
إذا لم يكن ClickStack قيد التشغيل بالفعل:
docker run -d --name clickstack \
-p 8080:8080 -p 4317:4317 -p 4318:4318 \
clickhouse/clickstack-all-in-one:latestانتظر بضع لحظات حتى يكتمل تشغيل ClickStack بالكامل.
استيراد مجموعة البيانات التجريبية
docker exec -i clickstack clickhouse-client --query="
INSERT INTO default.otel_logs FORMAT JSONEachRow
" < cloudwatch-logs.jsonlيؤدي هذا إلى استيراد السجلات مباشرةً إلى جدول السجلات في ClickStack.
التحقق من البيانات التجريبية
بعد الاستيراد:
- افتح HyperDX على http://localhost:8080 وسجّل الدخول (أنشئ حسابًا إذا لزم الأمر)
- انتقل إلى عرض Logs
- اضبط النطاق الزمني على 2025-12-07 00:00:00 - 2025-12-08 00:00:00 (UTC)
- ابحث عن
cloudwatch-demoأو رشّح باستخدامLogAttributes['source'] = 'cloudwatch-demo'
من المفترض أن ترى سجلات من عدة مجموعات سجلات CloudWatch.

لوحات المعلومات والتصورات
لمساعدتك في مراقبة سجلات CloudWatch باستخدام ClickStack، نوفر لوحة معلومات مُعدّة مسبقًا تتضمن التصورات الأساسية.
نزّل ملف إعدادات لوحة المعلومات
استورد لوحة المعلومات
- افتح HyperDX وانتقل إلى قسم لوحات المعلومات
- انقر على استيراد لوحة المعلومات في الزاوية العلوية اليمنى من قائمة النقاط الثلاث

- ارفع الملف
cloudwatch-logs-dashboard.jsonثم انقر على إنهاء الاستيراد

اعرض لوحة المعلومات
ستُنشأ لوحة المعلومات مع ضبط جميع التصورات مسبقًا:

استكشاف الأخطاء وإصلاحها
عدم ظهور أي سجلات في HyperDX
تحقق من تهيئة بيانات اعتماد AWS:
aws sts get-caller-identityإذا تعذّر ذلك، فبيانات الاعتماد لديك غير صالحة أو انتهت صلاحيتها.
تحقق من أذونات IAM:
تأكد من أن بيانات اعتماد AWS لديك تتضمن أذونات logs:DescribeLogGroups وlogs:FilterLogEvents المطلوبة.
تحقق من سجلات الـ مجمِّع بحثًا عن أخطاء:
# If using Docker directly, logs appear in stdout
# If using Docker Compose:
docker compose logs otel-collectorالأخطاء الشائعة:
The security token included in the request is invalid: بيانات الاعتماد غير صالحة أو منتهية الصلاحية. إذا كنت تستخدم بيانات اعتماد مؤقتة (SSO)، فتأكد من تعيينAWS_SESSION_TOKEN.operation error CloudWatch Logs: FilterLogEvents, AccessDeniedException: أذونات IAM غير كافيةfailed to refresh cached credentials, no EC2 IMDS role found: متغيرات بيئة بيانات اعتماد AWS غير مضبوطةconnection refused: يتعذر الوصول إلى endpoint الخاص بـ ClickStack
تحقق من وجود مجموعات سجلات CloudWatch وأنها تحتوي على logs حديثة:
# List your log groups
aws logs describe-log-groups --region us-east-1
# Check if a specific log group has recent logs (last hour)
aws logs filter-log-events \
--log-group-name /aws/lambda/my-function \
--region us-east-1 \
--start-time $(date -u -v-1H +%s)000 \
--max-items 5لا تظهر إلا السجلات القديمة أو لا تظهر السجلات الحديثة
يبدأ مستقبِل CloudWatch من "الآن" افتراضيًا:
عند بدء تشغيل المُجمِّع لأول مرة، ينشئ نقطة تحقّق عند الوقت الحالي ولا يجلب إلا السجلات التي تلي تلك النقطة. ولا تُسترجع السجلات التاريخية.
لجمع السجلات التاريخية الحديثة:
أوقِف المُجمِّع واحذف نقطة التحقّق الخاصة به، ثم أعد تشغيله:
# Stop the collector
docker stop <container-id>
# Restart fresh (checkpoints are stored in container, so removing it resets)
docker run --rm ...سيُنشئ المستقبِل نقطة تحقّق جديدة، ثم يبدأ بجلب السجلات من الوقت الحالي فصاعدًا.
رمز الأمان غير صالح / انتهت صلاحية بيانات الاعتماد
إذا كنت تستخدم بيانات اعتماد مؤقتة (AWS SSO أو دورًا مفترضًا)، فستنتهي صلاحيتها بعد مدة من الزمن.
أعِد تصدير بيانات اعتماد محدَّثة:
# For SSO users:
aws sso login --profile YOUR_PROFILE_NAME
eval $(aws configure export-credentials --profile YOUR_PROFILE_NAME --format env)
# For IAM users:
export AWS_ACCESS_KEY_ID="your-key"
export AWS_SECRET_ACCESS_KEY="your-secret"
# Restart the collector
docker restart <container-id>ارتفاع زمن الكمون أو فقدان السجلات الحديثة
قلّل فاصل الاستقصاء:
القيمة الافتراضية لـ poll_interval هي دقيقة واحدة. للحصول على سجلات شبه فورية، قلّله:
logs:
poll_interval: 30s # Poll every 30 secondsملاحظة: تؤدي الفواصل الزمنية الأقصر بين عمليات الاستقصاء إلى زيادة عدد استدعاءات واجهة برمجة تطبيقات AWS، وقد تترتب عليها تكاليف أعلى لواجهة برمجة تطبيقات CloudWatch.
يستهلك المجمِّع ذاكرةً كبيرة جدًا
قلّل حجم الدفعة أو زِد المهلة:
processors:
batch:
timeout: 5s
send_batch_size: 100تقييد الاكتشاف التلقائي:
groups:
autodiscover:
limit: 50 # Reduce from 100 to 50الخطوات التالية
- قم بإعداد التنبيهات للأحداث الحرجة (إخفاقات الاتصال وازدياد الأخطاء)
- خفّض تكاليف CloudWatch عبر ضبط فترات الاحتفاظ أو الأرشفة إلى S3، بعد أن أصبحت السجلات لديك في ClickStack
- رشّح مجموعات السجلات كثيرة الضوضاء بإزالتها من إعدادات المجمّع لتقليل حجم الإدخال
الانتقال إلى بيئة الإنتاج
يوضح هذا الدليل كيفية تشغيل OpenTelemetry Collector محليًا باستخدام Docker Compose لأغراض الاختبار. أما لعمليات النشر في بيئة الإنتاج، فشغّل مجمِّع على بنية تحتية لديها وصول إلى AWS (EC2 مع IAM roles، أو EKS مع IRSA، أو ECS مع task roles) للاستغناء عن إدارة مفاتيح الوصول. انشر مجمِّعات في منطقة AWS نفسها التي توجد فيها مجموعات سجلات CloudWatch لتقليل زمن الوصول والتكاليف.
راجع استيعاب البيانات باستخدام OpenTelemetry للاطلاع على أنماط النشر في بيئة الإنتاج وأمثلة تهيئة مجمِّع.