التكامل مع وظائف Lambda الحالية
يوضح هذا القسم كيفية تهيئة وظائف AWS Lambda الحالية لديك لإرسال السجلات والتتبعات إلى ClickStack باستخدام Rotel Lambda Extension.
المتطلبات الأساسية
- مثيل ClickStack قيد التشغيل
- وظائف AWS Lambda المراد مراقبتها
- AWS CLI مُعدّ مع الأذونات المناسبة
- دور تنفيذ Lambda مزوّد بأذونات لإضافة الطبقات
اختر طبقة Rotel Lambda Extension المناسبة
اختر طبقة Lambda التي تتوافق مع معمارية بيئة تشغيل Lambda لديك. يعتمد الحقل {version}
على منطقة AWS التي تنشر إليها. راجع صفحة الإصدارات
للاطلاع على أحدث أرقام الإصدارات المطابقة لمنطقتك.
| المعمارية | ARN |
|---|---|
| x86-64/amd64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64:{version} |
| arm64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64:{version} |
المناطق المتاحة:
- us-east-2, us-west-2
- eu-central-1, eu-north-1, eu-west-3
- ca-central-1
- ap-southeast-2, ap-northeast-2
- ap-south-1
- sa-east-1
أضِف طبقة Rotel إلى دالة Lambda الخاصة بك
في هذه الأمثلة، استبدل {arch} و{region} و{version} بالقيم المناسبة المذكورة أعلاه.
الخيار 1: Console في AWS
- افتح Console الخاصة بـ AWS Lambda
- انتقل إلى دالة Lambda الخاصة بك
- مرّر إلى قسم Layers وانقر على Add a layer
- اختر Specify an ARN
- أدخل ARN الخاص بطبقة Rotel:
arn:aws:lambda:{region}:418653438961:layer:rotel-extension-{arch}:{version} - انقر على 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}اضبط الامتداد للتصدير إلى 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"
}
]
}اختبر التكامل
استدعِ دالة Lambda الخاصة بك للتأكد من إرسال السجلات إلى ClickStack:
aws lambda invoke \
--function-name my-function \
--payload '{"test": "data"}' \
response.jsonتحقّق من سجلات Lambda بحثًا عن أي أخطاء:
aws logs tail /aws/lambda/my-function --followتحقّق من السجلات في HyperDX
بعد اكتمال الإعداد، سجّل الدخول إلى HyperDX (واجهة مستخدم ClickStack) وتحقّق من وصول السجلات:


ابحث عن السمات الأساسية التالية في السجلات:
service.name: اسم دالة Lambda الخاصة بكfaas.name: اسم دالة AWS Lambdafaas.invocation_id: معرّف الاستدعاء الفريدcloud.provider: "aws"cloud.platform: "aws_lambda"
تعطيل CloudWatch Logs (لتحسين التكلفة)
بشكل افتراضي، ترسل AWS Lambda جميع السجلات إلى CloudWatch Logs، وقد تصبح هذه العملية مكلفة عند التوسّع. بعد التأكد من أن السجلات تتدفق إلى ClickStack، يمكنك تعطيل تسجيل CloudWatch لتقليل التكاليف.
إزالة أذونات CloudWatch من دور التنفيذ
- افتح AWS Console وانتقل إلى AWS Lambda
- انتقل إلى دالة Lambda الخاصة بك
- حدّد Configuration → Permissions
- انقر على اسم دور التنفيذ لفتح وحدة تحكم IAM
- عدّل الدور وأزل أي actions من نوع
logs:*:- إذا كنت تستخدم سياسة مخصصة، فعدّلها لإزالة
logs:CreateLogGroupوlogs:CreateLogStreamوlogs:PutLogEvents - إذا كنت تستخدم سياسة AWS المُدارة
AWSLambdaBasicExecutionRole، فأزلها من الدور
- إذا كنت تستخدم سياسة مخصصة، فعدّلها لإزالة
- احفظ الدور
التحقّق من تعطيل تسجيل CloudWatch
استدعِ دالتك مرة أخرى وتحقّق مما يلي:
- عدم إنشاء أي streams جديدة للسجلات في CloudWatch
- استمرار ظهور السجلات في 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 الموزعة بالإضافة إلى سجل.
اختر طبقة auto-instrumentation المناسبة للغتك
توفّر AWS طبقات auto-instrumentation في OpenTelemetry لعدة لغات:
| اللغة | نمط ARN للطبقة |
|---|---|
| Node.js | arn:aws:lambda:{region}:901920570463:layer:aws-otel-nodejs-{arch}-ver-{version} |
| Python | arn:aws:lambda:{region}:901920570463:layer:aws-otel-python-{arch}-ver-{version} |
| Java | arn:aws:lambda:{region}:901920570463:layer:aws-otel-java-agent-{arch}-ver-{version} |
اعثر على أحدث الإصدارات في AWS OpenTelemetry Lambda repository.
أضف كلتا الطبقتين إلى دالتك
أضف كلتا طبقة امتداد 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اضبط 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تحقّق من تتبع في HyperDX
بعد استدعاء دالتك:
- انتقل إلى عرض Traces في HyperDX
- ينبغي أن تظهر لك تتبع تتضمن spans من دالة Lambda الخاصة بك
- ستُربط تتبع مع سجل عبر السمتين
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 خفيف الوزن الذي يشغّل الامتداد