Taste of Tech Topics

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

Elastic{ON} 2018 キーノートレポート Elastic goes more open! #elasticonjp

いよいよ始まりました、Elastic{ON} 2018 サンフランシスコ。キーノートセッションで開幕です。
日本では花粉症に悩まされ、サンフランシスコに来たら治るのかなと思ったら全く症状が変わらず、風邪ひいてるのかも知れない @ です。もしかして風邪ひいてても気づかないタイプ?

さて、昨年まではPier 48という桟橋の上にある倉庫で行われていたElastic{ON}ですが、今年はMarriott Marquisというホテルで開催され、人権を取り戻した感じの 以前にも増して豪華なイベントとなりました。さらにキーノートはThe Masonicというイベント会場で行われます。まずはこのキーノートのレポートをお送りしたいと思います。

f:id:acro-engineer:20180228181220p:plain:w700

盛りだくさんのキーノート

キーノートは2時間を(大幅に)超えるボリュームで、10以上のデモが行われました。

ツイッターのリアルタイム実況はこちらを見てください。
togetter.com

発表された内容をかいつまんで紹介すると、次のような感じです。

  1. Rollup API : 定期的に過去のデータを集計する
  2. Machine Learning : 未来予測もできるようになった(ビットコインの予測はできないよ!)
  3. Canvas : 感銘を与えるUI、そしてSQL
  4. Infra UI : Dockerやk8sの監視もできる
  5. APM : アプリの監視をすぐに始められる
  6. Security : セキュリティ問題の可視化とML。あと、Mr.ROBOTのハッキングがガチすぎる
  7. Geo : 地図をレイヤーとして扱って、ポイントを重ねられるのが便利そう(小学生並みの感想)
  8. Search : Swiftype App Searchは、Web UIで簡単に検索のカスタマイズができる
  9. Elastic Cloud : 用途別にノードの性能を変えられるようになった
  10. X-Pack : X-PackのコードもGithubで公開!!

このうち、特に印象深かった「Canvas」と「Infra UI」、そして「X-Pack」について紹介します。

Canvas meets SQL

Canvasは、Kibanaの新しいUIのひとつです。現在はTechnology Preview版が公開されています。
f:id:acro-engineer:20180228181308j:plain:w700
紹介でも「from realism to IMPRESSionism」と書かれていたように、単にデータを見せるだけではなく、印象を与えるためのUIと言えるでしょう。顧客や上位管理層へのプレゼンやデモで利用されることを想定しているのでしょう。とりあえず見た目がカッコイイと、それだけで説得されたような気分になります。

また、このデモではCanvasだけでなく、新機能であるSQLも利用されていました。
次の画像では、少し見づらいですが画面の下のほうにSQLがあり、その検索結果をチャートにプロットしています。
f:id:acro-engineer:20180228181317j:plain:w700
selectとgroup byを使って集計するクエリですね。

ふつうのselectだけのものもプロットしています。
f:id:acro-engineer:20180228181326j:plain:w700

SQLは使い慣れてるし、これがあればElasticsearchの独自クエリを学習しなくて良いし便利だよな」というぐらいに捉えていたのですが、このCanvasSQLのデモには、また別の可能性を感じました。
データの絞り込みや集計を直感的に書けるSQLを使い、その結果をリアルタイムで可視化することで、どのようなデータがどのように分布しているかがすぐに分かります。たとえばアクセスログなどに対しても、SQLで検索してすぐ可視化できるわけです。

これって相当のおおごとなんじゃないですかね。

実際にどこまでできるのか、またSQLがどれぐらい使えるようになるのかは分かりません。そもそもSQL機能のリリース時期も不明です。ただその可能性を感じずにはいられないデモでした。

k8sを監視できるとかヤバいでしょ

