どうも、ちかです
最近めっちゃ忙しい。。
Kibana ってこんなの
Elasticsearch のデータを可視化するツールです。
こういうブログ記事では
まず導入として
「Kibana ってこんなの」っていう話をするものですが
すでに知ってる人向けの記事ということで。
Kibana プラグイン
Kibana 4.2 からプラグインで機能を追加できるようになりました。
サーバー側は Node.js のフレームワーク hapi ベースで
クライアント側は AngularJS ベースで
とりあえずなんでもできます。
特に Elasticsearch へのアクセスは
サーバーから手軽にできるようになっています。
サーバー側でプロキシを作ればクライアントからも簡単にアクセスできます。
# Elasticsearch への GET メソッドのクチはデフォルトで開いてます。
# elasticsearch.js の API を
# サーバーでは server.plugins.elasticsearch.client として使えます。
# クライアントでは es という名前で依存性注入できます。
Kibana プラグインの作り方
Qiita に
『Kibanaプラットフォームでアプリケーションをつくってみよう』
という濃いぃ記事があるのでご参考に。
ミニマム構成では index.js と package.json があれば OK。
認証プラグイン
で
Kibana を使ってみて気になったのが
認証機能がないこと。
Shield という Elasticsearch プラグインがあるらしいのですが
有償らしいので (セキュリティ向けプラグインShieldのリリース(日本語訳))
とりあえずあきらめて
Authentication という Issue ページも立っているのですが
4.2 ⇒ 4.3 ⇒ 4.4 と先延ばし先延ばしにされているので
とりあえずあきらめて
作ってみました。
- index.js
const Boom = require('boom');var users = { chica: { password: 'secret' }};module.exports = kibana => new kibana.Plugin({ init(server, options) { server.auth.scheme('basic', basic); server.auth.strategy('default', 'basic'); server.auth.default('default'); }});function basic(server, options) { return { authenticate(request, reply) { const authorization = request.raw.req.headers.authorization; if (!authorization) { return reply(Boom.unauthorized('Authentication required', 'Basic')); } const parts = authorization.split(/\s+/); if (parts.length !== 2 || parts[0].toLowerCase() !== 'basic') { return reply(Boom.unauthorized('Authentication failed.', 'Basic')); } const credentials = new Buffer(parts[1], 'base64').toString().split(':', 2); const user = users[credentials[0]]; if (!user || user.password !== credentials[1]) { return reply(Boom.unauthorized('Authentication failed.', 'Basic')); } return reply.continue({ credentials: { user: user } }); } };}
- package.json
{ "name": "basic-authentication", "version": "0.0.1"}
index.js と package.json を tar.gz に固めて
kibana/bin/kibana plugin -i basic-authentication -u file://path/to/plugin.tar.gz
こんなので
一応ちゃんと認証が求められるようになります。
まぁでも
これを洗練するより
4.4 が出るのを待つかな。(本末転倒)
今回はこんなところで。