- 重要な情報
- はじめに
- 用語集
- ガイド
- エージェント
- インテグレーション
- OpenTelemetry
- 開発者
- API
- CoScreen
- アプリ内
- Service Management
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
Datadog Forwarder は、AWS から Datadog にログを送信する AWS Lambda 関数で、具体的には次のようなものです。
Forwarder を使用して AWS Lambda のログから Datadog にメトリクス、トレース、ログを転送しているサーバーレスのお客様は、Lambda の実行環境から直接テレメトリーを収集する Datadog Lambda 拡張機能へ移行するべきです。Forwarder は引き続きサーバーレスモニタリングで使用可能ですが、最新機能のサポートに伴うアップデートは行われません。
Datadog Forwarder による AWS サービスのログ送信については、Datadog Lambda 関数で AWS Services のログを送信するガイドをお読みください。
Datadog では、CloudFormation を使用して Forwarder を自動インストールすることを推奨しています。また、Terraform を使用するか手動で設定プロセスを完了することもできます。インストールが完了したら、トリガーの設定により、S3 バケットや CloudWatch ロググループなどのログソースに Forwarder をサブスクライブすることができます。
DdApiKey
を入力し、適切な DdSite
を選択します。他のすべてのパラメーターはオプションです。Forwarder
のインストール済みの Forwarder Lambda 関数を見つけます。以前に Datadog の AWS インテグレーションページから以下の CloudFormation テンプレートを使用して AWS インテグレーションを有効にした場合、それを含めることにした場合、アカウントにはすでに Datadog Lambda Forwarder 関数がプロビジョニングされている場合があります。その場合、ログをエクスポートしたいアカウント内の追加の AWS リージョンに Datadog Lambda をインストールするだけで済みます。
注: Datadog Lambda Forwarder 関数コードブロックは、Lambda レイヤーを通してロジックが実装されているため、空であることが期待されます。
Terraform リソース aws_cloudformation_stack
を、指定されている CloudFormation テンプレートのラッパーとして使用して、Forwarder をインストールします。
Datadog は、個別の Terraform コンフィギュレーションを作成することをお勧めします。
DdApiKeySecretArn
パラメーターを介してシークレット ARN を指定します。API キーと Forwarder の構成を分離することで、Forwarder のアップデート時に Datadog API キーを提供する必要がありません。将来的に Forwarder を更新またはアップグレードするには、Forwarder の構成を再度適用します。
# AWS Secrets Manager に Datadog API キーを保存します
variable "dd_api_key" {
type = string
description = "Datadog API key"
}
resource "aws_secretsmanager_secret" "dd_api_key" {
name = "datadog_api_key"
description = "Encrypted Datadog API Key"
}
resource "aws_secretsmanager_secret_version" "dd_api_key" {
secret_id = aws_secretsmanager_secret.dd_api_key.id
secret_string = var.dd_api_key
}
output "dd_api_key" {
value = aws_secretsmanager_secret.dd_api_key.arn
}
# Datadog Forwarder を使用して S3 と CloudWatch からのログ、および Lambda 関数からの可観測性データを Datadog へ送信します。詳しくは https://github.com/DataDog/datadog-serverless-functions/tree/master/aws/logs_monitoring を参照してください
resource "aws_cloudformation_stack" "datadog_forwarder" {
name = "datadog-forwarder"
capabilities = ["CAPABILITY_IAM", "CAPABILITY_NAMED_IAM", "CAPABILITY_AUTO_EXPAND"]
parameters = {
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN",
DdSite = "<code class="js-region-param region-param" data-region-param="dd_site"></code>",
FunctionName = "datadog-forwarder"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
注: DdSite
パラメーターが Datadog サイトと一致することを確認してください。Datadog サイトは です。
class SampleRegistry { public function put($key, $value) { \App\some_utility_function(‘some argument’); // 挿入されたアイテムの ID を返す return 456; }
指定されている CloudFormation テンプレートを使用して Forwarder をインストールできない場合は、以下の手順に従って Forwarder を手動でインストールできます。テンプレートの機能について改善できる点がございましたら、お気軽に問題やプルリクエストを開いてお知らせください。
aws-dd-forwarder-<VERSION>.zip
を使用して Python 3.9 Lambda 関数を作成します。DD_API_KEY_SECRET_ARN
に Lambda 関数のシークレット ARN を設定し、Lambda 実行ロールに secretsmanager:GetSecretValue
アクセス許可を追加します。s3:GetObject
アクセス許可を Lambda 実行ロールに追加します。DD_ENHANCED_METRICS
を false
に設定します。これにより、Forwarder は拡張メトリクス自体を生成しなくなりますが、他の Lambda からカスタムメトリクスを転送します。DD_S3_BUCKET_NAME
をバケット名に設定します。また、このバケットに s3:GetObject
、s3:PutObject
、s3:DeleteObject
アクセス許可を Lambda 実行ロールに提供します。このバケットは、Lambda タグキャッシュの保存に使用されます。dd_forwarder_version
タグの値をメモします (3.3.0
など)。https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml
を使用してスタックを更新します。必要に応じて、latest
を 3.0.2.yaml
などの特定のバージョンに置き換えることもできます。更新を適用する前に、変更セットを確認してください。バージョン 3.74.0 以降、Lambda 関数は Python 3.9 を必要とするように更新されました。古い Forwarder を 3.74.0 以上にアップグレードする場合、AWS Lambda 関数が Python 3.9 を使用するように構成されていることを確認してください。
バージョン 3.49.0 以降、Lambda 関数は Python 3.8 を必要とするように更新されました。古い Forwarder を 3.49.0 以上にアップグレードする場合、AWS Lambda 関数が Python 3.8 を使用するように構成されていることを確認してください。
バージョン 3.0.0 以降、Forwarder Lambda 関数は CloudFormation によって管理されます。古い Forwarder のインストールを 3.0.0 以降にアップグレードするには、以下の手順に従います。
Forwarder
のインストール済みの Forwarder Lambda 関数を見つけます。Forwarder および、Forwarder CloudFormation スタックによって作成された他の AWS リソースを安全に削除するには、以下の手順に従います。
Datadog は、Lambda 関数を直接編集するのではなく、CloudFormation を介して Forwarder 設定を調整することをお勧めします。スタックを起動するときに、template.yaml
ファイル と CloudFormation スタック作成ユーザーインターフェイスで設定の説明を確認してください。追加の設定をテンプレートで調整できるように、お気軽にプルリクエストを送信してください。
最近のリリースで問題がすでに修正されているかどうかも、忘れずに確認してください。
Forwarder Lambda 関数で環境変数 DD_LOG_LEVEL
を debug
に設定して、詳細なログ記録を一時的に有効にします (削除することを忘れないでください)。デバッグログには、Lambda 関数が受信する正確なイベントペイロードと、Datadog に送信されるデータ (ログ、メトリクス、またはトレース) ペイロードを表示できる必要があります。
さらに詳細な調査のために、ログやコードを追加することもできます。寄稿セクションから、ローカルの変更を使用して Forwarder コードを構築する手順を見つけてください。
それでもわからない場合は、デバッグログのコピーを使用して Datadog サポートのチケットを作成してください。
プルリクエストは大歓迎です。こちらがクイックガイドです。
実装する前に機能やバグ修正について話し合いたい場合は、Datadog Slack コミュニティの #serverless
チャンネルで私たちを見つけてください。
ブランチをフォーク、複製、作成します。
git clone git@github.com:<your-username>/datadog-serverless-functions.git
git checkout -b <my-branch>
コードを変更します。
ローカルの変更で構築します。
cd aws/logs_monitoring
./tools/build_bundle.sh <SEMANTIC_VERSION> # any unique version is fine
変更したコードでテスト Forwarder を更新し、テストします。
# Upload in the AWS Lambda console if you don't have AWS CLI
aws lambda update-function-code \
--region <AWS_REGION>
--function-name <FORWARDER_NAME> \
--zip-file fileb://.forwarder/aws-dd-forwarder-<SEMANTIC_VERSION>.zip
単体テストを実行します。
python -m unittest discover . # for code in Python
./trace_forwarder/scripts/run_tests.sh # for code in Go
インテグレーションテストを実行します。
./tools/integration_tests/integration_tests.sh
# to update the snapshots if changes are expected
./tools/integration_tests/integration_tests.sh --update
変更が CloudFormation テンプレートに影響する場合は、自身の AWS アカウントに対してインストールテストを実行してください。
./tools/installation_test.sh
フォークにプッシュして、プルリクエストを送信します。
複数の Datadog オーガニゼーションまたはその他の送信先にログを送信する必要がある場合は、AdditionalTargetLambdaArns
Cloudformation パラメーターを構成し、Datadog Forwarder で受信ログを指定の Lambda 関数にコピーします。これらの追加された Lambda 関数は、Datadog Forwarder が受信するものとまったく同じ event
で非同期的に呼び出されます。
VPC プライベートサブネットで Forwarder を実行し、AWS PrivateLink で Datadog にデータを送信できます。AWS PrivateLink は、AWS でホストされている Datadog サイトでのみ (たとえば datadoghq.eu
ではなく datadoghq.com
)、構成が可能です。
api
、http-logs.intake
、trace.agent
エンドポイントを VPC に追加します。UseVPC
を true
に設定します。VPCSecurityGroupIds
および VPCSubnetIds
を設定します。DdFetchLambdaTags
を false
に設定します。DdUsePrivateLink
オプションは v3.41.0 から非推奨になりました。このオプションは以前、データのインテークに PrivateLink エンドポイントの特別なセットを使用するよう Forwarder に指示するために使用されていました: pvtlink.api.
、api-pvtlink.logs.
、trace-pvtlink.agent.
。v3.41.0 以降、Forwarder はインテークエンドポイントの通常の DNS 名を使用して PrivateLink 経由で Datadog にデータを送信することができます: api.
、http-intake.logs.
、trace.agent.
。したがって、DdUsePrivateLink
オプションは不要になりました。
DdUsePrivateLink
が true
に設定された、Forwarder の旧デプロイメントをご使用の場合は、構成済みの PrivateLink エンドポイントと Datadog の文書に記載されたものが異なることがありますが、これは想定内です。古い PrivateLink エンドポイントは、文書から削除されていますが、依然として機能します。Forwarder をアップグレードする際は、変更の必要はなく、DdUsePrivateLink
を有効にしたまま、旧エンドポイントを引き続き使用できます。
ただし、新しいエンドポイントへの切り替えをご希望の場合は、上記の新しい手順に従い、以下を実行する必要があります。
api.
、http-intake.logs.
、trace.agent.
に設定します。DdUseVPC
を true
に設定します。DdUsePrivateLink
を false
に設定します。公共のインターネットに直接アクセスできない VPC に Forwarder をデプロイする必要があり、AWS PrivateLink を使用して Datadog に接続できない場合 (例えば、組織が Datadog EU サイト: datadoghq.eu
にホストされている場合)、プロキシ経由でデータを送信することができます。
.
)。DdUseVPC
、VPCSecurityGroupIds
、VPCSubnetIds
を設定します。DdFetchLambdaTags
オプションが無効になっていることを確認してください。DdApiUrl
を http://<proxy_host>:3834
または https://<proxy_host>:3834
に設定します。DdTraceIntakeUrl
を http://<proxy_host>:3835
または https://<proxy_host>:3835
に設定します。DdUrl
を <proxy_host>
に、DdPort
を 3837
に設定します。それ以外、Web プロキシを使用している場合
DdHttpProxyURL
をプロキシエンドポイントに設定します。例: http://<proxy_host>:<port>
またはプロキシにユーザー名とパスワードがある場合は、http://<username>:<password>@<proxy_host>:<port>
http
を使用したプロキシに接続する場合は、DdNoSsl
を true
に設定します。https
を使用したプロキシに接続する場合は DdSkipSslValidation
を true
に設定します。Datadog Forwarder は Datadog によって署名されています。Forwarder の整合性を確認するには、手動インストール方法を使用します。Forwarder ZIP ファイルをアップロードする前に、Datadog の署名プロファイル ARN (arn:aws:signer:us-east-1:464622532012:/signing-profiles/DatadogLambdaSigningProfile/9vMI9ZAGLc
) を含むコード署名コンフィギュレーションを作成し、それを Forwarder Lambda 関数に関連付けます。
DdApiKey
DdApiKeySecretArn
を使用します。DdApiKeySecretArn
DdSite
です。FunctionName
MemorySize
Timeout
ReservedConcurrency
LogRetentionInDays
DdTags
env:prod,stack:classic
DdMultilineLogRegexPattern
\d{2}\/\d{2}\/\d{4}
です。DdUseTcp
DdNoSsl
DdUrl
DdPort
DdSkipSslValidation
DdUseCompression
DdCompressionLevel
DdForwardLog
DdFetchLambdaTags
tag:GetResources
が Lambda 実行 IAM ロールに自動的に追加されます。DdFetchLogGroupTags
logs:ListTagsLogGroup
が Lambda 実行 IAM ロールに自動的に追加されます。RedactIp
\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}
に一致するテキストを xxx.xxx.xxx.xxx
に置き換えます。RedactEmail
[a-zA-Z0-9_.+-]+@[a-zA-Z0-9-]+\.[a-zA-Z0-9-.]+
に一致するテキストを xxxxx@xxxxx.com
に置き換えます。DdScrubbingRule
xxxxx
(デフォルト) または DdScrubbingRuleReplacement
(指定されている場合) に置き換えます。ログスクラビング規則は、完全な JSON 形式のログに適用されます。これには、Lambda 関数によって自動的に追加されたメタデータも含まれます。各ログで、パターンマッチが見つからなくなるまですべての一致が置換されます。.*
など、非効率な正規表現を使用すると、Lambda 関数の遅延につながります。DdScrubbingRuleReplacement
に一致するテキストを、指定されたテキストで置き換えます。
ExcludeAtMatch
ExcludeAtMatch
と IncludeAtMatch
の両方に一致する場合、そのログは除外されます。IncludeAtMatch
ExcludeAtMatch
によって除外されません。フィルタリング規則は、完全な JSON 形式のログに適用されます。これには、Forwarder によって自動的に追加されたメタデータも含まれます。ただし、ログパイプラインによる変換はログが Datadog に送信された後に行われるため、Forwarder でログをフィルタリングする際には使用できません。.*
など、非効率な正規表現を使用すると、Forwarder の遅延につながります。
ログのフィルタリングに使用できる正規表現の例:
"(START|END) RequestId:\s
の包含 (または除外)。先行する "
は、 ログメッセージの開始 (JSON blob 内の ({"message": "START RequestId...."}
)) と一致する必要があります。Datadog では、REPORT
ログを残すことを推奨しています。これは、サーバーレス関数のビューで呼び出しリストを生成するために使用されるからです。errorMessage
\b[4|5][0-9][0-9]\b
message
フィールドに特定の JSON キー/値ペアを含む CloudWatch ログのみを含める: \"awsRegion\":\"us-east-1\"
{"awsRegion": "us-east-1"}
は {\"awsRegion\":\"us-east-1\"}
としてエンコードされます。したがって、提供するパターンには、\"awsRegion\":\"us-east-1\"
のように \
エスケープ文字を含める必要があります。ログに対してさまざまなパターンをテストするには、デバッグログをオンにします。
SourceZipUrl
PermissionBoundaryArn
DdUsePrivateLink
(非推奨)DdHttpProxyURL
DdSkipSslValidation
も true に設定してください。DdNoProxy
NO_PROXY
を設定します。これは、Web プロキシから除外する必要があるドメイン名のコンマ区切りのリストです。VPCSecurityGroupIds
VPCSubnetIds
AdditionalTargetLambdaArns
event
と非同期で呼び出される Lambda ARN のコンマ区切りリスト。InstallAsLayer
LayerARN
CloudFormation Stack をデフォルトのオプションでデプロイするには、Datadog API キーをシークレットとして保存し、Forwarder のコード (ZIP ファイル) を格納する S3 バケットを作成し、Lambda 関数 (実行ロールとロググループを含む) を作成します。
IAM ステートメント:
{
"Effect": "Allow",
"Action": [
"cloudformation:*",
"secretsmanager:CreateSecret",
"secretsmanager:TagResource",
"s3:CreateBucket",
"s3:GetObject",
"s3:PutEncryptionConfiguration",
"s3:PutBucketPublicAccessBlock",
"iam:CreateRole",
"iam:GetRole",
"iam:PassRole",
"iam:PutRolePolicy",
"iam:AttachRolePolicy",
"lambda:CreateFunction",
"lambda:GetFunction",
"lambda:GetFunctionConfiguration",
"lambda:GetLayerVersion",
"lambda:InvokeFunction",
"lambda:PutFunctionConcurrency",
"lambda:AddPermission",
"lambda:TagResource",
"logs:CreateLogGroup",
"logs:DescribeLogGroups",
"logs:PutRetentionPolicy"
],
"Resource": "*"
}
CloudFormation スタックを作成するには、次の機能が必要です。
CloudFormation Stack は、次の IAM ロールを作成します。
IAM ステートメント
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": ["s3:GetObject"],
"Resource": "arn:aws:s3:::*",
"Effect": "Allow"
},
{
"Action": ["secretsmanager:GetSecretValue"],
"Resource": "<ARN of DdApiKeySecret>",
"Effect": "Allow"
}
]
ForwarderZipCopierRole
: ForwarderZipCopier Lambda 関数が S3 バケットに Forwarder デプロイの ZIP ファイルをダウンロードするための実行ロール。IAM ステートメント:
[
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents"
],
"Resource": "*"
},
{
"Action": ["s3:PutObject", "s3:DeleteObject"],
"Resource": "<S3Bucket to Store the Forwarder Zip>",
"Effect": "Allow"
},
{
"Action": ["s3:ListBucket"],
"Resource": "<S3Bucket to Store the Forwarder Zip>",
"Effect": "Allow"
}
]
お役に立つドキュメント、リンクや記事: