【小ネタ】OpsWorks 管理下の EC2 インスタンスから CloudWatch Logs にログを転送する

お久しぶりです、インフラストラクチャー部の沼沢です。
久しぶりのくせに今回は小ネタです。

OpsWorks で管理している EC2 インスタンスのログを、CloudWatch Logs に転送する場合、以前は自前で Chef Recipe を用意して Execute Recipe をする必要がありました。

ただ、(いつからかは把握できてませんが) 現在は、OpsWorks コンソールや CLI だけで簡単に設定できるようになっています。
今回はこれを試してみた結果の共有と、注意点を書き記しておきます。

前提条件

今回試した環境は以下の通りです。
記載のないものは適当に設定していただければ問題無いと思います。

  • Stack
    • Chef version: 11.10
    • OpsWorks Agent version: 3449 (Jun 5th 2018)
    • Default IAM instance profile: AWSOpsWorksCloudWatchLogs が付与されているプロファイルを指定
  • Layer
    • PHP App Server
      • Network
        • Public IP Addresses: Yes
      • Security(以下のセキュリティグループを指定)
        • Inbound: ルールなし(全拒否)
        • Outbound: 制限無し(全許可)
  • Instance
    • Amazon Linux 2017.09
      • 執筆時点で、OpsWorks で指定できる Amazon Linux の最新バージョン
    • 今回は2台用意し、起動済みとする
      • Hostname は numatest01, numatest02 とした

試してみる

AWS OpsWorks スタックでの Amazon CloudWatch Logs の使用

上記の公式ドキュメントに書いてある通りではありますが、これを試してみたいと思います。

Alt text|top

たったこれだけです。
この設定をしたあと、数分待つと CloudWatch Logs にログが転送され始めます。

Alt text

ちゃんと出ていました!ログの中身も見てみましょう。

Alt text

Alt text

注意点

これ、とても楽チンでとても便利なんですが、見ての通り、画面からは

  • CloudWatch Logs を On にするか
  • Stream command Logs を Yes (出力)にするか
  • 出力したいログファイルのパスを定義

この3つの設定しかできないため、画面からでは本来 CloudWatch Logs でできるはずの細かい設定はできないようです。
CloudWatch Logs エージェントのリファレンス

画面から設定を行っただけの状態の /var/awslogs/etc/awslogs.conf の中身はこんな感じでした。

[general]
state_file = /var/awslogs/state/agent-state

[numa_cwlogs_test/php-app/opsworks-command-log /var/lib/aws/opsworks/chef/*.log]
log_stream_name = numatest01
file = /var/lib/aws/opsworks/chef/*.log
log_group_name = numa_cwlogs_test/php-app/opsworks-command-log
[numa_cwlogs_test/php-app/var/log/messages /var/log/messages]
log_stream_name = numatest01
file = /var/log/messages
log_group_name = numa_cwlogs_test/php-app/var/log/messages
[numa_cwlogs_test/php-app/var/log/cron /var/log/cron]
log_stream_name = numatest01
file = /var/log/cron
log_group_name = numa_cwlogs_test/php-app/var/log/cron
[numa_cwlogs_test/php-app/var/log/secure /var/log/secure]
log_stream_name = numatest01
file = /var/log/secure
log_group_name = numa_cwlogs_test/php-app/var/log/secure

これを細かく設定したい場合は、CLI で設定するか、従来通り自前で Chef Recipe を用意して Execute Recipe をする必要があります。

CLI は、aws opsworks update-layer のドキュメントを確認したところ、--cloud-watch-logs-configuration というオプションで細かく指定できるようです。

あとがき

個人的には画面から行える設定だけで十分感があります。
いずれ、細かな設定も画面から行えるようになるとさらに楽で良いですね!