2014年11月アーカイブ

いい加減このブログも読みづらので変えたいのですが。。。

Capy Inc.がMicrosoft Ventures Tel AvivのAcceleration Program Batch #5に採択され、その期間中にイスラエルに訪れることができたので何をしてきたのかを書き留めておこうかと。

何をしにいったのか?

自分の役割としては世界中から優秀なメンターが集まるということだったため、想定しているシステムのアーキテクチャの妥当性や意見を求めたりよりセキュアなサーバ構成について意見をもらおうという方針で行ってきました。

また、イスラエルへ行く直前に Azure Stream Analytics というサービスがβ版で発表されていたため、サービス向上に役立てないか?ということで急遽目的を1個追加しました。
今回はその際に開発した Fluentd pluginの話です。

Azure Stream Analyticsとは?

tldr;


まず Azure Stream Analytics はリアルタイムにイベントをSQLのようなクエリで簡単に処理できるサービスで、今後IOT(Internet of things)市場がもっと活性化した際のリアルタイムデータ処理系を意図したサービス可と思います。
個人的には Norikra as a ServiceやEsper as a Serviceのように考えてます。
サービス自体はEvent Drivenな構成になっているようで、入力は Azure Blob Storage, Azure Event Hubs(AMQP/HTTPS) へイベントデータを入力でき、リアルタイムにStream Analiticsへ渡されます。
イベント処理は以下の様なSQL Likeなわかりやすいクエリでデータを処理させることができます。





また、クエリには窓関数も設けられているため、定期的にどのようなデータ処理を行うかも指定できます。
用意されている窓関数は以下の3つです。

Tumbling Window

指定された時間毎に窓を区切り、その窓に入ったイベントを対象とします。

Hopping Window

Tumbling Windowに似ていますが、過去いくつの窓を対象とするかも指定できます。

Sliding Window

Sliding Windowは入力されたイベントから指定した時間を遡って対象を決定します。
そのため窓の区切りが上記2つとは異なり変動的になります。


また、出力は今のところ Azure Blob Storage / Azure Event Hubs / SQL Server の3つとなっています。

プラグインの話

Azure Stream AnalyticsにはAzure Event Hubsを経由でイベントデータ(Application LogやAccess Logなど)を入力させることにしました。そのためにまずはそれ用のプラグインの開発を始めました。

fluent-plugin-azureeventhubs

以下の様な感じでAzure Management Portalから取得できるConnection Stringをはりつける事で接続可能にしています。
※ Azure Event Hubsが対応しているAMQPのプロトコルバージョンが1.0であり今のところRubyモジュールで良いAMQP1.0対応モジュールが見つからなかったので、AMQP接続は今のところNot Implementedとしています。





現在Fluentd(td-agent)とfluent-plugin-azureblobstorageを使ってアーカイブしたApplicationログやアクセスログをAzure Blob Storageへ保存しているため、途中でAzure Event Hubsへの入力も行うように分岐させました。


これでEvent Hubs経由でStream Analyticsへの入力までは行えるようになったため以下の様なクエリでアクセスログから過去5分間のStatusコードの集計を行えるようになり、エラー発生傾向などが見える用になるかと思います。
(実際に使っているクエリとは異なります。)





ちなみにプラグインはまだGemsには登録してません。

課題

実はまだStream Analyticsで処理した結果をサービスへ反映させることができていません。
理由としては

  • Azure Blob Storageを出力先とした場合Prefixは指定できるのですがファイル名がランダムとなってしまい、かつローテートされるため集計結果をリアルタイムに拾うことが困難
  • Azure Event Hubsを出力先として利用してAMQPでSubscribeしたいが、AMQP1.0の良いモジュールがRubyに限らずまだ無い。(Qpid Protonなども試したのですがうまくSubscribeできてないです)
  • SQL Serverは既にMySQLをRDBとして利用しているアーキテクチャにSQL Serverを入れるのが嫌だったので却下。

ということで、これからも継続的にここらへんのサポートをしてもらうのですが何か良い方法が有る方は@hid_tgcなどに@mentionを飛ばしてもらえると助かります。

最後に

イスラエルに行くことになるまでは、恐らく他の人も思っている通り「危険極まりない場所」かと思っていたのですが、行ってみると都会だったりリゾート地だったり印象は全く違いました。
イスラエルはStartup nationを言われるほどStartupが盛んで、若い人に限らず子持ちのお父さんなども結構どのようなStartupを興そうかと考えていたりしていました。
ちなみに治安的にはサンフランシスコとは比較にならないくらい治安がいい気がします。(あくまで個人的な感想)
いろいろな宗教の発祥の地であったり、歴史的にいざこざが絶えない場所がら街には機関銃を持った徴兵された若い兵士(女性も!)の方が歩いていたりはするのですが、興味のある方は是非一度行ってみるもの良いと思います!

このアーカイブについて

このページには、2014年11月に書かれたブログ記事が新しい順に公開されています。

前のアーカイブは2014年8月です。

次のアーカイブは2015年1月です。

最近のコンテンツはインデックスページで見られます。過去に書かれたものはアーカイブのページで見られます。