まめログ

Javaプログラマの歩み

Elastic{on} Tour Tokyo 2017に参加しました #elasticon

2017年12月14日 10:00~18:00に虎ノ門ヒルズで開催された、
Elastic{on} Tour Tokyo 2017に参加しました。

今年から有料イベントになりましたが、参加費の11000円は会社に負担してもらいました。

Elastic Stackは現在社内でも絶賛稼働中で、今年中に有料サブスクリプションの契約をするので、
その下調べを兼ねてという体です。
f:id:mamepika:20171216141801j:plain

コーヒーと紅茶、お菓子が用意されており、コーヒー3杯くらい頂きました!
クッキーも大変美味しかったです。
お弁当は今半の高級そうなやつでこれもまた美味。

基調講演

日本法人のカントリーマネージャーの方のお話。
日本チームは11人
取引先は100社を超えるとのこと。
今年中にうちも契約しますー!

CEOのShay Banonsさんからの講演ではこれからの予定など。

セキュリティアナリティクス

  • SIEM

アプリケーションのログ可視化だけでなく、SIEMとしてもElastic Stack活用していきたいので、
ここの機能が強化されるのは嬉しい限りです。

APM

Machine Learning

Elastic Cloud
GCP,AWS,Azure

Elasticsearch: Past,Present,&Future

日本のエバンジェリスト大谷さんのプレゼン。

1系、2系を使ってる人?という質問にパラパラと手が挙がってました。
5や6を使ってほしいとのことですw

Elasticsearch 5.0

2016/10リリース
2から5へ。
全てのプロダクトのバージョン番号を統一

数値に関する改善

  • metricbeatなどで数値データをElasticseachに送ることが増えた。
  • 数値の計算を高速化、使用ヒープを削減

安全第一

  • bootstrapチェック

起動時に設定値を確認し、設定が正しくない場合は起動ができない。
ヒープサイズの最小値、最大値が異なる場合など

  • OOMを極力出さない

より簡単に

  • Injest Node

Beatsから可視化するのが簡単に

Elasitcsearch 5.6

2017/9リリース
様々な改善

Elastic 6.0

悩みのタネ

  • ディスクの使用量

空白が多いデータも配列で一括で保持していたが。データの持ち方が変わった
5.Xの60%程度に圧縮可能に。
allフィールドをデフォルトで向こうに
各種データ登録に効果的な設定

トランザクションログという一意な番号を保持し、そのログをもとに復旧させる。

  • メジャーバージョンアップグレード

5.6.Xから6.latestへはローリングアップグレードが可能

Java high level REST Client
5.6でリリース
JavaのClientとElasticsearchのバージョンが違っても検索可能
CRUD&Searchをサポート

Elasticsearch6.1

2017/12/14 リリース
Index Splitting

Composite Aggregation

Adaptive Replica Selection

Scripted Similarities

Ingest and the Elastic Stack

Aaron Mildensteinさん。

Multiple Pipeline
設定を個別に記述できるように

ユースケース
ロギング

メトリクス

  • インフラ、コンテナ、データベース

セキュリティ

  • SecOps

JDBC input
JDBC filter

Kibana Deep Dive

アラート
Setting -> Wathcer

アクセス制御
ユーザロール追加
kibana dashboard only user

Spaces
ユーザやグループで閲覧、操作制御できたが
インデックスパターン、ダッシュボード単位などで制御が可能に。

SAML認証
サードパーティの認証プロバイダとの連携でSSOを実現

Saved Object API
ダッシュボード、ヴィジュアライゼーションなどをAPI経由で保存可能

Canvas

Kibanaはログ可視化のツールだけでなく、Elastic Stackの管理画面としての機能も提供していくイメージですね。

Elastic Stack on Azure

36リージョンで展開しているAzure

マーケットプレイス or GitHubのARMテンプレート

可用性セット99.95%
可用性ゾーン99.99%

Machine Learning Deep Dive

Rules Don't Scale

  • where do you set the thereshold
  • who updates the Rules
  • Flase positives are costly

・ダッシュボードから人の目で見て異常値を検知するのは難しい
・異常のしきい値もどの程度の値を設定すれば良いかを人が決めていくのは難しい
・常にデータは変化していくので一度きめたしきい値がずっと有効とは限らない
そこで機械学習を活用していく

2つの異常値を検知できる
これまでとは違う変化
他とは違う突出した変化

Elastic Cloud Deep Dive

AWSGCP上で提供。これからも増やしていく(Azureかな)

クラスタが増えると困ること

  • アップグレード
  • セキュリティ
  • バックアップ

LINE infra Security Log Platform And Analysis

