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

Taste of Tech Topics

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

JAWS-UG横浜支部にて「はじめてのCloudFormation~動的スケールをやってみた内容とその注意点~」を発表してきました。

aws

どうも、@です。

先日02/10(金)に私が所属している JAWS-UG横浜支部にて勉強会があり、発表してきました。タイトルは「はじめてのCloudFormation~動的スケールをやってみた内容とその注意点~」。

私自身、初めてのCloudFormation利用だったこともあり、動的スケールの際に自動起動するEC2インスタンスへのIDの採番方法など、ハマってしまった点がいくつかありました。
今回、それらの経験をまとめて、勉強会で共有しました。

その時の発表資料を公開していますので、ぜひ読んでみてください。


はじめてのCloudFormation // Speaker Deck

それでは。

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 Stack5.2の魅力的な新機能紹介

Elasticsearch Kibana Logstash Heartbeat

こんにちは!@と@です。
Elastic Stack 5.2が登場しました!

新しい機能が気がついたら追加されており、Elastic Stackの
進化の早さに驚かされてばかりです。

Elastic Stack5.2の特に魅力的な新機能である
ヒートマップ、Logstash Monitoring、そして、Heartbeatを紹介します。

ヒートマップ

ヒートマップがKibanaのVisualize機能で使えるようになりました。
ヒートマップを使うと、データを3つの軸で見れます。

例えば、商品と売上と時間の属性があった場合を考えてみましょう。
いつどんな商品の売上があがるのかを調べたい場合にヒートマップが便利です。
そのX軸を時間、Y軸を商品、売上を色で表示した場合に、
売上の高い部分の色を探すと、どの商品がいつ売上が高くなったかを確認できます。

実際にどんなグラフなのかはこの後見ていきましょう。

以前、Prelertの記事でご紹介させて頂いたfarequoteのデータを利用してヒートマップを作りました。
データの詳細はこちらを参照してください。
acro-engineer.hatenablog.com


1.「Visualize」で「Heatmap」を選択します。

Kibanaの「Visualize」タブで「Heatmap」を選択しましょう。

2. Dataタブで可視化における基本設定をします。

Dataタブで可視化の設定を行います。
この設定項目は、X軸とY軸の表示項目(整形)と色を塗る基準となる値です。

今回はDataタブで次の3つの項目を設定します。

  1. X軸の項目でDate Histogramを選択し、Fieldを@timestamp、IntervalをHourlyにします。
  2. Y軸の項目でSub AggregationをTermsとし、Fieldをairlineにしました。
  3. 最後にmetricsの項目でをresponsetimeの平均を設定します。

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

ここまでの作業で、ヒートマップを表示することができました。
ただ、このヒートマップはまだ見づらいですよね・・・?
そこで、Optionタブからヒートマップの設定を変更します。

3. Optionタブで更に見やすい可視化をする。

Optionタブでは、ヒートマップを更に見やすくなる設定ができます。
設定を変更できる例として、着色する色、着色の値のレンジ、更には
対数スケール等の利用などもできます。

今回はCustom Rangesを設定し、Color Schemaを「Yellow to Red」に変更しました。
変更後のヒートマップは次の図になります。

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

Color Schemaは色のベースや変化の設定を切り替える項目です。BlueやRedなどを設定できます。
また、Custom Rangesは着色する色のレンジを設定する項目です。
例えば、Fromを0、Toを100として設定すると、0から100までの色は同じ色で表現します。

これで、いつどのように変化したかをわかりやすく見れますね。

Logstash Monitoring

X-PackのMonitoring機能で、Logstashのモニタリングが可能になりました。
Kibanaの画面上から、Logstash・Elasticsearch・Kibanaの稼働状況を一貫して管理できます。

早速使ってみましょう。

1. X-Packをインストールする

Logstash Monitoringを利用するためには、LogstashにX-Packをインストールする必要があります。
下記のコマンドを実行することでLogstashにx-packをインストールすることができます。

logstash-plugin install x-pack
2. Logstashをモニタリングをするelasticsearchクラスタの情報を設定します。

logstash.ymlに次の3行を追記します。

xpack.monitoring.elasticsearch.url: "【elasticsearchのURL:ポート番号】"
xpack.monitoring.elasticsearch.username: "logstash_system"
xpack.monitoring.elasticsearch.password: "changeme"
3. Logstashを起動し、Kibana画面を確認する

Logstashを起動した状態で、KibanaのMonitoring画面を開いてみましょう。
f:id:acro-engineer:20170205222043p:plain

今までのバージョンでは、ElasticsearchとKibanaの情報しか表示されていなかったのですが、
Logstashの情報も追加されていることがわかります。


Nodesをクリックすれば、ノードの詳細情報を確認することができます。
スループットや、CPU使用率を1つの画面上で見ることができますね。
複数ノードのLogstashを使っている場合などは、一括で管理できて便利そうです。

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

Heartbeat

Beatsシリーズに新しい機能が追加されました。その名も「Heartbeat」です。
Heartbeatはサーバの死活監視を行う製品です。
公式サイトによれば、次の4点の特徴があります。

  1. 非常に使いやすく、簡単に設定できます。
  2. HeartbeatのpingはICMP, TCP, HTTP, 更に TLS, 認証,プロキシにも対応しています。
  3. 監視対象の動的な追加、削除ができます。
  4. ElasticsearchやKibanaを利用して、状態を可視化できます。

監視対象の動的な追加、削除は良いですね。
Elasticsearchのクラスタを拡張するときに、監視を止めずに済みます。

