Taste of Tech Topics

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

Kibana5.5の新機能紹介!

こんにちは。
@です😊

先日Elastic Stack 5.5.0がリリースされました。
この記事ではKIbanaに追加された新機能をピックアップして紹介します。
(5.5.0ではX-Pack Machine Learningの正式リリースとなりましたが、そちらは@の別記事にて紹介しています)

この記事で紹介する機能

  1. Filter機能の強化
  2. Grok Debugger
  3. 新しいVisualization(Region Map, Gauge, Goal)

Filter機能の強化

DiscoverやDashboard上で絞り込みを行いたい場合、今まではクエリを自分で入力する必要がありました。
今後はクリックだけで全て操作できるようになります。
非エンジニアのユーザーにとっては非常に嬉しいですね。
 
画面左上のあたりに、"Add a filter"という文字が見えると思います。
それをクリックするとfilterが追加できます。
f:id:acro-engineer:20170708122134p:plain:w700


まずはfilter対象のフィールドを選択して...
f:id:acro-engineer:20170708122156p:plain:w700


条件を選びます。
f:id:acro-engineer:20170708122217p:plain:w700


これだけでairlineの値が"AAL"のデータのみが表示されるようにするfilterが作成できました。
これまでは、絞り込むための"フィールド名"を確認してからクエリを書く必要があったので、そういった面でも使いやすくなったと思います😊
f:id:acro-engineer:20170708122251p:plain:w700

Grok Debugger