セキュリティ用途でのElastic Stackの活用事例
とにかくシステム規模が半端ない!
後半は英語だったので雰囲気しか掴めませんでしたw

40以上のログを30000以上のデータソース
一日1TB!

ログのロスト、Elasticsearchのフリーズ、Kibanaのパフォーマンスダウンなど問題が顕在化

システム名:Monolith
Fluentd->Logstash
kafka
有料オプションを契約。
コレクター4台
パーサー5台
Elasticsearch20台
Kibana3台

リモートデスクトップ接続
SSH接続
などの状況を可視化

ダッシュボードを見るのは人の目。人の目には限界がある。
分析・検知は自動化したい。
そこでMachine Learning
普段使われてないPC、普段使用していないユーザからのリモートデスクトップ接続を検知できる。
アラートの精度が上がった。

KibanaのWebhookでLINEに連携
LINEを使う理由は
1. 夜でも担当者に連絡ができる
2. 休日でも担当者に連絡ができる

ソフトバンク・ペイメント・サービス 決済サービスの監視を支えるElastic Stack

私的に本日メインの発表。
同じサービスを提供している会社の事例は貴重です。

www.slideshare.net



誰にでも見やすいダッシュボード、障害検知の仕組み、
機械学習の検証から実践まで惜しみなく事例を紹介していただき、ありがとうございます。

オンライン決済サービスの監視

年間取扱高2兆1949億
トランザクション2億件

障害発生時に状況を素早く共有できていなかった。
システム部門-営業部門-加盟店

システムも営業も
「システムの状況をリアルタイムに把握したい」

Kibanaで「サービズ全体の状況をリアルタイムで可視化」

RDBに決済情報が格納されているので、
Logstash jdbc input pluginを1分間隔で実行しElasticsearchに投入

ダッシュボードを作り際に意識したこと
誰でも
どこでも
いつでも

決済手段ごと
OK・NGの比率
色を統一

職場のモニタに常時ダッシュボードを表示

KibanaのダッシュボードをSleniumとJnekinsでスクショ取ってSlackに通知

Machine Learning

毎月1日は与信枠開放の影響でトランザクションが増える。最初は検知していたが、4ヶ月目くらいから検知しなくなった。

対象加盟店のみで絞れば気づけるが、加盟店全体で見ると不正アクセスのNGが埋もれてしまう

障害時はほぼ検知
可視化しても人間では見つけられない埋没した情報も検知可能

気づき
母数の少ない決済手段の場合、1人のユーザが数回エラーを起こすだけで以上検知されてしまう

同じ周期で不正利用によるリクエストが来た場合、3周忌目くらいから学習され反応しなくなってしまう

Watcher JSONの設定が難しい つらい

不正利用の検知

複雑なMLジョブで不正利用を検知
クレカ不正使用の防止まで

しきい値
加盟店ごと、決済手段ごとに沢山のしきい値がある。しきい値が属人化しているのでMLで置き換えたい。

ビジネスデータの可視化

ヒートマップで営業担当の目標達成率を可視化

VELTRA 問い合わせ業務の自動化

日・中・英の問い合わせメールを自動ラベリング
システム名はイーグル

コンサルタントの稼働を減らしてエンジニアの稼働が増えては意味が無いので、Elastic Cloudを採用。

Elastic Stackの進化は凄まじく、追随していくだけでも難しいですが、
コミュニティがどんどん広がって情報共有が進むと、この辺が楽になると思うので、今後の発展に期待しています。
僕も本番稼働させたら事例の共有などしたいと考えています。

JJUG CCC 2017 Fallに運営で参加してきた #jjug_ccc

2017年11月18日にJJUG CCC 2017 Fallが開催され運営側として参加してきました。

今回は主にカメラマンを担当しました!

www.java-users.jp

混雑緩和

今回のイベントでは、上記のページにもある通り混雑緩和が一つのテーマでした。
その為、各セッションの部屋の入り口・出口を一つにし、
通路も一方通行にする施策を取ってみました。

結果としては、これがかなり功を奏し、身動きできないような混雑は起きず、
セッション間の移動もスムーズに行われていました!
協力してくれた参加者の皆さん、ありがとうございました!

アンケートでも一方通行は好評でした。

写真撮影

海外のイベントなどでは写真が多く撮られており、参加していない人にもイベントのイメージがつきやすいので
今回はボランティアの方と2人で写真撮影を行いました。

登壇者の皆さんには個別に連絡が行くかと思います。

ストロボ使用について

