Heartbeat サーバ¶
Heartbeatサーバは、SAから定期的に送信されるHeartbeatパケットを受け取り、監視を行うためのサーバです。 さらに、HeartbeatパケットにはSAの動作状態を示すいくつかの情報が含まれている場合、これを用いることでHeartbeatサーバは動作情報をグラフ化して表示することが可能となっています。
なお、Heartbeatに関する詳細な仕様は Heartbeat Server仕様 をご覧ください。
Heartbeatサーバの機能¶
Heartbeatサーバでは、大きく分けて以下の3つの機能を提供しています。
- Heartbeatパケットの受信
SAから定期的に送信されるHeartbeatパケットを受信し、その情報を蓄積します。
- SAの死活判定及び通知
定期的にSAから送信されるHeartbeatパケットの受信状況を元に、SAの死活判定を行います。 UPと判定する条件、DOWNと判定する条件はそれぞれ設定ファイルで変更することが可能です。 また、判定した結果をRSに通知します。
- SAの各種情報のグラフ化
Heartbeatパケットに含まれる動作情報をそれぞれ蓄積し、グラフ化した結果を画像もしくはHTML形式で表示することができます。 グラフ化可能な情報は、Heartbeatパケット仕様で定義される、トラヒック、CPU利用率、メモリ利用率などです。
これらの機能の関係は、以下の図のようになります。
Heartbeat受信部¶
Heartbeatを受信するのは、"hbserver"というプログラムです。 このプログラムはデーモンとして動作し、常にHeartbeatパケットを待ち受けています。
hbserverがパケットを受信すると、設定ファイル(hbserver.conf)で指定したディレクトリの下にmonitor_reportというファイルに受信した記録を残します。
SAがHeartbeatを送信する間隔は任意の間隔に設定可能ですが、1台のHeartbeatサーバに送信する全てのSAは、同一の送信間隔である必要があります。
死活判定および通知プログラム¶
Heartbeatパケットの受信記録を元にSAの死活判定を行うのは、"mreport.py"というプログラムです。 このプログラムは、cronで定期的に実行され、以下の動作を行います。
別のHeartbeatサーバとRSへの通知権をネゴシエーションする(冗長化を利用する場合)
RSから監視対象のSA一覧を取得する
Heartbeat受信ログを元にUPとなったSA、またはDOWNとなったSAを検出する
UP→DOWN、もしくはDOWN→UPのように状態が変更されたもののみをRSに通知する
cronでの実行間隔を短くすることで、より早く通知を行うことが可能になりますが、RSやHeartbeatサーバの負荷がそれに伴って上昇する点にご注意ください。
死活判定条件¶
SAがUPもしくはDOWNと判定する条件は、以下のようになります。
- UP判定条件
既にDOWNと判定されている、もしくは該当のSAから一度もHeartbeatパケットを受信したことがない状態から、Heartbeatパケットを[n]回連続で受信したとき。
- DOWN判定条件
既にUPと判定されている状態から、Heartbeatパケットを[n]回連続で受信できなかったとき。
上記で、[n]と表記した部分に関しては、設定ファイル(hbserver.conf)にて具体的な値を指定することになります。 設定ファイルの詳細については Heartbeat サーバの構築 をご覧ください。
グラフ提供インターフェイス¶
HeartbeatサーバはHeartbeatパケットに含まれるステータス情報を元にグラフ化を行い、イメージもしくはHTML形式でクライアントに提供することが可能です。
グラフ表示可能な情報¶
Heartbeatパケットに含まれる、以下の情報をSA毎にグラフ化することができます。
CPU利用率
メモリ利用率(実メモリ容量/空きメモリ容量)
トラフィックレート(インターフェイス毎)
モバイル端末の電波受信レベル(モバイル端末毎)
なお、これらの情報はSAから送信されるHeartbeatパケットに該当される情報が含まれている場合のみ、表示可能です。
グラフ表示CGI¶
グラフ情報は、HTTPサーバ(Apache等)上のCGIとして提供されます。 このCGIに対して、グラフ描画オプションを指定することで様々にカスタマイズされたグラフ表示を出力することが可能です。
たとえば、CPU利用率表示グラフを表示するためのURLは以下のようになります。
http://192.0.2.1/hbcgi/grapher.cgi?ID=0001-0000-0101-0000-0000-0000-0000-2222&
KeyCode=0158aeed0db2bc37a3de1bde40727227fa1472fe&ItemName=cpu_usage&ItemIndex=0
&Output=image
(実際には 1 行です)
この結果、以下のようなイメージを得ることができます。
リクエストパラメータの詳細¶
CGIリクエストに含めることのできるパラメータは以下の通りです。個々のパラメータは<name>=<value>といったフォーマットで指定します。
Distribution ID
- <name>
ID
- <value>
<Distribution ID>
- 解説
表示対象となるSAのDistribution IDを指定します。
- 例
ID=0001-0000-0101-0000-0000-0000-0000-2222
キーコード
- <name>
KeyCode
- <value>
<key>
- 解説
共通鍵を用いたキーコードを指定します。キーコードは、Distribution ID と共通鍵を '@' で連結した文字列に対し、SHA1でハッシュを取って生成します。 共通鍵は、hbserver.confの KeyCodeSeed パラメータにて指定したものが用いられます。
- 例
Distribution IDが''0001-0000-0101-0000-0000-0000-0000-2222''、共通鍵
が''example''の場合:
KeyCode=78dea8e8dda78454395308a2b37905655f016179
表示項目の指定
- <name>
ItemName
- <value>
rate_byte_traffic
rate_packet_traffic
memory_capacity
cpu_usage
gsm_signal_quality
- 解説
output が image の場合にのみ有効なパラメータです。 出力する項目を指定することができます。
- 例
ItemName=cpu_usage
表示項目のインデックス指定
- <name>
ItemIndex
- <value>
<index_num>
- 解説
output が image の場合にのみ有効なパラメータです。 出力する項目のインデックス番号を指定します。 CPUやインターフェイスのインデックス番号に相当します。
- 例
ItemIndex=0
出力形式の指定
- <name>
Output
- <value>
image
html
- 解説
image が指定された場合は、イメージ画像のみがレスポンスとして渡され、htmlが指定された場合は、すべてのイメージを含む全体のHTMLがレスポンスとして渡されます。 このパラメータを指定しなかった場合のデフォルトはhtmlとなります。
- 例
Output=image
イメージタイプの指定
- <name>
ImageFormat
- <value>
png
gif
- 解説
レスポンスとして出力されるグラフイメージをpng、gifのどちらにするかを指定します。
- 例
ImageFormat=png
グラフ描画開始日時指定
- <name>
StartTime
- <value>
<"ccyymmddHHMM.ss">
- 解説
グラフ描画を開始する日時を指定します。 無指定時のデフォルトは1日前からとなります。 RangeTimeパラメータとは排他の関係になります。
- 例
2007年1月1日13:00を指定する場合:
StartTime=200701011300.00
グラフ描画終了日時指定
- <name>
EndTime
- <value>
<"ccyymmddHHMM.ss">
- 解説
グラフ描画を終了する日時を指定します。StartTimeパラメータが指定 された場合には必須となります。
- 例
2007年2月1日13:00を指定する場合:
EndTime=200702011300.00
グラフ描画時間範囲指定
- <name>
RangeTime
- <value>
day
week
month
halfyear
year
- 解説
期間を指定し、過去から現在までの範囲のグラフ描画を行います。 dayは1日、weekは1週間、monthは1月、halfyearは半年、yearは1年を指定します。
- 例
RangeTime=day
グラフの横幅指定
- <name>
Width
- <value>
<pixel>
- 解説
グラフ全体のイメージの横幅をピクセル単位で指定します。 無指定時のデフォルトは400となります。
- 例
Width=550
グラフの縦幅指定
- <name>
Height
- <value>
<pixel>
- 解説
グラフ全体のイメージの縦幅をピクセル単位で指定します。 無指定時のデフォルトは100となります。
- 例
Width=150
グラフの上限値指定
- <name>
UpperLimit
- <value>
<num>
- 解説
グラフの縦軸の上限を整数値で指定します。 無指定時、トラフィックグラフ、メモリ使用量グラフは無制限となり、CPU利用率グラフでは100%となります。
- 例
UpperLimit=1000
グラフの下限値指定
- <name>
LowerLimit
- <value>
<num>
- 解説
グラフの縦軸の下限を整数値で指定します。無指定時は0となります。
- 例
LowerLimit=20
グラフのタイトル
- <name>
Title
- <value>
<title>
- 解説
グラフのタイトルとして表示される文字列を指定します。 無指定時、トラフィックグラフでは traffic 、メモリ使用量グラフでは memory 、CPU利用率グラフでは cpu となります。
- 例
Title=example
縦軸ラベルの名前指定
- <name>
VerticalLabel
- <value>
<name>
- 解説
グラフの縦軸ラベルとして表示される文字列を指定します。 無指定時、トラフィックグラフでは bps 、メモリ使用量グラフでは byte 、CPU利用率グラフでは percent となります。
- 例
VerticalLabel=example
背景色指定
- <name>
BackGroundColor
- <value>
<#rrggbb>
- 解説
グラフの背景色をRGBのカラーコードで指定します。
- 例
BackGroundColor=#FFFFFF
キャンバスの背景色指定
- <name>
CanvasColor
- <value>
<#rrggbb>
- 解説
グラフキャンバスの背景色をRGBのカラーコードで指定します。
- 例
CanvasColor=#FFFFFF
フォントの色指定
- <name>
FontColor
- <value>
<#rrggbb>
- 解説
フォントの色をRGBのカラーコードで指定します。
- 例
FontColor=#000000
主グリッド線の色指定
- <name>
MainGridColor
- <value>
<#rrggbb>
- 解説
主グリッド線の色をRGBのカラーコードで指定します。
- 例
MainGridColor=#000000
グリッド線の色指定
- <name>
GridColor
- <value>
<#rrggbb>
- 解説
グリッド線の色をRGBのカラーコードで指定します。
- 例
GridColor=#000000
表示タイプ線の指定
- <name>
ViewType
- <value>
LINE1
LINE2
LINE3
AREA
STACK
- 解説
グラフの描画パターンを指定します。
- 例
ViewType=AREA
Heartbeatサーバの冗長化・負荷分散¶
Heartbeatサーバは、2台を1セットとし、冗長化構成を取ることができます。 この場合、SAは常に2台のHeartbeatサーバに対して同時にHeartbeatパケットを送信することになります。
Heartbeatサーバは、設定ファイル(hbserver.conf)にて冗長化モードが指定されると、以下の動作を行うようになります。
- Heartbeatパケットの相互補完
Heartbeatパケット受信部は、相互に受信したパケット情報の保管を行う機能を持ちます。 これにより、片側のサーバでHeartbeatパケットが欠落したような場合でも、正しく受信記録を補完することができるようになります。
- 監視結果通知の調停
監視結果をRSに通知する際は、2台の間で同期が行われた上で、どちらか一方がRSに通知を行います。 ただし、Heartbeatサーバ間で正しく同期が行われなかった場合は、2台が同時にRSに通知することになります。