要点このガイドでは、Rotel Lambda Extension を使用して関数ログ、拡張機能のログ、OpenTelemetry データを収集し、直接 ClickHouse に転送することで、ClickStack で AWS Lambda 関数を監視する方法を説明します。ここでは、次の内容を学べます。
- Lambda 関数に Rotel Lambda Extension レイヤーをデプロイする
- 拡張機能を設定して、ログとトレースを ClickStack にエクスポートする
- 必要に応じて CloudWatch Logs を無効にしてコストを削減する
既存のLambda関数とのインテグレーション
前提条件
- 稼働中の ClickStack インスタンス
- 監視対象の AWS Lambda 関数
- 適切な権限で設定済みの AWS CLI
- レイヤーを追加する権限を持つ Lambda 実行ロール
適切な Rotel Lambda Extension レイヤーを選択する
Lambda のランタイムアーキテクチャに合った Lambda レイヤーを選択します。{version} フィールド
は、デプロイ先の AWS リージョンによって異なります。お使いのリージョンに対応する最新のバージョン番号については、releases
ページを確認してください。| アーキテクチャ | 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-, us-west-
- eu-central-1, eu-north-1, eu-west-
- ca-central-1
- ap-southeast-, ap-northeast-
- ap-south-1
- sa-east-1
Rotel レイヤーを Lambda 関数に追加する
これらの例では、{arch}、{region}、{version} を上記の該当する値に置き換えてください。Option 1: AWS コンソール
- AWS Lambda コンソールを開きます
- 対象の Lambda 関数に移動します
- Layers セクションまでスクロールし、Add a layer をクリックします
- Specify an ARN を選択します
- Rotel レイヤーの ARN を入力します。
- Add をクリックします
Option 2: AWS CLI
オプション 3: AWS SAM
拡張機能を ClickStack にエクスポートするよう設定する
Rotel Lambda Extension は環境変数を使って設定します。OTLP エクスポーターのエンドポイントがご利用の ClickStack インスタンスを指すように設定する必要があります。これらの例では、AWS Lambda 関数から ClickStack インスタンスにアクセスできることを前提としています。基本設定 (環境変数)
以下の環境変数を Lambda 関数に追加します。高度な設定 (.env ファイルを使用)
より複雑な設定が必要な場合は、Lambda関数のバンドル内に rotel.env ファイルを作成します。rotel.env:AWS Secrets Manager または Parameter Store を使用する
本番環境へのデプロイでは、API キーなどの機密情報は AWS Secrets Manager または Parameter Store に保存します。AWS Secrets Manager の例:シークレットを取得するための AWS API 呼び出しにより、コールドスタートの遅延が 100~150ms 増加します。シークレットはバッチ (最大 10 件) で取得され、取得は初期化時のみのため、その後の呼び出しには影響しません。
HyperDX でログを確認する
設定が完了したら、HyperDX (ClickStack の UI) にログインし、ログが取り込まれていることを確認します。ログで次の主要な属性を確認します。service.name: Lambda 関数名faas.name: AWS Lambda 関数名faas.invocation_id: 一意の呼び出し IDcloud.provider: “aws”cloud.platform: “aws_lambda”
CloudWatch Logs を無効にする (コスト最適化)
実行ロールから CloudWatch 関連の権限を削除する
- AWS Console を開き、AWS Lambda に移動します
- 対象の Lambda 関数に移動します
- Configuration → Permissions を選択します
- 実行ロール名をクリックして IAM コンソールを開きます
- ロールを編集し、
logs:*アクションを削除します- カスタムポリシーを使用している場合は、
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEventsを削除するように編集します - AWS マネージドポリシー
AWSLambdaBasicExecutionRoleを使用している場合は、そのポリシーをロールから削除します
- カスタムポリシーを使用している場合は、
- ロールを保存します
CloudWatch のログ出力が無効になっていることを確認する
関数を再度呼び出し、次のことを確認します。- CloudWatch に新しいログストリームが作成されない
- ログが引き続き ClickStack/HyperDX に表示される
OpenTelemetryの自動インストルメンテーションを追加する
使用する言語のインストルメンテーションレイヤーを選択する
AWS では、複数の言語向けに OpenTelemetry の自動インストルメンテーションレイヤーが提供されています。| Language | Layer ARN Pattern |
|---|---|
| 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_LAMBDA_EXEC_WRAPPER を設定します。For Node.js:HyperDX でトレースを確認する
関数を実行した後:- HyperDX の Traces ビューを開きます
- Lambda 関数からの span を含むトレースが表示されるはずです
- トレースは
trace_idとspan_idattribute を介してログと相関付けられます
サンプルアプリケーション
- Python + ClickHouse: 手動で OpenTelemetry をインストルメントした Python アプリケーション。トレースとログを ClickHouse に直接送信します
Rotel コミュニティに参加する
参考資料
- Rotel Lambda Extension: ソースコードと詳細なドキュメント
- Rotel Core: この拡張機能を支える軽量な OTEL データプレーン