カテゴリー : 2014年 9月

[Slack] Nagios からの通知を Channel に書き込む

Nagios からのアラート通知を Slack の Incoming WebHooks を利用して Channel へ書き込む設定をしました。

Slack には Nagios の Integration が用意されているので、普通はこれ使えば良さそうです。

しかし、今回は Lite プランに抑えたいという理由で、色々とインテグレーションを使ってると 5 external integrations の上限に引っかかってしまうのを避けるために Incoming WebHooks を使って自前で実装しました。Incoming WebHooks の Webhook URL を発行するのは上限ないみたいなので重宝しています。

早速、シェルスクリプトを書こうと思ったんですが、ググったら Gist にコード公開している人が居たので fork してちょっと書き換えて使うことにしました。

slack_nagios.sh – gist

下記が、gist に公開しているシェルスクリプトの内容です。

#!/bin/bash
 
# This script is used by Nagios to post alerts into a Slack channel
# using the Incoming WebHooks integration. Create the channel, botname
# and integration first and then add this notification script in your
# Nagios configuration.
#
# All variables that start with NAGIOS_ are provided by Nagios as 
# environment variables when an notification is generated.
# A list of the env variables is available here: 
#   http://nagios.sourceforge.net/docs/3_0/macrolist.html
#
# More info on Slack
# Website: https://slack.com/
# Twitter: @slackhq, @slackapi
#
# My info
# Website: bakorer.com
# Twitter: @bakorer
 
#Modify these variables for your environment
MY_NAGIOS_HOSTNAME="nagios.yourdomain.com"
MY_NAGIOS_STATUS_URL="http://${MY_NAGIOS_HOSTNAME}/nagios/cgi-bin/status.cgi?host=${NAGIOS_HOSTNAME}"
SLACK_HOSTNAME="yourslack.slack.com"
SLACK_TOKEN="xyxyxyourslackkey"
SLACK_CHANNEL="#alert"
SLACK_BOTNAME="Nagios"
 
 
#Set the message icon based on Nagios service state
if [ "$NAGIOS_SERVICESTATE" = "CRITICAL" ]
then
    ICON=":exclamation:"
    COLOR="danger"
elif [ "$NAGIOS_SERVICESTATE" = "WARNING" ]
then
    ICON=":warning:"
    COLOR="warning"
elif [ "$NAGIOS_SERVICESTATE" = "OK" ]
then
    ICON=":white_check_mark:"
    COLOR="good"
elif [ "$NAGIOS_SERVICESTATE" = "UNKNOWN" ]
then
    ICON=":question:"
    COLOR="#00FFFF"
else
    ICON=":white_medium_square:"
    COLOR="#FFFFFF"
fi
 
#Send message to Slack
curl -X POST --data "payload={\"channel\": \"${SLACK_CHANNEL}\", \"username\": \"${SLACK_BOTNAME}\", \"icon_url\": \"https://slack.com/img/services/nagios_48.png\", \"text\": \"${ICON} HOST: ${NAGIOS_HOSTNAME}   SERVICE: ${NAGIOS_SERVICEDISPLAYNAME}     MESSAGE: ${NAGIOS_SERVICEOUTPUT} <${MY_NAGIOS_STATUS_URL}|See Nagios>\"}" https://${SLACK_HOSTNAME}/services/hooks/incoming-webhook?token=${SLACK_TOKEN}

これを Nagios を動かしているサーバーの plugins 以下とかに設置して、実行できるようにします。

chmod +x /usr/lib64/nagios/plugins/slack_nagios.sh

そして、Nagios commands に slack_nagios.sh を実行する定義を追加します。

vim /etc/nagios/objects/commands.cfg
 
define command {
    command_name    notify-service-by-slack
    command_line    /usr/lib64/nagios/plugins/slack_nagios.sh
}

contacts にも Slack を追加します。

vim /etc/nagios/objects/contacts.cfg
 
define contact {
  contact_name slack
  use generic-contact
  service_notification_commands   notify-service-by-slack
  email   /dev/null
}

あとは Slack の #alert channel に通知したいサービスに登録してあげて、設定確認と reload すれば完了です。

service nginx configtest
service nagios reload

Nagios のアラートを Slack へテスト通知してみた結果は下記のような感じです。

slack-nagios

Slack はチャンネル毎にアプリで通知を受け取るか設定できるので、これで夜中に Nagios からアラートきても気付けて、即対応できて幸せですね!

IE11 で Twitter Bootstrap 2系のモーダルの挙動がおかしい

Twitter Bootstrap 2系の話です。良い子は3系を使いましょう。

IE11 で Twitter Bootstrap 2 系のモーダルの挙動がおかしい、他のブラウザでは大丈夫だけど IE11 だけダメ・・・

結果だけ書いておくと、バージョンを 2.0.4 から 2.3.2 (2系の最新版)へアップデートしたら直りました。

Bootstrap version 2.3.2

こういうバグを踏むと悲しいので、使っているライブラリはこまめにバージョンアップしておきたいですね。

Twitter Cards は申請しないと使えない

Twitter Cards は申請しないと使えないんですね。

Card Validator | Twitter Developers

OGP 設定したらすぐに反映される Facebook とは違うみたいなので、事前に忘れず申請するようにしましょう。


参考情報

Twitterカード | Twitter Developers

