COLUMN

コラム

第61回:障害予兆検知のための時系列データと相関分析 ~ グラフを自動でブックマークに紐づけるような仕組みも作ってみました ~

ここ 1 年くらいで「障害の予兆検知」や「自動分析」というキーワードを契機に、監視ツールを検討されているお客様が非常に増えていると実感しています。

日々システムが増加・変化していく中、限られた人数で安定した運用を実現するために、できる限りツール側で運用して欲しいというニーズが増えているのだと思われます。当然、最終判断は人がおこなうべきだと思いますが、「単なるデータ収集」のためのツールでなく、取得したデータを人が見て判断できる「情報」を収集し提示するということが、今、ツール側に求められていると思います。

そこで、今回は System Answer G3 で実現する障害の予兆検知の方法についてお話したいと思います。

皆様は「障害の予兆」と聞いて、いったいどのような障害を思い浮かべますでしょうか。

  • ハードウェアの劣化
  • 何らかのエラー

「ステータスの変化」や「エラー」といった事象は分かりやすいですね。このような事象を検知したら、深刻な問題が発生する前に、予防交換などを実施されるかと思います。System Answer G3 も、ハードウェアステータスに関する IPMI 監視や SNMP トラップ監視が可能ですし、ポートごとのエラーパケット数の監視も可能です。

それでは、時系列データという観点ではどうでしょうか。

我々が時系列データを分析する際は、「サイクル(周期性)」、「イベント(突発的な事象)」、「トレンド(傾向)」の 3 つの観点と、複数項目の相関という観点で分析をおこなっています。

 

 

これらの観点から障害の予兆について考えてみると、

  • 周期性からの逸脱
  • ある一定範囲からの逸脱(急激な増加や減少)
  • 相関性の変化

 

このような「いつもと異なる事象」が検知すべき事象だと考えられます。

この中の「周期性からの逸脱」については、System Answer G3 のベースライン機能を利用することで、検知することが可能です。

ベースライン機能は統計学の考え方を取り入れており、収集した過去データと比較して、いつもと同じかどうかを判断することができる機能です。取得した監視データを元に、平均値と標準偏差(値の揺らぎ具合)を算出し、標準偏差の任意の倍数以内であれば、いつも通りの範囲であるという判断をします。

これらの平均値と標準偏差は、CPU 使用率やトラフィックなどすべての時系列データ項目を対象にして、曜日ごとならびに時間ごと(1 時間ごと)に算出されます。正規分布として扱うことで、標準偏差 × 1 の範囲に含まれるデータ数は全体の約 68 % 、標準偏差 × 2 の範囲に含まれるデータ数は全体の約 95 % 、標準偏差 × 3 の範囲に含まれるデータ数は全体の約 99.7 % になります。

つまり、標準偏差の 3 倍以内であれば「いつも通り」という設定をした場合、過去データと比較して、統計学的に 0.3 % の確率しか発生しないごく稀な値が発生した場合に、「いつもと異なる事象」だと検知することができます。

また、データの揺らぎが小さいシステム、データの揺らぎが大きいシステム、それぞれのシステムの状況に応じた標準偏差による予兆検知が可能です。

 

 

さらに、現在、ベースライン機能の精度を高めるために、過去に発生した異常値を学習対象から除外できるような内部処理を組み込むなど、ベースライン機能の改良を進めております。

この改良版ベースライン機能は、ベータ版にてご提供しております。また、評価テストをおこなうことも可能ですので、ご興味ございましたら、是非お問い合わせください。

加えて、今後は、カレンダー機能を追加し、祝日に対するベースライン算出やお客様固有のイベント期間に対するベースライン算出が可能になる機能の開発も検討しています。お客様のシステムによっては、月末月初や特定のイベント期間だけ負荷が高くなり、その他の期間とは異なる傾向になることもあるかと思います。このような場合にも、柔軟に対応できるような機能の開発を検討しておりますので、ご期待ください。

 

最後に相関分析について少しお話をさせていただき、終わりにしたいと思います。

先ほど挙げた障害の予兆についてですが、

「ある一定範囲からの逸脱」については、しきい値を設定することで検知することが可能です。
「相関性の変化」については、ブックマーク機能(複数の性能グラフを任意に選択し、一覧表示ができる機能)による相関分析を確認することで検知できます。

ブックマーク機能をご活用いただくことで、容易に相関分析ができますが、性能グラフをブックマークに手動で紐づける作業が、少し面倒だと感じます。そのため、「自動化」というキーワードが重要になっている昨今、個人的になんとかしたいなと考えていました。

そこで、検知したアラートに関する性能グラフを自動でブックマークに紐づけるような仕組みを作ってみたのでご紹介します。

System Answer G3 のアラート通知機能の 1 つである「スクリプト通知」機能を使って、下記のことを実施します。

  1. しきい値超過のアラートを検知する
  2. アラート検知をトリガーにして、スクリプトを実行する
  3. スクリプトにより、ブックマーク作成 & 関連する性能グラフを紐づける

