2014年9月1日月曜日

SlackをNagiosに連携させる方法

Jeriff Cheng

チャットツールのSlackと、システム監視ソフトのNagiosを連携させる方法です。
Nagiosでアラートを検知した時に、Slackに通知します。

こんなイメージです。


SlackのNagiosサービスを有効にする


https://<グループID>.slack.com/services/new/nagios
を開く。
ページの下の [Add Integration] をクリック。



" New integration added! " と出たらOKです。
設定のためのチュートリアルが表示されます。基本的にこのまま従っていけばOKです。

トークンをメモっておきましょう。チュートリアルと、左側に表示されています。
---
TOKEN
The token for this integration is:
XXXXXXXXXXXXXXX <- これがトークンです。
---

---
my $opt_token = "XXXXXXXXXXXXXXX"; <- これがトークンです。
---

Slackに、naigosチャンネルを作っておきます。

Slack通知スクリプトを用意する



Perlモジュールをインストール
# yum install perl-libwww-perl perl-Crypt-SSLeay

公式スクリプトを取得&設置
# wget https://raw.github.com/tinyspeck/services-examples/master/nagios.pl 
# cp nagios.pl /usr/local/bin/slack_nagios.pl
# chmod 755 /usr/local/bin/slack_nagios.pl

slack_nagios.plを編集して、グループIDと、トークンを設定
# emacs /usr/local/bin/slack_nagios.pl
---
my $opt_domain = "<グループID>.slack.com"; # Your team's domain
my $opt_token = "<トークン>"; # The token from your Nagios services page
---

テスト投稿をしてみましょう。
# /usr/local/bin/slack_nagios.pl -field slack_channel=#nagios -field HOSTALIAS="HOSTNAME" -field SERVICEDESC="SERVICEDESC" -field SERVICESTATE="SERVICESTATE" -field SERVICEOUTPUT="SERVICEOUTPUT" -field NOTIFICATIONTYPE="NOTIFICATIONTYPE"



こんな感じで出てきたでしょうか?

Nagiosの設定ファイルを編集する


通知先のメンバーにslackを追加。
# emacs /etc/nagios/objects/contacts.cfg
---
define contact {
      contact_name                             slack
      alias                                    Slack
      service_notification_period              24x7
      host_notification_period                 24x7
      service_notification_options             w,u,c,r
      host_notification_options                d,r
      service_notification_commands            notify-service-by-slack
      host_notification_commands               notify-host-by-slack
}

define contactgroup {
  contactgroup_name admins
  alias             Nagios Administrators
  members           root, slack
}
---

通知コマンドを追加。slack_channel=<チャンネル名>を便宜設定します。
# emacs /etc/nagios/objects/commands.cfg
---
define command { 
command_name notify-service-by-slack 
command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#nagios -field HOSTALIAS="$HOSTNAME$" -field SERVICEDESC="$SERVICEDESC$" -field SERVICESTATE="$SERVICESTATE$" -field SERVICEOUTPUT="$SERVICEOUTPUT$" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$"
}

define command { 
command_name notify-host-by-slack 
command_line /usr/local/bin/slack_nagios.pl -field slack_channel=#nagios -field HOSTALIAS="$HOSTNAME$" -field HOSTSTATE="$HOSTSTATE$" -field HOSTOUTPUT="$HOSTOUTPUT$" -field NOTIFICATIONTYPE="$NOTIFICATIONTYPE$"
}
---

Nagiosの設定チェック
# /usr/sbin/nagios -v /etc/nagios/nagios.cfg

問題なかったらNagiosをリスタート
# /etc/init.d/nagios restart

テスト的にアラートを投げてみましょう。



こんな感じで色分けしてSlackに通知してくれます。
簡単ですね!

2014年7月22日火曜日

「AWS Summit Tokyo 2014」に登壇してきました。



『CloudFront、RedshiftなどAWSが支える動画広告の舞台裏~インフラのイノベーションがもたらす動画広告のイノベーション~』
と題して、セッションを行わせて頂きました。

Media & Entertainment セッションということで、全体的に”ビジネス寄りの話に厚みを持たせ、技術寄りの細かい話は、なるべくスーツの人にもわかりやすく”という内容でお話をさせて頂きました。
会場は、500人部屋で、満員御礼。
ビジネスの部は、CCI工藤さんと、上野くんで進めて頂きました。
場馴れしている感がありましたね。さすがです。
私のところに回ってきた時には、とにかくドモらないように、滑舌よく喋る。ということを意識してやりました。
2週間ほど、毎晩、妻の前で練習した成果もあって(付き合ってくれてありがとう!)、頭が真っ白になったりとか最悪の事態にはなりませんでしたが、途中、何回かつっかえてしまいました。
セッションが終わったあと友人に聞いたところ「言いたいことは伝わってましたよ」との事だったので、この点に関しては、悪すぎずまあまあだったのかなと思います。悪かったところを気にしていてもしようがないですからね。今度やるときは発声練習もちゃんとします。がんばります。

スライドだけでは伝わらない部分があるかと思いますので、「詳しく聞いてみたい」などご要望がありましたら。ご連絡頂けますと幸いです。
あらためまして、今回のセッションに関わっていただいた方たちに感謝いたします。

セッションの内容をまとめて頂きました。有難うございます!

AWS Summit 2014 〜 Media & Entertainment 〜 - Qiita
http://qiita.com/mattuso/items/96e5163ae1913b11d072

#1 AWS SUMMIT TOKYO 2014 に行ってきました
http://bensem.hateblo.jp/entry/20140718/1405692000

「AWS Summit Tokyo 2014 (Day 1)」に参加してきました - akiyoko blog
http://akiyoko.hatenablog.jp/entry/2014/07/17/230044

2014年7月9日水曜日

Nagiosgraphのタイムアウトを解決する

Bunnyrel

先日、Nagiosが取得したサーバの情報をグラフ表示するNagiosgraphというライブラリを紹介しました。

NagiosにNagiosgraphを導入して、グラフを表示する方法
http://takeshiyako.blogspot.jp/2014/06/nagiosnagiosgraph.html

しかし、監視項目が多くなると、Nagiosgraphページがタイムアウトするようになりました。以下、httpdのエラーログです。
-----------------------
[Wed Jul 09 12:00:02 2014] [error] [client 100.100.100.100] Script timed out before returning headers: show.cgi, referer: https://200.200.200.200/nagiosgraph/cgi-bin/show.cgi?host=mysql&service=TCP%20Port%20num&period=day,week,month,year&expand_period=day,week,month,year
[Wed Jul 09 12:01:02 2014] [warn] [client 100.100.100.100] Timeout waiting for output from CGI script /usr/local/nagiosgraph/cgi/show.cgi, referer: https://200.200.200.200/nagiosgraph/cgi-bin/show.cgi?host=mysql&service=TCP%20Port%20num&period=day,week,month,year&expand_period=day,week,month,year
-----------------------

調べてみると、Nagiosgraphのプログラムでngshared.pmモジュールというものを使っているのですが、ここの一部のループが重すぎてタイムアウトを引き起こしていることがわかりました。
具体的には、この辺りです。

ここのループは、ユーザの権限によって表示するグラフを制限しているようなのですが、あまり必要ないので、コメントアウトして対処します。


最近なんか、Nagiosgraphが重いなぁ。と思っていた人は試してみてください。