Taste of Tech Topics

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

「Jupyter Notebookを納品した話」で発表しました

こんにちは@です!
先日、社内勉強会がありました。
今回、私は「Jupyter Notebookを納品した話」で、発表しました。

普段、Jupyter Notebookをデータ分析や機械学習を取り組む中で使います。
このJupyter Notebookを案件の中で使ってみた時に感じたことを発表しました。

実際のスライドはSlide Shareにアップロードしました。


www.slideshare.net

Jupyter Notebook一つでドキュメンテーション、コード、図を書き、分析過程を見せられます。

実際の仕事で使うと自分の考えや分析の過程、そして、結果を説明する場面は必ず遭遇します。
そんな時に非常に重宝しました。

また、仕事を通してJupyter Notebookの良かった点、悪かった点、難しかった点、
そして、それをどう回避すればよかったのかといったことを話し、ディスカッションしました。

発表内容の詳細はスライドを見てください。

分析結果の共有やレポートの作成にぜひ、Jupyter Notebookを使ってみてください!
Jupyter Notebook 最高!

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


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

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

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

こんにちは!
@です。

最近、データの中から特異点や異常な箇所を発見したいニーズが高まっています。

そんななか、先日、Elastic社が行動分析技術の大手プロバイダPrelertを買収したとのニュースがありました。

ちなみにPrelert社とは異常検知を自動化するため、データの知識が不要なアプリケーションをエンドユーザーに提供していた企業です。

Prelertのサイトを確認すると、Elasticsearchに入れたデータに対して異常検知することができそうです。
これは面白そう! ということで、Prelertを使って異常検知を行ってみました。

今回は、次の流れで説明していきます。

Prelertとは

PrelertはITセキュリティと運用チームのための行動分析ツールです。公式サイトは次のとおりです。

公式サイトに掲載されている特徴として、次の3つがあります。

  1. 脅威を早期に検出・・・リアルタイムに近いデータ処理でユーザがレポートを出す前に検知する。
  2. より高速な原因の発見・・・環境の学習を行い、より高速に原因を分析できる。
  3. 少ない偽陽性の検出・・・データのコンテキストを理解し、偽陽性の検出を減らす。

いくつか魅力的な特徴が上がっています。
しかし、私の考える最も良い点はプログラミングレスであり、かつ数式を意識する必要がない点だと思います。
そのため、なんとなく異常検知に取り組みたいと考えている人も、複雑な数式を学ぶ必要はなく、Prelertを使って異常検知できます。
また、Prelertは教師なし学習のため、予め教師データの異常をラベリングする必要がないことも特筆すべき点だと思います。

Prelertでは、次のような画面で異常を検知することができます。
後ほど詳細を記載しますが、白 → 青 → 黄 → オレンジ → 赤と、赤に近いほど異常度合いが高いことを示しています。

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

Prelertのインストール

公式サイトからのダウンロード

PrelertのBeta版を公式サイトからダウンロードすることができます。
Prelert behavioral analytics platform: Home

今回はトップページにあった「Behavioral Analytics for the Elastic Stack Beta」のFree Trialを試します。
Free Trialを行なうにあたって登録が必要となります。登録するとインストーラがダウンロードでき、また14日間の試用ライセンスキーがメールで届きます。

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

インストール

Prelertのインストールは、基本的にインストーラーに従うだけで完了しました。
途中ライセンスキーを求められるため、メールで届いているものを利用します。

このインストーラによりインストールされるプロダクトは次の通りです。

  • Prelert Engine API version: 2.1.2
  • Prelert analytics version: 6.3.1
  • Kibana version: 4.6.1
  • Elasticsearch version: 2.4.0

ちなみにPrelertをインストールすると、OS起動時にこれらのプロダクトが起動します。
私は別のElasticsearchを起動していて、うっかり同じポート番号を使ってしまっており、起動に失敗しました。
Windows環境では自動起動のサービスを「Shutdown Prelert Engine Service」でOFFにすることができます。

起動確認

Windows環境では「Start Prelert Engine Service」を実行すると、elasticsearch、kibanaが起動します。
kibanaの画面を見てみましょう。
http://localhost:5601/」へアクセスをすると、PluginにPrelertがあることが分かります。
f:id:acro-engineer:20161029175028j:plain

Prelertを開くと、次のような画面になります。
f:id:acro-engineer:20161029175035j:plain

無事にインストールできているようです。

実際に異常検知をやってみる。

データ投入

では実際に異常検知をやってみましょう。
今回は異常検知の対象データとして、Numenta Anomaly Benchmark(NAB)にある、CPU使用率のデータを利用しました。

次のようなデータです。時間とCPU使用率が列挙されています。

timestamp value
2014-05-14 01:14:00 85.835
2014-05-14 01:19:00 88.167
2014-05-14 01:24:00 44.595

このデータをKibanaで可視化すると、次のようになります。

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

あぁなんか見るからに異常値が・・・みたいなことは、気づかないのが大人です。


NABのデータはcsv形式で提供されているため、logstash2.4.0を使ってElasticsearchに投入しました。
参考までに、Elasticsearch上に作ったマッピング定義と、Logstashの設定を掲載しておきます。

マッピング定義

データを投入する前に、Elasticsearch上でマッピング定義を作っておきました。

{
  "mappings": {
    "_default_": {
      "_all": {
        "enabled": true,
        "norms": {
          "enabled": false
        }
      },
      "properties": {
        "timestamp": {
          "type": "date",
          "format": "YYYY-MM-dd HH:mm:ss"
        },
        "value": {
          "type": "double"
        }
      }
    }
  },
  "settings": {
    "index.refresh_interval": "5s"
  },
  "template": "cpu_utilization_asg_misconfiguration"
}
Logstashを使ったデータ投入

Logstashのconfファイルは次の通りです。

