【Developers.IO 特別編】Elastic 勉強会に登壇しました #elastic #cmdevio
はじめに
藤本です。
まず昨日はセッション中にDemoを実施することができず、大変申し訳ございませんでした。ネットワークトラブルに備えておくべきでした。。。
また懇親会中にようやくダウンロードが完了し、懇親会の中、聞いてくださった方、ありがとうございました。
Demoでどのようなことをやりたかったかこのブログエントリでご紹介します。
スライド
Beats開発
ベースはbeat-generatorによるBeats開発をご参照ください。
(今回はdeviobeatというbeatを作成しています。適宜読み替えてください。)
Beat Generatorを展開すれば動作するよ
cookiecutterを利用して、Beat Generatorを展開すると既に動作するBeatsプロジェクトが生成されています。
make init make build
上記のmakeを実行することで、依存ライブラリダウンロード、設定ファイル(yml)の生成、コンパイルを実行します。
./deviobeat
生成されたバイナリファイルを実行するとローカルホストのElasticsearchに対して一秒毎にタイムスタンプ、実行回数、ホスト名、Beat名などが送信されます。
送信する値、文字列の追加は簡単だよ
Beatsを開発する目的は「取得したい値、文字列があり、それをある間隔で送りたい」というユースケースです。取得したい値、文字列の引き渡しはBeatsではMapとして、Key/Value形式で追加するだけでlibbeatがデータを目的地に送り届けてくれます。
値を取得する実装の複雑さはユースケースに応じて実装の複雑さは変わります。ただ値の取得もGo言語は標準ライブラリや、標準ライブラリで足りないところも外部ライブラリを探せばOSSで提供されていものが多くあります。Elastic社のGithubリポジトリでもSIGARのGo言語実装Go sigarを開発しており、システムのリソース情報の取得ライブラリを提供しており、実装を簡易にしています。Go sigarの取得範囲はtopbeatで利用されているので独自Beatsで利用することはないかな。
またBeatsは軽量さ、本来のシステムに影響を与えないことも目的としているため、高負荷な実装は避けるべきだと考えています。例えば、送信する値を計算したい、文字列をパースしたいなどの処理をしたいのであれば、Logstashを中継させたり、Elasticsearch5.0で実装されるIngest Nodeに任せるのも一つの解決策でしょう。
外部パラメータ定義も簡単だよ
環境依存の設定値はソースにハードコードするのではなく、外部の設定ファイルに書き出したいですよね。config.go
の構造体にフィールドと、マッピングしたyamlのキーを指定するだけでプログラムから読みだすことができます。
Index Templateの生成、設定も簡単だよ
Beatsはバージョン1.2からIndex Templateの設定機能が追加されました。Index Templateを記述したjsonファイルをyamlファイルに指定することでBeatsを起動したタイミングでIndex Templateを作成します。
Beat Generatorを展開すると、deviobeat.template.json
というファイルがあります。デフォルトではIndexの設定値、Beats共通処理であるlibbeatで付与されるフィールドの値が定義されています。独自Beatsを実装する場合、送信したい値があるのでIndex Templateを修正する必要があります。
Beat Generatorを利用した開発ではdeviobeat.template.json
を直接編集することは推奨しておらず、同階層にあるfields.yml
を修正することを推奨しています。
fields.yml
を修正し、make update
を実行すると修正内容がdeviobeat.template.json
に反映されます。
ドキュメント作成も簡単だよ
Beat Generatorのdocs
ディレクトリ配下にインデックス情報、Beatsから送られるフィールド情報が記載されたドキュメントが生成されます。こちらもfields.yml
からmake update
によって反映されます。
サーバへの配布も簡単だよ
make build
によりバイナリファイル、make update
により設定ファイルが出力されることは分かりました。ただ問題が。。。
- OSX用にコンパイルされても、監視したいのLinuxだし、あ、Windowsもあった
- バイナリ、設定ファイルを配布するの面倒 - Linuxだとサービスとして管理したいけど起動スクリプト用意するの面倒
Beats Packerならこれらを解決できます。
- 各種OS、Arch用にクロスコンパイル
- rpm、debなどのパッケージ化
- パッケージ内にsystemdの設定ファイルや、/etc/init.d/配下の制御スクリプトを生成
Beats Packerは別途ブログエントリします。
Kibana Plugin開発
Kibana Pluginは登壇当日にできたものでどうしても見せたかったもので懇親会の最後にチラっとお見せしたものです。
Visualization開発
D3 Liquid Fill Gaugeというd3実装を利用(ほぼ丸パクリ)して、Visualizationを開発しました。
VisualizationにDEVIOという名前が追加されています。
下記のGifはtopbeatで取得したCPU使用率を取得し、直近5秒のデータを可視化したものです。(5秒更新)
フロントエンドはd3を丸々持ってきていますが、こういう外部ライブラリを持ってくれば簡単に実装できるというのは魅力的に感じました。
現在は汎用性がなく、0〜1の範囲が固定値、複数並べることができない。というどうしようもないやつですが、githubにアップしました。
s-fujimoto/kibana-devio-plugin
まとめ
重ね重ね昨日のDemoは楽しみにしてきていただいた方にはご迷惑おかけしました。リベンジしたい。。