読者です 読者をやめる 読者になる 読者になる

Taste of Tech Topics

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

2016年アドベントカレンダーの振り返り

2017年が始まってもう1月半ばですね。今年もよろしくお願いします。@ です。

さて、年が明けて社内で話していると、昨年末のアドベントカレンダーにエントリーを投稿したという人がそれなりにいたので、社内でアンケートを取りました。そうするとかなりの数のエントリーで、ジャンルもなかなかバラエティーに富んでいたので、こちらでまとめることにしました。

2016年アドベントカレンダーまとめ

カレンダー別エントリー数

数えてみると総エントリー数が22件あったので、まずはカレンダー別に数を出してみました。

カレンダー エントリー数
Kubernetes 4
Elastic stack (Elasticsearch) 3
jupyter notebook 3
ソフトウェアテスト 2
Hortonworks 2
Java 1
Python 1
Ansible 1
数学 1
DeepLearning 1
Chainer 1
SORACOM 1
カノジョできない機械学習界隈エンジニア 1

ここからは、カレンダー順で個別エントリーを紹介します。

12/01

No. 01
エントリー qiita.com
カレンダー Kubernetes Advent Calendar 2016 - Qiita
サマリ Kubernetesアドベントカレンダー立ち上げの最初のエントリーとしてKubernetesを紹介   

No. 02
エントリー qiita.com
カレンダー ソフトウェアテスト Advent Calendar 2016 - Qiita
サマリ テストのエビデンスとして用いられるスクリーンショットの取り方とツールについて    

12/02

No. 03
エントリー qiita.com
カレンダー Kubernetes Advent Calendar 2016 - Qiita
サマリ fabric8(fabric8-maven-plugin)、minikubeによるローカルなKubernetes環境を構築する手順の紹介

12/03

No. 04
エントリー nonbiri-tereka.hatenablog.com
カレンダー DeepLearning Advent Calendar 2016 - Qiita
サマリ ECCV2016「Colorful Image Colorization」の紹介                    

12/06

No. 05
エントリー qiita.com
カレンダー Kubernetes Advent Calendar 2016 - Qiita
サマリ Kubernetes環境にfabric8を使って、Logging(Elasticsearch+Fluentd+Kibana)とMetrics(Prometheus+Grafana)を構築する手順の紹介

No. 06
エントリー nonbiri-tereka.hatenablog.com
カレンダー Python Advent Calendar 2016 - Qiita
サマリ 音楽解析ライブラリlibrosaの紹介                            

12/08

No. 07
エントリー d.hatena.ne.jp
カレンダー Java Advent Calendar 2016 - Qiita
サマリ Javaパフォーマンスに関するオライリーの新刊(未出版)の紹介。             

No. 08
エントリー acro-engineer.hatenablog.com
カレンダー Elastic stack (Elasticsearch) Advent Calendar 2016 - Qiita
サマリ Elasticsearchのデータを、別のElasticsearchに入れる方法の紹介。             

12/12

No. 09
エントリー qiita.com
カレンダー Hortonworks Advent Calendar 2016 - Qiita
サマリ Apache Ambariを利用して、Stormのクラスタをプロビジョニングしてみた。        

12/13

No. 10
エントリー qiita.com
カレンダー Hortonworks Advent Calendar 2016 - Qiita
サマリ Apache Ambariを利用して、Stormのクラスタモニタリングしてみた。          

12/16

No. 11
エントリー nonbiri-tereka.hatenablog.com
カレンダー Chainer Advent Calendar 2016 - Qiita
サマリ Scikit-learn likeなChainerを作ってみた。                        

12/17

No. 12
エントリー qiita.com
カレンダー jupyter notebook Advent Calendar 2016 - Qiita
サマリ jupyter notebookを使って、Elasticsearchへの簡単なドキュメント登録や検索をする。    

No. 13
エントリー qiita.com
カレンダー 数学 Advent Calendar 2016 - Qiita
サマリ 人類初の圏論の論文の紹介。初心者向けの入門記事、ではありません。           

12/18

No. 14
エントリー acro-engineer.hatenablog.com
カレンダー Elastic stack (Elasticsearch) Advent Calendar 2016 - Qiita
サマリ Elasticsearchを使って自分のツイートのタグクラウドを作る。               

12/19

No. 15
エントリー qiita.com
カレンダー Kubernetes Advent Calendar 2016 - Qiita
サマリ Kubernetes1.2使いのエンジニアが1.5(kubeadm)を使って感動した話。           

12/20

No. 16
エントリー qiita.com
カレンダー ソフトウェアテスト Advent Calendar 2016 - Qiita
サマリ 社内に導入したテストマネジメントツールSquashTMについて、経緯やよかったことのまとめ。

12/21

No. 17
エントリー qiita.com
カレンダー jupyter notebook Advent Calendar 2016 - Qiita
サマリ Jupyter Notebookでの言語Kernelを簡単に作れる方法があるので、作ってみました。    

12/23

No. 18
エントリー qiita.com
カレンダー Ansible Advent Calendar 2016 - Qiita
サマリ OSS化したAnsible Galaxyを触ってみたので、インストール方法を載せました。       

12/24

