DatadogのS3へのログアーカイブ機能を試してみた

この記事は公開されてから半年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

こんにちは。突然ですが皆さんはDatadogのログ管理機能を利用されておりますでしょうか。
今回はDatadogのログ管理機能のポイントを軽く触れつつ、表題のログアーカイブ機能について試してみようと思います。

ログ管理とは

その名の通り、Datadog上でログを管理する機能です。Datadogエージェントを利用して指定のログをDatadogに転送しDatadog上で管理します。
利用用途としては一般的に以下があげられます。

  • ログの集約
  • ログの検索
  • ログのパターンを分析
  • ログ文字列、もしくはパターンに基づきアラートの検知

上記の内容はDatadogに限った話では無いですが、特にログの検索や分析機能が充実しているため複雑な設定をすることなく効率よくログを解読することが可能です。
よし!じゃあどんどんDatadogにログをもっていこう!という気持ちになるかもしれませんが、気になるのは料金と保存期間です。

料金体系について

Datadogの料金体系は結構複雑です。
https://www.datadoghq.com/ja/pricing/

これだけでも結構長くなってしまうので掻い摘んでご説明します。なお、年間契約などで割引も入るため、細かい金額はDatadogに問い合わせることを推奨します。

まず、サーバにDatadogエージェントをインストールしサーバ内のモニタリングをするというのが最も一般的なDatadogの利用法だと思いますが、そちらはInfrastructureという契約が該当します。

ログ管理機能はこのInfrastructure契約とは別のオプションとしてプランがわかれています。(その他、APMやSyntheticsなどの機能も同様です)

https://www.datadoghq.com/ja/pricing/?product=log-management#log-management

ログ管理は保存期間ごとにそれぞれプランがあります。現時点ですと短い期間は3日間から、長いものは60日間まで存在しており、保存期間が長いものほど料金は高くなります。単位は100万件毎なので、ログが200万件になれば費用は倍になります。
逆にいうと保存期間を過ぎたログは(今回のアーカイブを行わないと)削除されてしまうので注意が必要です。
そのため、ログ管理を行う場合は基本的にリアルタイムで確認、分析したい期間、件数を最小限に留め、以降のログはアーカイブ機能を使って外部保存するのがおススメです。

前置きが少し長くなりましたが本題に移ります。

アーカイブ機能とは

Datadogで取得したログを外部のストレージに転送する機能です。
転送先はAWS S3、Azure Storage、Google Cloud Strageの3つから選択できますが、今回はS3に転送する手順をご紹介します。
ログはログで別途Datadog経由せずに直接ストレージに転送しているという方もいらっしゃると思いますが、Datadogを経由することで保存期間が過ぎたログをDatadog上に復元することができ、Datadogで再度分析が行えるというメリットもあります。

手順

今回はログの出力設定は既に済んでいるものとし、Datadog上のログをS3に転送する設定をご紹介します。

S3アップロードポリシーの作成

前提条件として、DatadogがS3にアップロード出来るようにポリシーを作成しアタッチする必要があります。
通常利用している場合は「DatadogAWSIntegrationRole」というロールが存在しているかと思いますので、こちらに作成したポリシーをアタッチします。
(DatadogAWSIntegrationRoleについては今回は割愛しますので詳細は公式ドキュメントをご参照ください)

{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Sid": "DatadogUploadAndRehydrateLogArchives",
            "Effect": "Allow",
            "Action": [
                "s3:PutObject",
                "s3:GetObject"
            ],
            "Resource": [
                "arn:aws:s3:::/*",
                "arn:aws:s3:::/*"
            ]
        },
        {
            "Sid": "DatadogRehydrateLogArchivesListBucket",
            "Effect": "Allow",
            "Action": "s3:ListBucket",
            "Resource": [
                "arn:aws:s3:::",
                "arn:aws:s3:::"
            ]
        }
    ]
}

アーカイブ設定

ここからはDatadog上の設定になります。
まずは「Logs」⇒「Configuration」⇒「Archives」と遷移します。
Archivesの設定画面となるので「Add a new archive」をクリックします。

続いてArchiveの設定です。

  1. 対象範囲の指定です。今回は特定のホストのみとして「host:サーバ名」としていますが特定のタグでフィルターしたり*ですべてを対象にするなどが可能です。
  2. 対象のストレージです。今回はS3を指定しています。
  3. AWSアカウント情報です。前述した「DatadogAWSIntegrationRole」を指定しています。S3バケットは事前に作成しておいたものをご利用ください。Pathは任意ですが今回はホスト名に合わせ「web01」としました。
  4. Archiveの名前です。任意でOKです。
  5. 「Save」にて設定を保存します。(タグを追加で付与することができますが、今回は省略しています)

Archivesの項目に追加されているのが確認できます。
設定はこれだけでOKです。

確認

実際にS3バケットを確認してみましょう。
権限などの問題が無ければgzで圧縮されたjsonファイルが出力されているはずです。

中身は生ログにDatadogのタグなどのメタデータが挿入された形式になっています。

{
    "_id": "AXaUL_2rAACmnfR7meFdKwAA",
    "date": "2020-12-24T09:59:01.718Z",
    "source": "apache",
    "service": "httpd",
    "host": "web01.skyarch.net",
    "message": "xxxxxxxx - - xxxxxxxx",
    "status": "info",
    "tags": [
        "sourcecategory:www-skyarch-net_https_web_access",
        "filename:www.skyarch.net.ssl_access_log",
        "source:apache",
        "service:httpd",
        "sky-web",
        "a000t0a0_skyarch",
        "amibackup-server-name:www.skyarch.net",
        "availability-zone:ap-northeast-1a",
        "datadog-enable:true",
        "iam_profile:cloudwatchagentserverrole",
        "image:ami-045f38c93733dd48d",
        "instance-type:m5a.large",
        "kernel:none",
        "name:web01.skyarch.net",
        "region:ap-northeast-1",
        "security-group:sg-0740d204df6e6e459",
        "security-group:sg-0e1cfed7796524299",
        "sky_amibackup:self_01_false_0315_1_2_3_4_5_6_0_7"
    ]
}

なお、今回はS3のスタンダードストレージクラスに保存していますが、過去のログはあまり見ることが無いと思うので実運用ではコストを削減するため低頻度アクセスやGlacierへの移行もご検討ください。

まとめ

今回はログアーカイブの設定をご紹介させていただきました。
シンプルな設定ながらとても便利な機能だと思いますので皆さまぜひご活用ください。

その他、Datadogはコンテナ、サーバレスアプリケーション、ネットワークモニタリング等様々な機能がありますので、そのあたりの機能は改めてご紹介できればいいかなと思います。
最後までお付き合いいただきありがとうございました。

AWS CloudWatchとは?
Datadogとは?

投稿者プロフィール

fukuda
2012年スカイアーチ入社。
主にAWSを中心としたインフラ構築運用や導入支援などを行っています。

ABOUTこの記事をかいた人

2012年スカイアーチ入社。 主にAWSを中心としたインフラ構築運用や導入支援などを行っています。