Twitter Cards利用申請 – Qiita

Twitter Cardsの申請をしてみたよというお話。 | okaoka.net

HipChat, Slack, Sqwiggle を常駐させるとメモリ不足で死ねる

社内のチャットツールを HipChat から Slack へ移行中というのと、リモートワークのトライアル期間ということで今日から Sqwiggle を導入していて3つのアプリ常駐させています。

Private group chat, video chat, instant messaging for teams – HipChat

Slack: Be less busy

Online Collaboration Software for Remote and Virtual Teams | Sqwiggle

MacBook Air(メモリ 8GB)だとメモリ不足でツライので、さっさと Slack へ移行してしまいたいです。(自分のためにもやります)

そして、メモリ 16GB 積んだ MacBook Air の登場を心よりお待ちしております。

[Heroku] CloudFlareを利用したルートドメインの設定方法

“Action Required: Legacy Routing End of Life” というメールを受信している方も多いと思いますが、DNS の Aレコードで Heroku のレガシーな IP アドレスを指定するルーティングの方法が廃止されました。

僕は、Heroku の独自ドメインの設定方法という記事で書いているようなレガシールーティングを使って、Heroku 上に bakorer.com という About me ページを運用していました。レガシールーティングが廃止されるということで、別の方法でルートドメインの設定をする必要がでてきました。

Heroku はドキュメントが手厚く、カスタムドメインを設定する方法は公式サイトに書いてあります。

Custom Domains | Heroku Dev Center

外部サービスを利用する方法がいくつか存在するのですが、今回はその中の1つである CloudFlare を使ってルートドメインを Heroku にホスティングしているアプリに割り当ててみました。

CNAME Flattening: RFC-compliant support for CNAME at the root – CloudFlare Support

CloudFlare に登録する

まず、CloudFlare のアカウントを作成して下さい。

Home | CloudFlare | The web performance & security company

CloudFlare にウェブサイトを追加する

まず、設定したいドメインを追加します。

1-add-a-website-CloudFlare

CloudFlare でDNSレコードを設定する

追加したドメインの現状のDNSレコードが一覧表示されます。ここで編集、削除、追加などできます。

既存のDNSレコードから bakorer.com 向けの a レコードを削除して、代わりに CNAME レコードに Heroku でホスティングしているアプリのサブドメイン bakorer-com.herokuapp.com を指定します。(一番上)

2-Configure-DNS-CloudFlare

CloudFlare のプラン選択

プラン選択です。SSL を使わなくていいなら、DNS の設定だけだと無料で使えるようなので、Free プランを選択します。無料バンザイ!

3-Choose-settings-CloudFlare

CloudFlare のプラン選択

最後にネームサーバーの更新が必要です。

4-Update-your-DNS-CloudFlare

切替前は、ムームードメインのDNSサーバーを利用していて dns01.muumuu-domain.com. dns02.muumuu-domain.com. を確認できます。

dig bakorer.com NS
 
; <<>> DiG 9.8.3-P1 <<>> bakorer.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58368
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
 
;; QUESTION SECTION:
;bakorer.com.			IN	NS
 
;; ANSWER SECTION:
bakorer.com.		2317	IN	NS	dns01.muumuu-domain.com.
bakorer.com.		2317	IN	NS	dns02.muumuu-domain.com.
 
;; ADDITIONAL SECTION:
dns01.muumuu-domain.com. 284	IN	A	157.7.180.150
dns02.muumuu-domain.com. 1207	IN	A	182.48.37.179
 
;; Query time: 30 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Sat Sep 20 23:31:11 2014
;; MSG SIZE  rcvd: 163

それをムームードメインの管理画面から下記のように「GMOペパボ以外のネームサーバーを使用する」の項目から、lina.ns.cloudflare.com. と jerry.ns.cloudflare.com. を設定します。

ネームサーバ設定変更   ムームードメイン

設定後、dig コマンドでネームサーバーが切り替わっていることを確認します。

dig bakorer.com NS
 
; <<>> DiG 9.8.3-P1 <<>> bakorer.com NS
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 58368
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 0, ADDITIONAL: 2
 
;; QUESTION SECTION:
;bakorer.com.			IN	NS
 
;; ANSWER SECTION:
bakorer.com.		3600	IN	NS	lina.ns.cloudflare.com.
bakorer.com.		3600	IN	NS	jerry.ns.cloudflare.com.
 
;; ADDITIONAL SECTION:
lina.ns.cloudflare.com.	919	IN	A	173.245.58.187
jerry.ns.cloudflare.com. 3507	IN	A	173.245.59.182
 
;; Query time: 389 msec
;; SERVER: 192.168.0.1#53(192.168.0.1)
;; WHEN: Sun Sep 21 00:14:42 2014
;; MSG SIZE  rcvd: 114

最後に、CloudFlare のページからもネームサーバーが切り替わったことが確認できます。

5-my-websites-CloudFlare

上画像の状態から、Re-test をクリックして下記のように切り替わればネームサーバーの設定は完了です。

6-my-websites-CloudFlare

CloudFlare を使うことでカンタンに Heroku でルートドメインを設定することができました。CloudFlare は CDN の無料枠もあるようなので、今度はそちらの機能も活用していきたいと思います。


参考情報

CloudFlare使ってHerokuでルートドメイン使おう – PILOG