ここしばらく、MySQL DB のデータを Logstash 経由で Elasticsearch に転送する ということに取り組んでいました。
そこで Logstash サーバーの監視エージェントとして CloudWatch を用いることとなり、

  • ディスク容量の空き状況
  • メモリ使用量

を採取するために CloudWatch Agent を Ansible でセットアップすることに成功しました。
多少ニーズがありそうに思っているのと、もっとよくしていければと思い、Role 一式を共有します。

Role Code URL

こちら に公開しています

(↓はただの画像です。紛らわしくてすみません。URLをそれっぽく表示させる意図で置いています。)
https://github.com/sogaoh/AnsiblePractice/tree/master/aws-CloudWatch/roles/cloudwatch-agent

Code の補足説明など

tasks/main.yml

上から順にインストール処理が流れます。いわば、メインルーチンです。
先頭2行目にコメントで明記しているのですが、 参考にしたベースがあって、ansible-galaxy にあったcloudwatchagentソース をベースにしました。

  • OS Platforms に Ubuntu 18.04 (Bionic Beaver) がなかった
  • ソースの最終更新日が 2018年11月 で、メンテされていないかも、と思った

のが、そのまま使用しなかった理由です。

処理の流れは大雑把に以下のようになっています。

  1. CloudWatch Agent GPG public key のダウンロード、fingerprint の Verify をしてインポート
  2. CloudWatch Agent のパッケージとGPG署名ファイルをダウンロードし、Verify する
  3. CloudWatch Agent をインストールする
  4. (ここは独自) /usr/share/collectd/types.db ファイルを作成する 1
  5. 設定パラメータファイルの配置
  6. CloudWatch Agent サービス登録と起動
  7. ログローテーションの設定
  8. 後始末(セットアップに使ったファイルの削除)

templates/amazon-cloudwatch-agent.json.j2

設定パラメータファイルのテンプレートです。
以前の記事 [AWS][CloudWatch] agent-config-wizardで問われたこと(Ubuntuの場合) を作成した際に採取しておいた設定をほぼ反映したものになっています。
一部異なるのは、SSMパラメータストアに保存はしないように、このスクリプトではしています。 2
そのため、AWSのクレデンシャルを使用していません。

こちらを参考にしてご利用いただける場合、このファイルに手を加えることで設定のカスタマイズが可能だと思います。
プロセス監視の設定 3 も入れられるのではないかと思われます。(※未検証です)

vars/main.yml

変数をまとめたファイルです。
ここで ubuntu を決め打ちしているので、CentOS や Amazon Linux 用を積み込む場合はこのファイルを変更することでセットアップが実現できるかもしれません。

handlers/main.yml

セットアップ完了時の service リスタート時に呼ばれていると思います。

さいごに

見ていただき、ありがとうございました。
何かの役に立てば幸いです。
もし issue 等ありましたら Twitter @sogaoh までお知らせいただければと思います。
https://github.com/sogaoh/AnsiblePractice/issues に問題点等を記載いただければ可能な限り早急に確認しようと思います。

Appendix

Footnote

  1. E! Error parsing /opt/aws/amazon-cloudwatch-agent/etc/amazon-cloudwatch-agent.toml, open /usr/share/collectd/types.db: no such file というエラーでセットアップに成功しなかったために追加

  2. CloudWatch Agent をインストールしたサーバーの所定の場所(おそらく cwa_config_dir 変数に設定してあるパス)に設定ファイルが保存されるようです

  3. refs https://docs.aws.amazon.com/ja_jp/elasticsearch-service/latest/developerguide/aes-ri.html