リソース監視ツール「マカレル」の導入方法と監視項目の見方
WordPressを動かしているEC2インスタンスが時々応答しなくなるので、外形監視を入れて通知するようにしました。
外形監視のおかげで問題が発生した時に気づける体制になりましたが、根本的な対策を施すにはCPUやメモリの使用率などのリソースを監視し、分析する必要があります。
そこで、はてなのマカレルというツールでリソースを監視することにしました。
リソース監視とは
CPUやメモリの使用率など、サーバーのリソース情報を取得、分析することをリソース監視またはメトリクス監視と呼びます。どれだけの負荷がかかっているのか定量的に調査できるため、障害発生時の原因特定や対策を決めるための指標となります。
監視する項目としては大きく次の4つがあります。
- CPU使用率
- メモリ使用率
- ディスクI/O(ディスクの読み書き量)
- ネットワークI/O(ネットワークの読み書き量)
リソース監視ツールについて
機能に制限はありますが、前述した4項目を無料でモニタリングできるツールとして DataDog 、 はてなの マカレル 、AWSの CloudWatch などがあります。
それぞれ軽く使ってみた所感ですが
- DataDog > オシャンティー
- マカレル > みやすい
- CloudWatch > なんかわかりにくい
という感じだったので、取り急ぎマカレルを導入しました。
マカレルの導入手順
マカレルのマニュアルがかなり分かりやすいので迷う要素がありませんでした。導入の流れは下記です。
- マカレルにサインアップ
- オーガナイゼーションを作成
- ホスト(監視対象のサーバー)にエージェントをインストール
- 必要に応じてサービス名とかロールを作成して設定
- あとは自動で取得されるデータを眺めるだけ
こんな感じでデータが取得できます。
監視項目について
マカレルはデフォルトで6つのデータを取得する設定となっています。
- loadavg5
- cpu
- memory
- disk
- interface
- filesystem
loadavg5
5分間のロードアベレージ、負荷平均のことです。実行待ちとなっているプロセス数の平均数を表していて、この値が大きいほど負荷が大きく、小さいほど余裕がある状態です。
Linuxでは uptime
、w
、top
コマンドなどで確認できます。
コマンド出力結果の load average: の項目、左から順に1min、5min、15minの負荷平均を表しています。マカレルに表示されているのは5minの平均値です。
cpu
CPUの使用率を表します。マカレルではデフォルトで9種類のデータを拾ってくれます。このうち実務でもよくチェックするのはuser、system、idleの値です。
- user
– カーネル以外の、ユーザー側で動作しているプロセスのCPU使用率 - nice
– nice値を設定しているプロセスのCPU使用率 - system
– カーネル側で動作しているプロセスのCPU使用率 - irq
– カーネルの割り込み処理のCPU使用率 - softirq
– カーネルのソフト割り込み処理のCPU使用率 - iowait
– I/O待ちによりアイドル状態になったCPUリソースの割合 - steal
– ゲストOS(他の仮想マシン)に盗られたCPUリソースの割合 - guest
– ゲストOS(他の仮想マシン)のCPU使用率 - idle
– アイドル状態(何も使われていない)の割合
カーネルとユーザー空間について
カーネルはLinuxの中枢となるシステムのこと。ユーザー空間はカーネル以外の部分のソフトウェア群のこと。ユーザー空間で動作しているソフトウェアは、例えばNginxやApache、PHPとかです。
nice値について
Linuxではプロセスの優先度をniceという値で管理しています。niceは-20〜+19の値をとり、高いほど優先度が低く、niceが低いほど優先度が高くなります。niceの値は通常0ですが、nice
コマンドで設定を変更できます。
割り込み処理について
割り込みは、とあるプログラムを実行中に別のプログラムからの応答を受けて、並列処理したりするための仕組みのことです。SSDドライブやマウスのような入力デバイスからカーネルの機能を呼び出すときなどに発生します(この場合はハードウェア割り込み)。カーネルがソフトウェア的に作り出す割り込み処理はソフトウェア割り込みと呼ばれています。
I/O処理について
ここでのI/Oはディスクやネットワークの入出力のこと。
Stealについて
一つのホスト上に複数のVMが建っている時、ホストのリソースをVM同士で奪い合うことがあり、これをStealと言います。AWSは一つのホストに、複数のユーザーによって建てられたVMが混在している状態(マルチテナンシー)なので、Stealが発生することがあります。AWSではStealを防ぐ手段として、単一のハードウェアを専有できるシングルテナンシーサービスを提供しています(めちゃくちゃお高いですが)。
guestとsteal以外はtop
、vmstat
、sar
コマンドなどで確認できます。
memory
メモリの使用状況についてチェックできます。
- used
– メモリの使用量 - available
– 利用できるメモリ領域(available = total – used) - total
– ホストに積んである最大メモリの容量(total = used + available) - swap chached
– スワップキャッシュの量 - swap used
– スワップ領域の使用量 - swap total
– スワップ可能な量(total = swap chached + swap used)
スワップについて
サーバーに負荷がかかって処理が追いつかなくなると、メモリの容量を超えた分を応急処置としてディスクで読み書きするようになります。これをスワップアウトと言います。ディスクの読み書き速度はメモリに比べてめちゃくそ遅いのでパフォーマンスは悪いです。そのため、スワップ領域を使う必要がない運用・設定にするのが望ましいです。逆に、スワップアウトした内容を再度メモリに読み込むことをスワップインと言います。一度スワップアウト・インするとデータはスワップキャッシュに保持されます。再度スワップ処理が発生した場合、スワップ処理が効率よく動作します。
Linuxではvmstat
、free
コマンドなどで確認できます。
disk
ディスクの読み書きに関する、IOPS(1秒あたりのI/Oアクセス)の値をチェックできます。ディスクの読み書きはデータベースやストレージ用途のサーバーで顕著に現れるため、そういったサーバーで注視すべきメトリクスです。
Linuxではsar
、iostat
、vmstat -d
コマンドなどで確認できます。
interface
ネットワーク帯域の使用状況です。単位はKB/秒、txは送信、rxは受信です。
AWSではネットワークの通信料がかかるので、帯域をガバガバ利用していないか注視すると良いと思います。
filesystem
ディスクのサイズと使用量をチェックできます。Linuxではdf
コマンドで確認できます。ディレクトリ以下のサイズをチェックする場合はdu
コマンドを使います。
監視アラートの設定
CPUの使用率が90%を超えた時に通知をだす、というような設定ができます。
とりあえずcpuとmemoryに対して設定しておきました。対応が迅速にできればVMがダウンする前に救出したりできるかもですね!
まとめ
マカレルを導入していい感じにリソース監視できるようになりました。やったね!