AWS Cloudwatch 監視項目の追加
Amazon Web Service の Cloudwatch では、特に何も設定せずともインスタンスのCPU使用率やボリュームの書き込み時間などを監視できる。
「カスタムメトリクス」を作成し、起動中のインスタンスから定期的にAWSに情報を送ることで、追加でメモリ使用量やディスク残量などを監視できる。
表示されるはずの項目が表示されてないと思ったら、セーフモードにするか、別のブラウザを試してみる。
方法は、インスタンスのOSがLinuxかWindowsかで異なる。
Linux
基本的にAmazonの公式(?)解説に従う。
事前準備
ユーザの作成
カスタムメトリクスは、EC2インスタンス上で例えば5分おきとかで「機器上の情報を取得→AWSに送信」するCronプログラムを実行することで実現する。 プログラムはAmazonの方で用意されているので、基本的な統計情報なら特に自作する必要は無い(第三者作成のもあるらしい)。
EC2インスタンスからAWSのアカウントに情報を送信するために、認証が必要となる。「アクセスID」と「パスワード」を使う。
アカウントのルートユーザ(普通にAWSにログインした際のユーザ)のアクセスIDとパスワードを発行してもよいのだが、 万一インスタンスに不正アクセスされると、ルートユーザではアカウントに対して様々なことを直接実行出来る権限を持っていて危険なので、 アカウント内部にユーザを作成して今回の件に必要な権限だけ与え、そのユーザを使うのが推奨されている。
なのでまずユーザを作成し、アクセスIDとパスワードを取得し、権限を与えておく。ここで与えられる権限は「ポリシー」と呼ばれている。
ポリシーの与え方にも、「ユーザに直接ポリシーを設定する」「グループにポリシーを設定し、ユーザをグループに所属させることで与える」方法がある。 同様の権限を持つユーザを沢山抱えるのであれば後者が推奨されるが、今回は前者でいいや。
- ログイン後、右上のアカウント名の所から [マイセキュリティ資格情報]
- ルートユーザは危険だから専用のユーザ作れよ的なウィンドウが現れるので、[Get started with IAM users]
- [ユーザを追加]
- [ユーザー詳細の設定]
- ユーザ名: 適当に決める
- アクセスの種類: [プログラムによるアクセス] にチェック
- [アクセス権限]
- アクセス許可の設定: 既存のポリシーを直接アタッチ → CloudWatchAgentServerPolicy にチェック
- このアクセス権限を選択する箇所が、Firefoxでは何故か表示されなかった
- [タグ]
- 任意
- [確認]
- [ユーザの作成]
- ここで開くダイアログがユーザーのアクセスIDとパスワードを取得できる最初で最後の機会となるので注意
EC2での作業
今度こそ、上記のAmazonの解説に詳しく載っているので省略
- perl など必要なツールをインストール
- mon-put-instance-data.pl などのスクリプトをダウンロード、任意の場所に設置
- 先ほど取得したアクセスIDとパスワードを所定のファイルに記述
- スクリプトテスト実行
- 上手く動いたら、cronに5分ごとに実行させるようにする
Windows
Linuxとは全然別物の設定が必要らしい。
手順
- Cloudwatch Agent のインストール
- config.json の記述
- config.json のコンバート
- サービスの起動
Cloudwatch Agent のインストールを SSM Agent 経由で行う方法も紹介されているが、上記の3つめのサイトによると、沢山のマシンに同じ設定を使い回すみたいな用途でもない限り不要らしい。
ただ、SSM Agentは基本的にWindowsインスタンスにはインストール済みっぽいし、ネット上のはそれ経由での説明も多いので、使っても良い。
AMIロールの作成・割り当て
Cloudwatch Agentを直接インストールする場合は不要だが、 SSM Agentを経由する場合、これを行わないと [Run Command] のインスタンスの選択に対象のインスタンスが表示されない。
作成・割り当て方法は上記にリンクを掲載した説明記事を参照。
終わったら反映されるのにしばしかかる。(これがわからなくて、何度か同じものを作成してしまった)
割り当てが完了したら、コンソール左欄「SYSTEM MANAGER 共有リソース」「マネージドインスタンス」にインスタンスが表示されるようになる等で確認できる。
config.json
何を監視し、何を送るかの設定を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