DatadogにAWS EC2からログ転送


Datadogに任意のログを転送する方式について調査しました。

Datadogへのログ転送方式

公式のマニュアルを参照すると、いろいろな方式が用意されていることがわかる。

Datadog Agent経由で送るだけでなく、既存の様々なツール(Rsyslog、Syslog-ng、NXlog、FluentD、Logstash)とも連携できるとのこと。

何が基本かわからないので、まずDatadog Agent経由でのログ転送について調査してみることにした。

Datadog Agent経由でのログ転送

Datadog Agent経由でのログ転送はデフォルトでは無効になっているらしく、まずその有効化が必要とのこと。
そのうえでconf.yamlファイルを作成し、そこに監視したいファイル名を記載する。

Datadog Agentの各種設定ファイル

環境:EC2, AmazonLinux

Datadog Agentの設定ファイルは下記の構造になっていた。

$ pwd
/etc/datadog-agent

$ ls -al
total 168
drwxr-xr-x   7 dd-agent dd-agent  4096 Dec 29 17:01 .
drwxr-xr-x  80 root     root      4096 Dec 28 13:24 ..
-rw-------   1 dd-agent dd-agent    64 Dec 28 13:25 auth_token
drwxr-xr-x   2 dd-agent dd-agent  4096 Dec 11 15:20 checks.d
drwxr-xr-x   2 dd-agent dd-agent  4096 Dec 28 13:24 compliance.d
drwxr-xr-x 149 dd-agent dd-agent  4096 Dec 29 16:40 conf.d
-rw-r-----   1 dd-agent dd-agent 64795 Dec 29 16:37 datadog.yaml
-rw-r--r--   1 dd-agent dd-agent 64745 Dec 11 15:20 datadog.yaml.example
-rw-r--r--   1 root     root       117 Dec 28 13:25 install_info
drwxr-xr-x   2 dd-agent dd-agent  4096 Dec 28 13:24 runtime-security.d
drwxr-xr-x   2 dd-agent dd-agent  4096 Dec 28 13:24 selinux
-r--r-----   1 dd-agent dd-agent  1066 Dec 11 15:20 system-probe.yaml.example

ログ転送を有効化するための設定ファイルは下記。

/etc/datadog-agent/datadog.yaml
    570 ##################################
    571 ## Log collection Configuration ##
    572 ##################################
    573
    574 ## @param logs_enabled - boolean - optional - default: false
    575 ## Enable Datadog Agent log collection by setting logs_enabled to true.
    576 #
    577 # logs_enabled: false

これをtrueに修正して、Agentを再起動。

カスタムログの転送をお試し

今回はどのようなログでも良いので、個人的に好きなエラーコードのログを転送してみる。

下記のログファイルを作成。

/var/opt/alert.log
2020-12-29 17:07:13.000000 +09:00 ORA-00600: internal error code, arguments: [AAA], [BBB], [CCC], [DDD], [EEE]
2020-12-29 17:07:18.000000 +09:00 ORA-00600: internal error code, arguments: [AAA], [BBB], [CCC], [DDD], [EEE]

下記の設定を追加し、Datadog Agentを再起動。

/etc/datadog-agent/conf.d/mydatabase.d/conf.yaml
logs:
  - type: file
    path: "/var/opt/alert.log"
    service: "myoracle"
    source: "mydatabase"

再起動後に、ログファイルに、数行ログを追加。
これにより、ログが転送されていることが確認できた。

まとめ

Datadogへのログ転送は非常に簡単であり、また様々な方式が用意されていることがわかった。マニュアルも非常に丁寧に記載されており、各種サービス毎、プラットフォーム毎、バージョン毎に細かく書かれており非常にわかりやすい。
実際に導入を検討する際にも困ることは無さそう。

カスタムログを転送する場合には、そのアプリケーション名やサービス名などDatadog側で分析する際のタグ?を理解し、正しく付与することが必要になりそうであることがわかった。

メモ

ログ転送を行うためにはDatadog Agentが対象のファイルを読み取れる必要がある。
Datadog Agentは「datadog-agentユーザ」で動作しているため、このユーザからアクセス可能な権限とする必要がある。
当然と言えば当然だけど、ハマった。。。

公式のトラブルシューティングガイドに色々と記載されているが、Agentのステータスチェックや、Agentのログなどは非常に参考になった。

Datadogを正式に利用する際には、Agentのログをdatadogに転送したりするのであろうか・・・