Rotel を使って ClickStack で AWS Lambda のログを監視する
このガイドでは、Rotel Lambda Extension を使用して関数ログ、拡張機能ログ、OpenTelemetry データを収集し、ClickHouse に直接転送することで、ClickStack を使って AWS Lambda 関数を監視する方法を説明します。次のことを行います:
- Rotel Lambda Extension レイヤーを Lambda 関数にデプロイする
- 拡張機能を構成して、ログとトレースを ClickStack にエクスポートする
- コスト削減のために、必要に応じて CloudWatch Logs を無効にする
このアプローチにより、CloudWatch Logs を完全にバイパスすることで、Lambda のオブザーバビリティコストを大幅に削減できます。
所要時間: 約 5〜10 分
既存の Lambda 関数との統合
このセクションでは、既存の AWS Lambda 関数を設定し、Rotel Lambda Extension を使用してログとトレースを ClickStack に送信する方法について説明します。
前提条件
- ClickStack インスタンスが稼働していること
- 監視対象となる AWS Lambda 関数が存在すること
- 適切な権限で設定された AWS CLI があること
- レイヤーを追加する権限を持つ Lambda 実行ロールがあること
適切なOTel Lambda Extensionレイヤーを選択する
Rotel Lambda Extensionは、ビルド済みのAWS Lambdaレイヤーとして提供されています。Lambda関数のアーキテクチャに対応するレイヤーARNを選択してください:
| アーキテクチャ | ARN パターン | 最新版 |
|---|---|---|
| x86-64/amd64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-amd64-alpha:{version} | |
| arm64 | arn:aws:lambda:{region}:418653438961:layer:rotel-extension-arm64-alpha:{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
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 Parameter Store の例:
必要なIAM権限:
Lambda実行ロールに以下の権限を追加します:
Secrets Manager の場合:
Parameter Storeの場合:
シークレット取得のためのAWS API呼び出しにより、コールドスタート時のレイテンシが100〜150ミリ秒増加します。シークレットはバッチ処理(最大10個)で取得され、初期化時のみ実行されるため、以降の呼び出しには影響しません。
HyperDXでログを検証する
設定完了後、HyperDX(ClickStackのUI)にログインし、ログが正常に取り込まれていることを確認します:


ログ内で以下の主要な属性を探してください:
service.name: 対象の Lambda 関数名faas.name: AWS Lambda 関数名faas.invocation_id: 一意の呼び出しIDcloud.provider: "aws"cloud.platform: "aws_lambda"
CloudWatch Logs を無効化する(コスト最適化)
デフォルトでは、AWS Lambda はすべてのログを CloudWatch Logs に送信しますが、大規模環境では高コストになる場合があります。ログが ClickStack に流れていることを確認できたら、コスト削減のために CloudWatch Logs へのログ送信を無効化してかまいません。
実行ロールから CloudWatch 権限を削除する
- AWS マネジメントコンソールを開き、AWS Lambda に移動します
- 対象の Lambda 関数に移動します
- Configuration → Permissions を選択します
- 実行ロール名をクリックして IAM コンソールを開きます
- ロールを編集し、
logs:*アクションをすべて削除します:- カスタムポリシーを使用している場合は、
logs:CreateLogGroup、logs:CreateLogStream、logs:PutLogEventsを削除します - AWS 管理ポリシー
AWSLambdaBasicExecutionRoleを使用している場合は、そのポリシーをロールから削除します
- カスタムポリシーを使用している場合は、
- ロールを保存します
CloudWatch へのログ出力が無効化されたことを確認する
関数を再度呼び出し、次の点を確認します:
- 新しい CloudWatch のログストリームが作成されていないこと
- ClickStack/HyperDX にログが引き続き表示されていること
OpenTelemetry の自動計装を追加する
Rotel Lambda Extension は 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 OpenTelemetry Lambda リポジトリで確認してください。
HyperDX でトレースを確認する
関数を呼び出した後、次を確認します:
- HyperDX の Traces ビューに移動します
- Lambda 関数からの span を含むトレースが表示されていることを確認します
- トレースは
trace_idとspan_id属性を介してログと相関付けられます
サンプルアプリケーション
Rotel Lambda Extension を利用した Python アプリのサンプルを参照してください:
- Python + ClickHouse:OpenTelemetry を手動で計装し、トレースとログを直接 ClickHouse に送信する Python アプリケーション
Rotel コミュニティに参加する
Rotel についてご質問がある場合は、Rotel の Discord サーバー に参加し、フィードバックやご質問をお寄せください。改善に貢献したい場合は、Rotel Lambda Extension をチェックしてみてください。
追加リソース
- Rotel Lambda Extension: ソースコードと詳細なドキュメント
- Rotel Core: この拡張機能の基盤となる軽量な OTel データプレーン