この機能は、Logstashやingest pipelineのgrokを書く助けとなる機能です。
ログの形式に合わせてmatch patternを記述する必要があるわけですが、Grok Debuggerを使えば、
Logstashなどを実行して確認しなくても、Kibana上で先に結果を見ることができます。
(https://grokdebug.herokuapp.comがKibanaに組み込まれた形です)

X-Packをインストールしてあれば、このようにDevToolsの中にGrok Debuggerが入ります。
f:id:acro-engineer:20170708122928p:plain:w700

実際の入力となるログをinputに書いておけば、
記述したpatternに応じて結果を表示してくれます。
f:id:acro-engineer:20170708122947p:plain:w700

上手くいきました。
Logstashなどで動かす前にはこれで確認するのが速いですね
f:id:acro-engineer:20170708123006p:plain:w700

Region Map Visualization

Visualizationの作成画面を見るとRegion Mapが追加されていることがわかります。
f:id:acro-engineer:20170708125721p:plain:w700

Region Mapは、緯度経度の情報が無くても、国名などで地図上にデータを表示することができます。
たとえば下の画像例のように、あるサービス利用者の平均年齢を表示することなどができます。

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

色を変えたりもできます
f:id:acro-engineer:20170708121702p:plain:w700

Goal,Gauge Visualization

Goal, Gaugeに相当するものは、もともとVisual Builderの一機能として提供されていましたが、
独立したvisualizationになったことで、設定がわかりやすくなりました。

このvisualizationを使うと、
たとえばセールス部門の売り上げ目標に対して、実績がどの程度あるかなどを可視化できます。
"Goal"で可視化してみるとこんな感じです。
f:id:acro-engineer:20170708121534p:plain:w700

Gaugeは機能的にはGoalとほとんど同じですが、値の範囲を自分で区切って、色をつけることができます。
f:id:acro-engineer:20170708121606p:plain:w700

(可視化したデータは架空の人物および売り上げ実績です)

まとめ

バージョン5.5.0では、使いやすさの向上や表現力の強化が良い感じでした。
ますます使いやすくなることを期待しましょう。
今後も新情報を発信していきますので、よろしくお願いします!

おまけ

(実は、個人的に嬉しかったのは、Consoleでreindexを補完してくれるようになったことです😇)
f:id:acro-engineer:20170708120833p:plain:w500


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

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

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

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

新サービス「Torrentio Flow」の提供を開始しました!

こんにちは、阪本です。

7/5(水)に、SORACOMから新サービス「SORACOM Junction」が発表されました!
それに合わせて、当社もSORACOM Junctionを利用した異常検知ソリューション「Torrentio Flow」(トレンティオ・フロー)サービスの提供を開始しました!

www.acroquest.co.jp

「SORACOM Junction」とは、SORACOMのコアネットワーク上のパケット交換機能を有するVirtual Private Gateway を通るパケットに対して、インスペクション、ミラーリング、リダイレクションの3つの機能を提供するサービスです。SORACOM Junctionを利用することで、パケットの統計情報を取得することができるため、IoTデバイスの通信先の可視化や、アクセス先分析等への応用が可能となっています。

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

当社サービス「Torrentio Flow」は、この「SORACOM Junction」の「ミラーリング」の機能を利用したサービスで、SIM単位で通信トラフィックプロトコルの分析を行い、パケットフローの可視化や異常検知を行うことができます。

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

Torrentio Flowの詳しい使い方等は、追って紹介していきたいと思いますので、こうご期待!

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

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

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

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

Apache FlinkでCEPを実現 ~パターン指定~

こんにちは、阪本です。

Apache FlinkでCEP(Complex Event Processing)の実現方法について、前回は時刻とグルーピングについて説明しました。
今回は、イベントのパターン定義を見てみましょう。これで、簡単なイベント処理ができるようになります。

パターンを定義する

ここでは、「15秒以内に温度が30℃を2回以上超える」を表すパターンを定義します。
パターンは、CEPクラスのpatternメソッドで次のように定義します。
なお、keyedStreamは、前回作成したKeyedStream<Map<String, Object>, String>型のストリームです。

PatternStream<Map<String, Object>> patternStream = CEP.pattern(keyedStream,
    Pattern.<Map<String, Object>>
         begin("first")
            .where(value -> value.get("temperature") > 30)
        .followedBy("second")
            .where(value -> value.get("temperature") > 30)
        .within(Time.seconds(15)));

条件指定に使用する代表的なメソッドを紹介します。

メソッド 意味
begin(ラベル) 処理条件の開始を表すラベル定義です。ラベルの値は任意です。必ずbeginから始まります。
where(条件式) ラベル定義に紐づくイベントの条件を指定します。
next(ラベル) 1つ前のラベル定義にマッチするイベントのすぐ次のイベントを表すラベル定義です。ラベルの値は任意です。
followedBy(ラベル) 1つ前のラベル定義にマッチするイベントから、そのイベントの後ろに続くイベントを表すラベル定義です。nextと異なり、間に別のイベントが入ることを許します。ラベルの値は任意です。
within(時間) イベントの時間間隔の制約です。

もう少し詳しく見ていきましょう。
beginメソッドで、最初の条件を指定しています。value変数(Map型)のtemperatureの値が30を超えたイベントが来た場合、そのイベントに「first」というラベルを付与します。

begin("first").where(value -> value.get("temperature") > 30)

次に、「first」というラベルが付与されたイベントに続くイベントの中で、value変数(Map型)のtemperatureの値が30を超えたイベントが来た場合、そのイベントに「second」というラベルを付与します。

.followedBy("second").where(value -> value.get("temperature") > 30)

最後に、「first」のイベントと「second」のイベントの発生間隔が15秒以内であることを定義します。

.within(Time.seconds(15)));

この定義では、次のようなイベントがマッチします。

{"timestamp": "2017-05-10T10:00:00Z", "sensorId": 1, "temperature": 29.3}
{"timestamp": "2017-05-10T10:01:00Z", "sensorId": 1, "temperature": 30.1}
{"timestamp": "2017-05-10T10:02:00Z", "sensorId": 1, "temperature": 31.5}
{"timestamp": "2017-05-10T10:03:00Z", "sensorId": 1, "temperature": 29.8}
{"timestamp": "2017-05-10T10:04:00Z", "sensorId": 1, "temperature": 29.7}
{"timestamp": "2017-05-10T10:00:00Z", "sensorId": 1, "temperature": 29.3}
{"timestamp": "2017-05-10T10:01:00Z", "sensorId": 1, "temperature": 30.1}
{"timestamp": "2017-05-10T10:02:00Z", "sensorId": 1, "temperature": 29.5}
{"timestamp": "2017-05-10T10:03:00Z", "sensorId": 1, "temperature": 29.8}
{"timestamp": "2017-05-10T10:04:00Z", "sensorId": 1, "temperature": 30.7}

なお、「first」や「second」といったラベルは、次に説明する、条件にマッチしたイベントを取得する際に使用します。