セッション中は前方にスライドが投影される関係上、部屋が暗くなっており撮影の為ストロボを使用しておりました。
ストロボが不快な方もいるので、なるべくカメラの設定などでストロボが不要なようにします。


JJUG CCCは2018年春にも開催予定です。
皆さん奮ってご参加ください。

Spring Fest 2017に参加しました

だいぶ日が経ってしまいましたがレポ。

2017年11月24日に開催された「Spring Fest2017」に参加しました。

springfest2017.springframework.jp

午前中は健康診断とかぶってしまい、午後からの参加になってしまいましたが、
濃密なセッションを聞くことが出来、大変有意義なイベントでした。

Spring Security 5 解剖速報

業務アプリケーションを開発する際、切っても切れないのがセキュリティですね。
Spring Securityの情報を聞きたかったので参加。

www.slideshare.net


かなり深いところまで説明してくださっていたので、参考になりました。
認証・認可の具体的な実装方法は、手を動かしてみないとなー。

ドメイン駆動設計のためのSpringの上手な使い方

みんな大好きDDD。
DDDの第一人者である増田さんのセッションを聞かずにはおれない。

www.slideshare.net

感想としてはDDDの概要説明より、実際にSpringでどのように実装してくかを説明してほしかったな~と。

日本一やさしく説明する予定のマイクロサービス入門

マイクロサービスアーキテクチャオブジェクト指向と同じ説明が出来るっていうのは面白かったです。
何度も発表前に念を押されたとおり、初心者向けでした。

www.slideshare.net

Spring エンジニアが理解すべきフロントエンド入門 - Angular編

Springでサーバサイド作ったとしても、フロントエンドはどうすればいいんだということで気になっていたAngularのセッションを聴講。
Angularの概要説明で、実際のサーバサイドとの連携方法などは無かったので、
手を動かせってことですね。

Spring BootとSpring Cloudで始めるマイクロサービス

最後はスベり芸人せろさん(@cero_t)のセッションへ。
マイクロサービスアーキテクチャを実際に適用・運用している人の話は参考になります。
ギャグ少なめで真面目なセッションでした。


Springはあまり使えていませんが、会社の標準にしていきたいのでこれからもっと勉強していきたいと思います。
イベント運営の皆さん、登壇者の皆さんありがとうございました。

Docker for Windows でElasticsearch5.5,Kibana 5.5を動かしてみる #elasticsearch

Elastic Stack 5.5が先週リリースされました!

f:id:mamepika:20170710011218p:plain

Elastic Stack 5.5.0リリース | Elastic

今回はDocker上でElasticsearch、Kibanaを動作させてみました。
Dockerがいまいちわかってないので手順に誤りなどあるかもしれませんが、
誤りについてはご指摘頂けると幸いです。

DockerのElasticsearchコンテナを複数立てて、クラスター組みたかったんですが、
Dockerよくわかっておらず、そこまで出来ないまま月曜になってしまいました。

コンテナごとの細かい設定をどこで反映させるかもわからず、ただ動かすだけになってます。

環境は以下の通り。

OS:Windows10 Pro
CPU:Core i7 4790K
Mem:32GB

Docker for Windowsのインストー

WindowsでDockerを動かすために、Docker for Windowsというソフトをインストールします。
以下のURLからダウンロードできます。
docs.docker.com

インストールが完了するとHyper-V上にLinuxマシンが出来ているので確認してみます。
f:id:mamepika:20170710002949p:plain

動作確認

コマンドプロンプトPowershellでdocker versionコマンドを打ってみて、動作確認をします。

f:id:mamepika:20170710003224p:plain

Elasticsearch用Dockerコンテナの実行

まず、Elasticsearchを動作させるため、Powershellで以下のコマンドを入力します

docker run -p 9201:9200 -e "http.host=0.0.0.0" -e "transport.host=127.0.0.1" docker.elastic.co/elasticsearch/elasticsearch:5.5.0

Elasticsearchの動作確認

Webブラウザで「http://localhost:9201」にアクセスします。
X-Packが有効になっているため、認証が必要になりますが、
USER:elastic
PASS:changemeでログイン可能です。

以下のように、JSON形式でElasticsearchの状態が帰ってくれば動作しています。
f:id:mamepika:20170710003823p:plain

Kitematicの導入

GUIでDockerコンテナの設定などが行えるKitematicというツールを導入します。

タスクトレイにあるDocker for Windowsのアイコンを右クリックし表示されるコンテキストメニューから
「Kitematic」をクリックします。
f:id:mamepika:20170710004447p:plain
Zipファイルがダウンロードできるので、中のexeファイルを実行すればOKです。
次回以降、Docker for Windowsコンテキストメニューから実行させるためには、
C:\Program Files\Dockerの配下に、解凍したフォルダを「Kitematic」にリネームして配置すればOKです。