さらっとデモが始まったのに、衝撃的だったのがInfra UI。ツイッターで遊んでたら、いきなりkubernetes (k8s) のモニタリングが始まっていました。遊ぶなよって話ですが。
f:id:acro-engineer:20180228181030j:plain:w700
f:id:acro-engineer:20180228181051j:plain:w700
Infra UIは、k8sのpod(コンテナ的なやつ)の全体やリソース状況などを、リアルタイムにモニタリングできる機能です。もちろんk8sだけでなく、個別のサーバやサービスの状況、またDockerもモニタリングができるようです。
これまでインフラのモニタリングは、自分で構成や監視項目を考えて情報収集を行っていましたが、このInfra UIを利用することで、より早くモニタリング環境を構築できるようになりそうです。

また写真を取りそびれたのですが、このInfra UIとMachine Learning (ML) を組み合わせて、一部のコンテナで問題が起きていることを検出して、それを取り除くデモも行っていました。簡単にモニタリングできますよ、というだけでなく、MLとの連携で「異常検知も素早く始められる」ということが、Elasticsearchの強みなのだなと再認識させられました。

X-Packのソースコードをオープン化!

このキーノートで一番盛り上がったのは、CanvasでもSQLでも、Infra UIでもなく、最後にShay Banonが「X-Packのコードをオープン化する」と発表した時でした。
f:id:acro-engineer:20180228181548j:plain:w700

ElasticsearchはOSSのプロダクトですが、いくつかの有償版の機能(X-Pack)のソースコードは非公開でした。当たり前ですよね。むしろ「有償版の機能のソースを公開するバカがいるかよ!」という話ですが、そのバカがここにいたんです。

ソースコードを公開することで、X-Packの機能がより認知され、フィードバックやコントリビュートなども得られるようになる一方で、リスクやデメリットなどもあると思います。ただElasticsearchやX-Packを使っているエンジニアとして、この方針はすごくありがたいです。正直な話、X-Packのいくつかの機能はソースコードJavadocが公開されていないせいで、利用しづらいと感じたこともありました。

この件についてShay Banonがブログを書いているので、ぜひ読んでみてください。
Doubling Down on Open | Elastic
あくまでもソースが公開されるだけであって、これまで有償だった機能(Machine Learningとか)が無償利用できるわけではない、という事だけは強調しておきたいと思います。

キーノート全体の感想

今年のキーノートは、何か凄く目玉となる新機能があったわけではなく、初公開の機能と、出たばかりの機能やユースケースを、いくつか取り揃えて紹介するという内容でした。また全体を通じて「立ち上げのスピード感」と「Machine Learningの自然な利用」を強調してきたなと感じました。

「立ち上げのスピード感」とはElasticsearchを使って「すぐに」監視や検索を始められることです。Infra UIがk8sをすぐにモニタリングできるなどが良い例でしょう。これはElasticsearchがミドルウェアやプラットフォームから、「ソリューション」に近くなっている様子を感じます。

また「Machine Learning (ML) の自然な利用」とは、Infra UIやAPMなどで、MLを使った問題の自動検出を行っていたところです。とても自然な流れで行っていました。そうやって使えるように、MLをうまくコモディティ化していると感じます。

この辺りの戦略面については話すと長くなりそうなので、また機会を改めて書きたいと思いますね。


そんなわけで、大きな目玉はないものの、有償プロダクトであるX-Packのソースコードをオープンにするという爆弾が投じられたElastic{ON}ですが、まだ始まったばかり。残りの2日間も、積極的に情報を集めてきます。


Stay elastic,
see you!

Elastic{ON} 2018 San Francisco 始まります! #elasticonjp

みなさん、こんばんは。@です。

今は、Elastic社の年間通して最大のイベント、Elastic{ON} 2018 San Franciscoに参加すべく、社員4名でサンフランシスコに来ています!
今日はKeynoteが夕方16時から開催され、興奮冷めやらぬまま先ほどホテルに帰ってきたところです。

そんなKeynoteの内容は@に任せるとして、私はKeynote開始前までの様子をレポートします。

REGISTRATION

会場の入り口と受付からしてカッコイイ感じで、テンションが上がってきました。

f:id:acro-engineer:20180228160435j:plain:w400

