Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elastic{ON} Tokyo 2016レポート ~ Elastic Stackを用いた異常検知 〜 #elasticon

こんにちは、新人エンジニアの菅野です

今日はElasticの機械学習を用いたの異常検知についてのセッションを聞いてきました。

f:id:acro-engineer:20161215164500j:plain:h400


このセッションで紹介されたのが、新しいプロダクトであるPrelertです。
PrelertについてはPrelertでプログラミングレスな異常検知に挑戦! - Taste of Tech Topics
の記事でも紹介させていただきましたが
2016年9月にElastic社が機械学習を用いた行動予測、異常検知の会社であるprelertを買収しました。

もともと、Elastic Stackでは、大量データに対して
Elasticsearchによる検索(Search)と集約(Aggregation)、あるいはKibanaを用いた可視化(Visualisation)を提供していましたが、
このprelertによって、Machine Learningによる異常検知もできるようになります。

prelertはKibanaのプラグインとして提供され
GUIベースでプログラミングレスに異常検知を行うことができます。

セッションで行われたデモ

セッションではprelertを用いた異常検知2パターンのデモが行われました。

1.ECショップのトランザクション異常検知

f:id:acro-engineer:20161215230836p:plain:h200

 ECサイトの一分毎のトランザクション(購買成立件数)ログデータに対し異常検知を行い、
 購買におけるブラウンアウト(瞬断)を検出するものでした。
 
f:id:acro-engineer:20161215224656p:plain:h400
 
 このデモでは、データの特性(夜の購買が少なく、昼の購買が多い)という
 データのパターンをprelertの学習できちんと認識し、
 起こりうる値からどれだけ離れているかで異常検知ができることが示されていました。
 
 また、トランザクションの異常検知データと、サーバのエラーログの異常検知データとを同時に表示することで
 「DBの異常により、売り上げが異常に低下している」といった原因の分析も可能であることが示されていました。
 
2.Webシステムのセキュリティ異常検知
f:id:acro-engineer:20161215231041p:plain:h200

 次のデモでは、ECサイトのWebサーバのログに異常検知を行い、
 短期間のうちに100回ものPasswordエラーを起こしているユーザを検出するものでした。
 
 検出したユーザに絞り込み、アクセスログの異常検知をおこなうことで、
 不正アクセスしたユーザが、他のユーザがアクセスしない場所にアクセスしていたり、
 大量のデータをWebメールサービスを用いて外部に送付していることが判明しました。

 セキュリティの異常を検出したのちに、そのユーザに絞り込んで異常な行動を検出することで、
 不正アクセスの検知だけでなくその結果どういった行動が行われていたのかまで検知することができることを示したデモでした。

 以下は、発表を聴いての私の感想です。

prelertのすごい点

1.お手軽に異常検知をすることができる
 prelertでは、教師なし学習によりモデルを作成するので、
 GUIで学習対象のデータ、学習対象にかける関数を選択するだけで異常検知をしてくれます。
 どういったものが異常で、どういったものが正常であるのかをユーザがいちいち入力しなくても異常検知を行うことができます。


2.豊富な事前処理関数
 prelertでの機械学習では、事前に実行する関数を選択することで、検知観点を選択することができます。
 例えば、最大値、平均値、普段出てこない文言等、様々な観点での異常検知を行うことができます。

prelertを使ってもまだ困る点

1.原因分析にはデータに対する洞察が必要
 異常検知後の追加の分析では、
 検知した事象から、異常が起きうるであろう部分にアタリを付けて分析する必要があり
 データに対する知識のある人でないと分析が難しいのかなと感じました。

 例えば前述のECサイト異常検知では、
 トランザクションの異常検知から、DBサーバで異常な値が出ているはずだと思いつかない場合には、
 様々なデータに対して、手あたり次第で異常検知を行う必要が出てきそうです。

 この辺りは、異常検知をした後に参照できるようなダッシュボードを自分で用意する必要がありそうです。
 あるいは、Prelertで検知した異常と、他のデータとの相関分析のようなことができれば、問題の検出ができそうだと思いました。
 って言うのは簡単なのですけどね!


