はじめに
Dynatraceで新しく導入されたLog Monitoring v2を利用することで様々なテクノロジーからログを取り込むことができるようになります。
本記事では、このLog Monitoring v2を利用してAWS Cloudwatch Logsの取得を試してみます。
通常のホストのログやAWS以外にも以下のアーキテクチャに対応しています。
- オープンソースのフレームワーク(FluentDやLogstash)
- Kubernetesのログやイベント
- クラウドプロバイダ(AWS、GCP、Microsoft Azure、Red Hat OpenShift)
- その他
様々なデバイスやクラウドプロバイダ自身がログを生成しますが、個別にログ監視するのは非常に手間がかかります。Dynatraceのような監視ツールを使うことで以下のようなメリットが生まれます
- データを一元管理できる。わざわざ個別のデバイスにログインすることなくログの確認が可能
- 問題発生時に障害が発生したホストだけでなく周辺装置のログ情報も同時に確認可能
Dynatraceでは15日間の無料トライアルを利用することができるので、自分の環境でも簡単に試してみることができます。
Dynatraceフリートライアル
参考URL
Dynatraceの公式サイトに必要な情報がまとまっています。
Set up AWS log forwarding | Dynatrace Documentation
Log Monitoring v2 | Dynatrace Documentation
dynatrace-oss/dynatrace-aws-log-forwarder: AWS log forwarding allows you to stream logs from AWS CloudWatch into Dynatrace logs
前提条件
ログを転送するのに、ActiveGateを経由する必要があります。本手順ではActiveGateはすでに構築済みとして進めますが、インストールスクリプトを実行する際にActiveGateを自動で構築することも可能です。
また、LambdaからActiveGateへアクセスできる必要があるため、ActiveGateの/var/lib/dynatrace/gateway/config/custom.properties
に以下の設定を追加し、プロセスの再起動を実施します。また、セキュリティグループでTCP: 9999
をフルオープンにする必要がございます。
[connectivity]
dnsEntryPoint = https://パブリックDNS名:9999
sudo systemctl restart dynatracegateway.service
設定手順
API Token の発行
ログをアップロードするために必要なAPIの発行を行います。
Dynatrace GUI上のSettings > Integration > Dynatrace API
を選びます。
Type a token name
フィールドにトークン名を入力し、Ingest logs
を有効にします。
Generate
ボタンをクリックすると、トークンが発行されるので、忘れずにパスワードマネージャなどに保存します。
再表示はできないため、保存を忘れた場合は、再度トークンを発行する必要があります。
デプロイ
必要なポリシーの確認
CloudFormationにより、ログ取得に必要な設定は自動で実行されますが、AWS CLIを実行する端末に以下のポリシーが割り当てられている必要があります。
CloudFormation実行に必要なポリシー
{
"Version": "2012-10-17",
"Statement": [
{
"Sid": "VisualEditor0",
"Effect": "Allow",
"Action": [
"cloudformation:CreateChangeSet",
"cloudformation:ExecuteChangeSet",
"cloudformation:DescribeChangeSet",
"cloudformation:DescribeStacks",
"s3:CreateBucket",
"s3:PutLifecycleConfiguration",
"iam:GetRole",
"iam:CreateRole",
"iam:AttachRolePolicy",
"iam:PutRolePolicy",
"iam:GetRolePolicy",
"iam:PassRole",
"lambda:CreateFunction",
"lambda:UpdateFunctionCode",
"lambda:GetFunction",
"lambda:GetFunctionCodeSigningConfig",
"cloudwatch:PutDashboard",
"cloudwatch:GetDashboard",
"firehose:DescribeDeliveryStream",
"firehose:CreateDeliveryStream",
"firehose:ListTagsForDeliveryStream",
"logs:DeleteSubscriptionFilter",
"logs:DescribeLogGroups",
"logs:PutSubscriptionFilter"
],
"Resource": "*"
},
{
"Sid": "VisualEditor1",
"Effect": "Allow",
"Action": [
"kms:Decrypt",
"kms:Encrypt",
"kms:DescribeKey",
"kms:CreateGrant"
],
"Resource": "*",
"Condition": {
"ForAnyValue:StringEquals": {
"kms:ResourceAliases": "aws/lambda"
}
}
}
]
}
環境変数の設定
TARGET_URL=https://<ActiveGate のパブリックDNS名>:9999/e/<DynatraceのテナントID>
TARGET_API_TOKEN=<先ほど発行した_API_token>
REQUIRE_VALID_CERTIFICATE=false
インストールスクリプトの実行
wget -O dynatrace-aws-log-forwarder.zip https://github.com/dynatrace-oss/dynatrace-aws-log-forwarder/releases/latest/download/dynatrace-aws-log-forwarder.zip \
&& unzip -qo dynatrace-aws-log-forwarder.zip \
&& ./dynatrace-aws-logs.sh deploy --target-url $TARGET_URL --target-api-token $TARGET_API_TOKEN --use-existing-active-gate true --require-valid-certificate $REQUIRE_VALID_CERTIFICATE
dynatrace-aws-logs
というスタック名でCloudFormationが実行されます。
ロググループの購読
CloudWatchのロググールプからDynatraceへ送りたいロググループを登録します。
ここではテスト試しに/aws/lambda/testFunc
のログを登録してみます。
以下のコマンドを実行することで、ロググループの購読が開始されます。
./dynatrace-aws-logs.sh subscribe --log-groups /aws/lambda/testFunc
ログの確認
CloudWatchに新しいログが出力されるとDynatrace側にも該当ログが送られます。
DynatracenのLog Viewer
AWS CloudWatchログのログイベント
まとめ
本記事ではDynatraceで新しく導入されたLog Monitoring v2を使用してAWSのCloudWatchのログをDynatrace側で取得できる方法についてまとめました。
コンテナ環境のログなども含めてログの管理を一元化できるのは大きなメリットがありますので、ぜひ試してみてください。