input {
   stdin{}
}

filter {
    csv {
        columns => ['timestamp', 'value']
    }

    date {
        match => [ "timestamp", "YYYY-MM-dd HH:mm:ss" ]
        timezone => "UTC"
    }
}

output {
    elasticsearch {
        hosts => ["localhost:9200"]
        index => "cpu_utilization_asg_misconfiguration"
    }
}

この設定とtypeコマンドを使ってデータを流し込みました。

Prelertを使った異常検知の実行

ではPrelertで異常検知を行なってみます。

Jobの作成

まず異常検知するためのJobを作成します。最初にデータソースを選択します。
今回はElasticsearchにデータを保存しているので「Elasticsearch server」を選択しました。
f:id:acro-engineer:20161029175202p:plain

次にindexやtype、日付フォーマットなどを指定します。
f:id:acro-engineer:20161029175226j:plain
indexは一つしか選べませんば、typeは複数選べますね。

Jobの詳細設定

続いてJobの詳細を設定します。
タブの中から「Analysis Configuration」を選んで異常検知の設定をします。

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

まずbucketSpanは「5minutes」とします。
bucketSpanは集約期間を示しており、たとえば5minutesとした場合は、5分間での平均や合計を用いて検知することになります。


次に「Add Detector」から、異常検知のルールを追加します。
今回はfunctionにmean(平均)、fieldNameにvalueを設定しました。

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

それぞれのパラメータの意味は次の通りです

  1. function: 検知に用いる集計関数(平均や合計)
  2. fieldName: 検知の対象となるフィールド

これで、5分間の平均値が異常な値になった場合に検知できるようになります。
ここまでで、異常と判断する閾値や、アルゴリズム、パラメータなどを設定していないあたりがポイントですね。


これで、Saveを押すと異常検知アルゴリズムの設定は完了です。
保存時に「No Influencers」と警告が現れますが、今回は設定しないので、力強く「OK」を押しました。

そして「Start Scheduler」を押して、検知の対象とするデータの範囲(開始時間、流量時間)を指定します。

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

これでStartを押すとJobが動き出し、異常検知のスコアが計算されます。
しばらく待って完了したら、異常検知の処理は完了です。

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

今回のデータ量であれば、数秒程度で処理は終わりました。

Prelertの画面説明

それでは異常検知の結果を見てみましょう。

画面の上の方にタブがありますが、それぞれのタブでは次のような情報の閲覧、管理ができます。

画面 機能概要
Jobs 異常検知タスクを管理する画面
Summary View 異常検知の概要を見る画面
Explorer 詳細に異常検知の概要を見る画面
Connections Exploere画面に出ているアラート一覧を、influencerごとにまとめた画面
Supports ElasticsearchのVersion、サポート情報が書いてある画面

それぞれの画面を見ていきましょう。ただしConnectionsは今回は扱いません

Jobs

Jobsは、Jobに対する操作や情報を確認することができる画面です。

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

それぞれのカラムは、次のことを示しています。

カラム 概要
Search Name 設定したJobの名前
Description 設定したJobの説明
Processed records どのくらいのデータを処理したか
Memory status メモリの状態
Job Status Jobの状態
Latest timestamp 処理完了したデータで最も遅い時間
Actions Jobに対するアクションが記載されています。
左から順番に、Jobの開始、結果確認、Exprolerの確認、Jobの編集、複製、削除となっています。
Summary View

Summary Viewは、結果の概要を色分けして示す画面です。
時間ごとの異常度合いを色で示しており、白 → 青 → 黄 → オレンジ → 赤 と、赤に近いほど異常度合いが高いことを示しています。

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

Explorer

Explorerは詳細を確認する画面です。
Explorer画面のAnomaly timelineでは、Detectorの集約期間ごとの異常値を表示します。
また、Anomaliesは画面に表示されている異常検知の値をジャーナル形式で表示しています。
このジャーナル形式から具体的な値や検出位置を確認することができます。

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

今回投入したデータは、NAB/known_labels_v1.0.json at master · numenta/NAB · GitHub の情報によると、「2014-07-12 02:04:00.000000」と「2014-07-14 21:44:00.000000」に異常があるようです。
さて、Prelertの実行結果はと言うと、Summary ViewやExplorerの図で分かる通り、2014年7月15日付近(右端)の色が変わっており、うまく検知できているようです。

このように、Prelertを使うと簡単な操作でデータから異常を検知することができます。

最後に

Prelert、いかがでしたでしょうか?
Prelertを使うと、Elasticsearchに入っているデータに対し、プログラミングレスで異常検知と可視化ができます。
これで、Elasticsearchがますます便利になりますね!

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


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

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

SORACOM Beam のアノ機能追加に感動しました!

これはSORACOMリリース1周年記念リレーブログ10/31分です。

blog.soracom.jp

山下@YamaHaruka925です。
10月に開催されたSORACOM UG#4に参加した、SORACOMさんのソリューションパートナーであるAcroquestで働く女性エンジニアで、IoTプラットフォーム開発やってます。
お酒をこよなく愛するリケジョです。(リケジョブログも書いてます^^)
SORACOM UGで熊崎さんとお話ししてたら、楽しくお酒を飲んで酔った勢いで、リレーブログ参戦が決定!

f:id:acro-engineer:20161028112855j:plain:w500

今回は、最近体験した「え!?こまった!」を解決してくれたSORACOMさんのアップデートについて書いてみようかなと。

SORACOM Beamがつながらないが原因不明。。。

AcroquestではIoTアプリケーションプラットフォーム「Torrentio」を提供してるわけですが、相談に来られる方々は、やっぱり、センサーからデータ分析・可視化まで一貫して提供してほしい!!という人が多いので、SORACOMさんやその他パートナー企業さんのお力を借りて、トータル提供する流れになります。


