- はじめに
- エージェント
- インテグレーション
- Watchdog
- イベント
- ダッシュボード
- モバイルアプリケーション
- インフラストラクチャー
- サーバーレス
- メトリクス
- ノートブック
- アラート設定
- APM & Continuous Profiler
- CI Visibility
- RUM & セッションリプレイ
- データベース モニタリング
- ログ管理
- セキュリティプラットフォーム
- Synthetic モニタリング
- ネットワークモニタリング
- 開発者
- API
- アカウントの管理
- データセキュリティ
- ヘルプ
Datadog Forwarder は、ログ、カスタムメトリクス、トレースを環境から Datadog に送信する AWS Lambda 関数です。Forwarder は次のことができます。
aws.lambda.enhanced.*
) を生成して送信する: duration、billed_duration、max_memory_used、timeouts、out_of_memory、and estimated_costDatadog Forwarder で AWS サービスログを送信する方法について、詳細はこちらをご覧ください。
Datadog では、CloudFormation を使用して Forwarder を自動的にインストールすることをお勧めします。Terraform を使用するか、手動でセットアッププロセスを完了することもできます。
インストール後、次の手順で S3 バケットまたは CloudWatch ロググループなどのログリソースに Forwarder をサブスクライブできます。
DdApiKey
を入力し、適切な DdSite
を選択します。他のすべてのパラメーターはオプションです。Forwarder
のインストール済みの Forwarder Lambda 関数を見つけます。注: 以前に Datadog の AWS インテグレーションタイルから次の CloudFormation テンプレート を使用して AWS インテグレーションを有効にしていた場合は、アカウントには、Datadog Lambda Forwarder 関数が既にプロビジョニングされているはずです。
Terraform リソースaws_cloudformation_stack を、指定されている CloudFormation テンプレートのラッパーとして使用して、Forwarder をインストールします。
Datadog は、2 つの個別の Terraform コンフィギュレーションを作成することをお勧めします。
DdApiKeySecretArn
パラメーターを介してシークレット ARN を指定します。API キーと Forwarder のコンフィギュレーションを分離すると、Forwarder を更新するときに Datadog API キーを指定する必要がなくなります。
注: CloudFormation テンプレートには DdApiKey
パラメーターが必要であるため、適用するプレースホルダー値 (任意の値) を指定する必要があります。将来的に 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 = {
DdApiKey = "this_value_is_not_used"
DdApiKeySecretArn = "REPLACE ME WITH THE SECRETS ARN"
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.7 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.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 サポートのチケットを作成してください。
プルリクエストは大歓迎です。こちらがクイックガイドです。
#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
# 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
./tools/installation_test.sh
複数の Datadog オーガニゼーションまたはその他の送信先にログを送信する必要がある場合は、AdditionalTargetLambdaARNs
Cloudformation パラメーターを構成し、Datadog Forwarder で受信ログを指定の Lambda 関数にコピーします。これらの追加された Lambda 関数は、Datadog Forwarder が受信するものとまったく同じ event
で非同期的に呼び出されます。
AWS PrivateLink 使用して、VPC で Forwarder を実行し Datadog に接続します。AWS PrivateLink は、Datadog US サイト (datadoghq.com。datadoghq.eu は不可) を使用している Datadog 組織にのみ構成が可能です。
DdUsePrivateLink
、VPCSecurityGroupIds
、VPCSubnetIds
を設定します。DdFetchLambdaTags
オプションが無効になっていることを確認してください。パブリックインターネットの直接アクセスを使用せずに Forwarder を VPC にデプロイする必要がある場合で、Datadog EU サイトへの接続に AWS PrivateLink を使用できない場合(所属組織が 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
に設定します。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
- Datadog API キー。これは、Datadog の Integrations > APIs > API Keys にあります。
API キーは AWS Secrets Manager に保存されます。DdSite
- メトリクスとログが送信される Datadog サイト。可能な値は、datadoghq.com
、datadoghq.eu
、us3.datadoghq.com
、ddog-gov.com
です。FunctionName
- Datadog Forwarder Lambda 関数の名前。既存の CloudFormation スタックを更新するときは変更しないでください。
変更すると、現在の Forwarder 関数が置き換えられ、
すべてのトリガーが失われます。MemorySize
- Datadog Forwarder Lambda 関数のメモリサイズTimeout
- Datadog Forwarder Lambda 関数のタイムアウトReservedConcurrency
- Datadog Forwarder Lambda 関数用に予約されている同時実行数LogRetentionInDays
- Datadog Forwarder Lambda 関数により生成されたログの CloudWatch ログ保存期間
関数DdTags
- 転送されたログにカスタムタグを追加します。カンマ区切りの文字列で、末尾にカンマはありません。例:
env:prod,stack:classic
DdMultilineLogRegexPattern
- 指定された正規表現を使用して、S3 からの複数行ログの新しいログ行を検出します。
たとえば、パターン “11/10/2014” で始まる複数行ログに対して表現 \d{2}\/\d{2}\/\d{4}
を
使用します。DdUseTcp
- デフォルトでは、Forwarder はポート 443 を介して HTTPS を使用してログを送信します。
SSL 暗号化 TCP 接続を介してログを送信するには、このパラメーターを true に設定します。DdNoSsl
- ログの転送時に SSL を無効にし、プロキシを介してログを転送する場合は true に設定します。DdUrl
- ログを転送するエンドポイント URL。プロキシを介してログを転送するのに役立ちます。DdPort
- ログを転送するエンドポイントポート。プロキシを介してログを転送するのに役立ちます。DdSkipSslValidation
- エンドポイントから指定された証明書を検証せずに、HTTPS 経由でログを送信します。
これにより、Forwarder とログインテークエンドポイント間のトラフィックは暗号化されますが、
宛先 SSL 証明書が有効かどうかは検証されません。DdUseCompression
- ログ圧縮を無効にするには、false に設定します。HTTP 経由でログを送信する場合にのみ有効です。DdCompressionLevel
- 圧縮レベルを 0 (圧縮なし) から 9 (最高の圧縮) に設定します。
デフォルトの圧縮レベルは 6 です。圧縮レベルを上げると、Forwarder の実行時間が長くなる代わりに、
送信ネットワークトラフィックが減少するという利点が
あります。DdForwardLog
- ログ転送を無効にするには、false に設定しますが、
Lambda 関数からのメトリクスやトレースなど、他の可観測性データの転送は続行します。DdFetchLambdaTags
- Forwarder が GetResources API 呼び出しを使用して Lambda タグをフェッチし、
それらをログ、メトリクス、トレースに適用できるようにします。true に設定すると、アクセス許可 tag:GetResources
が
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
(指定されている場合) に置き換えます。
ログスクラビングルールは、Lambda 関数によって自動的に追加されるメタデータを含む、完全な JSON 形式のログに適用されます。
パターン一致の各インスタンスは、
各ログで一致するものがなくなるまで置き換えられます。
.*
など、非効率な正規表現を使用すると、Lambda 関数の遅延につながりますのでご注意ください。DdScrubbingRuleReplacement
- DdScrubbingRule に一致するテキストを、指定されたテキストで置き換えます。ExcludeAtMatch
- 指定された正規表現に一致するログを送信しません。
ログが ExcludeAtMatch と IncludeAtMatch の両方に一致する場合、そのログは除外されます。IncludeAtMatch
- 指定された正規表現に一致し、ExcludeAtMatch により除外されていないログのみを送信します。フィルタリング規則は、完全な JSON 形式のログに適用されます。これには、Forwarder によって自動的に追加されたメタデータも含まれます。ただし、ログパイプライン による変換はログが Datadog に送信された後に行われるため、Forwarder でログをフィルタリングする際には使用できません。.*
など、非効率な正規表現を使用すると、Forwarder の遅延につながりますのでご注意ください。
ログのフィルタリングに使用できる正規表現の例:
"(START|REPORT|END)\s
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
- Permissions Boundary Policy の ARNDdApiKeySecretArn
- Datadog API キーを格納しているシークレットの ARN (すでに Secrets Manager に格納されている場合)。シークレットは、キーと値のペアではなく、プレーンテキストとして保存する必要があります。要件を満たすには、“DdApiKey” にダミー値を設定する必要がありますが、その値は使用されません。DdUsePrivateLink
- AWS PrivateLink を介したログとメトリクスの送信を有効にするには、true に設定します。
https://dtdg.co/private-link を参照してください。VPCSecurityGroupIds
- VPC セキュリティグループ ID のカンマ区切りリスト。AWS PrivateLink が有効な場合に
使用されます。VPCSubnetIds
- VPC サブネット ID のカンマ区切りリスト。AWS PrivateLink が有効な場合に使用されます。AdditionalTargetLambdaARNs
- Datadog Forwarder が受信するのと同一の event
と非同期で呼び出される Lambda ARN のコンマ区切りリスト。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",
"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"
}
]