2

Nagiosのアラート集計をVBAで手軽にやりたい!

こんにちは。
飛び入りブロガー(どこかで聞いたことある単語だ。。)のウメッシです。

みなさん、Nagiosのアラート、定期的に集計してますか?
サーバの安定運用には、現状の状況分析は欠かせません。 月に一度は振り返ってみたいものです。

クララでは、アラートの集計を行ってお客様にレポートを提出することがあります。
そんな時、Nagiosサーバのログからまとめるのですが、地味な上に以外と時間かかる作業です。。。

最終的にはExcelでレポートをつくるので、VBAでなんとか自動化しようということで、

作ってみました。

 

1. Nagiosからログデータを取ってくる

大体月間でレポートを作ることが多いのですが、クララのNagiosのログは日単位なので、1ヶ月分を一つにまとめます。
これはうちのエンジニアが作ってくれたコマンドで。

 

なぜbashじゃなくてPerlなのかは作った人に聞いてくださいw

・NOTIFICATION
・レポート作成したい年、月

の条件でgrepしてきます。

できあがったログはこんな感じです

2. Excelで取り込みと集計を行う

次に取得したデータを実際に集計します。
集計したいポイントとしては、

・ホスト別、アラート種別、レベルで集計したい
・同じアラートの時間差複数回はできるだけまとめたい
・とはいえ30分以上継続してるものは、別物としてカウントしたい
・リカバリしてるかどうかを確認したい

です。

では実際にVBAを書きます。

 

レコードを分解して配列に代入します。
やり方としては、1レコード1行として、改行を元に分解します。
なので、元データではレコード中に改行が入らないようにしてください。

 

まるっとコピーしてくるので、最後の行に
[clara@Umessi_console ~]$
などアラートでないレコードの場合は削除する

アラートかどうかの判別はレコード頭が日付のフォーマットになっているかどうかで判断します。

 

残念ながらVBAだと配列の中身をいろいろいじれないので(すくなくとも私はそう認識していますが、やり方知ってる方は教えて下さい!)一旦セルに書き出します。

 

書き出すのには便利なsplit関数を使います。

分解は決め打ちで6行ですw
レコードが6行にならないとエラーがセルに入ってしまうので、
エラー処理を入れます。

 

ここで詰まりました。

エラーのセルを拾ってくるのに意外と手こずりました。
google先生に聞くと、そんなFunctionを作った素晴らしい方が世の中にはいるので、コピペしましたw

 

時間を計算するので、日付型の変数にレコードの中の日付部分を入れるのですが、
ここでもハマりました。
変数の型が合わない。。

Nagiosのログは
[Sun Jan 25 10:56:31 2015]
となっているが、これだとDATE型に入りません。
ご丁寧に曜日まで入っているのでこれを削除し、年を頭に持ってきて
DATEに入る形式
2015 Jan 25 10:56:31
に変換します。

 

次に不要なデータを削除します。
また、ホスト名にローカルIPアドレスがついていて、見にくいのでこれも削除します。

 

いよいよ集計です。
ルールは、
・30分以内の同じアラートは、削除し、その数をセルに表記
・リカバリが返っているものは、その直前の最初に発報されたアラートにリカバリフラグを立てる
 (厳密にはそのアラートが上がってから一番最初に同じ内容でリカバリが返って来てるものでフラグを立てる)
・30分以上たっても同じアラートが上がった場合は、新しい一件とカウントする
 (この場合は最初のアラートのリカバリが返ってない扱いになります)

です。

 

これで集計まで完了です。
あとは、体裁を整えてフィルタをつけ、集計をしやすくします。

 

これで完成したものがこちら
excel_img

3. お客さんに報告する

このエクセルをお客さんと一緒に見ながら、ミーティングをします。
フイルターをつけたので、日付、ホスト、アラート種別なのでソートができます。

以上です。

 

注意事項としては、
A) アラートが集計月をまたいでいる場合、リカバリなどが正常に記載されない
B) A)のアラートのOKアラート集計が翌月になる
の2点でしょうか。

 

エラー処理等をそんなにしっかりやっていなので、
入力されるNagiosのログのフォーマットが違ったりするとうまく機能しない
可能性があります。 そこは適宜合わせていく必要があります。

シェルスクリプトなどでの集計もいいですが、最終的にExcelにしたり
グラフにしたりする場合は、VBAも結構便利です。
みなさんも運用効率化にVBAを活用していきましょう!

 

Share on LinkedIn
LINEで送る
Pocket

クララスタッフ

クララスタッフ