そんなprelertですが、現在活発に開発がおこなわれているようです。
現在はβ版であれば触ることができます。

2017年上半期にリリース予定、
2017年3月のElasic{on}サンフランシスコでも大きな発表がなされるようですよ。

これはもうサンフランシスコ、行くしかないですね! 現地でブログを書きます!!

それでは!

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【Elastic search 関連】
Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

【データ分析】
データ分析案件の急増に伴い実践的なデータ分析エンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} Tokyo 2016レポート 〜 Elastic Stack バージョン5 〜 #elasticon

こんにちは@です。

今日はElastic{ON} Tour 東京が開催されています。
参加者は昨年の2倍ほどに達し、400人近くが参加しているようです。
日本国内では最大級のElasticイベントですね。

主な内容としては
先日リリースされたElastic Stack バージョン5についての説明や、
今後のロードマップ、ユーザーからの事例紹介セッションなどがあります。

Acroquestからは、約20人という大人数で参加していますので、
そのフィードバックを記事にして行きます。

多くのセッションがあったので複数の記事に分けてお送りします。


……というわけで第一弾は私@が担当します!

本日のElastic{ON} Tour 東京最初のパートはElastic社によるセッションで、
CTOであるShay Banonの登壇もありました。

f:id:acro-engineer:20161215165255j:plain:h400

Elastic Stackのこれまでの歩みを簡単に振り返ったのち、
バージョン5で追加された新機能についての紹介がありました。

バージョン5で、性能が改善したことや機能の幅が広がったことはもちろんですが
特に印象的だったのは、
エンジニアでない方にもElastic Stackが使えるようにしたいという思想です。

操作が簡単になるようにUI開発を進めたり、
ユーザーが行う操作ができる限りシンプルになるような仕組みに
力をいれていることが伝わってきました。

特にKibanaのUIが一新され、
画面の見やすさや操作性が飛躍的に向上しました。
また、インストール作業が煩雑だった、
timelionやConsole(旧Sense)といったプラグインもデフォルトで組み込まれるようになりました。
今回の改善は、Kibana 4.xを使っていた方にとっては驚きだったと思います。

その他の重要なトピックとしては、
prelert(機械学習による異常検知ソリューション)やElastic Cloud Enterprise のリリース予定についての話題がありました。

prelertは、Elasticsearchに入っているデータに対して、
プログラミングレスで異常検知を行うことができるプロダクトです。
現在はまだベータ版ですが、prelertがリリースされれば、
Elasticserachに取り込んだデータの異常を簡単に検知できるようになるので
画期的な変化と言えます。

Elastic Cloud Enterprise は、
確保するリソース量を設定するだけで、Elasticsearchのクラスタを自動構築してくれる
オンプレミスのサービスです。
設定手順を間違えるリスクを抑えられ、
なおかつワンアクションでクラスタを構築できるというメリットがあります
Elastic Stack導入の敷居がかなり下がるのではないでしょうか。


上記の2プロダクトによって、
Elastic Stackの運用やユースケースの可能性は
大きく広がると思われるので、今から楽しみです

リリース時期に関してですが、
Elastic Cloud Enterprise は2017年の第一四半期中にGAリリースを目指す。
Prelertはkibanaとより親和するように調整していくとのことですが、
2017年の早いうちにリリースが予定されている。
という状況のようです。


Elastic社によるセッションのフィードバックは以上となります。
他のセッションについてもこの後フィードバックをして行きますので、
ご期待ください(^^)

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【Elastic search 関連】
Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

【データ分析】
データ分析案件の急増に伴い実践的なデータ分析エンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic{ON} Tokyo 2016 いよいよ開始! #elasticon

どうもこんにちは!
Acroquestで営業をやっているkusunokiです!

今日は、なんと、Elastcit{ON}Tour東京2016に来ています!
せっかく来たので、この会場の盛り上がりを皆さんにもお伝えしたい!
そんな一心でブログを書かせていただきました。