※ 今回の関連する性能グラフは、アラートが発生したノードのその他の項目とします。

 

具体的な手順は以下です。

1.  スクリプトの作成

スクリプトを作成し、「/sa/script/alert_bookmark.sh」として保存します。

#! /bin/bash

## アラート発生時刻のブックマークグループを作成する

# 現在時刻を取得
current=`date “+%Y/%m/%d_%T”`

# ブックマークを作成
# 今回は事前に「アラート」というブックマークグループを作成し、その配下に自動作成するようにした
# monitor_bookmark_parent_id や monitor_users_id はGUIで要確認
psql -d SAG3 -U sa -c “INSERT INTO monitor_bookmark ( monitor_bookmark_name_en, monitor_bookmark_name_mb, monitor_bookmark_status, monitor_bookmark_parent_id, monitor_users_id, udate ) VALUES ( ‘${current}’, ‘${current}’, 1, 10000002, 10000001, ‘now()’ ) RETURNING *;”

## 作成したブックマークグループにグラフを紐づける

# 作成したブックマークグループのmonitor_bookmark_idを取得
monitor_bookmark_id=`psql -d SAG3 -U sa -Aqtc “select monitor_bookmark_id from monitor_bookmark where monitor_bookmark_name_en = ‘${current}’;”`

# 紐づけるグラフのmonitor_graph_idの一覧を取得
# 今回は、アラート発生ノードの全グラフを紐づけ対象とした
array=(`psql -d SAG3 -U sa -Aqtc “select distinct monitor_graph_id from view_monitor_list where monitor_node_id = $SA_NODE_ID and monitor_graph_status =1;”`)

# 作成したブックマークグループにmonitor_graph_idを順番に紐づけ
for monitor_graph_id in “${array[@]}”; do

psql -d SAG3 -U sa -c “INSERT INTO link_monitor_bookmark_graph ( monitor_bookmark_id, monitor_graph_id ) VALUES ( $monitor_bookmark_id, $monitor_graph_id ) RETURNING *;”

done

※スクリプトでブックマークグループを作成する対象は以下となっています。
ログインユーザー「saadmin」のブックマーク画面 (monitor_users_id = 10000001)
「アラート」グループ配下に作成(monitor_bookmark_parent_id = 10000002)

 

「monitor_users_id」の 確認は、「設定」-「ユーザー/デバイス」-「ユーザー」「システム管理者」-「saadmin」の順でおこないます。

 

「monitor_bookmark_parent_id 」の確認は「ブックマーク」-「設定」-「アラート」の順でおこないます。

 

 

また、アラート検知時にスクリプトを実行する OS ユーザーは「postgres」になります。分散構成の場合は、Database 側にスクリプトを配置し「postgres」ユーザーで実行できるよう必要に応じて権限を付与してください。

 

[root@localhost ~]# ls -al /sa/scripts/alert_bookmark.sh
-rwxr-xr-x 1 postgres postgres 1446 Feb 12 08:08 /sa/scripts/alert_bookmark.sh

 

2. スクリプトの設定

次に System Answer G3 の Web ブラウザより、「設定」-「拡張監視設定」-「ユーザースクリプト設定」より、「追加」ボタンをクリックします。先ほど保存したスクリプトを設定します。

 

 

3. スクリプト通知設定

続いて、アラート検知時のスクリプト通知の設定をします。System Answer G3 の Web ブラウザより、「設定」-「ユーザー / デバイス」-「スクリプト」より、「追加」ボタンをクリックし、下記のように設定します。「ユーザースクリプト ID」は、先ほど「ユーザースクリプト設定」で作成した「アラートブックマーク連携」をプルダウンで選択します。

 

 

スケジュール ID は、別途「設定」-「ユーザー/デバイス」-「スケジュール」より、作成した設定を選択します。「グループ」の設定や、「通知間隔」の設定も忘れずに設定します。

 

 

 

今回は、「しきい値 上限 – 警告」アラートが発生した場合にスクリプトを実行する設定になっています。

4. アラート検知の確認

実際に「発生日時」が「2020/02/12 09:19:00」である CPU 使用率の「しきい値 上限 – 警告」アラートを検知しました。

 

 

5. グラフの確認

ブックマーク画面を確認すると、下記のように「アラート」グループ配下に「2020/02/012_09:19:00」グループが作成され、アラート発生ノードのグラフが紐づいていることが確認できます。

 

 

このようにすることで、トラフィックやメモリー使用率など、その他の項目との相関性確認が簡単にできます。さらに、しきい値超過アラートが発生した場合に、原因調査を迅速におこなうことが可能です。

System Answer G3 を活用することで、障害の予兆監視や相関分析をおこなうことが可能です。皆様のシステム運用にお役立ていただけると考えておりますので、製品のトライアルやご要望などございましたら、お気軽にお問い合わせいただけると幸いです。

 

by プロダクト&サービス統括部 コンサルティングサービス部 課長代理 亀山 悟史

一覧を見る

CONTACT

お気軽にお問い合わせ下さい