実行すると以下のようにElasticsearchのコンテナが表示されているはずです。
※コンテナ名を分かりやすいようにリネームしています。
f:id:mamepika:20170710004932p:plain

Kibana用Dockerコンテナの実行

Kibanaを動作させるため、Powershellで以下のコマンドを入力します

docker run -it --rm -p 5601:5601 docker.elastic.co/kibana/kibana:5.5.0

Kitematic上でコンテナが確認できます。
f:id:mamepika:20170710005132p:plain

Elasticsearchのコンテナに接続する

Kitematic上でElasticsearchのコンテナに接続するように設定します。

右上の「Setting」⇒「Network」をクリックします。
表示されたLinksでコンテナを選択します。
f:id:mamepika:20170710005335p:plain

選択したら、名前も入力して+ボタンをクリックします。
f:id:mamepika:20170710005448p:plain

Kibanaにアクセスする

以下のように認証画面が表示されれば成功です。
USER:elastic
PASS:changemeでログインできます

f:id:mamepika:20170710005546p:plain

Versionの確認

X-Packが有効なので、左のメニューが多めに表示されていますね。
index name patternを指定しないと画面にエラーが表示されるので、「.kibana」を指定してエラーを消しています。
f:id:mamepika:20170710005746p:plain

Monitoringで確認するとElasticsearchのVersionが5.5.0になってますね!
クラスターのステータスがyellowなのはノードが一つで、冗長構成になってないからかな。
f:id:mamepika:20170710010148p:plain

Managementで確認するとKibanaもきちんと5.5.0です。
f:id:mamepika:20170710010300p:plain

filterのGUIによる設定

filterの設定をクエリを書かずとも、GUIでクリックだけで設定できるようになりました。
f:id:mamepika:20170710010442p:plain

Kibana5.5の新機能は以下にまとめられているので詳しくは以下を参照してください!
acro-engineer.hatenablog.com

およそ2か月に一回のペースでバージョンアップがされて、
ますます便利になるElastic Stackから目が離せません。
特にMachine Learningは注目です。

Elasticsearch,Kibanaを5.2から5.4にアップグレードしてみた #elasticsearch

今年の初めに検証環境として用意して色々と試していたのが、Elastic Stack5.2だったので、
5.5リリースも直前というこの時期に5.4にしてみましたw
調べてもアップグレード方法が分からなかったのですが、簡単すぎるからわざわざ書いてないのかってくらいの簡単さでした。

f:id:mamepika:20170702025040j:plain


特に無停止とかを意識していない環境なので、何の問題もなくさくっと出来ました。

環境は以下の通り。

EC2インスタンスサイズ:t2.medium
OS:Amazon Linux
Java : Oracle JDK 8u121

Elasticsearchを5.4にアップグレードする

yumインストールではなく、rpmパッケージからのアップグレードで実施しました。

rpmパッケージのダウンロード

$ sudo wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-5.4.3.rpm

DLしたrpmパッケージを使ってアップグレード

$ sudo rpm -Uvh elasticsearch-5.4.3.rpm

f:id:mamepika:20170702030255p:plain

バージョンの確認

curlコマンドで確認できます。

$ curl http://localhost:9200/

f:id:mamepika:20170702030126p:plain

5.4.3になってますね。

Kiabnaを5.4にアップグレードする

Elasticsearch同様にrpmパッケージよりアップグレード。

$ sudo wget https://artifacts.elastic.co/downloads/kibana/kibana-5.4.3-x86_64.rpm

DLしたrpmパッケージを使ってアップグレード

$ sudo rpm -Uvh kibana-5.4.3-x86_64.rpm

以下のようなメッセージが出て完了。
f:id:mamepika:20170702025652p:plain

Kibanaにアクセスして,ManagementメニューからVersionを確認してみると、
5.4.3になってます!

f:id:mamepika:20170702030522p:plain

Visualizeの追加画面も新しくなってますね

f:id:mamepika:20170702030640p:plain

Visual Builderも。
f:id:mamepika:20170702024822p:plain

2周くらい周回遅れになってますが、新機能は来週試してみます!!

『Java本格入門』を読みました #アクロ本 #Java本格入門

f:id:mamepika:20170506203957j:plain

JJUG幹事会でいつもお世話になってる@cero_tさんが書いた本ということで、先行販売でゲットしてきました。

結論から先に言っちゃうと、Java書いてアプリ作ってる人には全員にお勧めできます。
自分はJavaチョットデキルという人でも、PJに関わる人全員がそうとは限りませんし、
入門者からベテランまで「気づき」のある本だと思います。
gihyo.jp


