Go言語でSensuのStatusPage「chikurin」を作った


Sensuホストの状態をStatusPage形式で表示するWebアプリをGo言語で作ってみました.

名前の由来

前回のSensu CLIではohgi(扇)でした.
今回もsensu(扇子)に関係する単語ということで,chikurin(竹林)にしました.

Uchiwaとの比較

Sensu標準のダッシュボードであるUchiwaは,管理者向けではないかと思います.
(EventやClientの削除ができる,ClientやCheckの詳細情報を閲覧できる,など.)

そこで,一般ユーザ向けにStatusPage.ioのように表示できないかと考えました.
現在発生中のEventに限り,「いつから」と「監視結果」を見られるようにします.
各自に関係するサーバのページだけ教えておき,何かあったら見て貰うようにします.

Clientなどの一覧表示

Sensu配下にあるClientの一覧表示と,絞り込みも実装しました.
また,複数のSensu API(Datacenter)にも対応しているので,その一覧表示も可能です.

この機能は設定(~/.chikurin.json)で有効・無効を切り替えられます.
(show_datacentersshow_clients.)
無効にすることで,関係しない・隠したい情報へのアクセスを制限できます.

chikurinの使い方

Releasesから最新版をダウンロードし,READMEを参考に設定を書いてください.
chikurinを実行すると,デフォルトで8000番ポートで起動します.
/がDatacenter一覧,/:datacenterがクライアント一覧,/:datacenter/:clientがStatusPageです.

また,chikurin {start|stop|status}でデーモンとしても使用可能です.
設定のlogでログファイルを指定すると,gojiのログを吐き出します.

Sensu status page by golang
https://github.com/hico-horiuchi/chikurin

Usage: 
  chikurin [flags]
  chikurin [command]

Available Commands: 
  start       Start chikurin daemon
  stop        Stop chikurin daemon
  status      Show status of chikurin daemon
  version     Print and check version of chikurin
  help        Help about any command

Flags:
  -h, --help=false: help for chikurin

Use "chikurin help [command]" for more information about a command.

使ったライブラリ

mattn/gom

  • Rubyのbundlerライクにライブラリを_venderにインストールする.
  • ライブラリをGomfileに列挙,グルーピングも可能.

zenazn/goji

  • シンプルなWebアプリケーションフレームワーク.
  • net/httpと両立可能,Middlewareを簡単に実装できる(らしい).

yosssi/ace

  • SlimライクなHTMLテンプレートエンジン, templateを生成.
  • 後述のgo-bindata対応なのが嬉しい.

VividCortex/godaemon

  • プログラムを簡単にデーモン化できるが,機能は最小限.

jteeuwen/go-bindata

  • Assets(CSS, JS)やTemplateをバイナリに同梱する.
  • Webアプリでもバイナリだけでデプロイ可能になる.

参考文献