- 重要な情報
- アプリ内
- インフラストラクチャー
- アプリケーションパフォーマンス
- 継続的インテグレーション
- ログ管理
- セキュリティ
- UX モニタリング
- 管理
Datadog Forwarder は、ログ、カスタムメトリクス、トレースを環境から Datadog に送信する AWS Lambda 関数です。Forwarder は次のことができます。
aws.lambda.enhanced.*
) を生成して送信する: duration
、billed_duration
、max_memory_used
、timeouts
、out_of_memory
、estimated_cost
Datadog Forwarder で AWS サービスログを送信する方法について、詳細は Datadog Lambda 関数で AWS サービスのログを送信するのガイドをお読みください。
Datadog では、CloudFormation を使用して Forwarder を自動的にインストールすることをお勧めします。Terraform を使用するか、手動でセットアッププロセスを完了することもできます。
インストール後、次の手順で S3 バケットまたは CloudWatch ロググループなどのログリソースに Forwarder をサブスクライブできます。
DdApiKey
を入力し、適切な DdSite
を選択します。他のすべてのパラメーターはオプションです。Forwarder
のインストール済みの Forwarder Lambda 関数を見つけます。注: 以前に Datadog の AWS インテグレーションページから次の CloudFormation テンプレートを使用して AWS インテグレーションを有効にしていた場合は、アカウントには、Datadog Lambda Forwarder 関数が既にプロビジョニングされているはずです。 注: Datadog Lambda Forwarder 関数のコードブロックは、Lambda レイヤーを通してロジックを実装しているため、空になっています。
Terraform リソース aws_cloudformation_stack を、指定されている CloudFormation テンプレートのラッパーとして使用して、Forwarder をインストールします。
Datadog は、2 つの個別の 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
}
# S3 と CloudWatch からのログ、および Lambda 関数からの可観測性データを Datadog へ送信する Datadog Forwarder。
# 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 = "
",
FunctionName = "datadog-forwarder"
}
template_url = "https://datadog-cloudformation-template.s3.amazonaws.com/aws/forwarder/latest.yaml"
}
指定されている CloudFormation テンプレートを使用して Forwarder をインストールできない場合は、以下の手順に従って Forwarder を手動でインストールできます。テンプレートの機能について改善できる点がございましたら、お気軽に問題やプルリクエストを開いてお知らせください。
最新のリリースから、aws-dd-forwarder-<VERSION>.zip
を使用して Python 3.8 Lambda 関数を作成します。
Datadog API キー を AWS Secrets Manager に保存し、環境変数 DD_API_KEY_SECRET_ARN
に Lambda 関数のシークレット ARN を設定し、Lambda 実行ロールに secretsmanager:GetSecretValue
アクセス許可を追加します。
S3 バケットからログを転送する必要がある場合は、s3:GetObject
アクセス許可を Lambda 実行ロールに追加します。
Forwarder で環境変数 DD_ENHANCED_METRICS
を false
に設定します。これにより、Forwarder は拡張メトリクス自体を生成しなくなりますが、他の Lambda からカスタムメトリクスを転送します。
一部の AWS アカウントは、CloudWatch のロググループが Forwarder を呼び出すことを可能にするリソースベースのポリシーをトリガーが自動的に作成しないよう構成されています。 Forwarder が CloudWatch のログイベントから呼び出されるために必要なアクセス許可については、CloudWatchLogPermissions を参照してください。
トリガーを構成します。
S3 バケットを作成し、環境変数 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.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
フォークにプッシュして[プルリクエストを送信] [https://github.com/your-username/datadog-serverless-functions/compare/datadog:master…master]します
複数の Datadog オーガニゼーションまたはその他の送信先にログを送信する必要がある場合は、AdditionalTargetLambdaARNs
Cloudformation パラメーターを構成し、Datadog Forwarder で受信ログを指定の Lambda 関数にコピーします。これらの追加された Lambda 関数は、Datadog Forwarder が受信するものとまったく同じ event
で非同期的に呼び出されます。
VPC プライベートサブネットで Forwarder を実行し、AWS PrivateLink で Datadog にデータを送信できます。AWS PrivateLink は、AWS でホストされている Datadog サイト でのみ (datadoghq.com。datadoghq.eu は不可)、構成が可能です。
api
、http-logs.intake
、trace.agent
の各エンドポイントを VPC に追加します。UseVPC
を true
に設定VPCSecurityGroupIds
および VPCSubnetIds
を設定DdFetchLambdaTags
を false
に設定DdUsePrivateLink
オプションは、v3.41.0 以降非推奨となっています。このオプションは、以前は特定の PrivateLink エンドポイントのデータ取り込み (pvtlink.api.datadoghq.com
、api-pvtlink.logs.datadoghq.com
、trace-pvtlink.agent.datadoghq.com
) に Forwarder を使用するために使用されていました。v3.41.0 以降、Forwarder で取り込みエンドポイントの通常の DNS 名 (api.datadoghq.com
、http-intake.logs.datadoghq.com
、trace.agent.datadoghq.com
) を使用してデータを PrivateLink から Datadog へ送信できるため、DdUsePrivateLink
のオプションは必要なくなりました。
DdUsePrivateLink
が true
に設定された、Forwarder の旧デプロイメントをご使用の場合は、構成済みの PrivateLink エンドポイントと Datadog の文書に記載されたものが異なることがありますが、これは想定内です。PrivateLink エンドポイントは、文書から削除されていますが、依然として機能します。Forwarder をアップグレードする際は、変更の必要はなく、DdUsePrivateLink
を有効にしたまま、旧エンドポイントを引き続き使用できます。ただし、新しいエンドポイントへの切り替えをご希望の場合は、上記の新しい手順に従い、以下を実行する必要があります。
api.datadoghq.com
、http-intake.logs.datadoghq.com
、trace.agent.datadoghq.com
をセットアップDdUseVPC
を true
に設定DdUsePrivateLink
を false
に設定パブリックインターネットの直接アクセスを使用せずに Forwarder を VPC にデプロイする必要がある場合で、Datadog EU サイトへの接続に AWS PrivateLink を使用できない場合(所属組織が Datadog EU サイトにホストされている (例: datadoghq.eu) 場合など)は、プロキシを使用してデータを送信できます。
DdUseVPC
、VPCSecurityGroupIds
、VPCSubnetIds
を設定します。DdFetchLambdaTags
オプションが無効になっていることを確認してください。HAProxy または Nginx を使用している場合
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
datadoghq.com
、datadoghq.eu
、us3.datadoghq.com
、us5.datadoghq.com
、ddog-gov.com
です。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
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\"}
のようにエンコードされます。
そのため提供するパターンには、\
エスケープ文字が余分に必要です。ログに対してさまざまなパターンをテストするには、デバッグログをオンにします。
SourceZipUrl
PermissionBoundaryArn
DdUsePrivateLink
(非推奨)DdHttpProxyURL
DdNoProxy
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"
}
]