الانتقال إلى المحتوى الرئيسي
الخلاصةيوضّح هذا الدليل كيفية مراقبة وظائف AWS Lambda باستخدام ClickStack عبر Rotel Lambda Extension لجمع سجلات الوظائف، وسجلات الامتداد، وبيانات OpenTelemetry وإرسالها مباشرةً إلى ClickHouse. ستتعلّم كيفية:
  • نشر طبقة Rotel Lambda Extension على وظائف Lambda لديك
  • تهيئة الامتداد لتصدير السجلات والتتبعات إلى ClickStack
  • تعطيل CloudWatch Logs اختياريًا لتقليل التكاليف
يمكن أن يخفّض هذا النهج بشكل كبير تكاليف مراقبة Lambda لديك من خلال تجاوز CloudWatch Logs بالكامل.الوقت المطلوب: 5-10 دقائق

التكامل مع وظائف Lambda الحالية

يوضح هذا القسم كيفية تهيئة وظائف AWS Lambda الحالية لديك لإرسال السجلات والتتبعات إلى ClickStack باستخدام Rotel Lambda Extension.

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

  • مثيل ClickStack قيد التشغيل
  • وظائف AWS Lambda المراد مراقبتها
  • AWS CLI مُعدّ مع الأذونات المناسبة
  • دور تنفيذ Lambda مزوّد بأذونات لإضافة الطبقات
1

اختر طبقة Rotel Lambda Extension المناسبة

اختر طبقة Lambda التي تتوافق مع معمارية بيئة تشغيل Lambda لديك. يعتمد الحقل {version} على منطقة AWS التي تنشر إليها. راجع صفحة الإصدارات للاطلاع على أحدث أرقام الإصدارات المطابقة لمنطقتك.
المعماريةARN
x86-64/amd64arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version}
arm64arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64:{version}
المناطق المتاحة:
  • us-east-, us-west-
  • eu-central-1, eu-north-1, eu-west-
  • ca-central-1
  • ap-southeast-, ap-northeast-
  • ap-south-1
  • sa-east-1
2

أضِف طبقة Rotel إلى دالة Lambda الخاصة بك

في هذه الأمثلة، استبدل {arch} و{region} و{version} بالقيم المناسبة المذكورة أعلاه.
الخيار 1: Console في AWS
  1. افتح Console الخاصة بـ AWS Lambda
  2. انتقل إلى دالة Lambda الخاصة بك
  3. مرّر إلى قسم Layers وانقر على Add a layer
  4. اختر Specify an ARN
  5. أدخل ARN الخاص بطبقة Rotel:
    arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
    
  6. انقر على Add
الخيار 2: AWS CLI
aws lambda update-function-configuration \
  --function-name my-function \
  --layers arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
الخيار 3: AWS SAM
Resources:
  MyFunction:
    Type: AWS::Serverless::Function
    Properties:
      # ... other configuration ...
      Layers:
        - arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version}
3

اضبط الامتداد للتصدير إلى ClickStack

يُضبط Rotel Lambda Extension باستخدام متغيرات البيئة. تحتاج إلى ضبط endpoint الخاص بمُصدِّر OTLP بحيث يشير إلى مثيل ClickStack الخاص بك. تفترض الأمثلة أن دالة AWS Lambda لديك قادرة على الوصول إلى مثيل ClickStack.
الإعداد الأساسي (متغيرات البيئة)
أضف متغيرات البيئة هذه إلى دالة Lambda الخاصة بك:
# Required: ClickStack OTLP endpoint
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317

# Optional: Authentication headers
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=<YOUR_INGESTION_API_KEY>"

# Optional: Service name (defaults to Lambda function name)
ROTEL_OTEL_RESOURCE_ATTRIBUTES="service.name=my-lambda-api,service.version=1.0.0"
الإعدادات المتقدمة (باستخدام ملف .env)
لإعدادات أكثر تعقيدًا، أنشئ ملف rotel.env داخل حزمة Lambda function الخاصة بك:rotel.env:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=<YOUR_INGESTION_API_KEY>"
ROTEL_OTEL_RESOURCE_ATTRIBUTES="service.name=my-lambda-api,deployment.environment=production"
ثم عيّن متغير البيئة بحيث يشير إلى هذا الملف:
ROTEL_ENV_FILE=/var/task/rotel.env
استخدام AWS Secrets Manager أو Parameter Store
في عمليات النشر الإنتاجية، خزّن القيم الحساسة مثل مفاتيح API في AWS Secrets Manager أو Parameter Store:مثال على AWS Secrets Manager:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=${arn:aws:secretsmanager:us-east-1:123456789012:secret:clickstack-api-key-abc123}"
مثال على AWS Parameter Store:
ROTEL_OTLP_EXPORTER_ENDPOINT=https://clickstack.example.com:4317
ROTEL_OTLP_EXPORTER_CUSTOM_HEADERS="Authorization=${arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key}"
أذونات IAM المطلوبة:أضِف هذه الأذونات إلى دور التنفيذ الخاص بـ Lambda:لـ Secrets Manager:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "secretsmanager:GetSecretValue",
        "secretsmanager:BatchGetSecretValue"
      ],
      "Resource": "arn:aws:secretsmanager:us-east-1:123456789012:secret:clickstack-api-key-*"
    }
  ]
}
في Parameter Store:
{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Effect": "Allow",
      "Action": [
        "ssm:GetParameters"
      ],
      "Resource": "arn:aws:ssm:us-east-1:123456789012:parameter/clickstack-api-key"
    }
  ]
}
تضيف استدعاءات AWS API لاسترداد القيم السرية من 100 إلى 150 ملّي ثانية إلى زمن بدء التشغيل البارد. تُسترد القيم السرية على دفعات (حتى 10) وفقط عند التهيئة، لذا لا تتأثر عمليات الاستدعاء اللاحقة.
4