ちなみに、当ブログで本日の各セッションについての記事を書いていますので、ぜひご覧になってください!

まず、開催場所は、
六本木ヒルズ森タワー49階にある、アカデミーヒルズ

私は、自社が出展するブースの設営を担当していたので、
早めに会場に到着していました。

49階までエレベータで上がり、
会場窓際にある自社用のブーススペースで設営をしていましたが、
これがまた外の眺めが良くてびっくり!
運良く天気に恵まれ、遠くに見える富士山が絶景でした。

f:id:acro-engineer:20161215150703j:plain:h400

さて、会場につき次第、
そそくさとブースの設営をやっていくわけですが、それと並行して、
運営スタッフの方々も事前の最終チェックをしていたんですけど、
会場の後ろのほうで、複数の人影が見えたんです。

会場を眺めながら話あっていた様子だったので、
管理者か何かかなーと気になって見てみたら、
なんとElasticsearch社CTOのShayBanonさんではないですか!!!

しかも、隣を見てみると、ShaneさんもUriさんもいて、
こんな豪華なメンバーがそろっている場面を、しかも登壇している姿ではなく
生で見れるなんて、そうそうない事ですね。。

朝から感動してばっかり^^;


設営が完了し、会場を見渡してみると、座席がもう8割近く埋まっていました。
その時の時刻は、だいたい9時30分でしたかね。
最初の基調講演の開始時間が10時なので、
30分前には、会場がほぼ埋まっていたということになります。

f:id:acro-engineer:20161215150732j:plain:h400

朝早くから賑わいを見せるこのイベント、ピーク時が恐ろしい、、

ちなみに、
去年Elastic{ON}Tour東京2015が開催されましたが、
今年は、申し込みをした人がその2倍らしいです。
だから、最初からこんなに人が居たのか、、、

そして、あれこれしているうちに基調講演に突入したのですが、
登壇したShayBanonさんが話始めると同時に、
PCのキーボードを叩く音が一斉に鳴り始まるわけです。
来場者の方たちの温度感がどれだけ高いか良くわかりますね!


そしてそのあと、ShaneさんやElasticsearch日本支社のエンジニアの
大谷さんなどのセッションがいくつか続き、ついにAMA(Ask Me Anything)タイム突入!

Ask Me Anythingとは、Elasticsearch社のエンジニアが、
「Elasticsearchに関する技術的な質問についてなんでもお答えします」
というコーナーなのですが、直前のセッションが終わったかと思いきや、
ものすごい勢いで人が増えていくんです。

f:id:acro-engineer:20161215150800j:plain:h400

そして私たちのブースにもたくさんの方々が立ち寄ってくれまして、
おかげさまでこの盛況ぶり!!

皆さん、どうもありがとうございます!



実は、今回のイベントの最後のセッションなのですが、
当社の山崎が、自社製品である「ENdoSnipe」という、
可視化、分析ソリューションについて講演を行います。
そのあとには、AMAとネットワーキングタイムもありますので、
是非楽しみにしてください!


それと、私たちのブースでは、その「ENdoSnipe」のデモや、
「Elasticsearchを活用する際にハマりやすい11の罠と対処法」の資料など、
色々ご用意しておりますので、是非遊びに来てください!


また「今日行けなかったけど、Acroquestが配っている11の罠の資料気になるな」
と言う方は、一言ご連絡ください。
当社のノウハウがつまっているため、数量限定でご用意している資料ですが、
このブログを読んでいる方々には、特別にお渡しできるかもしれません。
ご連絡はこちらまで!!
endosnipe@acroquest.co.jp


最後に、Elastic{ON}Tour東京2016は、去年よりも盛り上がっております。
Elasticsearchが日本で広がってきている証拠ですね!
皆さんもこれを機に、一緒にElasticsearchを盛り上げていきましょう!

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【Elastic search 関連】
Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

【データ分析】
データ分析案件の急増に伴い実践的なデータ分析エンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Prelertでプログラミングレスな異常検知に挑戦! Part2

こんにちは!@です。