条件にマッチしたイベントを取得する

先ほど、パターンを定義して、条件にマッチするイベントにラベルを付与しました。
イベントの取得には、ラベルを使用します。
次のコードでは、「second」のラベルが付与されたイベントをストリームとして取得します。

DataStream<Map<String, Object>> alertStream = patternStream.select(pattern -> pattern.get("second"));

取得したイベントは通常のストリームなので、そのままSinkに流し込むことができます。

alertStream.addSink(new ElasticsearchSink<>(elasticsearchConfig, transports,
        new MyElasticsearchSinkFunction<>()));

上記では、ラベルが付与されたイベントはまとめて取得することもできます。

class Alert {
    public final Integer first;
    public final Integer second;

    public Alert(Integer first, Integer second) {
        this.first = first;
        this.second = second;
    }
}

DataStream<Alert> alertStream = patternStream.select(
        pattern -> new Alert(pattern.get("first"), pattern.get("second")));

つなげる

今まで説明してきた内容をつなげたコードは、次の通りです。

// 動作設定
StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.enableCheckpointing(5000L);
env.setParallelism(2);
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

// Kafkaから受け取った文字列をJSON解析する
Properties kafkaProps = new Properties();
kafkaProps.setProperty("bootstrap.servers", "192.168.0.1");
kafkaProps.setProperty("group.id", "test");
DataStream<String> stream = env.addSource(new FlinkKafkaConsumer010<>(
        "topic", new SimpleStringSchema(), kafkaProps));

// Watermarkを付与する
stream.assignTimestampsAndWatermarks(new IngestionTimeExtractor<>());

// sensorId毎にグルーピングする
KeyedStream<Map<String, Object>, String> keyedStream = stream.map(FlinkExecutor::parseJson)
                                                          .keyBy(value -> value.get("sensorId"));

// 条件を定義する
PatternStream<Map<String, Object>> patternStream = CEP.pattern(keyedStream,
    Pattern.<Map<String, Object>>
         begin("first")
            .where(value -> value.get("temperature") > 30)
        .followedBy("second")
            .where(value -> value.get("temperature") > 30)
        .within(Time.seconds(15)));

// 条件にマッチするイベントストリームを作成する
DataStream<Map<String, Object>> alertStream = patternStream.select(pattern -> pattern.get("second"));

// イベントを保存する
alertStream.addSink(new ElasticsearchSink<>(elasticsearchConfig, transports,
        new MyElasticsearchSinkFunction<>()));

まとめ

Flinkで簡単なCEPについて見てきました。
当然ではありますが、条件でマッチしたイベントをストリームで取得できるのが便利ですね!
イベントのパターンに指定できる条件は他にもありますので、より複雑なイベントの条件指定が可能です。
ぜひ触ってみてください。

それでは。

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

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

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

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

Apache FlinkでCEPを実現 ~イベント時刻とグルーピング~

こんにちは、阪本です。
前回に引き続き、Apache FlinkでCEP(Complex Event Processing)の実現方法について紹介します。

イベントの時刻は何を基準にするか

CEPをやるからには、イベントの時刻はとっても重要です。
Flinkでは、次の3つのいずれかの基準を、StreamExecutionEnvironmentに対して指定します。

意味
ProcessingTime Flinkがそれぞれの操作でイベントを処理した時刻
EventTime イベントが発生した時刻(別途、どの値を使用するか指定が必要)
IngestionTime Flinkがイベントを受信した時刻

これらはいずれもTimeCharacteristic enumのメンバです。
EventTimeは、Sourceで発生した時刻を基準にすることができるため、現実世界に忠実ではありますが、その分レイテンシは大きくなります。
その分、ProcessingTimeは忠実性に欠けますが、シンプルで高速です。
場合によって使い分けましょう。
今回はProcessingTimeを使うことにします。

StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment();
env.setStreamTimeCharacteristic(TimeCharacteristic.ProcessingTime);

ウィンドウ処理のためのWatermark

イベントの時刻をEventTimeにすると、Flinkが処理するイベントが「イベントの時刻」順になっていない可能性があります。
そうすると、ウィンドウ処理を行う際、どこまで読み込めばウィンドウの区切りを行ってよいかが判別できなくなってしまいます。
その問題を解消するために、FlinkではWatermarkという仕組みを入れています。