それでは、早速実践してみましょう。今回試す構成は以下の通りです。
f:id:acro-engineer:20170207095158j:plain

Heartbeatが監視対象のElasticsearch(ポート番号9200)をhttpで死活監視し、
その結果をモニタリング用のElasticsearch(ポート番号9201)に投入する想定の構成です。

1.Heartbeatの設定

9200番のポートで起動した監視対象のElasticsearchにhttpリクエストを送信することで監視します。
「heartbeat.yml」がheartbeatディレクトリの中にあります。
このファイルはheartbeatの設定ファイルです。

heartbeat.ymlの17行目のurlsを監視対象のURLに変更してください。

  urls: ["http://192.168.0.1:9200"]

また、投入先をモニタリング用のElasticsearchにするのでheartbeat.ymlの48行目を変更してください。

  hosts: ["localhost:9200"]
2.Heartbeatの起動

Heartbeatを起動します。
オプションの-cでHeartbeatの設定ファイルを設定します。
(実際の運用では、サービス起動にするかと思いますが)

./heartbeat -c heartbeat.yml

Heartbeatが取得したデータが投入されるindex名は、デフォルト設定では「heartbeat-yyyy.MM.dd」になります。
Kibanaを使うことで、取得したデータを見ることができます。

3.Kibanaによる可視化

Heartbeatを使って投入したデータを簡易なDashboardで可視化してみました。

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

Dashboardの内容は以下のようになっております。

中央一番上:ヒートマップでHTTPのRTT(HTTPリクエストの送信から受信まで)を可視化
左の円グラフ:HTTPステータスの円グラフ
右側:アクセスに成功したかどうか

このようにサーバの死活監視とその可視化を簡単にできます。

最後に

機能追加が速く、どんどん新機能が出てきており、今後も楽しみですね。
個人的には、ヒートマップで豊かになった表現力で、いろいろ可視化してみたいです。
Elastic Stack最高!

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

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

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

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

TensorFlowを使った顔認識アプリケーションの記事をInterface誌に書きました

TensorFlow 機械学習 執筆

こんにちは!
先週、全脳アーキテクチャ若手の会の新年会で弾けてきた@です。

さて、本題ですが、
CQ出版社さんから発売されている月刊誌「Interface」に記事を執筆させていただいきました!

Interfaceはコンピュータ技術にこだわる専門誌として先進的、かつ、
専門的な技術情報を掲載している雑誌です。
(参考:CQ出版社 - Interfaceのご紹介

今回、Interface誌の3月号にTensorFlowを使った記事を掲載させていただきました。

執筆した記事のタイトルは
「ネットから入手できる画像データセットで試す
 レッスン4...ちょっと本格的なAI画像認識」
です。

記事では、TensorFlowを使った顔認識アプリケーションをどのように作成するのか解説しました。
特に、チュートリアルから一歩踏み出して挑戦したい人には、オススメの内容です。

例えば、「MNIST」「CIFAR10」(TensorFlowの基本データセットですね)を使って実装に挑戦したが、
機械学習を使ったアプリケーションをどうやって作れば良いのだろう、と考えている人に読んでもらいたいです。

本記事では顔認識アプリケーションを1から作成し、その過程を執筆しました。
そして、そのアプリケーションで利用しているデータは公開されているデータです。

そのため、初めてTensorFlowや画像処理ライブラリのOpenCVを利用される方にも
構築できるようになっております。

ぜひ、手に取って読んで、一歩踏み出してみてください。

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


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

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

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

OpenDaylight Berylliumでのアプリ開発の方法について発表しました

OpenStack OpenDaylight

こんにちは、iidaです。

昨年のことですが、プロジェクトでOpenDaylightのLithiumで作ったアプリケーションを
Berylliumに対応させた時の話を社内の勉強会で発表しました。

www.slideshare.net


実は私、OpenDaylightは最初のHydrogenの頃から少しだけ触っていたのですが、
ネットで調べてもなかなか情報が見つからなかったり、
見つかったとしても古いバージョンのものが混ざっていたりして、苦労してきました。

そこで今回は、OpenDaylightのアプリケーションの現在の作成方法の概要をまとました。
「OpenDaylightでアプリケーションを作成したいけど、何から手を付ければいいか分からん!」という方の参考になればと思います。

ちなみに、現在はBerylliumの次のバージョンであるBoronがリリースされています。
チラッと見てみたところ、開発者向けの情報も整備されてきているようで、
少しずつですがアプリ開発のハードルは下がってきているのではないかと思います。

機会があればBoronについても調べてみたいと思います。
それでは!

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


  • 日頃勉強している成果を、AWSHadoop、Storm、NoSQL、Elasticsearch、SpringBoot、HTML5/CSS3/JavaScriptといった最新の技術を使ったプロジェクトで発揮したい。
  • 社会貢献性の高いプロジェクトに提案からリリースまで携わりたい。
  • 書籍・雑誌等の執筆や対外的な勉強会の開催を通した技術の発信や、社内勉強会での技術情報共有により、技術的に成長したい。
  • OSSの開発に携わりたい。

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。
 
データ分析で国内に新規市場を生み出す新サービス開発者WANTED! - Acroquest Technology株式会社のインフラエンジニア中途・インターンシップ・契約・委託の求人 - Wantedlywww.wantedly.com

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でウィンドウ処理やってみた

APIGateway IoT Lambda Python SORACOM window処理 SORACOM Harvest

これは、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