前回はPrelertを使って、簡単に異常検知を行ってみました!
Prelert自身の説明や画面の説明はまず、こちらを読んでみてください!
acro-engineer.hatenablog.com

前回の記事ではPrelertの基本的な使い方を紹介しましたが、
紹介しきれなかった魅力的な機能があります。それがinfluencer検出機能です。
今回は公式サイトのサンプルを使い、このinfluencer検出機能を実際に使ってみます。

influencer検出機能とは

influencer検出機能はデータ群の異常とその要因を示す機能です。
この機能のうれしいところを、考えられるユースケースと共に紹介します。

Case1 不正取引の検出

次のようなニュースがありました。

www.itmedia.co.jp

1日の中で数多くの取引がある中、不正な取引を見つけることは非常に難しいです。

Prelertのinfluencer機能を利用することで、
その膨大な取引データの中から異常な取引があったことを検知するだけでなく、
異常を起こしたデータ(もしくはデータ群)を見つけ出すことができそうです。

Case2 システムの監視

システムの障害が発生すると損失が発生します。
次の記事によれば、国内企業一社あたり約2億1900万円の損失がシステム障害により発生しています。

www.ipa.go.jp

取得できる全ての情報を監視することは非常に難しいです。
システムから取得できる情報が膨大であることがその要因の一つとして、挙げられます。

Prelertのinfluencer検出機能を使えば、収集したメトリクスから、
システムの異常をいち早く見抜くことができそうです。

Case3 テレマティクス

自動車盗難の被害者に10件中2件しか自動車が戻ってこないことについて次の記事に掲載されています。

STOP THE 自動車盗難 自動車盗難の現状

自動車が盗難されるとGPSデータは通常の利用時に取得できるデータと
異なる傾向のデータを取得できそうです。
Prelertのinfluencer検出機能を使って、普段と異なる振る舞いの検知をし、
盗難車を発見することができそうです。

Influencer検出機能を使ってみる

データの説明

今回、利用するのは公式サイトWebサービスのログデータになります。

ログの例は次のとおりです。

2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(AAL): exiting: 132.2046
2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(JZA): exiting: 990.4628
2016/04/04 00:00:00 INFO  [http-8680]: FareQuoteImpl - FareQuoteImpl.getFare(JBU): exiting: 877.5927

今回、サーバのアクセスが急増していると仮定します。このアクセス急増の原因は複数、考えられます。
例えば、キャンペーンを打って同じページにアクセスが集中した、
あるいは、同じ人が目的を持って攻撃してきたのか、更に、特定のサーバにアクセスが偏ってしまったのか・・・。

このデータからアクセスの急増があるのかどうか、
そして、もし急増しているなら、その要因まで辿ってみたいと思います!

データの投入方法

データの入手方法を説明します。

公式サイトからデータをダウンロードして入手します。
ダウンロードしたファイルの中にLogstashとその設定ファイルが含まれています。
それを使うことで、Elasticsearchに投入できます。

データの投入はダウンロードファイルに含まれている「README.TXT」の指示に従ってできます。
「README.TXT」のcurlコマンドのポート番号や「logstash-farequote.conf」の
Elasticsearchのポート番号が9400番になっていることに注意が必要です。

Elasticsearchをデフォルトの設定で起動するとポート番号が9200番で起動します。
そのため、Elasticsearchのポート番号がcurlやLogstashで使用するポート番号と合わず、投入が失敗します。

また、Logstashの設定に書いてあるファイルパスを自分の環境に合わせて書き換える必要があります。

Jobの設定

Prelertのinfluencer検出機能を使って要因を調査しましょう。
まずは検索対象のindexとして「farequote」を選択します。

f:id:acro-engineer:20161022142014j:plain

次の画面の「name」と「description」は今回のindexと同じ「farequote」を入力します。

f:id:acro-engineer:20161022142020j:plain

「function」の項目は「count」、「byFieldName」の項目は「airline」を選択します。
これは、「airline」ごとに異常検知を行う設定です。
このように設定することで、どの「airline」のアクセス回数が急激に変化したかわかります。