受付でチェックインをしていると、スタッフの方が「Acroquestの人?会えて嬉しいわ♪」とEQの高い対応をしてもらいました ( w

f:id:acro-engineer:20180228160215j:plain:w400

受け取った名札がこちら。

f:id:acro-engineer:20180228160917j:plain:w400

いよいよ始まる、という感じです!!!

AMA(Ask Me Anything)

今日のメインはKeynoteなのですが、会場の方ではお昼からAMAとランチあるからおいでよ!という流れになっており、
私たちも早速会場に行ってみました。

開始早々だったので、まだこんな感じですが、この時間帯が終わる頃には人がいっぱいになっていました。

f:id:acro-engineer:20180228161205j:plain:w700

会場の中ではスポンサーブースやデモ、そしてAMAブースがあり、かなり賑わっていましたね。

f:id:acro-engineer:20180228161506j:plain:w400

こちらはつい先日公開されたVegaのデモ。こちらは特に人だかりができていました!

f:id:acro-engineer:20180228161401j:plain:w400


私の本命はAMAブースです。

Kibanaのある手法について質問したかったので、Kibanaのエキスパートいますか?とカウンターで訪ねて紹介してもらい、ノートPC片手に、実現方法について教えてもらいました。

英語の不安はありましたし、実際に話す中で、半分も(英語は)理解できていませんが、コードとホワイトボードメモを使えばなんとかなる、という感じです。
無事に目的の内容について教えてもらえたので、早速試してみよう!と良いスタートが切れました。

その後も構築面で聞きたかった話も教えてもらえました。

普段保守サポートでお世話になっているElasticのスタッフの方にも「困っていることありませんか?」と声をかけてもらい、助けて頂きました。
ありがとうございます!

そんなわけで、明日からは複数のセッションが開始になりますので、またその様子をお届けします!
Stay tuned!

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


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

 

Elastic APM + ML(Machine Learning) でwebアプリの異常検知をしてみる

こんにちは。
今年もバレンタインチョコがもらえなかった
新人エンジニアの佐々木@です。

Elasticsearch 6.0で Elastic APM が追加され、前回(※)6.0の時点で alpha 版の概要やセットアップ方法を説明しました。
(※前回については当社、樋口の記事を参照ください)

APMはアプリケーションのパフォーマンス状況を収集して、分析するソフトウェアです。
収集対象は、nodejs,flask,Django,Ruby on rails(beta),Rack(beta),Javascript(alpha)が今はサポートされています。

2018/02/10 時点の最新である 6.2では、Elastic APMもGA になり、
画面が改善されパフォーマンスの分析がしやすくなっています。

そこで、今回も動かして試してみたいのですが、樋口と同じでは芸がないので、
Elastic ML(Machine Learning)と組み合わせて異常検知を試してみたいと思います。

後でも説明しますが、APMで取得するデータは Elasticsearch の index に入っているので、
APMの結果を Alerting や Elastic ML の対象にすることが可能です。

今回の対象Webアプリは去年悔しい思いをしたISUCONの参照実装を使用したいと思います。
(※ISUCONについてはこちらを参照してください)
構成イメージとしてはこのようになります。
f:id:acro-engineer:20180211234231p:plain

今回はあくまで異常検知ですので、Webアプリのリクエスト数を見て
「いつものパターンと異なる場合」に検知させたいと思います。
(使用する題材はISUCONでも、チューニング目的ではありませんので、あしからず)

そこで、今回はElastic APMとMLを組み合わせて、Webアプリの異常検知をしてみます。

ISUCONのwebアプリにElastic APMを適用する

ISUCONの参照実装にElastic APMを適用させます。
まず、この環境ですが、Vagrantが配布されているので簡単にセットアップすることができます。
github.com

ISUCON7予選1台構成を今回使用します。
APMのagentを適用するためには、ソースコード(webapp/nodejs/index.js)の先頭に次のコードを挿入します。

var apm = require('elastic-apm-node').start({
  appName: 'isubata',

  secretToken: '',
})

試しに、Webアプリを起動させてベンチマークを回してみます。
Kibanaからこのようにリクエストの頻度やレスポンスにかかった時間などが見ることができます。

f:id:acro-engineer:20180129081415p:plain
f:id:acro-engineer:20180129081405p:plain

また、それぞれのパスへのリクエストの詳細を、トランザクションとしてみることができます。

f:id:acro-engineer:20180130145925p:plain

KibanaからWebアプリのパフォーマンス情報を見ることができます。
冒頭で説明したように、APMで取得したデータは、 Elasticsearch の index に入っています。
デフォルトの設定の場合、apm-<バージョン番号>-<日付>という形の index で登録されています。

f:id:acro-engineer:20180210142414p:plain

そのため、APMの結果にAlertingやMachineLearningを実行することが可能です。
次の章では、実際にElastic MLを使って、APMのデータに対して異常検知を行います。

Elastic MLで異常検知

まず、Elastic MLの対象にするために、Kibanaのindex-patternにapm-*を追加する必要があります。
そして、Elastic MLの設定としては、Single Metricの
 aggregation: high count
 bucket span: 15m
としました。

その次に、Elastic MLで異常検知するために、まずは正常なパターンを学習させます。
今回は、一定周期でアクセス数が増減するようなクライアントを用意して、
一定時間Webアプリにリクエストを発行します。
すると、こんな感じに正常な値の範囲を学習してくれます。

f:id:acro-engineer:20180210115429p:plain

青い部分が正常な値の範囲です。本当は周期も学習させたかったんですが、学習データが足りなかったですね。
それでも、正常なリクエスト数の範囲を学習して収束するしていることがわかります。

それでは、大量にリクエストを発行して異常を起こしてみましょう。
するとElastic MLからは以下のように急増したアクセスを検知している様子が見えます。
f:id:acro-engineer:20180210115828p:plain

まとめ

Elastic APMとElastic MLを使って、Webアプリの異常検知にチャレンジしてみたところ、
無事大量のリクエストを検知することができました。

今回は、アクセス数から異常検知をしてみましたが、
レスポンスタイムなど、別の観点からでも異常検知できそうですね。
それではまた。

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


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

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

データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elastic Stack 6.2がリリースされました

こんにちは@です。

ついにElastic Stack 6.2.0がリリースされました。
マイナーバージョンアップとは思えないほど、非常に多くの追加機能があったのでまとめ記事を書いてみます😊
また、このバージョンからJava9に対応しました!

6.2.0のリリースについては、Elastic社公式のブログも出ています。
英語の記事とはなりますが、是非読んでみてください。
Elastic Stack 6.2.0 Released | Elastic

概要

さて、今回の記事では追加機能を全て紹介することはできないので、
下記の項目に絞って紹介しようと思います。

  • APM
  • Machine Learning
  • Kibanaの新ビジュアライゼーション「Vega」
  • BeatsシリーズのMonitioring
  • Add Data Tutorial

APM

f:id:acro-engineer:20180207233341p:plain:w700

APM (Overview | Getting Started with APM [6.2] | Elastic)
は以前からbeta版として公開されていましたが、ついにGA版として公開されました。

今回のリリースで、利用できるエージェントの種類が増加し、RubyJavaScriptへの対応を開始しました。
もともとpythonとNode.jsに対応していましたが、より多くの言語で利用できるようになりました。
JavaScriptは使う機会は何かと多いので、なかなか嬉しい発表です。
RubyJavaScriptのエージェント自体はα版のようです。ご注意ください。
 
また、APMサーバおよびエージェントはオープンソースなので、自分でカスタマイズすることも可能です。
今後対応する言語やフレームワークが増えていくことでしょう。

APMの詳細な紹介は別の記事に譲ろうと思います。
α版を試した記事を過去に書いていますので、そちらもご覧いただければと思います。
acro-engineer.hatenablog.com

Machine Learning

こちらは、個人的には一番嬉しい機能かもしれません😇
 
これまでのMachine Learningは、
「特定の期間を検知の対象外とする」機能を備えていませんでした。
 
そのため下記のようなニーズが発生した時に、とても困りました。

  • 機器の異常を検知するjobで、メンテナンスのタイミングを対象外としたい。
  • 祝日を検知の対象外にしたい。

 
バージョン6.2からは、あらかじめ期間を指定して検知の対象から除外することが出来るので、より柔軟に運用することが可能になります。
後ほど試して別途記事にするかもしれません。

f:id:acro-engineer:20180207214453p:plain
(Elasticの投稿より)

Kibanaの新ビジュアライゼーション「Vega」

Kibanaに新しいビジュアライゼーションが追加されました。その名もVega
厳密には以前からプラグインとして存在していたのですが、6.2.0から標準として取り込まれました。
JSONで定義することで、棒グラフや散布図など、色々なビジュアライズが可能です。

f:id:acro-engineer:20180207204655p:plain:w700

特に散布図に関しては、現状リリースされている機能では実現が難しい部分なので、便利かもしれません。

※Kibana Canvasでも散布図の作成ができますが、そちらはまだtechnical preview版です。
 Canvasに関するブログも過去に書いたので、是非ご一読ください。
acro-engineer.hatenablog.com


Vegaに関しては既に試している方がいらっしゃるので、
こちら↓の記事をご覧ください。
qiita.com

BeatsシリーズのMonitioring

これも長らく待ち望んでいた機能です。
MonitoringはElastic Stack自身の稼働状況を監視するためのプラグインです。
既にElasticsearch, Kibana, Logstashには対応していたMonitoringでしたが、
Beatsだけは監視することができませんでした。

システムを運用するうえで、
データ収集ツールのスループットやリソースを監視するのは非常に重要です。
Beatsは多くの端末にインストールされるケースが多いので、
状態をKibana上で一括管理できる機能は重宝することと思います。

その他

ここまで書いた内容以外にも、
紹介しきれなかった機能改善が盛りだくさんです。
是非インストールして触ってみてください。

また、Elastic APMのWebinarが金曜日にあるようです。
Application Performance Monitoring with Elasticsearch | Elastic

これは見逃せませんね😊
興味のある方は是非ご視聴ください。

以上です。ご覧いただきありがとうございました。

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


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

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

 

Elasticsearch 6.1から追加されたMachine Learningの新機能を使ってみた。予測機能が面白いっ!

皆さんこんにちは。
@です。
最近、1年1年が早く感じられて、びっくりしています。

本題ですが、Machine Learningにバージョン6.1から追加された新機能を試してみました。
気がついたら様々な機能が追加されており、面白そうだったので、試した記録でブログを書いてみました!

本記事で、試した機能は次の4点です。

  1. Data Visualizer
  2. 予測機能
  3. Machine Learningのテンプレート設定
  4. Population Wizard

※本記事で利用しているElastic Stackのバージョン6.1.1です。

Data Visualizer

Machine Learningで適切に異常を検知するためにはデータの特性を
ある程度把握することが必要になります。
例えば、どのようなデータが少ないのか、データの分布がどうなっているかがあげられます。

従来のバージョンでは、データの特性を把握するために
KibanaのVisualizeやDashboardを手動で作成することもありました。
ちょっとした手間だったのですが、6.1の新機能「Data Visualizer」により、簡単にデータの概況を掴めるようになりました。

まず、Machine Learningに遷移し、「Create New Job」をクリックすると、処理の選択ができます。
この処理の中から「Data Visualizer」を選択します。

f:id:acro-engineer:20180206005005p:plain

この「Data Visualizer」を選択した結果は次の通りです。

f:id:acro-engineer:20180105161557p:plain

①のSearchでドキュメントを条件により絞り、②のFilterでKibana上で表示する項目を絞れます。
Filterを使うことで、ドキュメントの中から特定のデータの場合の調査も可能です。

表示されているグラフは、自動生成されています。
Metricsの他にFieldがありますが、このFieldは数値表現ができないデータ(文字列など)が該当します。

f:id:acro-engineer:20180105163428p:plain

Machine Learningのテンプレート設定

バージョン6.1より、特定のデータであればジョブを簡単に設定できるようになっています。
現在はNginxのMachine Learning用のテンプレートが設定できます。
このテンプレートの設定は非常に簡単で、FilebeatのNginxモジュールを使えば、使用可能です。

Machine Learningの初期画面から「Create New Job」をクリックします。
処理を選択する画面に遷移しますが、この設定ができる場合に「Filebeat Nginx」が追加で表示されます。
(利用できない場合はそもそも表示されない。)

f:id:acro-engineer:20180206005130p:plain

そして、job名のprefixとグループの指定をすれば、Machine LearningのJobを構築できます。
「Jobs」にJobが5種類含まれいます。「Create Jobs」をクリックすることで、作成されます。

f:id:acro-engineer:20180105174826p:plain

実際に試した結果は次の通りです。ここまで、何も考えずにお手軽に作成できるところが良いですね。
※投入データはランダムデータです。

f:id:acro-engineer:20180108183320p:plain

このテンプレート作成時にKibana Dashboardも作られます。便利ですね!
これらのDashboardはデータを詳細に確認したい場合に使えます。

f:id:acro-engineer:20180108183517p:plain

予測機能

従来のMachine Learningでは、異常検知ができました。
バージョン6.1から異常検知で学習したモデルを使って、未来予測もできるようになりました。
過去のデータから、将来どのような傾向になりそうか、目視で確認できるようになりました。

予測には、公式サイトのTaxiのサンプルを試します。

ニューヨーク市のタクシー乗降データでMachine Learningを体験する | Elastic

まずは、サイトの手順通りにTaxiのサンプルを動かします。

f:id:acro-engineer:20180206004829p:plain

従来までのバージョンと異なっているのは、画面の右上に「forecast」のボタンが追加されています。
この「forecast」をクリックし、予測の設定を開始します。

f:id:acro-engineer:20180206005443p:plain

この設定画面ですが、Durationの設定が可能です。
Durationはどれだけ未来を予測するかといったパラメータです。

試しにDurationを「1w」に入力し、最後に、「➡」をクリックします。
予測の結果は次の通りです。黄色い部分が予測部分を示しています。

f:id:acro-engineer:20180121234325p:plain

Population Wizard

最後にPopulation Wizardの紹介です。

かつての分析方法はSingle MetricとMulti Metricの2種類でした。(Advancedは除く)
Advancedで設定ができたPopulation Analysisの設定が簡単にできるようになりました。

Population Analysisは他とは違う傾向のデータを検知することができます。

例えば、複数のユーザがWebサイトにアクセスする場合に
大体のユーザは同じ傾向のアクセス(回数etc)になると思います。
このPopulationを利用した分析では、どのユーザが普通のユーザの傾向から異なるかを検出できます。

Population Wizardですが、Population対象のデータと
それを検出するための値(CPUの利用率など)の設定が基本です。
例えば、アクセス回数、もしくは、データ量が異なる市を発見する例は次の通りです。

f:id:acro-engineer:20180108191559p:plain

後は通常のJobと同じようにCreate Jobをクリックすれば、実行します。
実行した結果は次の通りです。

f:id:acro-engineer:20180122232328p:plain

とりあえず、出力しましたが、この解析結果が正しいのかが不明です。
そこでデータ側を確認するため、次のVisualizeを作成しました。

f:id:acro-engineer:20180123000113p:plain

Jobの結果通り、他と大きくかけ離れたデータが存在します。
このJobは系列単体で異常検知ができません。
しかし、他と比較して異なるデータを検知できるので、今までと別の使い方により、より有効に活用できそうです。

最後に

お試しで触ってみたところ、意外に便利だなぁと思う機能が増えています。
サービス自体、どんどん簡単に面白い機能を使えるよう進化しているので、使っていきます!

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


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

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

データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

社内技術イベントLTxRT紹介 ~Elasticsearch障害事例の共有を行いました~

こんにちは。本ブログには初登場のQAエンジニア@yuki_shiro_823です。

当社では、毎週木曜に社内で技術イベントを開いています。
昨日は、今年に入って初めてのLT形式でのイベント「LTxRT」を行いました!
昨年の振り返りなどの様子はこちら
acro-engineer.hatenablog.com


今回のテーマは「Elasticsearchクラスタ運用障害事例紹介」!
f:id:acro-engineer:20180201185956j:plain:w480
Elasticsearchは手元で簡単に使えますが、
クラスタを組んで運用しようとすると、設定やアーキテクチャに一工夫必要です。
もちろん、当社でも様々な調査や検証を行っています。

そこで今回は、実際のプロジェクトで起こった障害事例をもとに、
プロジェクトメンバから、
どのようにして原因を調査し、どう対処したかを紹介してもらいました。

参加した社員から
「この場合だとどうなるの?」とか
「うちのプロジェクトでもこういう問題があって、こう解消したよ」とか
質問や類似例の紹介があり、議論が盛り上がりました!
当初3人が発表予定だったのが、議論が盛り上がって2人分の発表になってしまったのはご愛敬。。
1人は別日程を設けることになりました。

障害事例や失敗事例を共有すると良い点は、
今後同じようなことをやるプロジェクトで参考にできて助かることですね!
一方、聞けば色々な知見が出てくるものの、
それらを一か所にまとめきれてないなど、課題も見えてきました。
こうして課題が見えてくると、対応も考えやすくなります。

今後も色々な社員が発表する予定なので、楽しみです。
それでは。

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


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

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

データ分析基盤Elasticsearchを使い倒したいエンジニア募集! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

AWS CloudWatchのログキーワード監視ツールを作ってみた。

こんにちは。ブログは書くのは久しぶりの上田です。
今日は、AWS Lamdaを使ったCloudWatchのログのキーワード監視ツールを作成したので、
その紹介をしたいと思います。

GitHub - acroquest/aws-cloudwatch-logwatcher

モチベーション

唐突ですが、皆さんAWS Lambdaがメインロジックのアプリ監視はどうしているでしょうか?
私はLambdaアプリログの監視をしたいと考えたときに、
ちょうど良いサービス/ツールがなくて悩みました。

私の場合、以下のようなツールがほしいと考えていました。

  1. 予期せぬエラーログが出ているかどうか、定期的にメール通知したい。
  2. 指定するエラーログは正規表現で書きたい。
  3. 複数のロググループをまとめて1つの設定で監視したい。
  4. メール通知には、エラーログの内容を含めたい。

自作LambdaのアプリログはCloudWatchに出力され、
CloudWatchにはメトリクスフィルタやエラーを拾ってサブスクリプションで通知する機能があるのですが、
以下条件が目的に合いませんでした。

メトリクスフィルタの場合
  1. 通知するエラーログを正規表現で指定できない。
  2. 各ロググループ単位でしかエラー通知の設定ができない。
  3. エラーログの内容を通知の文面に含められない。
サブスクリプションでLambdaに通知した場合
  1. 通知するエラーログを正規表現で指定するには、ログ出力ごとに通知を処理する必要がある。
  2. 各ロググループ単位でしかエラー通知の設定ができない。
  3. 手間がかかる上に料金がかさむ(正確には計算していませんが、CloudWatch,Lambdaの値段と頻度を考えると)。

(もしかしたら私の勉強不足で、方法はあるかもしれません。)

結局、自作ツールでLambda上にPythonロジックを書き、
下記構成のツールを作成することで、
自分のほしかった監視機能を実現しました。

f:id:acro-engineer:20180130210813j:plain
AWS構成図

構成のためのServerless定義はこちらを参照。
※Serverless定義にメール通知先のSNSは記載されていないため、ツールを使うためには事前にSNSを手動で設定しておく必要があります。

ツールの動き

ツールはこんな流れで動くようにしました。

  1. Cronから呼び出されたParent Lambdaが、S3から前回実行時刻を取得する。
  2. Parent Lambdaが指定したprefixごとに子Lambdaを呼びだす。
  3. 呼び出された子Lambdaが指定prefixグループのログを収集し、前回実行時刻以降のログに絞り込む。
  4. ログ内容を整形し、SNSへ通知。

今回作製してみて、Lambdaのバッチ起動~他AWS機能の連携は、
非常に作りやすいと感じました。

今回はLambdaからS3、Lambda、CloudWatch、SNSAPIを呼び出して実現しています。
参考までにそれぞれ連携に使用したPythonAPIコール例を載せます。

LambdaからS3

        // S3バケット読み込み
        s3 = boto3.session.Session().resource('s3')
        bucket_name = os.environ['ALERT_LOG_BUCKET']
        bucket = s3.Bucket(bucket_name)
        key = os.environ['ALERT_LOG_KEY']
        object = bucket.Object(key)
        last_updated_time_str = object.get()['Body'].read().decode('utf-8')
        result = int(last_updated_time_str)
...
        // S3バケット書き込み
        object = bucket.Object(key)
        object.put(
            Body=str(last_exec_time).encode('utf-8'),
            ContentEncoding='utf-8',
            ContentType='text/plain'
        )

Dynamoに入れようか迷いましたが、
S3の方が安そうなので。。。
'text/plain'でepoc形式の時刻を素のテキストとして読み書きしています。
普段は'application/json'でjsonで扱うほうが多いかもしれません。

LambdaからLambda

        function_name = os.environ['FILTERED_ALERT_LOGS']
        lambda_client = boto3.session.Session().client('lambda')
        lambda_client.invoke(
            FunctionName=function_name,
            InvocationType='Event',
            LogType='Tail',
            Payload=json.dumps(request)
        )

InvocationTypeを'RequestResponse'にすることで同期、'Event'にすることで非同期処理になります。
今回は非同期並列処理がしたかったので'Event'に設定しました。

LambdaからCloudWatch

    // ロググループの取得
    client = boto3.session.Session().client('logs')
    response = client.describe_log_groups(
        logGroupNamePrefix=prefix
    )
...
    // ログストリームの取得
    response = client.describe_log_streams(
        logGroupName=group_name,
        orderBy='LastEventTime',
        descending=True,
        limit=limit
    )
...
    // ログイベントの取得
    logs = client.get_log_events(
        logGroupName=group_name,
        logStreamName=stream_name,
        startTime=start_time,
        endTime=end_time,
        startFromHead=True
    )

CloudWatchは実行Lambdaごとにロググループを、
ロググループの中にコンテナのライフサイクルごとにログストリームを、
ログ出力ごとにイベント情報を階層的に保持しています。

'logGroupNamePrefix'を指定してロググループを取得することで取得対称の分類を、
ログストリーム取得後にPython側で時刻のフィルタリングを、
イベント取得後にPython側で時刻のフィルタリングと正規表現での内容絞込みを行っています。

LambdaからSNS

    message = '整形したCloudWatchログ'
    topic_arn = os.environ['ALERT_LOG_TOPIC_ARN']
    subject = os.environ['ALERT_LOG_SUBJECT']

    sns_request_params = {
        'TopicArn': topic_arn,
        'Message': message,
        'Subject': subject
    }
    sns_client = boto3.session.Session().client('sns')
    sns_client.publish(**sns_request_params)

環境変数から取得したタイトルをつけて通知しています。

以上、自分で欲しかったツールを作成し、
目的とするLambdaのアプリログ監視をできるようになりました。

ここで作製したツールは、GitHubで公開しています。

もしかしたらもっと良い方法/サービスがあるかもしれません、
こうしたほうがいい、とかあればぜひコメントください。

ではでは

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


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

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
モノリシックなアプリケーションをマイクロサービス化したいエンジニア募集! - Acroquest Technology株式会社のWeb エンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com