f:id:acro-engineer:20170511092838p:plain
https://ci.apache.org/projects/flink/flink-docs-release-1.2/dev/event_time.htmlから引用)

Watermarkをどのように入れるかは、DataStreamのassignTimestampsAndWatermarksメソッドで指定します。
たとえば、Flinkに含まれているIngestionTimeExtractorクラスを指定すると、イベントを処理したマシンの時刻をベースにWatermarkを入れます。

stream.assignTimestampsAndWatermarks(new IngestionTimeExtractor<>());

ストリームのグルーピング

1つのストリームに複数の種類のイベントが混ざって流れてくるパターン、たとえばIoTならいろんな場所に設置された複数の温度センサーから時々刻々と温度の情報が送られてくる状況において、場所ごとに温度の異常判定を行いたいとなると、温度センサー毎にイベントを分ける必要があります。
このような場合はDataStreamのkeyByを使うと、イベントをグルーピングできます。

たとえば次のようなイベントが1つのストリームに順次流れてくる場合、sensorIdをキーにして、センサー毎の温度のストリームにグルーピングします。

{"timestamp": "2017-05-10T10:00:00Z", "sensorId": 1, "temperature": 20.3}
{"timestamp": "2017-05-10T10:00:00Z", "sensorId": 2, "temperature": 21.0}
{"timestamp": "2017-05-10T10:00:00Z", "sensorId": 3, "temperature": 18.9}
{"timestamp": "2017-05-10T10:01:00Z", "sensorId": 1, "temperature": 20.3}
{"timestamp": "2017-05-10T10:01:00Z", "sensorId": 2, "temperature": 21.1}
{"timestamp": "2017-05-10T10:01:00Z", "sensorId": 3, "temperature": 18.8}
・・・
KeyedStream<Map<String, Object>, String> keyedStream = stream.map(FlinkExecutor::parseJson)
                                                          .keyBy(value -> value.get("sensorId"));

なお、FlinkExecutor::parseJsonは、前回の記事にある、JSON文字列をMapに変換するメソッドです。

グルーピングしたストリームに対してCEPの処理を記述することで、グループ毎に判定が行えるようになります。

続きは次回

ストリームの準備が整ったところで、いよいよCEPの処理に入ります。
長くなりそうなので、今回はいったんこの辺で。続きはこちら。

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

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

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

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

X-Pack Machine Learningを試してみました

みなさんこんにちは!
@です。
本日、待望のX-Pack Machine Learningがリリースされました。

X-Pack Machine Learning

X-Pack Machine Learningとは

X-Pack Machine LearningはElastic Stackで時系列の異常検知を行える機械学習の製品です。
特徴として、教師なし学習による異常検知モデルの生成や周期、トレンドの異常検知を行えます。
そして、2017年のElastic{ON}での注目機能の1つでもあります。

www.elastic.co

X-Pack Machine Learningは以前、Prelertとしてリリースされており、
弊社ブログでも説明させていただきました。

acro-engineer.hatenablog.com

早速、X-Pack Machine Learningを試してみます!

インストール

X-Packをインストールする手順と同じです。
そのため、公式のX-Packのインストール方法を確認し、インストールしてください。

www.elastic.co

実際にやってみた

解析準備

解析対象となるデータセットがX-Pack Machine Learningを試すために必要です。
今回は過去に弊社ブログで取り上げたfarequoteのサンプルを使います。
データの投入方法や形式は次のページを参考にしてください。

acro-engineer.hatenablog.com

X-Pack Machine Learningを利用して、2種類のJobを作成します。
1つ目がSingle Metric Job、2つ目がMulti Metric Jobです。

Single Metric Job

Single Metric Jobは1つのメトリックに対して、異常検知を行います。
今回はアクセス数全体のカウントを対象に異常検知を行います。

X-Pack Machine Learningでは、はじめにJobの種類を選択します。
本項目では、「Create a single metric job」を使います。
f:id:acro-engineer:20170505081718p:plain

次に解析対象となるElasticsearchのindexを設定します。indexは「farequote」を選択します。

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

