読者です 読者をやめる 読者になる 読者になる

StoplightのIcinga,Monitプロバイダ書いたよー

devops tool

近頃はなぜかめっきりインフラエンジニア?*1化しているさいないぷです。こんにちは。Eclipseとかもう1年以上開いてないし、Javaとか書いてないし、ひたすらRubyでしこしこな今日この頃。一人でDevOpsエンジニアだぜカッコイーとか勘違いしながら日々過ごしてます。

本題

さてさて、以前"複数のビルドサーバを一つのUIで確認できるStoplight"というのを紹介しましたが、インフラエンジニア化している昨今ビルドというより監視のStoplight(信号)を上げて欲しいなと思うようになりまして、さっくり作ってみました。

部屋に置けるでっかいディスプレイも調達できたし!マルチディスプレイ上に常時Icingaを表示しておいて一人で監視の確認なんかして寂しい!一人だと見落とし怖い*2!なんて人もこれでみんなの目を引く監視環境の立ち上げができますよん!

Stoplightが元々はビルドサーバ用という思想の上に作られてるのでタイル表示のハンドリング周りが若干無理矢理感ありますが、表示、挙動周りについては概ね満足な仕上がり。しばらく使ってみて良さげならPullRequestでも送ってみようかなぁと思ってます。ていうかせめてテストかかないと・・・・。

Icinga Provider

Icingaの状態をStoplightに表示するプロバイダ。IcingaのステータスはStoplight上では以下のよう扱われます。

  • クリティカルな場合、赤いタイルを表示
  • 警告の場合、黄色のタイルを表示
  • 通知、認識済み(Acknowledged)なものは無効(ステータスが変わっても表示されない)
使い方

まず、IcingaのAuthProviderを有効にします。icinga-web/app/modules/AppKit/config/auth.xmlにある以下の箇所のauth_enabledをtrueにしてあげます。

<ae:parameter name="auth_key">
    <ae:parameter name="auth_module">AppKit</ae:parameter>
    <ae:parameter name="auth_provider">Auth.Provider.AuthKey</ae:parameter>
    <ae:parameter name="auth_enable">true</ae:parameter>
    <ae:parameter name="auth_authoritative">true</ae:parameter>
</ae:parameter>

設定を有効にするために以下のいずれかの方法で設定のキャッシュを飛ばして反映させてあげます。

$ rm -f app/cache/config/*.php
#もしくは
$ icinga-web/bin/clearcache.sh

次に、Icinga-Web上から以下の内容でIcingaユーザを作ります。

  • Auth_viaの項目でauth_keyを洗濯
  • 使いたいAPI keyを入力
  • Principalsの項目でappkit.api.accessを追加

以上でIcinga-Web側の設定は終了。

Stoplightの設定はserver.yml.exampleにサンプルが書いてあるのでよしなに設定してください。もし、hostとserviceの両方をStoplight上に表示させたい場合はkindを変えて2つの設定が必要なので注意してくださいな。

# ホストの設定
-
  type: 'icinga'
  url: http://icinga.example.com
  kind: host
  apikey: my_apikey
  projects:
    - web01.example.com # host named "web01.example.com"
    - /^monitoring01/   # all hosts ors services starting with "monitoring01"
  ignored_projects:
    - /^stg-/  # ignore the hosts and services  starting with "stg-"
# サービスの設定
-
  type: 'icinga'
  url: http://icinga.example.com
  kind: service
  apikey: my_apikey
  projects:
    - web01.example.com # host named "web01.example.com"
    - /^monitoring01/   # all hosts ors services starting with "monitoring01"
  ignored_projects:
    - /^stg-/  # ignore the hosts and services  starting with "stg-"

ちなみにNagiosはだめなの?という声が聞こえてきそうですが、Icinga-Web REST APIを使っている関係上Nagiosでは使えません。dmytro/nagiraを使えば実現できそうですが、今のところ作る予定はないです。

Monit Provider

Monitの状態をStoplightに表示するプロバイダ。

  • リソースリミットに達した場合、赤いタイルで表示
  • モニタリングが外れている(unmonitored)場合、黄色のタイルで表示
使い方

まず、monitのhttpサービスをたちあげておく必要があります。RHEL系の場合/etc/monit.conf、Debian系の場合/etc/monit/monitrcに以下のような設定が書かれてればOK。

set httpd port 2812 and
    allow admin:monit      # require user 'admin' with password 'monit'
    allow @monit           # allow users of group 'monit' to connect (rw)
    allow @users readonly  # allow users of group 'users' to connect readonly

Stoplightの設定はIcingaと同じくserver.yml.exampleにサンプルが書いてあるのでこちらもよしなに設定してください。

-
  type: 'monit'
  url: http://monit.example.com
  username: admin
  password: monit
あとがき

もしこの記事を見て使ってくれる人がいたら色々ご意見くださると嬉しいです。Icinga,Monitが返すステータス全てを把握してるわけではないので*3こういうステータスもあるよーなんていうのを教えていただけると助かります。他にもお前のRubyコード全然イケてねぇなんていうモヒモヒしたコメントもウェルカムです。

ちなみに、DevOps的に最近旬?なPuppetのモジュールChefのクックブックもあるのでその手の人はチェックしてみるとよいかもです。

Nagios統合監視[実践]リファレンス (Software Design plus)

Nagios統合監視[実践]リファレンス (Software Design plus)



Pro Puppet

Pro Puppet

*1:物理機器までは触れないのでミドルエンジニア?

*2:メールを割りと見落とす人なので・・・

*3:というかひとまず確認できる範囲でしか対応してない