اختبر التكامل

استدعِ دالة Lambda الخاصة بك للتأكد من إرسال السجلات إلى ClickStack:
aws lambda invoke \
  --function-name my-function \
  --payload '{"test": "data"}' \
  response.json
تحقّق من سجلات Lambda بحثًا عن أي أخطاء:
aws logs tail /aws/lambda/my-function --follow
5

تحقّق من السجلات في HyperDX

بعد اكتمال الإعداد، سجّل الدخول إلى HyperDX (واجهة مستخدم ClickStack) وتحقّق من وصول السجلات:ابحث عن السمات الأساسية التالية في السجلات:
  • service.name: اسم دالة Lambda الخاصة بك
  • faas.name: اسم دالة AWS Lambda
  • faas.invocation_id: معرّف الاستدعاء الفريد
  • cloud.provider: “aws”
  • cloud.platform: “aws_lambda”

تعطيل CloudWatch Logs (لتحسين التكلفة)

بشكل افتراضي، ترسل AWS Lambda جميع السجلات إلى CloudWatch Logs، وقد تصبح هذه العملية مكلفة عند التوسّع. بعد التأكد من أن السجلات تتدفق إلى ClickStack، يمكنك تعطيل تسجيل CloudWatch لتقليل التكاليف.
1

إزالة أذونات CloudWatch من دور التنفيذ

  1. افتح AWS Console وانتقل إلى AWS Lambda
  2. انتقل إلى دالة Lambda الخاصة بك
  3. حدّد ConfigurationPermissions
  4. انقر على اسم دور التنفيذ لفتح وحدة تحكم IAM
  5. عدّل الدور وأزل أي actions من نوع logs:*:
    • إذا كنت تستخدم سياسة مخصصة، فعدّلها لإزالة logs:CreateLogGroup وlogs:CreateLogStream وlogs:PutLogEvents
    • إذا كنت تستخدم سياسة AWS المُدارة AWSLambdaBasicExecutionRole، فأزلها من الدور
  6. احفظ الدور
2

التحقّق من تعطيل تسجيل CloudWatch

استدعِ دالتك مرة أخرى وتحقّق مما يلي:
  1. عدم إنشاء أي streams جديدة للسجلات في CloudWatch
  2. استمرار ظهور السجلات في ClickStack/HyperDX
# يجب ألا يعرض هذا أي streams جديدة للسجلات بعد تغيير السياسة
aws logs describe-log-streams \
  --log-group-name /aws/lambda/my-function \
  --order-by LastEventTime \
  --descending \
  --max-items 5

إضافة auto-instrumentation في OpenTelemetry

يعمل Rotel Lambda Extension بسلاسة مع طبقات auto-instrumentation في OpenTelemetry لجمع تتبع وmetrics الموزعة بالإضافة إلى سجل.
1

اختر طبقة auto-instrumentation المناسبة للغتك

توفّر AWS طبقات auto-instrumentation في OpenTelemetry لعدة لغات:
اللغةنمط ARN للطبقة
Node.jsarn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-{version}
Pythonarn:aws:lambda:{region}:901920570463:layer:aws-otel-python-{arch}-ver-{version}
Javaarn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-{arch}-ver-{version}
اعثر على أحدث الإصدارات في AWS OpenTelemetry Lambda repository.
2

أضف كلتا الطبقتين إلى دالتك

أضف كلتا طبقة امتداد Rotel وطبقة auto-instrumentation:
aws lambda update-function-configuration \
  --function-name my-function \
  --layers \
    arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version} \
    arn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-1-30-2:1
3

اضبط auto-instrumentation

عيّن متغير البيئة AWS_LAMBDA_EXEC_WRAPPER لتمكين auto-instrumentation:بالنسبة إلى Node.js:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
بالنسبة إلى Python:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-instrument
بالنسبة إلى Java:
AWS_LAMBDA_EXEC_WRAPPER=/opt/otel-handler
4

تحقّق من تتبع في HyperDX

بعد استدعاء دالتك:
  1. انتقل إلى عرض Traces في HyperDX
  2. ينبغي أن تظهر لك تتبع تتضمن spans من دالة Lambda الخاصة بك
  3. ستُربط تتبع مع سجل عبر السمتين trace_id و span_id

تطبيقات توضيحية

اطّلع على تطبيق Python التجريبي الذي يوضّح Rotel Lambda Extension:
  • Python + ClickHouse: تطبيق Python مزوّد بـ instrumentation يدوي لـ OpenTelemetry، يرسل تتبع وسجل مباشرةً إلى ClickHouse

انضم إلى مجتمع Rotel

إذا كانت لديك أسئلة حول Rotel، يُرجى الانضمام إلى خادم Discord الخاص بـ Rotel ومشاركة ملاحظاتك أو طرح أسئلتك. ويمكنك أيضًا الاطّلاع على Rotel Lambda Extension للمساهمة في أي تحسينات.

موارد إضافية

  • Rotel Lambda Extension: الشفرة المصدرية ووثائق مفصلة
  • Rotel Core: مستوى بيانات OTel خفيف الوزن الذي يشغّل الامتداد
آخر تعديل في ٢٥ يونيو ٢٠٢٦