ログ・インデックスとは?
Datadogのログ・インデックス
は、アプリケーションから取り込んだログをインデックス化して様々な高度な検索、集計、パターン分析、監視等ができる機能です。
使いこなせればとても便利な機能です。
請求がきた
上記のログ・インデックス
なんですが、油断すると飛んでもない料金を請求されるので注意が必要です。
もともと別のエンジニアがちょっと前にDatadogを導入し、最近自分が責任者を引き継いだ矢先、Datadogから飛んでもない額の請求が来ていることが発覚。その額なんと約30万円、、、
上記の額はもう確定済みでしたので致し方なしです。
請求の内訳としては、インフラストラクチャーや、APM(アプリケーション・パフォーマンス・マネジメント)といったプランにも入っていましたがこちらは1万円くらいで収まっていて、約29万円がログ・インデックス
の請求でした。
もともとdatadogを導入したエンジニアは、月額1万くらいを想定していたようで会社としても月額30万円はかなりの痛手でした。
他人任せにせずBillingのページは常日頃から監視しておく、というのが今回の反省点ですね。。
導入したエンジニアはすでに退職していたので現責任者の自分がプランの見直しをする運びに。
解決策
Datadogのカスタマーサクセスに問い合わせたりして、以下の方針でいくことにしました。
- 除外フィルター
- ログのS3へのアーカイブ
ひとつひとつ簡単に解説していきます。
除外フィルター
アプリケーションから取り込まれたログは、datadog側で自動的に以下のステータスレベルで分類分けされます。
(もしかしたら、実際はもっとあるかもしれませんが、うちのサービスでは以下でした。)
- error
- warn
- notice
- info
- ok
うちのサービスで発生しているログの99.9%以上をinfo
とok
で占めていました。
うちではinfo
やok
のログに関しては、そうそう分析することがなかったためインデックス化する(ログ・インデックス
上で見れるようにする)必要ないという結論にいたりました。
そのような要件を叶える手段を調べた所、除外フィルターという機能を発見。
インデックス化する際にinfo
などは除外することでerror
とwarn
に分類されるログだけ、インデックス化することができました。
これで料金がほぼ1000分の1に!!
ログのS3へのアーカイブ
ただ、そうなると今後info
ログも含めログ・インデックス
で分析したいなーってなったときに、できないので良い方法はないかなと調べたところ、ログを圧縮してS3にアーカイブして、必要なときに必要な範囲のログをDatadogに取り込む(リハイドレート)という運用方法を発見。
さっそく導入しました。
手順
手順は公式通りやったら、割とあっさりできた。
大枠だけ記載する。
- DatadogとAWSを統合
- S3にアーカイブする設定 (上記のAWS統合を行っている前提となっています。)
S3へのPutObject
、GetObject
のポリシーを設定する場所で、
jsonのなかのリソースのパスを設定する箇所で、/*
を忘れがちなので注意
うまくS3と連携ができると、1時間に1回くらいのペースでDatadogに圧縮されたログがアップロードされるようになります。
- リハイドレート
S3上の圧縮されたログデータをDatadog上に取り込みます。
どのようなログを取り込みたいか、時間範囲の指定、statusの指定と細かい条件設定ができます。
おわりに
ログ・インデックスの
料金を1/1000にすることができました。
ただし、正確にはリハイドレートのさいにかかる料金や、ログの100%インデックス化している場合免除されているログ取り込み機能(Ingested Log
)の料金などが発生します。
前者はどれくらいリハイドレートするか次第です、後者はそんな大きな額ではないです。
正確なコストはカスタマーサクセスに問い合わせることを推奨いたします。
また今回は、info
ログは常に見れなくて問題ないという条件でしたが、常に可視化しておいて、いろいろ分析に使いたいようなケースでは使えないかもしれないです。