さまりっか
対お姉ちゃん用監視部隊、通称Shinken隊の話をしようじゃないか。
Shinken: http://www.shinken-monitoring.org/
一応先に結論から言っておくと、対お姉ちゃん用監視部隊としても普通の監視ツールとしても決して使い勝手はよくありません。
Shinken is 何
真剣?マジなの?おこなの?
Python製の監視フレームワークちゃんです。
- WebUIおよび切り替え機能付(Thruk, MK Multisite, NagVis or PNP)
- カスタマイズダッシュボード有り
- 影響度可視化画面有り
- nagios互換(ダウンタイム設定とかもある)
- HA機能有り
- pnp4nagios/Graphite連携可
- DBは割と選べる(MySQL, Oracle, MsSQL, MongoDB, etc…)
…とまぁ色々だ。
使い込むのは後にして、いんすとーる&ふぁーすといんぷれっしょん。
構成
トポロジ
|
|
両方ともこれ
|
|
Ansible自体の準備は Ansibleでmunin2を入れるとビスケットが割れた の時と同じ。
インストール
今回のAnsibleクッキングでは、次の要素が組み込まれます。
- shinken2系(pip経由。WebUIはpython直なので、apache,nginx等は現時点では含まれません)
- localhostを監視するlinux-sshプラグイン(要python-paramiko)
- ダッシュボード表示用のsqlite
コンポーネント依存も少なくて案外小さいじゃないですかー(CV.遥そら)
2系と1系があったら最新版を入れたいじゃないですかー(CV.遥そら)
私ってどっちかっていうと可愛い系じゃないですかー(CV.遥そら)
光の速さでインストール
|
|
説明はPlaybookに任せる(説明を端折るための横着)
実際、下記URLの内容がPlaybookになってるだけです。
で、この場合で言うと http://192.168.122.143:7767/
にアクセスすると、インストールされたShinkenの画面を見ることができると思いますが…どうですかねぇ。
外観
ログイン画面。
Username: admin
/ Password: admin
でログインできます。
デフォルトなので、変更時はこちらの contact_name,password
を変更する。
|
|
ログインすると、IT Problemsのページに飛ぶ。
上のバーからAll画面に移動するとこんな感じ。綺麗。
右端の下矢印をクリックすると、ちょっと広がる(でもそれほど情報量は増えない)
localhostをクリックすると、localhost全体のページに遷移する。
そこから、Servicesに画面遷移すると、そのホストの監視対象ツリーを見ることができる。
このツリーはImpact graphを書くときの監視階層に関係している。
右端のImpact graphに画面遷移すると、監視対象の状態ツリーを確認することができる。
localhostの左側に伸びている/systemをクリックすると、トポロジが変形して健常度合を見ることができる。(さらにホイールスクロールで拡大縮小が可能だ)
上のバーのSystemからShinken Stateを選べば、各デーモンの状態を見ることができる(…っていうかデーモン多くね?)
更に、ダッシュボードにアクセスすると最初は何もない。
で + Add a new Widget
をクリックすると、右側に選択肢が出るので適当にRelation graphとSystem stateを追加して、適当に並べてみるとこんな感じになる。
Editボタンを押すと、対象を変更できる(今はlocalhostしかいないけど)ので、対象のホストを選択して表示することができる。
更に、Currently(右上の交差している矢印っぽいやつ)をクリックすると、良い感じに監視してる風の画面が出る。
この画面を一日中眺めて、赤くなったら仕事をしよう(提案)
さて。
流石に監視サーバ自身だけ監視してもしょうがない。監視対象を追加したりしないといけないだろう。
設定を追加したり変更したりするにはどこの設定ファイルを触ればいいのかな?
多分 /etc/shinken の中見ればわかるよね?
|
|
Wow…ファイルガ オオクテ ヨクワカリマセーン…。
アーキテクチャ見よう
ファイルが多くて良く分からないのは、アーキテクチャをよく知らないからだ。構成を知ろう。
既に心が折れそうだなぁ。
shinkenは主に下記の6つの要素(内1つはオプション)で構成されます。
負荷分散を考慮しているため、個々の要素はそれぞれ異なるノードにインストールしてスケールすることが可能です。
-
Arbiter
- 設定ファイルを読み込んで、対応するデーモンに配布するやつ
- 配布先のデーモンが死んだら別のデーモンに配布しなおす高可用性を管理する
- Livestatus APIとかnagios.cmdでユーザが叩いたコマンドを、適切なデーモンにルーティングする入口の役割を持ちます
-
Scheduler
- pollerとreactionnerに処理を割り当てるやつ
- 実際の処理はしないけど、チェック結果を一時的に受け取ってプールする
-
Poller
- 能動的にチェックプラグインを起動するやつ
-
Reactionner
- チェックプラグインの結果から、メールを投げたりRSS通知をしたりする
- Shinken以外の外部システムに対して能動的に働きかける処理を一元化している
-
Brocker
- Schedulerから受け取ったチェックプラグインの実データの処理を決定するやつ
- 監視結果、リソース値、ログをデータとして出力する部分
- WebUIはこいつを介してデータにアクセスするので、WebUIプラグインはこいつが管理する
-
Receiver(optional)
- 受動的にチェック結果を受け取るやつ
- NSCA daemon(nagiosでSNMP Trapを受け取って処理するやつ)とかはここに分類される
公式の出してる画像 http://www.shinken-monitoring.org/wiki/the_shinken_architecture が割と綺麗です。が、若干ふんわりしています。
まぁ、流れはこんな感じで良いんじゃないかな。
- 設定ファイル読んで設定配る(Arbiter)
- スケジューラ(Scheduler)
- チェックプラグイン(nagiosプラグインとか)動かす(Poller)
- スケジューラ(Scheduler)
- データためる(Brocker)
- Webアクセスするプラグインを管理してるやつが立ってる(Brocker) <- ここにWebアクセスしてデータ見る
ノードの追加
今回使っているのはlinux-sshプラグインで、監視項目はデフォルトでこんな感じ
|
|
_stats
がついてるものがリソース測定用で、そうでないものがプロセス監視用ぽい。
shinkenのWebUIからはノード追加用の設定は出来ないので、こんな感じで追加します。
linux-sshはsshログインが必須なので公開鍵登録をして、設定ファイルを書きます
|
|
- アクセス先にtestユーザがいると仮定しています。ここは適切な(ログインしてコマンド操作が可能な)ユーザに読み替えてください
- Arbiterだけを再起動すれば、設定ファイルの変更は適用されます(アーキテクチャの通り)
_SSH_USER
などの変数は、例えばlinux-sshを使用する場合は/etc/shinken/packs/linux-ssh/templates.cfg
で定義されています。- shinkenユーザの公開鍵はインストール時にplaybookに書いておいたから、最初から使えるよ!やったね!
これで新しいホストが追加されて、監視がスタートします。
これで監視ノードが増えた時、どうやってカタカタすれば良いかは分かった。
チェックプラグインの追加
linux-sshしか使えないのもあれだし、SNMPのチェックとかしたくなったらどうすればいいんだろう。
あ、それ linux-snmp を入れれば良さそう。
|
|
ふむふむ。さっきと同じパターンで、監視ホストに設定を入れればいいんだな。
COMMUNITYはとりあえずpublicらしいので動作確認しておこう。
で、チェックプラグインを起動して
|
|
Oh…。
どうせnagiosプラグインに関するものは必要になるので、とりあえず一式入れとく。
|
|
何だよもう!更にプラグインにパスを追加して動作確認
|
|
またか…決してShinkenが悪いわけではないと思うのだが、もう既に調査だけでお腹一杯になってる。
いや待て、パッケージングされたスクリプトが修正しないと動かないの、Shinkenが悪いだろ。
|
|
これでプラグインの一部は動くことが確認できた。
後は、さっきと同様に設定を変更して再起動。
|
|
動いた。
何でUNKNOWNなんですか!値取れてるじゃないですか!もう!
割に合わねぇ。
localhostの時は表示されなかったけど、SNMPを使っていると、ホストの画面で見た目が無駄にカッコいいリソースダイアグラムを見ることができます。
カッコいい(真顔)
っていうか Warning: This plugin must be either run as root or setuid root.
ってなんだよ!SNMPプラグインだぞちょっと待てよ!
ま、それはさておき。
新しくMIBを指定して監視するには、
/etc/shinken/packs/linux-snmp/services/
で*.cfg
を書く/etc/shinken/packs/linux-snmp/command.cfg
にコマンドを定義する
の順で設定可能だと思うのだが、見る限りSNMPを手厚くする気が無いように見えるんですよね。
|
|
nagios-plugins入れたんだから /usr/lib/nagios/plugins/check_snmp
でも使えば?と言うことですか。そんな馬鹿な。
っていうか全編通して設定が非常に面倒なんですけど、これどうにかならないんですか…Livestatus APIでも入れたら楽になるんですか…?
グラフ欲しい!んだけど…
「グラフが無いとか耐えられない!」からの「耐えて別のリソースグラフツール探すか」の流れ。
ヤバい、無限に調査範囲が広がるし、割とどこに着地できない、ヤバい。
あぁ、Shinkenはグラフツール(Graphite/PNP4Nagios)との連携ができるんですよ。
- http://www.shinken-monitoring.org/wiki/use_with_pnp
- http://www.shinken-monitoring.org/wiki/use_with_graphite
ただその、ちょっと疲れてしまって。
気が向いたらグラフ連携も書きましょうね。
そうだね、向きそうにないね。
もう終わりにしよう
自宅ラボライフを快適にするには、監視を簡単かつ的確に設定できる必要があることは言うまでもない。自動的に監視が始まろうもんならお昼寝生活待ったなしですよ。
一応Shinkenと呼ばれる監視ソフトウェアも抑えておく必要があるかと思って、割とちゃんと調査しようと思っていたんですよ。
あー…途中までは。
確かに見た目は割と良いし、インストール自体はそう難しくもないし、プラグインをshinken.ioが配ってるってのは良いと思うんですよ。
でもちょっとそれ以外がつらい。全体的につらい。
恐らくこれならZabbixやCentreonやPandoraFMSと向き合った方が良い。
とりあえずはこんなところで幕引きにしたい。
僕がベストプラクティスに沿ってないからだとか、もっとちゃんと調査したいという人は是非よろしくお願い致します。