f:id:acro-engineer:20161022142026j:plain

次に「bucketspan」を30minutesに設定します。
そしてここが今回の肝です!influencersを設定します。
今回は@version以外を選択します。

f:id:acro-engineer:20161119170827j:plain

最後にjobをSaveし、起動します。

Influencer検出機能の結果

Summary View

画像にある赤色のセルは異常度が高い箇所を示しています。

f:id:acro-engineer:20161119170945j:plain

また、次の画像はinfluencer検出機能の結果を示しています。
赤いセルが画像内の「AAL」、「American Airlines」の4月6日の12:00過ぎに見られます。
これは「AAL」、「American Airlines」の値が4月6日12:00過ぎに異常の要因として
検知されていることを示しています。

f:id:acro-engineer:20161119170952j:plain

Exproler

「Exproler」画面はSummaryで確認した異常傾向の詳細を確認できます。

「Anomalies」の項目は検出された要因(found for、influenced by)やその時間を
ジャーナル形式で表示できます。
「Anomalies」からは、「airline」と「name」属性ともに同じ箇所で判定できていることを確認できます。

f:id:acro-engineer:20161119171000j:plain

では、「AAL」と「American Airlines」のアクセス回数が実際にどうだったかを見てみましょう。

実際にどうだったのか

kibanaのVisualizationを使って次のグラフを書いてみました。
横軸を時刻(「@timestamp」)、縦軸がデータ数、それを「airline」属性で分割したグラフです。

f:id:acro-engineer:20161119181838j:plain

AAL」が16:00付近に増加していることがグラフを見てわかります。

また、「American Airlines」も同様に可視化してみました。
「name」属性でアクセス数を表示してみます。

f:id:acro-engineer:20161119181907j:plain

あ、あれ、名前が違うだけで同じグラフが見えますね。
そして、Prelertの検知がこれらのグラフから正しそうに見えますね!

もしかしたら、検出時刻付近で「American Airlines」、「AAL」に関係する
利用者に魅力的なキャンペーンを打ったのかもしれませんね!

このようにKibanaを使って目でも確かに確認ができますが
アラートの仕組み(Watcher)と組み合わされば、Prelertで自動で検出し、
通知する仕組みが作れるかもしれません!

最後に

Prelertを使って要因の調査をExampleから試してみました。
異常要因の調査に非常に役立つ感じがし、これがプログラミング不要で
挑戦できるのかが良い感じです!

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

【Elastic search 関連】
Elasticsearchを仕事で使いこみたいデータ分析エンジニア募集中! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

【データ分析】
データ分析案件の急増に伴い実践的なデータ分析エンジニアWanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic Stack 5.1.1がリリースされました!

こんにちは@です。

つい先日、Elastic Stack 5.1.1がリリースされました。
バージョン5.0.0が出たばかりだというのに、凄まじいスピード感です.....

今回のバージョンも新機能の追加がいくつかありました。
早速さわってみたので、主なものをいくつか紹介していこうと思います。

新機能1.新たなVisualization「Tag cloud」が追加

f:id:acro-engineer:20161210202034p:plain
データ数やその他のパラメータの大きさを、文字サイズで表現する機能です。
例えば上の画像では、売り上げが多かったお菓子の名前を大きく表示するということができます。
上手く使えばビジュアル的に面白い画面を作ることができそうです。

新機能2.クエリのキャンセル機能がついた

task management APIを通じて、検索クエリをキャンセルすることができるようになりました。
POST _tasks/task_id:1/_cancel のようにtask_idを指定することでクエリをキャンセルします。

他にも、特定の処理をまとめてキャンセルすることも可能です。
例えば下記のクエリのようにすれば2つのノードで走っているreindex処理をキャンセルすることができます。
POST _tasks/_cancel?nodes=nodeId1,nodeId2&actions=*reindex
うっかり処理が重くなるようなクエリ投げてしまった場合でも、この機能があれば安心です(笑)

新機能3.Graphで複数indexを指定できるようになった