No. 19
エントリー qiita.com
カレンダー jupyter notebook Advent Calendar 2016 - Qiita
サマリ 位相的データ解析で利用されるアルファ複体のフィルトレーションをJupyter Notebookで可視化する方法の紹介。

No. 20
エントリー qiita.com
カレンダー Elastic stack (Elasticsearch) Advent Calendar 2016 - Qiita
サマリ 質問応答システムの基盤にElasticseachを使ってみる試みの導入部分。           

No. 21
エントリー acro-engineer.hatenablog.com
カレンダー SORACOM Advent Calendar 2016 - Qiita
サマリ 「SORACOM Harvest」を使って、ウィンドウ処理をサーバレスアーキテクチャで実現してみた。

12/25

No. 22
エントリー nonbiri-tereka.hatenablog.com
カレンダー カノジョできない機械学習界隈エンジニア
サマリ カノジョを作りました。                                

最後がちょうど落ちがついた感じなので、よい感じかと (w

さいごに

こうして並べてみると、いろんなテーマがあって面白いですね。
テーマは投稿者の興味がまずありきですが、社内で飛び交っている会話からすると、実際に仕事で扱っているものがほとんどです。

というわけで、今年はぜひ25件を目指したいですね!(ホントか?)

See you! ლ(╹◡╹ლ)


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

SORACOM Harvest + AWS Lambdaでウィンドウ処理やってみた

これは、SORACOM Advent Calendar 2016の24日目の記事です。
qiita.com

山下@YamaHaruka925です。
いや~、クリスマスイブですね。
個人的にはひさびさにクリスマスが休みでどう過ごしたもんか、と思っております(笑)


さて、12月22日(木)に行われた「SORACOM UG Tokyo #5 / 忘年LT大会&re:Invent報告会」にて、人生初LT!やってきました!
「SORACOM Harvest + AWS Lambdaでウィンドウ処理やってみた」

www.slideshare.net

このブログでは、その発表内容を紹介します!

SORACOM Harvestとは?

2016年11月30日より提供開始となった、SORACOMのデータ収集・蓄積ができるサービス。
soracom.jp

特長をざっくりまとめると、

  1. SORACOMユーザーコンソールで、スイッチONするだけの簡単設定
  2. 勝手にグラフ化までやってくれる!
  3. APIでデータを取り出せる!
  4. アップロードされたデータが40日間保存される!
  5. しかも、値段は1日5円!!

見るからに便利そう!
IoTプラットフォーム開発している私としては、
APIでデータを取得できる」
が気になるところ。

ということで、
f:id:acro-engineer:20161223143013p:plain:w500
f:id:acro-engineer:20161223143026p:plain:w500

Story

今回の検証の流れは、以下の通り。
f:id:acro-engineer:20161224020413p:plain:w500

不快指数とは?

夏の蒸し暑さを数量的に表した指標。

不快指数の求め方は、気温をT(℃)、湿度をH(%)として、

DI = 0.81T+0.01H×(0.99T-14.3)+46.3

日本人の場合、不快指数が75になると、約9%の人が暑さによる不快を感じるそうな。
ということで、今回は75を閾値に選定。

ウィンドウ処理とは?

f:id:acro-engineer:20161224021237p:plain:w500
時系列データをある時間幅で区切り、条件判定する方法。

図の青い幅の中だと、不快指数75を超えた点は2つなので、「連続5回超える」という条件には合致しない。
一方、赤い幅の中だと、不快指数75を超えた点は5つ。=「連続5回超えた」ので条件を満たしたことになる。

今回は、2分に1回上がってくるデータをモニターし、10分間連続(=5回連続)不快指数75を超えたら通知を送る。

アーキテクチャ

Before

SORACOM Harvestを使わずに、ウィンドウ処理を実現しようとすると、、、
f:id:acro-engineer:20161224022001p:plain:w500
こんな感じ。
AWS IoTで受けて、LambdaでStorage(DynamoDBやらS3やら)に保存。
ウィンドウ処理はまた別のLambdaで、、、
可視化のために、EC2立ててアプリケーション入れる、とうい感じ。

After

SORACOM Harvestを使うと、、、
f:id:acro-engineer:20161224022132p:plain:w500
ん~、だいぶスッキリしそうですね。

いざ、実装!

SORACOM Harvestにデータを送信!

f:id:acro-engineer:20161224022310p:plain:w500
OpenBlocksEX1にSORACOM SIMを挿し、温湿度センサーusbrhでデータを2分に1度取得して、SORACOM Harvestに送信します!

SORACOM Harvest

SORACOM Harvestの設定はというと、めっちゃ簡単。
f:id:acro-engineer:20161224022705p:plain:w500
SORACOMユーザーコンソールにログインし、メニューからグループを選びましょう。
グループの設定画面からSORACOM HarvestのスイッチをONに切り替えるだけ!

そして、データが届いたかどうか確認してみましょう。
SORACOMユーザーコンソールのメニューから、「データ収集」を選び、画面でSIMを指定すれば、グラフを見ることができます。
f:id:acro-engineer:20161224022928p:plain:w500

AWS Lambdaでウィンドウ処理

f:id:acro-engineer:20161224022957p:plain:w500
AWS Lambdaで、SORACOM Harvestへのデータ問い合わせ、そして、不快指数が10分間連続で75を超えたかどうかの判定、その後のSlackへの通知を記述します。
今回はランタイムはPythonを選択。
キャプチャの通り、約40行で処理終わり。

SORACOM Harvestへの問い合わせは、SORACOM-Cliを使うやり方とREST APIを利用する方法があります。
今回は、REST APIを利用。
その場合、SORACOM API KEYとTOKENの取得があらかじめ必要です。

また、Slackへの通知にはWebhookURLを利用しています。
詳しい方法はこちら参照。

結果

f:id:acro-engineer:20161224023414p:plain:w500
ということで、SORACOM Harvest上の赤線で囲んだ部分で温度があがり、不快度も上がった結果、10分経過後、Slackに通知が来ました!

まとめ

  1. SORACOM Harvest利用、簡単!
  2. Harvest + Lambda(=超簡単!)なサーバレスアーキテクチャでウィンドウ処理を実現できた!
  3. 今後、複数センサーから上がっていた情報をもとにCEP(複合イベント処理)なんてこともやってみたい!

明日が最終日!「SORACOM Advent Calendar 2016」

いよいよ明日が最終回となりました!
qiita.com

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


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

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
世の中に誇れるサービスを作りたいエンジニアwanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

Elasticsearch、Logstash、Kibana、Kuromojiでタグクラウドを作る

Elasticsearch Kibana Logstash

突然ですが、我が家は2階にリビングがあるタイプの戸建てでして、天井が勾配していてカッコイイ感がすごいのですが、この季節は暖房の熱がどんどん登ってしまってなかなか部屋が暖まりません。
要するに寒いという話なのですが、皆さんいかがお過ごしでしょうか、@ です。って僕のジョークと家の寒さは関係ないですから💢


さて、このエントリーは Elastic Advent Calendar の18日目です。
qiita.com


元々、マイクロサービスの可視化や、Kafkaを用いたデータ収集の安定化について書くつもりだったのですが、思いつきで作ったタグクラウドが予想外にイイ感じだったので、このエントリーではその経緯を紹介したいと思います。

f:id:acro-engineer:20161218225727p:plain:w400
タグクラウドとは、文中に頻繁に登場するワードを上の絵のように可視化する機能です。
最近リリースされたKibana 5.1.1に新しく追加されました。

この機能を使って、ツイッターの自分のツイートのタグクラウドを作ってみます。

構成

全体の構成は次の通りです。

  • Twitterのつぶやき(twilogからダウンロード)
  • Logstash 5.1.1(ファイル読み込み、解析、Elasticsearchへの登録)
  • Elasticsaerch 5.1.1(データ保存)
  • Kibana 5.1.1(タグクラウドの作成)

まずTwitterのつぶやき収集ですが、これは私がツイート検索などに使っているtwilogからダウンロードしたものを使います。twilogに登録しているユーザは、過去の分まで含めてCSV形式でダウンロードすることができます。

そのファイルをLogstashで読み込んでパースし、Elasticsearchに登録し、Kibanaで可視化するという流れです。
今回は大したボリュームではないので、すべて自分のMacBookで行うことにしました。

twilogからツイートをダウンロードする

twilogのユーザは、twilogにログインすることで過去ログをダウンロードできます。今回はCSV(UTF8)をダウンロードしました。

twilogのCSVデータは、このような形式になっています。

"807060211827490816","161209 121203","パイとキッシュとタルトの違いを教えてください"

最初の項目がID、次がツイートした日時、最後がツイート本文です。


なお複数行のツイートは、改行区切りになるようです。

"806848561765715969","161208 221102","「冬のボーナス」 cero_t 殿 【支給額】 ¥0
https://shindanmaker.com/294574
ぐぬぬ。"

この辺りは、Logstashで複数行の読み込みをできるようにするため、少し工夫する必要がありますね。


またツイート中の "(ダブルクォート)は、""(ダブルクォート2つ)にエスケープされるようです。

"789133408131649536","161021 005720","""第1作では不可能だった「8台持ち寄りの8人対戦」が可能であるばかりか"" の意味が分からない :
これは「Splatoon」新作なのか?! 「ニンテンドースイッチ」初公開映像に映ったタイトルをチェック! - GAME Watch http://game.watch.impress.co.jp/docs/news/1026016.html"

この辺りも、少し注意が必要でしょうね。

Logstashでtwilogデータを読み込む

まずはLogstashを使ってtwilogのデータを読み込みます。流れとしては、input-fileでツイートデータを読み込み、filter-csvCSVをパースして、output-elasticsearchでElasticsearchへの登録を行います。

先に設定ファイルの全体像を貼っておきます。

input {
  file {
    path => "/tmp/cero_t161216.csv"
    sincedb_path => "/tmp/cero_t.sincedb"
    start_position => "beginning"
    codec => multiline {
      pattern => "^\"(?!\")"
      negate => "true"
      what => "previous"
    }
  }
}

filter {
  csv {
    columns => ["id", "date", "tweet"]
  }

  date {
    match => ["date", "yyMMdd HHmmss"]
    timezone => ["Japan"]
    remove_field => ["date"]
  }
}

output {
  elasticsearch {
    index => "tweet-%{+YYYY.MM}"
  }
}

このファイルを twilog_csv.conf という名前にして、Logstashのディレクトリに置いておきます。


input-fileで設定しているsincedb_pathは「ここまで読んだ」を示すファイルです。いつもどこに出力されるか分からなくなるので、必ず指定しています。
start_positionにbeginningを指定することで、ファイルを先頭から読めるようにしておきます。

また、codecのmultilineを指定しているところが今回のポイントです。
twilogのファイル形式のところに書いたように、ツイート中の改行はそのまま改行されています。そのためmultiline-codeを使って、複数行を1つのデータとして扱えるようにする必要があります。
ここではCSVの先頭文字である " から始まる所が新しい行である、という指定をしたいのですが、それだけ指定すると、たまにツイート本文に「改行後のダブルクォート」があると、それを行頭だと誤認識してしまいます。
そのため「" から始まるけど "" から始まってはいない」という正規表現を用いて、CSVの先頭行であることを指定しています。


そこまでできれば、あとはcsv-filterで区切って、dateフィルタで日付をパースして、elasticsearch-outputに出力するだけです。
Elasticsearchに作るindexは、月ごとに作ることにしました。別に日ごとでも年ごとでも構わないのですが、数が増えすぎず、管理もしやすいのは月ごと程度と考えました。

準備ができたので、可視化するよ

ここからは、可視化まで一気にやりましょう。

まず、ElasticsearchとKibanaを起動します。

cd elasticsearch-5.1.1/
bin/elasticsearch
cd kibana-5.1.1-darwin-x86_64/
bin/kibana

これでブラウザから localhost:5601 にアクセスして、Kibanaの画面が出れば成功です。


次に、Logastashを実行してtweetデータをElasticsearchに流し込みます。

cd logstash-5.1.1/
bin/logstash -f twilog_csv.conf 

twilog_csv.confは、先ほど上に書いたLogstashの設定ファイルのことです。
これで数十秒ほど待って、Elasticsearch側のコンソールログ出力が止まったなと終わったら完了です(雑)


ここまで終わったら、Kibanaの画面でManagementから、いま投入したデータのindex patternを作成します。先ほど投入したデータのindex名である「tweet-*」を指定します。

f:id:acro-engineer:20161218231332p:plain:w640

これは、平たく言えば、投入されたデータのそれぞれの型をKibanaに認識させる作業です。
Elasticsearchはスキーマレスなデータストアであるため、RDBMSのテーブルのような厳密な定義をする必要はないのですが、Kibanaで可視化するためにはデータの型が明確になっている必要があるため、このようなindex patternの作成が必要になるのです。


index patternの作成が終われば、次は可視化です。
左メニューのVisualizeから「Tag Cloud」を選択して、いま作った「tweet-*」を指定します。

Tagsを選択して、Fieldに「tweet.keyword」を指定してSizeを「100」にし、右上の時間を選択する所で「Last 1 year」を選んで、再生ボタンみたいな三角をクリックします。


それでタグクラウドができるわけですが・・・

f:id:acro-engineer:20161218231642p:plain:w640

・・・なんじゃこりゃ。ほぼほぼ「わかる」しか言ってないしw

そうなんです、先ほど選んだ「tweet.keyword」というフィールドは、tweetフィールドを単語分割せず、全体を一つのワードとして扱うフィールドなのです。


ここまででひとまずタグクラウドはできましたが、やはり単語分割をしたものをタグクラウドで見たいですよね。
ここからが長い戦いになります。

単語分割したフィールドをKibanaで可視化する

さきほど作った「tweet-*」のindex patternを見てみましょう。
ここで「aggregatable」という列を見ると、「tweet.keyword」にはチェックがついていますが、「tweet」にはチェックがついていないことが分かります。また「analyzed」という列を見ると、それが逆になっています。

f:id:acro-engineer:20161218231950p:plain:w640

「aggregatable」はKibanaの可視化に使えるフィールド、「analyzed」は単語分割されたフィールドを示しています。いま欲しいのは、この両方にチェックがついたフィールドです。
なので「tweet」というフィールドをaggregatableにできるよう設定します。


aggregatableにするには、Elasticsearchのdynamic templateという機能を利用して設定を行います。
Elasticsearchはスキーマレスということは先にも書いた通りですが、特定のフィールドの設定を変えたい時には、dynamic templateを利用して、「このフィールド名なら、こういう設定にする」というような設定を行うのです。

Kibanaの左メニューから「Dev Tools」を開き、Consoleに次のjsonを入力します。

PUT _template/tweet
{
  "template": "tweet-*",
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "named_analyzers": {
            "match_mapping_type": "string",
            "match": "tweet",
            "mapping": {
              "fielddata": true,
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        }
      ]
    }
  }
}

この設定の詳細は割愛しますが、肝は「"fielddata": true」の部分です。
string形式のtweetというフィールドのfielddata属性をtrueとすることで、フィールドの情報がメモリに展開され、このフィールドがaggregatableになるのです。


残念なことに、dynamic templateはデータを投入する際に適用される機能なので、既に投入したデータには適用されません。そのため、一度データをすべて削除し、改めてツイートデータを読み込む必要があります。

Logstashを一旦停止させ、Elasticsearchからデータを削除し、sincedbを削除してファイルを最初から読み込み直せるようにして、改めてLogstashを実行してみましょう。

(Logstashをctrl-cで停止させた後)
curl -XDELETE localhost:9200/tweet-*
rm /tmp/cero_t.sincedb 
bin/logstash -f twilog_csv.conf 

これでデータの投入が始まったら、Kibanaで「tweet-*」のindex patternを開き、上にある矢印がグルグルしている更新ボタンを押します。

f:id:acro-engineer:20161218232436p:plain:w640

これで「tweet」フィールドが「aggregatable」になり、Kibanaで可視化できるようになりました。


続いてKibanaのVisualizeから、改めてタグクラウドを作成します。先ほどは「tweet.keyword」しか選択できませんでしたが、今回は「tweet」というフィールドも選択できるようになっているはずです。
「tweet」を選択して、タグクラウドを作成してみましょう。

f:id:acro-engineer:20161218232626p:plain:w640

なんじゃこりゃ(再)


そう、Elasticsearchのデフォルトの単語分割は、英単語の分割はできますが、日本語は1文字ずつバラバラに分割してしまいます。これでは使い物になりませんね。
もう少し賢いアナライザを使って単語分割をしてみましょう。

Kuromojiのインストールと設定

Elasticsearchで単語分割と言えば、そう、kuromojiですね。
kuromojiは次のコマンドで簡単にインストールできます。

(Elasticsearchをctrl-cで停止させた後)
bin/elasticsearch-plugin install analysis-kuromoji

インストールが終わった後、Elasticsearchを起動し直します。

bin/elasticsearch


続いて、さきほどのtweetというフィールドがkuromojiで単語分割されるよう、dynamic templateを修正します。

PUT _template/tweet
{
  "template": "tweet-*", 
  "settings": {
    "index": {
      "analysis": {
        "tokenizer": {
          "kuromoji_user_dict": {
            "type": "kuromoji_tokenizer",
            "mode": "normal"
          }
        }
      }
    }
  }, 
  "mappings": {
    "_default_": {
      "dynamic_templates": [
        {
          "named_analyzers": {
            "match_mapping_type": "string",
            "match": "tweet",
            "mapping": {
              "fielddata": true,
              "analyzer": "kuromoji",
              "fields": {
                "keyword": {
                  "type": "keyword"
                }
              }
            }
          }
        }
      ]
    }
  }
}

kuromojiの設定を行い、またtweetのanalyzerとして「kuromoji」を利用できるように設定しました。


またLogstashを一旦停止させ、データを消して、Logstashを実行してみましょう。

(Logstashを停止させた後)
curl -XDELETE localhost:9200/tweet-*
rm /tmp/cero_t.sincedb 
bin/logstash -f twilog_csv.conf 


これでデータを投入させた後、タグクラウドを作ってみると、こうなりました。

f:id:acro-engineer:20161218233340p:plain:w640

だいぶまともになりましたが、httpが入っていたり、よく会話するスクリーンネームの方が入っているなど、余計な言葉が多いですね。
次はこれを取り除きましょう。

Logstashで不要なワードを除外する

単語分割した後にURLやスクリーンネームを除外するのは難しいため、Logstashの時点でこれらを削除します。

Logstashのfilterに、gsubで文字列置換をする処理を追加します。

input {
  file {
    path => "/tmp/cero_t161216.csv"
    sincedb_path => "/tmp/cero_t.sincedb"
    start_position => "beginning"
    codec => multiline {
      pattern => "^\"(?!\")"
      negate => "true"
      what => "previous"
    }
  }
}

filter {
  csv {
    columns => ["id", "date", "tweet"]
  }

  date {
    match => ["date", "yyMMdd HHmmss"]
    timezone => ["Japan"]
    remove_field => ["date"]
  }

  mutate {
    gsub => [
      "tweet", "@\S+", "",
      "tweet", "http:\S+", "",
      "tweet", "https:\S+", ""
    ]
  }
}

output {
  elasticsearch {
    index => "tweet-%{+YYYY.MM}"
  }
}

これで@から始まる文字と、http / httpsから始まる文字を削除します。
この設定を追加した後、またLogstashを一旦停止させ、データを消して、Logstashを実行してみましょう。


データの投入が終わった後にタグクラウドを作り直すと、こんな風になりました。

f:id:acro-engineer:20161218233705p:plain:w640

かなりそれっぽくなってきましたね。

Kibanaの設定で不要な単語を除外する

しかしまだ「てる」とか「僕」とか「p」とか「d」とか、よく分からない単語が多いです。
これらを除外するためには、KibanaのVisualizeの一番下にある「Advanced」を開き、「Exclude Pattern」を設定します。

ここでは4文字以下の単語を除外するため

.|..|...|....

と入力しました。


すると・・・

f:id:acro-engineer:20161218233754p:plain:w640

できました!!
elasticsearchやSpring、babymetalが目立ってる辺り、僕のタグクラウドっぽいですね!

ところで128162って?

これで上手くタグクラウドができたのは良いんですが、その中にある「128162」って何なんでしょうかね?
不思議に思ってtwilogで検索してみたら・・・

💢 のコードかよ!!

いや確かに、しょっちゅう使ってますけどね。
そんなイイ感じのオチもついたところで、このエントリーを締めくくりたいと思います。


Stay elastic, see you!


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レポート ~ ENdoSnipe における Elasticsearch 導入の効果 〜 #elasticon

Elastic{on} 2016 in Tokyo レポート Elasticsearch ENdoSnipe elasticon

こんにちは、
さきほど投稿した柳原が再びお送りします!

そして本日最後のセッション。
私たちAcroquestのセッションをレポートします!!

Acroquestの発表では、Elasticsearchのすばらしさと、
Elasticsearchを活用した、ソリューションである、
http://www.endosnipe.com/
の紹介を行っています。


発表は当社のJavaトラブルシューターエンジニア、山崎です。
f:id:acro-engineer:20161216005454j:plain:w300

Acroquestでは、
JaTSというトラブル解決サービスを10年以上行っており、
実際に発生したシステム障害から得られたノウハウをベースにして、
ENdoSnipeというJavaシステム可視化・診断ツール
のソリューションを作成しました。

f:id:acro-engineer:20161215235607p:plain:w500


ENdoSnipeが測定したデータの蓄積にRDBを利用していましたが、
大量のデータを蓄積すると検索が遅くなる壁にぶつかりました。

f:id:acro-engineer:20161215235742p:plain:w500

いろいろ苦悩した結果、
Elasticsearchに出会い、これだ!と思ったようです。
実際、ElasticsearchとENdoSnipeの相性はバツグンでした^^

Elasticsearchに移行した結果、圧倒的に開発の生産性が向上。
Elasticsearchのサポートが手厚かったのも大きかったです。
f:id:acro-engineer:20161216000216p:plain:w500


そして、生まれ変わった新ENdoSnipeが紹介されました。

まずはElasticsearch移行で大幅に機能強化したシステムマップ!
f:id:acro-engineer:20161216000914p:plain:w500
検索の大幅な高速化により、
より充実した情報を一枚絵でリアルタイム監視することが可能になりました。

1年間などの長期期間のデータ表示もElasticsearchのAggregationにより、
サクサクと表示が可能に。

そして新ENdoSnipeはさらなる進化を目指し、
ビジネスからユーザ、システムまで一気通貫した可視化を実現することで、
収益向上、ビジョンの実現にコミットします。
f:id:acro-engineer:20161216010303p:plain:w500

サイト上のどのページでユーザが不満を覚え、
ユーザが離脱しているのか、可視化できます。
(その原因特定をソースコードレベルまで掘り下げられるのもENdoSnipeの強みです。)
f:id:acro-engineer:20161216001313p:plain:w500

そして、このような多種多用の可視化を性能を落とさずに、
かつ、生産性が高い状態で開発ができたのは、何と言ってもElasticsearchのおかげです。。


f:id:acro-engineer:20161216001457p:plain:w500
そして、graphを使った、相関分析機能。
SQLがメモリ与える影響」や「システムKPI⇔ビジネスKPI間の相互影響」など、
これまで把握しづらかった分析も、これならできます!


f:id:acro-engineer:20161216001606p:plain:w500
異常検知も検証段階ですが、取り入れています!

今日のセッションでも取り上げられたprelertと連携することで、ENdoSnipeの更なる発展が見えてきました。

  • 異常検出から原因分析までを、シームレスに実現できる可能性
  • センサーデータの実データを判定したところ、故障前に異常を検知
  • 公開サイトに対するリストアタック等の攻撃検出に効果

Elasticsearchはgraphや、prelertなどの新機能が
次々と追加されていくので、
それをENdoSnipeもすぐ活用していけるのが
Powered By Elasticならではですね^^

まだまだ進化は続きそうです...!


最後に、Elasticsearchを活用する、です。
f:id:acro-engineer:20161216001920p:plain:w300

私も開発していて感じますが、
サポートがあると、1週間悩んでいたことが
すぐ解決した、ということがありました。
トータルで見て、サポートを受けた方がコスト的には良かったです!!

駆け足ではありましたが、Elasticsearchの面白さ、強力さ、
ENdoSnipeの便利さを伝えることができたでしょうか?


今回ご紹介したユースケースの実現を考えている方は、
ぜひAcroquestにお問い合わせを!!
http://www.endosnipe.com/

以上、Acroquestのセッションでした!!

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レポート ~ 日立IoTプラットフォームにおけるElastic Stackの活用事例 〜 #elasticon

Elasticsearch Elastic{on} 2016 in Tokyo レポート elasticon

はじめまして、金澤と言います。ブログ初投稿です。
普段はElastic Stackを使って経営情報の可視化などをやっています。


さて、第4弾は日立製作所による、工場ラインの可視化への活用事例です。

具体的には、エンジン部品の加工時に取得したセンサーデータを可視化し、

  • 不良品率が上がっていないか
  • 上がっているとすればその原因は何か、

といったことを明らかにするものです。


加工の様子を動画で詳しく紹介してくれましたが、

  1. 部品がベルトコンベアで届いて、機械によって削る。
  2. 削り終わったら、つまみあげて削りカスを飛ばす。
  3. 最後に検査用カメラで写真を取って検査する、

という一連の工程があるそうです。

そして、これらの工程に対して、

  1. 各工程でPLC(シーケンサ)と呼ばれる制御装置(このデモでは4台)を使い、データを取得する。
  2. 一次処理をした結果を、ITプラットフォームに送信して、データを1つにまとめる。
  3. ITプラットフォームに蓄積したデータをBeatsを使って、Elasticsearchにデータを収集する。

といったことでデータを取集しているそうですが、
リアルタイム性を重視したい、ということで、
Elastic Stackを利用したとのことです。


ITプラットフォームからBeatsで収集するところは、
logstash–Kafka–logstash–Elasticsearchという、
2.x系での最適解となる構成で、行っていました。
(余談ですが、5系だとBeatsからKafkaに直接送信できるようになるので、もう少しスリムになります。)


可視化画面は、Kibanaを改良したもののようでしたが、かなりの改良を加えたようです。
スマホで撮ったので、画質が悪いです。。)

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


まず、ロゴマークがKibanaではなく、HITACHI!
visualizeも、

  • 各工程の作業時間がわかるガントチャート
  • 全行程が一望できる画像
  • traffic lightによる設備状態表示

など、Kibanaにはない機能があり、かなり力を入れているようです。

ダッシュボードは5秒間隔で工場からデータを受け取って更新しています。
このリアルタイム性はElasticsearchの強みですね。

Kibanaの改良具合に圧倒されたセッションでしたが、
とりあえず、Elasticsearchにデータを入れておけば、
見たいと思ったグラフをすぐにKibanaで可視化できるというのは、
Elastic Stackならではですね。

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レポート ~ Search Functionality and Log Management with Elastic Stack at Fast Retailing 〜 #elasticon

Elasticsearch Elastic{on} 2016 in Tokyo レポート elasticon

はじめまして、柳原です!
初投稿のElasticsearch使いエンジニアです!
主に日本語検索のECシステムを開発中です^^

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

次は、ファーストリテイリング社の羽山典孝さん、Reuben Liさんによる発表
「Search Functionality and Log Management with Elastic Stack at Fast Retailing」です。

撮影NGでしたので、テキストによるレポートになっている旨はご了承ください(^^;

サマリ

ファーストリテイリング様は2020年に売上3兆円目標に向けて海外展開をしており、
EC、流通などに加えてビジネスのIT化にも力を入れているそうです。

その中で、マイクロサービス・Elasticsearchを取り入れた事例に関して
前半は羽山さんによるユニクロでのIT化の取り組みの紹介と、マイクロサービス化した話
後半はReuben LiさんによるElasticsearchによる、ログ可視化とそれをビジネスにつなげた話
がありました。

ユニクロでのIT化の取り組みの紹介と、マイクロサービス化

羽山典孝さんによる、ユニクロでのIT化の取り組みの紹介と、マイクロサービス化、ユニクロアプリの話です。

1.ファーストリテイリング様でのIT施策

ファーストリテイリング様では以下のIT活用を行っているそうです。

1)ユニクロアプリでのバーコードスキャン
 購入履歴を管理し、プロモーション、レコメンド、ECと店舗の距離の接近させるサービスなど
2)商品にRFIDを付与
 セルフレジや、お勧め製品、お勧めファッションをレコメンドしてくれるサービス

私もユニクロよく活用するのですが、あまり気づきませんでした。。。
様々な取り組みをやっているみたいですね。

そして、すべてのサービスが一体化していた状態から、マイクロサービスに移行した話。

  • Before 全部一体型

いままでECサイト、モバイルサイト、アカウント管理etc...なにもかもが1つにつながっていた。
 ×どこががボトルネックになると全体に影響する。
 ×LINE連携などをいれようとすると全体に影響して大変。。。
  などなど問題があったそうです。

  • After マイクロサービス

各サービス単位でマイクロサービス化し、サービス同士はRESTAPIでそれぞれ接続。
 ○それぞれのチームが独立して開発、デプロイできるようにした。
 ○コンシューマ向けのサービスはAWS上で構成しているので、特定のサービスだけスケールアウトできる。

 マイクロサービスが今着目されていますが、先進的に取り入れられている例ですね!

2.Elasticsearchに注目した理由

▽カタログ検索に利用
 商品データは、商品名や、画像が混在していて複雑。
→Mappingによって、柔軟に対応できることからElasticsearchに注目したようです。

また、以下のようなワークフローが明確になっていたので、
 CSVデータimport→スキーマ更新→Data Indexing→クエリで検索
と役割分担されており、各APIとしてわけやすかった、というのもメリットにもあったそうです。

3.Elasticsearchを使って、苦労した点

みなさんご存知ユニクロアプリ(よく割引クーポンがありますね。)
これも様々なマイクロサービスで構成されているそうです。

  • 苦労した点

 要件として、800店舗ある店舗ごとで、在庫がないものは表示しないようにしたい。
 しかし、商品ごとに在庫状況Fieldを800店舗分もつくるわけにはいかない。

そこで、
【工夫ポイント】

1)Mappingの工夫
 店舗数分indexを作成した。
 考える単位を商品ごとから、店舗ごとにする、という発想の転換が必要ですね。

2)aliasの活用
 index名:店舗番号+タイムスタンプ
 alias:店舗番号
と使い分けて、検索時には、aliasを対象にして店舗番号で検索したそうです。
indexは名前、aliasは検索のキー用という感じですね。

マイクロサービスとElastic Stack

ここからはReuben Li さんの発表です。
システムが出力するログの可視化システムです。

1.アーキテクチャ

API・データリソース→logstash→Elasticsearch Cluseter(data nodes + kibana)
という流れで、システムのログをElasticsearchに貯めます。
Elasticsearchにログを貯めるときに、良く使われるパターンですね。

2.使用ログデータ
  • ログ3億件/日(最大で毎秒900件)
  • うちクーポンのマイクロサービスに関してが、2000万件/日
3.ログの可視化
  • クーポン消費量の可視化

 可視化したことで、店舗で使うクーポンが開店時間から閉店時間までまんべんなく使われている一方、
 ECでのクーポンは夜間にピークがあり、消費傾向の違いがはっきりと表れていた、
 ということがわかったそうです。

 →ITからビジネス戦略に活かす、理想的な形ですね!!

4.課題
  • 課題 1 Mappingが多すぎて、OOMEが起きていた。

→システムのログの出力内容を改善し、Mappingのサイズを減らした。

  • 課題 2 リクエストとログのIndexデータの対応付け

対象のシステムに1件のリクエストが来た時に、システム内では複数のログを出力するケースがあった。
→同じリクエストのログを同時に見ることができるように、
リクエストIDによってAggregationして散らばってIndexされないようにした。

気軽に投入できるのもElasticsearchの利点ですが、パフォーマンスを考えると、
投入するデータやMappingなどの調整が必須、というところが
構築してみるとわかりますね。

私もElasticsearchを使った検索システムの開発に関わっているので、
是非、参考にしたいと思います。

まとめ

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

Elastic{ON} Tokyo 2016レポート 〜 ソフトバンク株式会社 「OSSの社内IT活用をインフラ担当社員で支えるには」〜 #elasticon

Elasticsearch elasticon Elastic{on} 2016 in Tokyo レポート

こんにちは!yoshidaです。

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

Elastic{on}東京、お昼を挟んで最初のセッションは

OSSの社内IT活用をインフラ担当社員で支えるには」
関谷 雅宏 氏 | ソフトバンク株式会社 | IT統括 システム基盤本部 本部長代行

でした。

※こちらのセッションは撮影、録画禁止となります。とアナウンスがあり文章だけでお送りします。。
(ブログはOK)


実際にElasticsearchやKibanaを使った活用事例の紹介です。

ソフトバンクでは各店舗(ソフトバンクショップ)の連携や在庫管理、サーバ監視システムなど業務利用のために
OSSを活用しているようです。
社内システムにOSSを利用してノウハウを貯められるのは、とても良い環境だと思います。
ユーザも要望が上げやすそうですし。


紹介されたシステムは、ログの転送システムについてでした。
サーバからログを吸い出して、溜め込むといったフローのもので
物理サーバ、仮想サーバの台数も結構多いシステム構成図を見せてもらいました。
(スライドの画像が欲しい・・・)
台数も多そうでサーバの管理が大変そうだなぁと。

Elasticsearchには在庫データ等々、いろいろ溜め込んで利用しているようです。
とりあえずデータを保管しておく。といった時にスキーマレスなのはありがたいのでしょうか。
何に使うかわからないけど、とりあえず貯めておきたい。というのはあり得る用途かと思います。

サーバ状態の監視にはKibanaの画面を利用しているようです。
DBの監視にセッション数などを可視化して、皆で同じ画面を見ることで情報共有できるのは
理解度や手間の部分でとても有効だと感じました。
言葉だけでは限界がありますからね。視覚情報はとても重要。


具体的な活用方法の紹介もありましたが、こちらのセッションで重要だったのは
OSSを使う理由の部分だったように思います。

”事業を成長させるのは、社員自身の成長”

OSSの利用には、問題発生時に自分たちでどうにかするしかない。
という自己責任の部分が強くなります。
そのような、自分でやらないといけない環境が社員の成長につながり、
作れる人間が多い方が成長の余地が多いのではないか。
という考えがあるようです。

エンジニアが自立するために、サポートをつけて、
そこからノウハウを学んでいくということが必要で、その価値は大きい。
ということを話していました。


最後に質疑応答で、
「自立するという文化を根付かせるために実施していることは何か?」
という質問に対して、その回答は
「ちゃんと失敗させる」
というものでした。
どうにもならない状況を経験し、そこからサポートをつけ、解決するノウハウを学んでいく。
そういったことをすると自身の成長にもつながるし、サポートを見る目も養える。
そのような考えのようです。

大抵の場合、最初から上手くいくことはなく、問題が発生するのが常なので、
それを解決することから学べることは多いのだろうと思いますし、
失敗を許容するというのはとても良い環境だなと感じました。
(問題発生中は中々キツイ状況だと思いますが。。。)

自立したエンジニアになるためには。というのは自分自身に刺さる部分もあり、
今後のスキルアップを考える際にいい情報を得られたなと思います。
トライアンドエラーから学んでいこうと思います。


このセッションについては、興味深い感想のツイートもありました。


苦労するところは同じでも、何につながる苦労なのか。
という感じですね。

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