DynatraceのLog Monitoring v2を使ってAWSのログを監視してみる


はじめに

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をフルオープンにする必要がございます。

/var/lib/dynatrace/gateway/config/custom.properties
[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側で取得できる方法についてまとめました。
コンテナ環境のログなども含めてログの管理を一元化できるのは大きなメリットがありますので、ぜひ試してみてください。