以前はGraphでindexを指定する際は、単一のindex名を指定することしかできませんでした。今回のバージョンからは他のvisualizationと同じように、”logstash-*”のような形式で複数のindexを分析対象にすることができます。
f:id:acro-engineer:20161210202205p:plain

新機能4.クエリの実行時間を確認できるProfiler機能

X-Packの機能になるようですが、クエリの実行時間を確認できるProfilerという機能が追加されました。
f:id:acro-engineer:20161212035342p:plain
上の画像のように、どのシャードに対してどれくらいの時間がかかったかということが一目でわかります。
また、queryとaggregationを別々に確認することができるので、どの部分が重い処理なのかを簡単に確認することができます。

Elastic Cloud便利

余談になりますが今回バージョンアップする時に、Elastic Cloudを使っていて、すごい便利だなぁと感じました。
Web上でボタンをワンクリックするだけで、Elastic Stack全体のバージョンアップが完了して使えるようになります。

Windowsのローカルマシンでのバージョンアップも同じくらい楽にできるようになって欲しいものです。

3月のElastic{on}で発表された機能で、実装されていないものも数多くあるので、今後に期待したいところですね^^

以上、@がElastic Stack 5.1.1の新機能について紹介しました。

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
www.wantedly.com

Elasticsearchのデータを別のElasticsearchに入れるいくつかの方法

こんにちは、 @ です。

この記事は、Elastic stack Advent Calendar 2016の8日目です。
qiita.com

皆さんは、Elasticsearchのデータを、別のElasticsearchに入れたいことってありませんか?
私は実際に、

  1. 各自がアドホックに分析するため、個人用のElasticsearchを立てているので、そこにコピーしたい
  2. 遠隔地にあり、直接アクセスできないElasticsearchのデータを確認したい

ということをしたい場合があります。
今回は、このようなケースで使える方法をいくつか紹介します。

正攻法はsnapshot機能を利用することかもしれませんが、ちょっとしたコピーをしたいときには敷居が高いのではないかと思います。
ここでは、もう少し簡易に実行する方法を紹介します。

(方法1) Logstashでコピーする

まずは、

各自がアドホックに分析するため、個人用のElasticsearchを立てているので、そこにコピーしたい

のようなケースで使い勝手が良いコピー方法です。

コピー元とコピー先のElasticsearchが同一ネットワークにあることが前提になりますが、LogstashのElasticsearchプラグインを利用してコピーするのが便利です。
具体的な方法については、こちらを参考にすると良いと思います。
stackoverflow.com

(方法2) コピー元で取得したJSONをコピー先に入れる

次は、

遠隔地にあり、直接アクセスできないElasticsearchのデータを確認したい

のようなケースで使い勝手が良いコピー方法です。

遠隔地で別の人がKibanaを操作していて、見ているデータを自分でも確認したくなるケースがあります。
この場合、KibanaのDiscover機能でデータを取得し、コピー先に入れるのが便利です。
具体的には、次の方法でコピーすることができます。

コピー元でデータを取得する

まずは、コピー元でElasticsearchに入っているデータを次の手順で取得します。

1.メニューから「Discover」をクリックし、Discover画面を表示する
f:id:acro-engineer:20161208061505j:plain

2.コピーしたい時刻に合わせ、グラフ左下の上矢印をクリックする
f:id:acro-engineer:20161208061548j:plain

3.テーブルの上にある「Response」をクリックする
f:id:acro-engineer:20161208061653j:plain

4.表示されるJSONをコピーし、ファイルに保存する(ここでは、Response.jsonに保存するものとします)
f:id:acro-engineer:20161208061743j:plain

コピー先にデータを登録する

次に、コピー先のElasticsearchに入っているデータを登録します。
私はちょっとしたPythonスクリプトを使っています。

1.Pythonがインストールされていない場合は、以下のサイトからダウンロードし、インストールする
www.python.org

2.Python用Elasticsearchクライアントがインストールされていない場合は、インストールする

pip install elasticsearch

3.次のPythonスクリプトを実行する

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import json
from elasticsearch import Elasticsearch