そんなある日。
SORACOMのBeamも使用した実証検証を実施することに。

いざ、設定も完了し、データ送信検証開始!

・・・つながらない。

通信できていないようすだけど、エラーも出力されない。
Beamの設定が悪いのか?
はたまたデータ受付側が悪いのか?
送っているデータに不備があるのか?

・・・さっぱりわからない。

手探りでデバッグ、、、なかなか大変でした(^^;

そんなとき、新機能追加の朗報が!

「新機能:SORACOM Beam / Funnel のエラーログが確認できるようになりました」

blog.soracom.jp


ということで、

SORACOM Beamでエラーログの確認、やってみた

構成

OpenBlocks IoT EX1に、SORACOM SIMを挿して、
SORACOM Beamを利用してAWS API Gatewayに転送します。
AWS API Gatewayからは、受け取ったデータをそのまま返却します。
f:id:acro-engineer:20161028133211p:plain:w600


AWS API Gatewayの設定は、POSTメソッドで簡単にするために認証なしを採用。
f:id:acro-engineer:20161031011935j:plain


AWS API Gatewayの後段には、Lambdaを置き、うけとったデータをそのまま返却するスクリプトを書く。
f:id:acro-engineer:20161031012119j:plain


設定ができたら、ステージにデプロイし、URLをgetします。
このURLが、SORACOM Beamの転送先に設定するURLになります。
f:id:acro-engineer:20161031011945j:plain


SORACOM Beamの設定はこんな感じ。
f:id:acro-engineer:20161031012014j:plain


エントリポイントは、「http://beam.soracom.io:8888/test
転送先には、上記で作成したAWS API GatewayのURLを指定しています。

エラーログ確認方法

エラーログは、SORACOMコンソールのサイドメニュー「ログ」から確認できます。
f:id:acro-engineer:20161031005309j:plain
f:id:acro-engineer:20161031005325j:plain

SIMのIMSIを入力することで、エラーログを絞り込んで表示することができます。


通信して検証

まずは、Beamを使って正常に通信。

$ curl -XPOST http://beam.soracom.io:8888/test -d '{"key":"value"}'
{"key":"value"}

API Gatewayから、送ったデータがそのまま返ってきます。
このとき、エラーは発生していないので、SORACOMコンソールのログ表示を見ても、空っぽ。



つぎに、誤ったURLで送信してみましょう。

$ curl -XPOST http://beam.soracom.io:8888/xxxx -d '{"key":"value"}'
{"message":"Beam configuration for http://beam.soracom.io:8888/xxxx is not found"}

エラーメッセージが返ってきて、「URLがみつからない」ということが一目瞭然。
SORACOMコンソールのログを確認してみると、
f:id:acro-engineer:20161031005913j:plain

エラーログが表示されている!!
これがあれば、リモートで実施している検証でも、エラーをトレースしてデバッグできる!

「便利!!!」



他のエラーも同様に、レスポンスでエラーメッセージが返ってくるとともに、
SORACOMコンソールからログが確認できます。

【メッセージのフォーマット謝り】

$ curl -XPOST http://beam.soracom.io:8888/test -d 'test message'
{"message":"Could not parse request body into json: Unrecognized token \'test|' was expecting\'null\',\'true\',\'false\' or NAN\n at [Source: [B@c9e04ec; line: 2, column: 6]"}

【認証不正】

$ curl -XPOST http://beam.soracom.io:8888/test -d '{"key":"value"}'
{"message":"Missing Authentication Token"}

SORACOMコンソールのログはこんな感じ。
f:id:acro-engineer:20161031005933j:plain

エラーコードがコンソールから確認できるので、リモートでも何が悪いかの推測が立ちますね。

要望に迅速に対応してもらえるのはありがたい!

このBeamのエラーログ取得機能も、ユーザーからの声を聞いて、
機能追加となったとのこと。

私自身、新機能追加の1週間ほど前に苦労していた内容でした。
実際にBeamを設定し、デバイスにSIMを挿して検証しましたが、実はデバイス側での送信先指定が誤っており、通信ができていなかった。。。
なんてミスをして、検証やり直し。。。なんて苦い思い出が。

なので、今回の機能追加はとてもとてもありがたい。

なので、メジャーなA~Gのサービス追加のような機能追加ではありませんが、このようなユーザの要望に迅速に対応して、サービスに反映している部分こそ、SORACOMさんの素晴らしさだと思いました。

バックエンドで対応してくださっているSORACOMのエンジニア/サポートのみなさん、ありがとうございます!!!

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


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

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

Elastic Stack 5.0.0 GAリリース! 早速インストール!! #elasticsearch

Hello world, @ です。
少し肌寒い日が続きますが、皆さんいかがお過ごしでしょうか。
寒いのは決して僕のせいではないからね、そう周りに言い聞かせながら生き抜く日々です。


さて、
ついにElastic Stack 5.0.0のGA版がリリースされました!!
https://www.elastic.co/jp/blog/elastic-stack-5-0-0-released

既にリリースされたalpha版やRC版などを触っていますが、2.x系から新機能が追加されただけでなく、性能や安定性、またユーザビリティが向上している体感があり、積極的にこの新版を使っていきたいと思っているところです。

Elastic Stack 5.0.0の新機能

公式ブログでもいくつか紹介されていますが、2.xから5.0ではピックアップしきれないほどの変更点があります。私なりに重要だと思っている新機能をいくつか紹介します。

Elasticsearch

https://www.elastic.co/blog/elasticsearch-5-0-0-released

  • 大幅な性能改善
  • Ingest Nodeにより、これまでLogstashが行なってきた加工処理ができるようになった
  • Stringの代わりにText/Keywordという型が導入された

性能改善によりKibanaのレスポンスが体感で変わりました。またIngest NodeのおかげでLogstashを使わない構成も取れるようになりました。特に小さな規模で動かす時には、Logstashを外すことも検討できそうです。

また、TextとKeywordについて、Textは単語分割されたいわゆる「analyzed」なフィールド、Keywordは単語分割されていない「not_analyzed」なフィールドです。Elasticsearchにデータを入れると、デフォルトで、このTextとKeywordの両方が保存されるようになりました。
2.x系を使っていた頃には「not_analyzedにしてなかったせいで、上手く検索できない!」とか「後からnot_analyzedに変更するのが大変すぎる!」なんて絶望したことがありましたが、5.0ではそんな目に遭うこともありません!

Kibana

https://www.elastic.co/blog/kibana-5-0-0-released

  • UIが大幅に変更された
  • SenseとTimelionが最初から組み込まれるようになった

Kibanaは見た目が一新され、グラフの表示エリアが広がりました。またSenseが「Console」という名前になって、最初から入る「Dev Tools」のひとつになりました。ほぼ必須のプラグインだったので、これも助かります。

Logstash

https://www.elastic.co/blog/logstash-5-0-0-released

  • モニタリングAPIが追加され、プロセスの情報や、パイプラインの状態などを取得できるようになった
  • 設定ファイルの自動再読み込みができるようになった(オプション)

Logstashの設定を行なう際、これまでは、設定ファイルを書いて、Logstashを立ち上げ(数秒掛かる!)、動作確認して、間違ってたら設定ファイルを直して、またLogstashを立ち上げ直して(だから数秒掛かる!)、という作業を繰り返さなくてはいけませんでした。
バージョン5.0では、設定ファイルの再読み込み機能を有効にすることで、Logstashを再起動しなくとも、設定が反映できるようになりました。特に初期構築時などに嬉しい機能ですね。

またLogstashにモニタリングAPIが追加されたことで、リソース情報などが取れるようになり、今後、X-Packのモニタリング機能でLogstashもモニタリングできるようになりそうです。

Beats

https://www.elastic.co/blog/beats-5-0-0-released

  • Metricbeatが登場。Topbeatの機能を持つほか、Apache、nginx、MySQL、MongoDBなどのメトリクスを収集できる
  • データを直接Kafkaに送信できるようになった
  • 不要なデータを送らないようフィルタできるようになった
  • Kibanaのダッシュボードを作るためのスクリプトが同梱されるようになった

最も大きな変更は、Kafkaにデータを送信できるようになったことでしょう。Kafkaを用いて情報収集の仕組みを安定化する際、システム構成をシンプルにできるようになりました。
また、Metricbeatにも注目です。Metricbeatは情報をpullで取りに行くエージェントで、今後も情報の取得先が増える見込みですし、自分でプラグインを書いて拡張することもできます。

Elastic Stack 5.0.0のインストール方法

それではElasicスタックのインストール手順を紹介します
5.0になってインストール周りが改善され、yumやapt-getを使ったインストールを行ないやすくなりました。
ここではAWS上のAmazon Linuxにインストールする想定で、手順を説明します。

事前準備

まずJava8(OpenJDK)をインストールします。
Elasticsearch 5.0からはJava 8以上が必要となり、またOpenJDKも正式サポートされるようになりました。

sudo yum update -y
sudo yum remove -y java-1.7.0-openjdk
sudo yum install -y java-1.8.0-openjdk-devel
sudo yum install -y java-1.8.0-openjdk-debuginfo --enablerepo=*debug*

なおOpenJDKは -devel を入れないとjinfoやjstatなどのコマンドが入りませんし、 -debuginfo を入れないとjinfoやjstatで情報を取れないので、これらをセットで入れておきましょう。これが入ってないと、トラブルシューターが激おこですよ。


続いて、yumでインストールできるようにするため、GPGキーのインポートと、リポジトリの定義を作成します。

sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo vi /etc/yum.repos.d/elastic.repo

elastic.repo の内容は次の通りです。

[elasticsearch-5.x]
name=Elasticsearch repository for 5.x packages
baseurl=https://artifacts.elastic.co/packages/5.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md

これまでのバージョンではyumリポジトリがElasticsearch、Kibanaなど、プロダクトごとに分かれていたのですが、5.0ではこれが一つに統合されたため、スタック全体のバージョンを統一しやすくなりました。
ここまで済めば、後は各プロダクトをyumでインストールしていきます。

ElasticsearchとKibanaのインストール

yumコマンドでElaticsearchとKibanaをインストールします。

sudo yum install -y elasticsearch
sudo yum install -y kibana

Kibanaはインストール直後の状態ではlocalhostからのみアクセスできる状態となっているため、AWSなど外部のサーバにインストールした場合には、publicアクセスできるように設定を変える必要があります。

sudo vi /etc/kibana/kibana.yml

次の設定を追加します。

server.host: "0.0.0.0"


また、Elasticsearchも同様にlocalhostからのみアクセスできる状態なので、もし別サーバにBeatsやLogstashを置いてアクセスする場合には、同一ネットワーク内からアクセスできるよう設定する必要があります。

sudo vi /etc/elasticsearch/elasticsearch.yml

次の設定を追加します

network.host: _local_, _site_

ローカルホスト(_local_)と、同一ネットワーク帯(_site_)からのアクセスを許可する設定です。


ここまで済んだら、ElasticsearchとKibanaを起動します。

sudo service elasticsearch start
sudo service kibana start

起動後にブラウザで http://(サーバのアドレス):5601/ にアクセスして、Kibanaの画面が出たら成功です。


ちなみに画面遷移時に「Index Patterns: Please specify a default index pattern」というエラーメッセージが出るので、とりあえず「.kibana」をデフォルトindexにしておけば警告はなくなります。
f:id:acro-engineer:20161027124719p:plain

4.x系のKibanaを使っていた人にとっては、ずいぶん変わったなぁという印象ではないでしょうか。

Beatsのインストール

続いて、Beatsをインストールします。
ここでは例としてMetricbeatによるリソース情報の収集と、PacketbeatによるKibanaへのアクセス情報の収集を行います。


yumコマンドでインストールします。

sudo yum install -y metricbeat
sudo yum install -y packetbeat


続いて、PacketbeatでKibanaに対するHTTPアクセスを収集できるよう設定します。
設定ファイルを書き換え、KibanaがHTTPアクセスに使うポート番号を指定します。

sudo vi /etc/packetbeat/packetbeat.yml

packetbeat.yml

packetbeat.protocols.http:
  ports: [5601]

これで5601ポートを通るパケットの情報が解析され、Elasticsearchに送信できるようになります。

なおMetricbeatはインストールした直後の状態で、サーバのリソース情報を取得できるようになっているため、今回はこのまま利用します。


ところで、Beatsで取得した情報を可視化するためにはKibanaでダッシュボードを作成する必要があるのですが、Beatsにはサンプルのダッシュボードを作るためのスクリプトが用意されており、これを使ってダッシュボードを作ることができます。
別に、情報を収集してからダッシュボードを作っても構いませんが、今回は先に作っておきます。次のコマンドでダッシュボードを作成します。

cd /usr/share/metricbeat
sudo ./scripts/import_dashboards
cd /usr/share/packetbeat
sudo ./scripts/import_dashboards


設定が終わったら、Beatsをそれぞれ起動します。

sudo service metricbeat start
sudo service packetbeat start


Beatsを起動した後、しばらくKibanaで操作などしていれば、アクセス情報やリソース情報などがElasticsearchに蓄積されます。
蓄積された情報を見るため、Kibanaにアクセスして「Dashboard」の「Open」から、ダッシュボードを開いてください。


MetricbeatのProcessダッシュボードは、こんな感じで閲覧できます。
f:id:acro-engineer:20161027124800p:plain


PacketbeatのHTTPダッシュボードは、こんな感じです。
f:id:acro-engineer:20161027124807p:plain


こういうダッシュボードがすぐに出来るのは、本当に手軽で強いなと思いますね。

Logstashのインストール

最後に、Logstashも試してみましょう。
Logstashを用いてKibanaのログを読み込み、Elasticsearchに転送します。


まずyumコマンドでLogstashをインストールします。

sudo yum install -y logstash


続いてLogstashの設定ファイルを作り、Kibanaのログファイルを読みこむようにします。

sudo vi /etc/logstash/conf.d/kibana.conf

このような内容にします。

input {
  file {
    codec => "json"
    path => "/var/log/kibana/kibana.stdout"
    start_position => "beginning"
    sincedb_path => "/var/log/logstash/since_kibana"
  }
}

output {
  elasticsearch {
    index => "kibana_access-%{+YYYY.MM.dd}"
    document_type => "%{type}"
  }
}

KibanaのログはJSON形式で出力されているため、codecにjsonを指定さえすれば、特にfilter処理を書く必要はありません。


設定が終わったら、Logstashを起動します。起動コマンドが他のサービスと少し異なっている点に注意してください。

sudo initctl start logstash


これで、Elasticsearchのkibana_access-(日付) というindexにアクセス情報が蓄積されます。
この情報を見るために、まずKibanaのメニューの「Management」からIndex patternを追加します。名前は「kibana_access-*」とすると良いでしょう。
f:id:acro-engineer:20161027124813p:plain


これでindexパターンを作成すると、Discoverからindexに蓄積された情報を確認することができるようになります。
f:id:acro-engineer:20161027124832p:plain


ここからさらに詳しい可視化をしたい場合には、Kibana上でグラフやダッシュボードを作る必要があります。

ちなみにここではLogstashで読み込む方法を紹介しましたが、実は今回のパターンではLogstashを使う必要はなく、Filebeatだけで済ませることができます。というのもKibanaのログはJSON形式で出力されており、Filebeat 5.0の「1行 1JSON」形式のファイルを読み込む機能を使えば、きちんと処理できるためです。
Logstashはもう少し複雑なログの解析や、転送先が複数ある時などに使うと良いでしょう。

まとめ

Elasticスタック5.0は、新機能追加に加え、性能や安定性、ユーザビリティなどが向上しています。
yumでのインストールもさらに簡単になり、導入しやすくなりました。

まだ使っていない人は、ぜひこの機会に挑戦してみてください。
とは言え、まだ出て間もないですからね、実案件への導入は計画的に!

告知

2016年11月18日(金) に、Spring Day 2016というイベントが東京で開催されます。
私も「Let's Visualize Your Spring Cloud Applications!」というタイトルで、Elasticスタックを使ったマイクロサービスの可視化について具体的な手法や、アーキテクチャなどを紹介する予定です。ぜひご参加ください!
springday2016.springframework.jp


それでは、
Enjoy elastic, see you!


AcroquestではElasticsearch、Logstash、Kibanaの無償ハンズオンセミナーを開催しています。


当社公認エンジニアがElasticsearchの基礎から、商用プラグインの利用、
実データを用いた可視化・分析までを、ハンズオン形式で説明致します。
ハンズオンでは最新バージョンであるElasticスタック5.0を利用します。


詳細・参加応募はこちらからお願いします。
www.acroquest.co.jp

Data Analytics Showcaseで登壇してきました!

こんにちは @です!

先日、恵比寿にて開催されたData Analytics Showcaseにて、私と弊社の@が登壇してきました。
www.db-tech-showcase.com


それぞれ、次のテーマで発表しました。
@ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」を用いた販売データの関連分析~
@:デジタルデータの可視化基盤「ENdoSnipe」を使った、システムトラブルの未然防止、経営判断につながる可視化の実践

ビッグデータを高速に検索・分析する「Elasticsearch」~新プラグイン「Graph」を用いた販売データの関連分析~

私(@)は、人気急上昇中の全文検索エンジンElasticsearchの機能を利用したデータ分析について、発表しました。
これまでこのブログでも多く取り上げているので皆さんご存知かと思いますが、
Elasticsearchは、ログ収集・加工ツールであるLogstash、データ可視化ツールであるKibanaと組み合わせて使うことで
ビッグデータを高速処理するデータ分析基盤として力を発揮します。

今回は、Kibana に追加された Graph というプラグインに特にフォーカスしてお話しさせていただきました。
Graphはデータ間の関連を可視化するためのプラグインになっていて、特徴的な関連を一目で見つけることができます。

今回はコンビニエンスストアの販売データを利用し、分析を行いました。
どのお菓子が、どの年代・性別に売れているのか等、すぐにわかります^^

詳細な内容については、発表資料をご覧ください。

www.slideshare.net


デジタルデータの可視化基盤「ENdoSnipe」を使った、システムトラブルの未然防止、経営判断につながる可視化の実践

この講演では、デジタルデータの可視化基盤であるENdoSnipeの紹介を行い、
KPI/KRIといった指標の相関関係、その関係を見つけるにはどうするか説明しました。
そして、ENdoSnipeの基盤をElasticsearchになぜおきかえたのか、
膨大な系列のデータから相関関係をどう発見していくのかについて説明しました。

興味ある方は、ぜひ発表資料をご覧ください。

www.slideshare.net


どちらのセッションも終了後に多くの質問があり、
Elasticsearchを用いたデータ分析に対する注目度の高さを感じた一日でした^^

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


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

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

Kubernetesクラスタ環境を構築してDashboardで見える化を試してみた

こんにちは。

ポケモンGOみなさんやってますか?私は開始1週間くらいで一度止めてしまったのですが、周りが続けているのに触発されて再開。先日ようやくレベル20まで上がりました。

どうも、@です。

さて、今回はKubernetesについてです。
最近Kubernetes(以下k8s)を使うと決めて、k8sの環境構築をしています。
その際、公式のドキュメントやさくらのナレッジさんの記事が非常に参考になったのですが、OSやk8sなどのバージョンが一部異なるため、いろいろと試行錯誤を重ねることになりました。

kubernetesによるDockerコンテナ管理入門 - さくらのナレッジ

Kubernetes - What is Kubernetes?

そこで、同じような環境構築をしている人に、一例として少しでも参考になればと思い、k8sクラスタ環境の構築~Dashboardのインストールまでをまとめました。

0. 環境と条件

  1. 物理マシンでMaster1台、Node2台を用意する。
  2. 各マシンのOSはCentOS 7.2を利用する。
  3. k8sのバージョンは1.2系を利用する。(yum installでインストール可能な版)
  4. プライベートなDocker Registryを立てる(Docker HubにイメージをPushしたくない)
  5. k8s-dashboardをインストールし、Webブラウザからクラスタ管理をできるようにする。

今回のMaster/Nodeの構成では、次のIPアドレスをそれぞれ設定しています。

No マシン IPアドレス
1 Master 192.168.98.47
2 Node1 192.168.98.48
3 Node2 192.168.98.49

またMasterとNodeに今回インストールするものをまとめると次のようになります。

No マシン インストール
1 Master Kubernetes, etcd, flannel, docker-registry
2 Node Kubernetes, flannel, docker

1. 共通の設定

k8sはノード間の通信をする際に、マシンのホスト名を利用するようです。そこで、各マシンには、/etc/hostsに自マシンのIPアドレスとホスト名を登録しておきましょう。(このホスト名は後々k8sの設定で使うことになります。)

192.168.98.47 master

2. Masterの設定

必要なサービスをインストールします。

$ sudo yum install kubernetes
$ sudo yum install etcd
$ sudo yum install flannel
$ sudo yum install docker-registry

※etcd、flannel、docker-registryは他サイトでいくらでも説明されていると思いますので、ここでは説明を割愛します。

2.1. k8s関連の設定

サービスのインストールが完了したら、各種設定ファイルを変更します。全部載せると長いので、変更点のみ載せています。まずはk8sの動作に関する設定ファイルの編集です。Masterサーバとして自マシンのIPアドレスを設定します。
[/etc/kubernetes/config]

#KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_MASTER="--master=http://192.168.98.47:8080"

kubeletには、自マシンのホスト名(/etc/hostsに記載したもの)と、API Serverの設定を記述します。
[/etc/kubernetes/kubelet]

#KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=master"

#KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_API_SERVER="--api-servers=http://192.168.98.47:8080"

※このKUBELET_HOSTNAMEの設定が、/etc/hostsに最初に登録したホスト名と同じである必要があります。

次に、API Serverの設定です。今回はローカルでの通信を想定しているので、--insecure-bind-addressを用いてAPI Serverのアドレスは指定します。
[/etc/kubernetes/apiserver]

#KUBE_API_ADDRESS="--insecure-bind-address=127.0.0.1"
KUBE_API_ADDRESS="--insecure-bind-address=192.168.98.47"

#KUBE_ETCD_SERVERS="--etcd-servers=http://127.0.0.1:2379"
KUBE_ETCD_SERVERS="--etcd-servers=http://192.168.98.47:2379"

APIServerへのアクセス用にキーの作成も必要になるので、ここで準備しておきます。

$ sudo openssl genrsa -out /etc/kubernetes/serviceaccount.key 2048

[/etc/kubernetes/apiserver]

#KUBE_API_ARGS=""
KUBE_API_ARGS="--service_account_key_file=/etc/kubernetes/serviceaccount.key"

[/etc/kubernetes/controller-manager]

#KUBE_CONTROLLER_MANAGER_ARGS=""
KUBE_CONTROLLER_MANAGER_ARGS="--service_account_private_key_file=/etc/kubernetes/serviceaccount.key"

これでk8sの設定は完了になります。

2.2. etcdの設定

次はetcdの設定を行います。configファイルでetcdが外部からのアクセスを許可するように編集します。

[/etc/etcd/etcd.conf]

#ETCD_LISTEN_CLIENT_URLS="http://localhost:2379"
ETCD_LISTEN_CLIENT_URLS="http://0.0.0.0:2379"

#ETCD_ADVERTISE_CLIENT_URLS="http://localhost:2379"
ETCD_ADVERTISE_CLIENT_URLS="http://0.0.0.0:2379"

2.3. Dockerの設定

最後にDockerの設定になります。今回Docker Registryはローカル通信で行うので、INSECURE_REGISTRYの設定が必要になります。またREGISTRYとしてMasterサーバのIPアドレスを指定します。
[/etc/sysconfig/docker]

#ADD_REGISTRY='--add-registry 127.0.0.1:5000'
ADD_REGISTRY='--add-registry 192.168.98.47:5000'

# INSECURE_REGISTRY='--insecure-registry'
INSECURE_REGISTRY='--insecure-registry 192.168.98.47:5000'

ここまでで主な設定は完了になります。

etcdctlでflannelが利用するネットワーク周りの設定をしておきます。
[注意]この設定はCentOS 7.2用の設定です。よく他のページで紹介されている「/coreos.com/network/config」というパスは、CoreOS用の設定になります。

$ sudo etcdctl mk /atomic.io/network/config '{"Network":"172.17.0.0/16"}'

2.4. 関連サービスの起動とサービス登録

ファイルの更新が完了したら、サービスの立ち上げと登録を行います。

$ sudo systemctl restart kube-apiserver
$ sudo systemctl restart kube-controller-manager
$ sudo systemctl restart kubelet
$ sudo systemctl restart flanneld
$ sudo systemctl restart etcd
$ sudo systemctl restart docker
$ sudo systemctl restart kube-scheduler
$ sudo systemctl restart kube-proxy
$ sudo systemctl enable kube-apiserver
$ sudo systemctl enable kube-controller-manager
$ sudo systemctl enable kubelet
$ sudo systemctl enable flanneld
$ sudo systemctl enable etcd
$ sudo systemctl enable kube-scheduler
$ sudo systemctl enable kube-proxy

3. Nodeの設定

まず必要なモノのインストールです。

$ sudo yum install kubernetes
$ sudo yum install docker
$ sudo yum install flannel

3.1. k8s関連の設定

次にk8s関連の設定ファイルの編集です。Master-Node間の通信のため、KUBE_MASTERにはMasterサーバのIPアドレスを指定します。
[/etc/kubernetes/config]

#KUBE_MASTER="--master=http://127.0.0.1:8080"
KUBE_MASTER="--master=http://192.168.98.47:8080"

対象となるマシンのKubeletのIPアドレスを指定します。またKUBELET_HOSTNAMEには/etc/hostsに指定した名前を使ってください。KUBELET_API_SERVERにはAPI Serverをインストールしたマシン(今回の場合はMasterのマシン)のIPアドレスを記述します。
[/etc/kubernetes/kubelet]

#KUBELET_ADDRESS="--address=127.0.0.1"
KUBELET_ADDRESS="--address=192.168.98.48"

#KUBELET_HOSTNAME="--hostname-override=127.0.0.1"
KUBELET_HOSTNAME="--hostname-override=node1"

#KUBELET_API_SERVER="--api-servers=http://127.0.0.1:8080"
KUBELET_API_SERVER="--api-servers=http://192.168.98.47:8080"

※192.168.98.47はMasterのIPアドレス、192.168.98.48はNodeのIPアドレスになります。

3.2. flannelの設定

k8sのMaster-Node間の通信を実現するためにFlanneldを利用しています。FLANNELD_ETCDには、ETCDをインストールしたマシンのIPアドレスを記述します。
[/etc/sysconfig/flanneld]

#FLANNEL_ETCD="http://127.0.0.1:2379"
FLANNEL_ETCD="http://192.168.98.47:2379"

3.3. Dockerの設定

最後にDockerの設定になります。こちらにも、INSECURE_REGISTRY、ADD_REGISTRYの設定が必要になります。
[/etc/sysconfig/docker]

#ADD_REGISTRY='--add-registry 127.0.0.1:5000'
ADD_REGISTRY='--add-registry 192.168.98.47:5000'

# INSECURE_REGISTRY='--insecure-registry'
INSECURE_REGISTRY='--insecure-registry 192.168.98.47:5000'

3.4. 関連サービスの起動とサービス登録

ファイルの更新が完了したら、サービスの立ち上げと登録を行います。

$ sudo systemctl restart kubelet
$ sudo systemctl restart flanneld
$ sudo systemctl restart docker
$ sudo systemctl restart kube-scheduler
$ sudo systemctl restart kube-proxy
$ sudo systemctl enable kubelet
$ sudo systemctl enable flanneld
$ sudo systemctl enable etcd
$ sudo systemctl enable kube-scheduler
$ sudo systemctl enable kube-proxy

同じ設定をもう一台のNodeマシンでも実施してください。(ホスト名とIPアドレスはマシンに合わせて変更してください)

4. 設定結果の確認

設定が完了したら、うまくMasterがNodeを認識しているか確認しましょう。kubectlコマンドをMasterマシンで実行すると確認ができます。

$ kubectl get nodes
NAME      STATUS    AGE
master    Ready     3d
node1     Ready     2d
node2     Ready     2d

上記のように出力されれば、一旦k8sの基本的な環境の設定は完了になります。

5. ダッシュボードのインストール

次にダッシュボードをインストールします。今回の環境はdokcer-registryをMasterに立てており、

  1. 開発環境でDockerイメージを作成
  2. Masterのdocker-registryにイメージをPush
  3. k8sにデプロイする際はNodeがdocker-registryからイメージをPull

という流れになります。

kubernetes-dashboardはdocke hubにimageが存在するため、次のように、開発環境にpullをしてきて、そのimageをMasterのregistryにpushします。
では、まずk8s-dashboardのローカルへのイメージの登録です。

$ docker pull gcr.io/google_containers/kubernetes-dashboard-amd64:v1.4.0
$ docker tag gcr.io/google_containers/kubernetes-dashboard-amd64:v1.4.0 192.168.98.47:5000/kubernetes-dashboard-amd64:v1.4.0
$ docker push 192.168.98.47:5000/kubernetes-dashboard-amd64:v1.4.0

これでDocker側の準備は整いましたので、k8s側でダッシュボードを作成します。すでにyamlファイルが公開されているので、そちらを取得し、中身をローカル用に変更してから作成します。

https://raw.githubusercontent.com/kubernetes/dashboard/master/src/deploy/kubernetes-dashboard.yaml

上記のファイルの中身を更新します。

        #image: gcr.io/google_containers/kubernetes-dashboard-amd64:v1.4.0
        image: 192.168.98.47:5000/kubernetes-dashboard-amd64:v1.4.0

        # - --apiserver-host=http://192.168.98.47:8080
          - --apiserver-host=http://192.168.98.47:8080

(最下に追記)
  externalIPs:
  -  192.168.98.47

このファイルをkubectlで読み込ませてダッシュボードを作成します。ダッシュボードはkube-systemというnamespaceを利用するので、事前にnamespaceを作成します。

$ kubectl create ns kube-system
$ kubectl create -f kubernetes-dashboard.yaml

以下のコマンドでdashboardのSTATUSがRunningになっていることを確認します。

$ kubectl get pods --all-namespaces
NAMESPACE     NAME                                    READY     STATUS    RESTARTS   AGE
kube-system   kubernetes-dashboard-4061540060-9gzk0   1/1       Running   0          2d

6. 結果の確認

問題なくdashboardのインストールができれば、以下のアドレスからダッシュボードが確認できるはずです。
http://192.168.98.47:8080/ui
f:id:acro-engineer:20161004083220p:plain

7. まとめ

今回k8sクラスタ環境を構築して、ダッシュボードのインストールを行いました。同じように嵌ってしまってなかなかインストールが進まない人は、ぜひ参考にしてみてください。また、よりよいやり方があるなど知っている人がいましたら、教えてもらえるとうれしいです。


それでは!

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


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

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

PyConJP2016に参加してきました!

こんにちは、@です。

なんと、私、先日PyConJPに参加してきました!
ちなみに、Python歴4年目にして初参加です。

実はこのカンファレンス知ってからずっと参加したいと思っていて
やっと参加することができました!

そこで参加したセッションや感想を書きました。

f:id:acro-engineer:20160923231415p:plain:w300:left

セッションについて

今回は全体的にデータを分析するセッションが多かったように感じますが
多種多様ですばらしいセッションの数々です。

今回、私が参加したセッションは次のとおりです。

1日目

2日目

  • PythonでもPythonじゃなくても使える汎用的なMicroservice実行環境
  • Pythonで実現する4コマ漫画の分析・評論
  • Pythonで入門するApache Spark
  • PythonではじめるOpenAI Gymトレーニング
  • Building a data preparation pipeline with Pandas and AWS Lambda

私の興味関心は仕事がらもあり、データ分析系が多いのですが
ところどころで自分が本来、関わりのないような領域も聞くことができて、
新鮮な気持ちといい刺激になり、とても良かったと思っています。

個人的には、「確率的ニューラルネットの学習と Chainer による実装」が特に面白かったです。

参加してよかったこと改善してほしいと思ったこと

参加してよかったこと

1.参加者同士の交流が盛ん
参加者同士の交流が盛んで、ポスターセッションや夜の懇親会など色々なところで
話すことができ、非常に楽しいカンファレンスです。

2.多種多様のセッション
様々なセッションがあるので、必ずといっていいほど、自分が関心のある
セッションを探すことができます。

3.おやつ
凄く想定外だったのですが、おやつの配布がありました。
疲れるタイミングでのおやつの配布だったので非常に良かったです。
おいしいお菓子の図です。

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

4.会場までの交通の便が良かった。
西早稲田駅だったので、個人的にも会場までの交通自体もよく
会場の場所もわかりやすかったので、行きやすかったです。

5.講演のビデオはあとで見ることができる。
講演のビデオについてですが、あとで見ることができます。
そのため、万が一見逃しても安心です。

PyCon Japan 2016 - YouTube

6.サポートが手厚い
このカンファレンス参加費が1万円です。
しかし、この1万円で朝食(2日間)、昼食(2日間)、おやつ(大事・2日間)、懇親会(1日目)が出ました。
(1日目の朝食は食いそびれましたがorz)
また、シャツや様々なグッズがついてきてお得感もあり、非常に満足しています。

改善してほしいと思ったこと

1.招待講演は混雑が予想されるので広い会場が良いです。
今回のカンファレンスでは招待講演で部屋に入れないといったことがあったので
予め混雑が予想されそうなセッションは広い部屋を使うと良かったと思います。

2.講演会場に電源を
会場の確保の話ですが、PC持っている人が多いので、電源があると嬉しいです。
休憩時間に行っても良いのですが、他のイベントもあって、電源エリアに行くのが難しいので・・

最後に

PyConJP凄く楽しかったです。
スタッフ、発表者、参加者、関係者の皆さん楽しいカンファレンスをありがとうございました!
来年も行くと思いますので、よろしくお願いします。

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


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

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