次の画面でSingle Metric Jobの設定を行います。
Aggregationをcount, Bucket spanを30mにします。
また、データの可視化を設定項目右のボタンを押すとできます。
この機能によって予め、解析対象がどのようなデータかを確認できます。

最後に、「Create Job」をクリックすると、Jobの生成を行います。

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

Jobの生成が終わると、次の画面になります。
異常として検知された箇所に黄色い棒がグラフ内に表示されています。

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

最後に解析結果を確認しましょう。View Resultsをクリックすると
次のような画面になります。
時系列グラフを確認しつつ、異常箇所を見られます。
今までできなかった嬉しい機能の1つです。また、正常と判定する領域も確認できます。

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

Multi Metric Job

Multi Metric Jobはフィールドごとに異常検知を行います。
Single Metric Jobの構築でアクセス数の異常検知に成功しました。
しかし、本データに使われているairline(航空会社)全てが異常といえるのでしょうか?
特定のairlineに異常が発生しているかどうかをMulti Metric Jobで判定できます。

さて、早速試してみましょう。

今回はSingle Metric Jobを選択した画面で「Create a multi metric job」を選択しましょう。
まず、最初に次の画面が表示されます。この画面でJobの設定を行います。

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

Bucket spanを30m、Key Fieldsをairline.keyword、Job Detailsに名前や説明を書きます。
Key Fieldsで設定した属性をベースに分割し、各々のデータで異常検知します。
必要な設定を行った例は次のとおりです。設定が完了し次第、Create Jobを実行しましょう。

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

実行後、Anomaly Explorer画面に遷移できます。
どの航空会社のリクエスト数が増加しているかをAnomaly Explorerを使って、確認できます。

また、モデルが異常と判定した赤い四角をクリックすると、
クリックした対象のデータを表示できます。
そして、表示された時系列グラフからも急激にアクセス数が増加した様子を確認できます。

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

おまけ

Elastic Stack5.4で実装されたVisual Builderを使って
データを可視化しました。これまでのVisualizeよりリッチに感じます。

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

PrelertとX-Pack Machine Learningの違い

私が試してみて感じたX-Pack Machine LearningとPrelertの違いは以下、3点です。

より簡単に設定ができる

Prelertも簡単に異常検知の設定ができました。
しかし、X-Pack Machine Learningは更に簡単です。
X-Pack Machine Learningは利用ケース別(Single Metricなど)で
必要最低限の項目を設定を行えば使えます。

これまでに必要だったElasticsearchのアクセス先や
Prelertに見られた上級者向けの設定を記述・確認する必要がありません。

解析途中や解析後に生データを確認できる

X-Pack Machine Learningでは、Jobの設定途中に解析データを確認できます。
Prelertでは、モデルの解析途中や解析後にデータを確認する場合、
Kibanaなどのソフトを使ってデータ確認する必要がありました。

データを逐一、確認できることにより、
どのようなデータを解析しようとしているか確認し、適切な設定へ変更できます。

モデルが可視化できる

X-Pack Machine Learningはモデルを可視化できます。
X-Pack Machine Learningでは、解析している領域を可視化できます。
この可視化は、Prelert時にはindexを解析し、Timelionを利用して表示しなければなりませんでした。

Prelertのベータ版でMachine Learningを体験する | Elastic

X-Pack Machine Learningでは、モデルがどうデータを解析しているかを
標準で見えるようになっています。
そのため、本来ここはこうあるべきだったが、こうなったから異常と判定されたことを確認できます。

最後に

Prelertよりも非常に簡単に異常検知ができました!
また、生データを解析時に見れるといった痒い部分にも手が届いており、
非常に期待できる機能となっています!

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

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

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

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

#Java本格入門 ついに発売! 日本よ、これが #アクロ本 だ!

最近まで寒い寒いと思っていたら急に暑くなってきましたが、お風邪など召さず健やかにお過ごしでしょうか。
ただ季節の話をしているだけの @ です☺️


さて、
Acroquestの同僚たちと執筆したJava本格入門が、ついに、ついに発売されました!!
gihyo.jp
電子書籍も同日発売で、Amazon Kindle楽天Koboのほか、GihyoのサイトでPDF/EPUB版を購入することもできます。