es = Elasticsearch('192.168.0.1')

file = open('Response.json', 'r')
json_data = json.load(file)

for data in json_data['hits']['hits']:
    es.index(index=data['_index'],
             doc_type=data['_type'],
             body=data['_source'],
             id=data['_id'])

※'192.168.0.1'のところには、コピー先のElasticsearchを指定してください。

これで、コピー先のElasticsearchにデータが入ります。


私の場合、遠隔地のデータを確認したいケースがあるため、これで重宝しています。
この方法が、同じような状況の方に役立てば幸いです。

Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
www.wantedly.com

大規模サーバ更改でServerspecを使ってみました

こんにちは、おじさん技術者の iga です。

とあるサーバ更改のプロジェクトで、「Serverspecを使った設定チェック」を実施しましたので、その時のノウハウを共有したいと思います。

設定チェックの対象となるサーバが全部で約600台あり、あるサーバ種別で最大282台と大規模なため、人力でのチェックはあきらめていました。
そこで利用したのが、Serverspecです。

f:id:acro-engineer:20161119145144j:plain

Serverspecとは

Serverspecは、サーバの状態をコードにより自動的にテストするためのツールです。
公式サイトはこちらです。
http://serverspec.org/

Ruby製のテストフレームワークRSpecがベースになっていて、抽象化したコードによってサーバの状態を確認するようになっています。

システム構成の概要

今回のテスト対象のシステム構成は、次の図のようになっています。

f:id:acro-engineer:20161120193702j:plain

メンテナンス端末にServerspecをインストールして、メンテナンス端末からテスト対象のサーバにsshで接続できるようになっています。

今回のカスタマイズ方針

サーバの台数は多いのですが、同じ役割のサーバが数十台で構成されるとなっているため、Serverspec標準のテスト方法だと、同じチェック内容を大量に複製する必要があります。
標準のフォルダ構成だと、以下の図のようになります。

f:id:acro-engineer:20161119150226j:plain

「websvr001」と「websvr002」に同じテストを適用していますが、台数が少ない間はファイルのコピーやシンボリックリンクで対応できますが、台数が増えると管理しきれなくなります。

そこで、複数サーバでテストを共有するため、公式サイトにも記述されている「How to share Serverspec tests among hosts」という手法を取りました。

f:id:acro-engineer:20161119150227j:plain

サーバ種別ごとにテスト対象を配置することで、同じサーバ種別で台数が増えても、管理できるようになりました。


ただ、サンプルで記述されている内容だと、以下のような問題があってそのまま適用できませんでした。
1) 対象サーバが固定で記述されている。
→台数が多いので、テスト時間短縮のためあるサーバ種別だけテストしたい、ということができない。
2) サーバ種別(Role)をサーバ名から取得するようになっている。
→サーバ名が命名規則に沿ってつけられているが、サーバ種別が分かりやすい名前になっていない。
→記述ミスがあると実行の無駄になってしまうので、分かりやすい記述にしたかった。

今回対応するカスタマイズ内容

今回の対応(以降、Role対応 と記載します)では、以下のことを行いました。
1) 対象サーバとサーバ種別は、JSON形式の外部ファイルに用意しておく。
2) サーバ種別は、分かりやすい名前にしておく。

具体的なカスタマイズ内容

Role対応するため、Rakefileを次のように修正しました。
Rakefileは、Serverspecが自動生成した、テストを実行する処理が記述されたファイルになります。

まずは実行対象のサーバ情報を取り出すところです。

標準のRakefile
  targets = []
  Dir.glob('./spec/*').each do |dir|
    next unless File.directory?(dir)
    target = File.basename(dir)
    target = "_#{target}" if target == "default"
    targets << target
  end

標準ではspecフォルダ配下のフォルダが実行対象サーバ名(またはIPアドレス)になっているので、それを読み込んで実行対象(target)に保存しています。

