Amazon Web Service の Cloudwatch では、特に何も設定せずともインスタンスのCPU使用率やボリュームの書き込み時間などを監視できる。
「カスタムメトリクス」を作成し、起動中のインスタンスから定期的にAWSに情報を送ることで、追加でメモリ使用量やディスク残量などを監視できる。
表示されるはずの項目が表示されてないと思ったら、セーフモードにするか、別のブラウザを試してみる。
方法は、インスタンスのOSがLinuxかWindowsかで異なる。
基本的にAmazonの公式(?)解説に従う。
カスタムメトリクスは、EC2インスタンス上で例えば5分おきとかで「機器上の情報を取得→AWSに送信」するCronプログラムを実行することで実現する。 プログラムはAmazonの方で用意されているので、基本的な統計情報なら特に自作する必要は無い(第三者作成のもあるらしい)。
EC2インスタンスからAWSのアカウントに情報を送信するために、認証が必要となる。「アクセスID」と「パスワード」を使う。
アカウントのルートユーザ(普通にAWSにログインした際のユーザ)のアクセスIDとパスワードを発行してもよいのだが、 万一インスタンスに不正アクセスされると、ルートユーザではアカウントに対して様々なことを直接実行出来る権限を持っていて危険なので、 アカウント内部にユーザを作成して今回の件に必要な権限だけ与え、そのユーザを使うのが推奨されている。
なのでまずユーザを作成し、アクセスIDとパスワードを取得し、権限を与えておく。ここで与えられる権限は「ポリシー」と呼ばれている。
ポリシーの与え方にも、「ユーザに直接ポリシーを設定する」「グループにポリシーを設定し、ユーザをグループに所属させることで与える」方法がある。 同様の権限を持つユーザを沢山抱えるのであれば後者が推奨されるが、今回は前者でいいや。
今度こそ、上記のAmazonの解説に詳しく載っているので省略
Linuxとは全然別物の設定が必要らしい。
Cloudwatch Agent のインストールを SSM Agent 経由で行う方法も紹介されているが、上記の3つめのサイトによると、沢山のマシンに同じ設定を使い回すみたいな用途でもない限り不要らしい。
ただ、SSM Agentは基本的にWindowsインスタンスにはインストール済みっぽいし、ネット上のはそれ経由での説明も多いので、使っても良い。
Cloudwatch Agentを直接インストールする場合は不要だが、 SSM Agentを経由する場合、これを行わないと [Run Command] のインスタンスの選択に対象のインスタンスが表示されない。
作成・割り当て方法は上記にリンクを掲載した説明記事を参照。
終わったら反映されるのにしばしかかる。(これがわからなくて、何度か同じものを作成してしまった)
割り当てが完了したら、コンソール左欄「SYSTEM MANAGER 共有リソース」「マネージドインスタンス」にインスタンスが表示されるようになる等で確認できる。
何を監視し、何を送るかの設定をconfig.jsonに所定の様式で書く。
スクラッチで書くのは難しいので、一応 C:\Program Files\Amazon\AmazonCloudWatchAgent
にコマンドライン上で対話型で動くウィザードもある。
しかし、用語の意味が、調べないとよくわからないので結局難しい。
どっかからコピペして、それぞれの意味を調べて、適当に改変するのが手っ取り早い。
設定項目名は、Windowsの「パフォーマンス カウンタ」に準拠する。パフォーマンスモニタなどで確認できるアレ。
書けたら、管理者権限のPowerShellで、コンバートする。
cd "C:\Program Files\Amazon\AmazonCloudWatchAgent" .\amazon-cloudwatch-agent-ctl.ps1 -a fetch-config -c file:config.json
jsonの記述が正しくないとメッセージが出るので、よく読む。jsonは融通が利かないので例えばリスト項目の末尾のカンマが付いたままだったりするとエラーになる。
Invalid json format, please check, Reason: Invalid character '}' looking for beginning of object key string
ちゃんと変換できたら、サービスを起動する。
.\amazon-cloudwatch-agent-ctl.ps1 -a start