また、正誤表などを掲載しているサポートサイトも用意しました。
github.com
issueはどなたでも作成いただけるようしてあります。・・・既に柴田先生からのありがたいissueが!😇


またこの本は、入門書の次に読む「2冊目」を目指して書いたものであり、編集者の傳さんも書かれている通り、裏テーマが「35歳からのJava再入門」だったりします。


たとえば、
1〜2年ぐらいJavaを書いてきたので、もう少し次のことを学ぶとか。
Javaの勉強が少し古いバージョンまでで止まってしまっているので、改めて学び直すとか。
概要を知ってはいるけど、知ったかぶりになってしまっているところを補強するとか。
そういうような所で使ってもらえる本にしたい、という想いで執筆を進めました。


・・・なんていう綺麗な話はさておき、裏話を少しだけ。

実は、この本が企画されたのは、Java8がリリースされるよりも前でした。
当時は、これからJava8が出るにもかかわらず、世の中にはまだまだJava7の使い方が広まっていないと感じており、そういう想いから from old Java to modern Java なんてスライドを作って発表したりもしました。
このスライドが編集者である傳さんの目に留まったのが、この本のきっかけでした。

Java8のリリースより前から書き始めて、発売になったのがJava9リリースを数ヶ月後に控えた今というのはもう、多方面の皆様にご迷惑をおかけしました感が凄いわけですが。。。


そんなわけで苦しんで生まれた一冊ですが、もし本屋などで見かけた際には、ぜひ手に取っていただいて、そのままレジに持っていただいて、会計待ちの間にスマホAmazonから配る用にもう一冊買っていただいて、おまけに便利な電子書籍版も購入いただければ、幸いです。


それでは!
See you!

Elastic Stack5.3の特に魅力的な新機能を紹介します! #elasticsearch

こんにちは、@です。
Elastic{ON} 2017から戻ってきてから初投稿になります。

先日、Elastic Stack 5.3がリリースされ、既に公式による日本語リリースノートも出ています。
Elastic StackにどんなアップグレードがあったのかはElastic Stack 5.3.0リリースを参考にすると良いと思います。

私はElastic Stack 5.3のKibanaとBeatsの機能を特に魅力的に感じたのでご紹介します。

Kibana

Top hits Aggregation

KibanaのVisualizeでTop hits Aggregationを使えるようになりました。

Top hits Aggregationはキーを元に並び替えを行った場合の上位、
もしくは下位のデータの取得が可能なAggregationです。
Top hits Aggregationの詳細は「Top hits Aggregation」を参照してください。

この機能によってバージョン5.3以前でKibana上で可視化できなかった
Top X番やWorst X番の可視化ができます。
例えば、@timestampをキーにソートすると、常に最新の情報をKibanaで可視化できます。

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

画面の改善

KibanaのUIが改善されています。
Kibanaで現在、見ている時間の前後を見たくなったことありませんか?
Kibana上で簡単に実現するために、時間を進めるボタンと戻るボタンがTimepickerに追加されています。

これまで、右上にある時間を選択し、更にQuickやAbsoluteから時間を選択して見たい時間を選んでいました。
今後はTimepickerにあるボタンを押すだけで、少し時間のずれているデータを確認できます。
今の時間から少しずれている時間のデータを見たい!と思った時にすぐに探せる便利な機能ですね。

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

Beats

Filebeat Modules

Elastic{ON}のKeynoteでリリース予告があった
Filebeat modulesがリリースされました。

Filebeat modulesを使えば、より簡単にFilebeatを使えるようになります。
Metricbeatには、情報を取得する機能のみならず、
KibanaのDashboardをも自動的に生成する機能がありました。

しかし、Dashboardを生成する機能はFilebeatになかったため、Dashboardを作る必要がありました。

この機能はクラスメソッドさんのブログが詳しいです。

dev.classmethod.jp

最後に

バージョン5.3ではElastic{ON}で
リリース告知されていたFilebeat modulesが出ました!

Elastic Stack 5.3では、Elastic{ON}でも感じた製品の使いやすさを意識した
アップグレードがされていると感じています。

バージョン5.4ではいよいよTime Series Visual Builderと
X-Pack Machine Learningのリリースが予定されています。
私にとってどちらも期待が高い機能なので、楽しみにしています!

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

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

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

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