Role対応版Rakefile
  # 環境変数から使用するIPアドレスリストを取得
  rolePath = ENV['SERVERSPEC_ROLE']

  # specフォルダ配下のrole名を取得する
  roles = []
  Dir.glob('./spec/*').each do |dir|
    next unless File.directory?(dir)
    target = File.basename(dir)
    roles << target
  end

  # role別のIPアドレスリストをjsonファイルから読み込む
  all_addrs = []
  targets = []
  roles.each do |role|
    ip_addrs = get_ipaddr(rolePath, role)
    if ip_addrs
      all_addrs.concat(ip_addrs)

      ip_addrs.each do |ip_addr|
        targets << {:role => role, :addr => ip_addr}
      end
    end
  end


Role対応では、specフォルダ配下のフォルダがサーバ種別になっているので、それを読み込みます。
そして、JSONファイルからサーバ種別と実行対象サーバ名を読み込んで、specフォルダ配下にサーバ種別が定義されている場合に、サーバ種別と実行対象サーバ名をtargetに保存しています。
読み込むJSONファイル名は、環境変数「SERVERSPEC_ROLE」から取得しています。


JSONファイルのフォーマットは、次のようにしています。
サーバ種別をキーとして、実行対象サーバ名を配列として定義しています。

  {
    "websvr" : [
      "websvr001",
      "websvr002"
    ],
    "appsvr" : [
      "appsvr001"
    ],
    "dbsvr" : [
      "dbsvr001"
    ]
  }

テストの実行部分は次のようになります。

標準のRakefile
  targets.each do |target|
    original_target = target == "_default" ? target[1..-1] : target
    desc "Run serverspec tests to #{original_target}"
    RSpec::Core::RakeTask.new(target.to_sym) do |t|
      ENV['TARGET_HOST'] = original_target
      t.pattern = "spec/#{original_target}/*_spec.rb"
    end
  end

標準では、targetに入っているサーバ分、テストを実行しています。

Role対応版Rakefile
  targets.each do |target|
    original_role = target[:role]
    original_target = target[:addr]
    begin
      desc "Run serverspec tests to #{original_target}"
      RSpec::Core::RakeTask.new(original_target.to_sym) do |t|
        ENV['EXEC_TIME'] = Time.now.strftime("%Y%m%d_%H%M%S").to_s
        ENV['SERVER_KIND'] = original_role
        ENV['TARGET_HOST'] = original_target
        t.pattern = "spec/#{original_role}/*_spec.rb"
        t.fail_on_error = false
      end
    rescue => ex
      puts ex.message
    end
  end

Role対応では、標準と同じくtargetに入っているサーバ分、テストを実行しています。その際、specフォルダ配下のサーバ種別をtargetに格納したroleから決定するようにしています。

Role対応の結果、サーバ種別「websvr」に対してテストする場合、次のように実行します。

  $ export SERVERSPEC_ROLE=addr/websvr.json
  $ rake spec

まとめ

今回、初めてServerspecを利用しましたが、その威力に感動しました。
これまでは、サーバの設定確認といえば目視やdiffを使った差分確認など、人の注意力に頼った作業をやっていました。
それでは設定ミスを見落としたことが、後になって見つかって大変になる、ということをやってきました。

Serverspecを利用すると、設定のOK/NGが分かりやすく出てくるため、NG理由を確認するのも設定ミスなのかテスト内容のミスなのか、切り分けが容易になりました。


それでは!


Acroquest Technologyでは、キャリア採用を行っています。


  • ビッグデータHadoop/Spark、NoSQL)、データ分析(Elasticsearch、Python関連)、Web開発(SpringCloud/SpringBoot、AngularJS)といった最新のOSSを利用する開発プロジェクトに関わりたい。
  • マイクロサービスDevOpsなどの技術を使ったり、データ分析機械学習などのスキルを活かしたい。
  • 社会貢献性の高いプロジェクトや、顧客の価値を創造するようなプロジェクトで、提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や、対外的な勉強会の開催・参加を通した技術の発信、社内勉強会での技術情報共有により、エンジニアとして成長したい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 
急増するDevOps案件の中でスキルを活かしたいエンジニア募集! - Acroquest Technology株式会社のインフラエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com