誤記とか修正点は以下のページを。

github.com



裏テーマが「35歳からのJava入門」ということでしたが、31歳の私にもズバリ効きました。

中でも、本になっていって嬉しかったのは。Chapter2の「2-4 名前の付け方に注意する」の部分です。

変数は名詞、メソッドは動詞や「不吉な臭い」をPJメンバーで共有できる足がかりを作ってくれたのには本当にありがたいところです。
こういった些細なんだけど、実際にコードを書く際に影響が大きいところが「本になっている」と
偉い人にも説明がしやすく、書き換えの時間を確保できることにつながりますし、
それがプロダクトの品質につながるので大きいんですよね。

『極める』と『たしなむ』

本書の目次を読むと、極められるものとたしなむだけのものがあることが分かります。

極められるもの

  • 配列とコレクション
  • 例外
  • 文字列操作
  • ファイル操作
  • 日付処理となってます。

Javaの文法や基本的な操作(誰が書いても変わらない部分)はこの本で極められるってことですね。
確かに一度書き方・考え方が分かれば、あまり引っかかるところでもない要素です。
※2冊目の入門書という位置づけのため、ある程度基礎があることが想定されています。

たしなむもの

書き方は分かった、じゃあ、どこに書くか、どういう名前で書くか、どういう構造がいいのかといったところはたしなむで終わっています。
確かにこの1冊で極められるものでもないですし、答えがあるものでもないので親切な書き方です。

最新の書き方が分かる

ストリーム処理、日付処理はラムダ式、Date And Time APIを盛り込んでいますし、
ファイル操作もnio2を想定していますので、Java7,8の書き方を覚えることができます。
また、従来の書き方も書かれているので、既存のプロジェクトのリファクタリングにも役立ちそうです。

汎用ライブラリの紹介もある

業務系のプロダクトで使う機会の多いApache Commonsの紹介があるのは嬉しいですね。
Apache Commonsやライブラリの存在を知らないと車輪の再発明をされてしまったりして、
工数増大、品質劣化につながります。
まず、ライブラリを探すっていう姿勢を取れるようになるのは重要です。

SIの現場で要件定義をし、実際にコードを書いてる著者の皆さんじゃないと書けない本だと思います。
新人教育に、そして自分の勉強に使っていきたいと思います。
いい本をありがとうございます!

第19回Elasticsearch勉強会に参加しました #elasticsearchjp

ちょっとと遅くなりましたが、勉強会の参加レポ。

第19回Elasticsearch勉強会­ #elasticsearchjp - Elasticsearch勉強会(Elastic Tokyo User Group) #elasticsearchjp (東京都) | Meetup

3月にサンフランシスコで行われたElastic{ON} 2017のフィードバックイベントだったので、仕事そっちのけで参加しました。

Elastic{ON} Re-cap

Jun Ohtani @ Elastic

日本からの参加者は50名程度

日本からスポンサーとして日立が参加。

ASK ME ANYTHING

Elasticのエンジニアに直接聞けるブース。常にエンジニアが数人立っている。
質問リスト持ってきてガッツリ質問してる人もいたり。

ご飯

ご飯も売り。
フードトラックが来る。

Filebeat Modules

5.3から。

今まではFilebeat1行1データでパースはLogstashを使う必要があった。

  • Elasticsearchだけでインデックスに入れる前の前処理を書くことができる。

⇒ingest node

  • moduleはそれを使用しているので、Filebeatがログをパースしているわけではない。

Time Series Visual Builder

Kibana 5.4から

メーターのVisualizeなどが追加。
今Timelionでやっている複雑なグラフもKibanaで行える。

機械学習 To train a model

異常値検知。
データの波形をもとに学習して、波形から外れた場合に画面に表示。

5.4からでX-Packの有償版。

Elastic Cloud Enterprise

AWS上でElastic Cloudで自動化しているがオンプレ環境でも出来るようになる。
GCPでも使える。

インフラエンジニアがおらず、プライベートクラウド使ってる弊社では、ECE使うのが一番楽そうなので、早く情報が欲しいところです。

Elasticsearch SQL

Coming soon

トランザクションは元々そういう概念が無いのでサポートするつもりはない。
提供方式は未定だが、今のところX-Packで行う予定。無償・有償は分からない。

GW中に来るかもと言われていたElastic Stack5.4がほんとにきちゃったので、
https://www.elastic.co/blog/elastic-stack-5-4-0-released

Machine Learningとか新しいKibanaの機能とか早く試していかないとですね。