Datadogのログ監視で想定以上にコストがかかってしまった話

    Datadogのログ監視で想定以上にコストがかかってしまった話
     

    目次

      記事の目的

      クラウドインテグレーション部の秋葉です。
      Datadogを使ったログ監視を行う際、ログの扱い次第で思いのほかコストが発生してしまうことがあります。Datadogの使い始めの方や、これからDatadogを使ってログ監視を行う方の参考になればと思い記事にしました。

      目次

      1. Datadogの紹介
      2. ログ監視のコストが想定以上にかかってしまった話

      1. Datadogの紹介

      Datadog社が提供するSaaS型運用監視サービスです。インフラストラクチャー、アプリケーション、オンプレ、クラウド、地理的位置や規模に関わらず、1つのプラットフォーム上で集約して監視を行うことができます。
      EC2などagentがインストールできるサーバーには、Datadogのagentをインストールして監視を行いますが、EC2以外のAWSのサービスでは基本的にDatadogとAWSの間でインテグレーション設定を行いAPI連携することで監視を行います。

      2. ログ監視コストが想定以上にかかった話

      2.1 監視の要件

      EC2インスタンスに出力されるアプリケーションのログファイル/var/log/app/access_logをDatadog上で取得して、特定の文字列(errorやwarningなど)がログに含まれていたら通知を送ります。

       

      2.2 監視の導入

      Datadogを使ってEC2インスタンスに出力されるログ監視を行うには、まずDatadogのagentをEC2インスタンスにインストールし、設定ファイルに必要な設定を記入し、agentの再起動を行います。
      EC2インスタンスとDatadogの連携は、DatadogのAPI keyを設定ファイルに記入し連携します。(API keyの記入はagentインストールの時に、インストール用スクリプトが設定ファイルへの記入処理で行うので、設定ファイルを開きAPI keyを書き込む必要はありません。)

      ※Datadogのログ監視の設定としては、こちらの公式ドキュメントを参考にしてください。
      ログの使用を開始する

       

      2.3 監視の設定

      具体的な設定方法について説明します。今回はアプリケーションのログはEC2インスタンスの/var/log/app/access_logに出力されているものとします。

      EC2インスタンスにログインし、Datadogのagentインストールを行います。

      DD_API_KEY=XXXXXXXXXXXXXXXXX DD_SITE="datadoghq.com" bash -c "$(curl -L https://s3.amazonaws.com/dd-agent/scripts/install_script_agent7.sh)"

      設定ファイル/etc/datadog/logs.d/conf.yamlに以下の内容を入力し、ログファイルのパスを記入します。

        - type: file
          path: "<PATH_LOG_FILE>/<LOG_FILE_NAME>.log"
          service: "<APP_NAME>"
          source: "<SOURCE>"

      以下のコマンドを実行し、datadog-agentの再起動を行います。

      systemctl restart datadog-agent

      datadog-agent statusコマンドを実行し、/var/log/app/access_logの設定がOKとなっていることを確認します。

      datadog-agent status

      /var/log/app/access_logにログが発生し、同じログがlogs -> searchの画面で見れることを確認します。

       

      2.4 翌月料金の高騰

      log explore画面でログが確認できたのでこれで設定完了と思っていたのですが、翌月Datadog使用料金が高騰しました。log exploreの画面を確認したところ、/var/log/app/access_logに大量のログが発生し、全てのログがDatadogに取り込まれ、保持または復元の処理(インデックス化)がされていることが分かりました。

       

      2.5 高騰の原因

      Datadogのログに関する料金体系は、以下のように取り込み(ingest)と保持または復元(index)の2段階となっています。
      取り込み:$0.1
      保持または復元(インデックス化):$1.7(15日間の保存、100万ログイベントあたり)

      ※ログ料金の最新の情報は公式ドキュメントを参照して下さい。
      料金 | Datadog

      従量課金となるので、取り込むログの量やインデックス化するログが多くなると料金が上がります。また、取り込みよりもインデックス化の方がコストがかかり、デフォルト設定ではDatadogに取り込まれたログは全てインデックス化される設定になります。

      今回の場合、/var/log/app/access_logに大量のログが発生し、そのログが全てDatadogに取り込まれ、さらにインデックス化されていました。そのことに翌月まで気が付かず料金が想定以上にかかってしまいました。

       

      2.6 その後の対応方法

      ログの料金を抑えるためには以下の3つの対応方法があります。

      1. サーバーの設定を変更し、Datadogへ取り込むログの量を減らす。
      2. agent側の設定として、Datadog側へ連携するログを 限定する設定を行う。
      3. Datadog上でインデックス化の除外設定を行う。

      今回のログ監視の背景ですが、Datadogの監視設定業務を依頼されて行なっています。
      AWS環境構築やアプリケーション開発保守は別会社が行なっているため、1,2番目の方法を実施する場合は、サーバー側の設定変更やアプリケーションのログ出力の設定変更、agentの再起動などを別会社に依頼して進めることになります。手順書を作り別会社に依頼する進め方も考えられますが、今後も設定変更を行うことを考えて、3番目の方法を取りました。DatadogのIndexes機能のexcludeフィルターを設定することで、ログをインデック化する量を減らす方針です。

      indexesの設定はDatadog管理画面上でlogのindexes機能のexcludeフィルターを設定できます。excludeフィルターを設定することでDatadogから取り込んだログを除外することができます。logs -> Configuration -> Indexesから以下のような画面で設定を行います。

      202304_datadog_1

      2.7 その他の対応方法や予防方法

      Datadogでログの取得を開始した後は数日間、ログの取り込み量やindexの量を確認して当月のログの料金を予想しておくことをお勧めします。ログの取り込み量とインデックスの量は、以下のように Plan & Usage からIndexed logsで確認できます。

      202304_datadog_2

      参考記事

      Datadogログ管理(公式ドキュメント)
      Datadogインテグレーション入門(公式ドキュメント)
      Datadogとは?