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

まめログ

ITアーキテクトを目指して

WindowsでLogstashを使ってElasticsearchに既存のログを投入する #elasticsearch

Elasticsearch、Kibanaの環境を構築したら、
次はログを流し込んで可視化したくなるのが人情ですよね。

ということで出番なのがLogstash。

以下のURLからダウンロードできます。

www.elastic.co

通常の使い方はLogstashを各種サーバにインストールし、
リアルタイムでログを転送し可視化するのですが、
まずは手始めとして、手元にあるログをElasticsearchに転送してみようと思います。

動作させている環境は以下の通りです。

OS:Windows 10 Pro
Java: Oracle JDK 8u121
Logstash:5.2.1

Elasticsarch,Kibanaは以下の記事で作成したものを使っています。
mamelog.hatenablog.jp


Logstashとは

公式ページには以下の記述があります。

https://www.elastic.co/jp/products/logstash

  1. Logstashは、オープンソースのサーバーサイドデータ処理パイプラインで、
  2. 膨大な数のソースから同時にデータを取り込み、
  3. 変換して、指定された任意の「格納庫(スタッシュ)」(私たちの場合は当然、Elasticsearchです)に送信します。

つまるところ、いろんな形式のデータを一か所に集約できる凄いツールってことですね。

使い方

ダウンロードしてきたzipファイルを適当な場所に解凍します。
(C:\dev配下に解凍しました。)

f:id:mamepika:20170226144205p:plain

テストデータを用意する

こんな感じの:区切りのデータを用意しました。

2017-02-26_00-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,351:0.901
2017-02-26_03-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,351:0.901
2017-02-26_06-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,351:10.901
2017-02-26_09-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,251:0.901
2017-02-26_12-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,51:0.901
2017-02-26_15-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:DELETE:0,551:0.901
2017-02-26_18-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:CREATE:0,351:0.901
2017-02-26_21-00-00.123:hostap1:B01hkafjaglggkgngaJHFJHGlgkghwgh:00000123:OCC001:UPDATE:0,311:0.901

設定ファイルを書く

Logstashは大きく分けて、
input,filter,outputの3つの処理に分かれます。

こんな感じで書いてみました。

input{
    file{
      path => "C:\dev\request.txt"
      start_position => "beginning"
    }
}

filter{
     csv{
       columns => [
         "processingDate",
         "hostName",
         "sessionId",
         "merchantId",
         "functionId",
         "operateId",
         "internalProcessingTime",
         "externalProcessingTime"]
       separator => ":"
     }
     date{
      match => ["processingDate" , "yyyy-MM-dd_HH-mm-ss.SSS"]
      timezone => "Asia/Tokyo"
     }
     mutate{
       convert => {
          internalProcessingTime => float
          externalProcessingTime => float
       }
       remove_field => ["telegram","@version","host"]
     }
}
output{
    elasticsearch{
       hosts => ["<elasticsearchが動作しているサーバのIPアドレス>"]
       index => "request-%{+YYYYMMdd}"
    }
}    

input-file

pathに取り込みたいファイルのパスを書きます。
start_positionはファイルのどこから取り込み対象にするかを指定します。"beginning"を指定することでファイルの最初から取り込めます。
デフォルトではLogstash起動後に更新された行から取り込み対象にするようです。

filter-csv

CSV形式のファイルを取り込むときに使用します。csvと書いていますが、今回のようにseparatorに任意の文字を指定することで
カラム区切りでない文字列にも対応できます。
columusに区切ったそれぞれの値の項目名を指定します。

date

様々な書式の日付の文字列をパースします。

mutate-convert

指定しないと全て文字列になってしまうので、数値の項目は明示的に変換をかける必要があります。
floatやintegerが指定可能です。
数値にしておかないと、平均や合計、最大値最小値などの値を可視化出来なくなるので注意が必要です。

output-elasticsearch

Elasticsearchにデータを転送するのでelasticsearchを指定します。
hostsにIPアドレスを指定すればOKです。
indexはこの設定で投入されるデータのインデックス名です。
毎日違うインデックス名で投入するようにする設定になっています。

Logstashを起動する

コマンドプロンプトでLogstashをインストールしたフォルダ直下のbinフォルダに移動します。

cd C:\dev\logstash-5.2.1\bin 

以下のように設定ファイルを指定して起動します

logstash -f request.conf

しばらくすればElasticsearchにデータが投入されKibanaで見ることができます。
f:id:mamepika:20170226143546p:plain
テストデータの通り、3時間おきの計8件のデータが投入されました。

インデックス名と@timestampの日付がずれる

時差、タイムゾーンの問題だと思うのですが、
設定ファイルでインデックス名をパラメータ指定していると、午前9時までのデータが前日のindex名で格納されてしまいます。
f:id:mamepika:20170226143859p:plain

indexを日付指定で削除するような運用をしていきたいのですが、
この状態だと日付をまたいでデータが削除されてしまうので困っています。

第18回Elasticsearch勉強会に参加してきました #elasticsearch

www.meetup.com

新機能の紹介と色々な事例を聞けてとても為になりました。
開催ありがとうございました!

What's new Elastic Stack 5.2 Jun Ohtaniさん

トップバッターはElasticの大谷さん。

Elastic5.1,5.2の新機能とElastic日本法人の説明をしていただきました。
speakerdeck.com


Elasticsearch Serverという本を翻訳しましたが、買わないでください。(古すぎる)

トレーニングはマニュアルは英語だけどエンジニアは日本人で日本語で受けられるとのこと。
上司を説得しましょう。(僕は既にしました。)

Elastic日本チーム

・8人
・オフィス:大手町フィナンシャルシティグランキューブ
・株式会社なのでサポート契約も安心

タスクマネジメントAPI

検索のクエリをキャンセルできるように。

レンジ

数値のレンジを登録できるようになり、クエリでも直接指定できるようになった。
(スケジュールとか宿泊データとかで便利らしい)

keywordとtext

5.0から追加されたkeywordに対して、小文字寄せなどが簡単に。

集計結果のページング

アグリゲーションの集計結果TOP10件などを今まで取っていたが、全件ほしいというニーズがあるため対応。

Kibana

タグクラウド

頻出単語が大きくなったりするやつ。

ヒートマップ

アクロクエストの人が書いてるからそこをみて。
acro-engineer.hatenablog.com

地図のズームレベルが18まで

地図の詳細表示が可能に。
X-Packが必要


Logstash

パーシステントキュー

inputを受け取って、outputする前にLogstashが落ちた時などにもデータの漏れがないように。

input受け取ったら、いったんキューに格納し、outputし終わったらキューから削除。

Beats

Go言語で書かれた軽量シッパー。

CPU使用率、プロセス数など。
Dockerコンテナごとの数字も取れるように。

メタデータ付加

AWSアベイラビリティゾーンなどを付加して投げてられるので、
障害個所の特定に役立つ。

JSON in JSON

JSONの中のJSON文字列もデコードできる。

Heartbeat

死活監視用Beats

x-pack

すべてが有料ではない。登録するだけで使えるものも。

モニタリング

Elasticsearchのモニタリングが可能。

Logstashのモニタリングも可能(5.2~)

pairsでのElasticsearch 小島広樹さん 株式会社エウレカ

www.pairs.lv

ユーザ増えて検索負荷に耐え切れなく。(MySQL)

ユーザ検索などにElasticsearchを使用。

MySQLとElasticsearchのデータってどういう風に同期取ってるんだろと質問しようとしたら、
質問してくれた人がいて、同期バッチとかでやってるらしい。

資料が喪失してしまったらしく、中途半端な形で終わってしまったのは残念でした。

LT1 : タイトル:RettyのElasticsearchの使い方 李晟圭(イ・ソンギュ)さん Retty株式会社

Retty:実名グルメサービス
retty.me

ログ解析
データ検索に使用しているの事。

ビジュアライズしていると説明しやすい。
エンジニアだけならログだけでもなんとかなっても、ディレクターなどにグラフを見せると話が早い。

LT2 : タイトル:Elasticsearch 5.2とJava Clientで戯れる森谷 大輔さん ヤフー株式会社

www.slideshare.net

1M メッセージ/s

Elasticsearchはログ可視化で使用中。

Logstashとかで頑張るより、Javaでやっときゃ何でもできるだろっていう考え。
Java Clientが使いやすい感じでした。
Elastic Stack使うとコード書く機会がなくなっちゃうので、コード書きたい人にはいい選択かもしれない。

LT3 : タイトル:Amazon Elasticsearch Serviceを使ってコンテンツ検索を速くした話中村真一郎 さん 株式会社ヒトメディア

珍しいAmazon Elasticsearch Serviceを使った事例。
Elastic CloudとAmazonがやってるサービスは違うんですよと大谷さんも強調されていたので、何か溝があるのでしょうか。

今確認したら、5.1が選択できるようになってました。

f:id:mamepika:20170221000055p:plain


Elastic Stackをどのように適用するのか、どのように運用していくのかっていう情報が不足しているのかなーと感じました。
自分でも色々試して、トライアンドエラーでノウハウ積んでいくしかないですね。
いつかコミュニティに情報発信で貢献できるようにしたいものです。

『簡単、クレカ決済! PAY.JPを使ったクレカ決済の仕組み・開発運用時の考慮点について』に参加してきました

資料はこれ。

www.slideshare.net


決済システムの保守をやっているので、決済システムを使う側の人はどのように実装・保守をやってるのか気になって参加してきました。
クレジットカードのデータを自社で保有すると、PCI DSSの取得が必要になります。

www.meti.go.jp

保有を含めて、以下の3つを自社サーバでやる場合はPCIDSS準拠が必要になるため、
PAY.JPのようなECサイト事業者などがカード番号を保有せずに決済が行える仕組みが必要になってきました。

「保存」

DBなどストレージに保存してはいけない。

「処理」

アプリケーション内で処理をしてはいけない。(ログに吐かれる可能性があるため)

「通過」

ネットワークを通過させない。


決済システムってほとんどのシステムで必要な機能なのに、あまり実例が報告されないのでこういう機会は貴重ですね。

貴重な機会をありがとうございました。

Elastic Stack5.2でMetricbeatのダッシュボードを作って可視化してみた #elasticsearch

AWSを仕事で触れるようになって、色々試し始めてるので備忘録的に記載します。

Elastic Stackは、現在の業務を飛躍的に楽にしてくれると期待しているので、
社内でステマしまくって、何とか来期予算を少しだけ確保できましたので、
みっちり触っていこうと思ってます。


殆ど以下の記事を参考にしました。
acro-engineer.hatenablog.com

LogstashやBeatsで色んなサーバからログを集約して、Kibanaで一元的に可視化する方法とか
まだ全然わかってませんが、大事な1歩です。

AWS EC2のAmazon Linuxでやってます。

↓これ。
f:id:mamepika:20170215232553p:plain

Open JDKのアンインストール

Amazon Linuxには初期状態でOpenJDK7がインストールされているので、
Oracle JDK8にアップデートします。(Open JDK8でも問題ありません)

$ sudo yum remove -y java

Oracle JDKのインストール

Oracle JDKは以下のURLからあらかじめDLし、SCPでEC2インスタンスに転送しました。
この後出てくる各種インストーラも同じです。
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

$ rpm -ivh jdk-8u121-linux-x64.rpm

インストールが完了したら以下のコマンドで、Javaのバージョンを確認。

$ java -version
java version "1.8.0_121"
Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

Elasticsearchのインストール

yumでインストールするのが普通ですが、rpm版でインストールしてみました。

インストーラは以下のURLでDLできます。
https://www.elastic.co/jp/downloads/elasticsearch

以下のコマンドでインストール

$ rpm -ivh elasticsearch-5.2.0.rpm 

Kibanaのインストール

インストーラ
https://www.elastic.co/downloads/kibana

$ sudo rpm -ivh kinbana-5.2.1-x86_64.rpm 

アクロクエストさんの記事でもある通り、Kibanaのネットワーク設定を行います。

$ sudo vi /etc/kibana/kibana.yml

開いたファイルに以下の設定を追加。

server.host: "0.0.0.0"

そしてElasticsearch、Kibanaを実行。

$ sudo service elasticsearch start
$ sudo service kibana start

t2.nanoだと実行できなかったのである程度メモリが必要だと思われます。
(※どこでメモリ量指定してるか分からず)

起動したら以下のURLをたたいてKibanaの画面が表示されれば成功です。
http://<作ったインスタンスのIP>:5601
f:id:mamepika:20170215233332p:plain

Metricbeatのインストール

インストーラ
https://www.elastic.co/downloads/beats/metricbeat

インストール実行

$ sudo rpm -ivh metricbeat-5.2.1-x86_64.rpm

起動

$ sudo service metricbeat start

Metricbeatのダッシュボードをインストール

データを流すのが簡単なだけでなく、可視化するのも簡単なのがElasticスタックの利点。
Metricbeatからのデータを可視化するためのダッシュボードがすでに用意されています。

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

Kibanaでインストールしたダッシュボードを見てみる。
画面左の「Dashboard」をクリックして、画面右上の「Open」をクリックします。

f:id:mamepika:20170215234635p:plain

Metricbeat system overviewを選択するとこんな感じにしてくれます。

f:id:mamepika:20170215234903p:plain

ダッシュボード上の「System Navigation」でCPU選ぶとこんな感じ。
f:id:mamepika:20170215234950p:plain

メモリ
f:id:mamepika:20170215235017p:plain

プロセス
f:id:mamepika:20170215235053p:plain

いやあ、可能性に満ち溢れてます。
今はCPU使用率をモニタリングするのに、作業依頼を起票しないといけませんからね!!w

Elastic Stackがあれば、誰でもいつでも好きな時に好きなサーバのリソース状況を見ることができますね!

情報処理安全確保支援士 登録に申し込みました

f:id:mamepika:20170208194259j:plain

www.ipa.go.jp


2011年の特別試験で情報セキュリティスペシャリストに合格していたので、登録資格を持っておりました。

今のところ、メリットが全くない資格ですが、資格保持者が出てくればある程度状況も変わってくるかなぁ。


追記:

2017年2月1日から7月31日の間に申込んだ人は、10月1日に登録されるとのこと…。
4月1日に間に合いませんでした…。

Elasticsearchハンズオンセミナーに参加してきた #Elastichandson

5月27日に、Acroquest Technologyさん主催のElasticsearchハンズオンセミナーに参加してきました。

www.acroquest.co.jp

管理画面からログファイルをダウンロードして、
Excelに貼り付けてグラフを作るという仕事を絶対にしたくないので、Elasticsearch学び始めました。
(自社システムのレスポンスやキャパシティを月次でグラフにしないといけないのです)

ELKの各製品をローカルマシンで起動してそれぞれの製品を触っていく感じでした。

Logstashでfilter作って、標準入力読み込ませたり

Elasticsearchにアクセスしたり

Kibana表示したりしました


試験的なデータとして30万件くらいのCSVを配布されて、
それを流し込んだらCPU4つ使い切りました。

実際にはリアルタイムで収集して、いっぺんに収集することは稀だと思いますが、
サーバのスペックもそれなりに必要そうな感じですね。
(ログファイルも1つってことはないでしょうし)

ハンズオン資料見ながら、Kibanaいじって完璧なダッシュボードも作れました。


Elasticsearch気になってるけど、
どんなものかよく分かってない、一人でやり始めるのは難しそうと思ってる人にはお勧めのセミナーでした!!

これからも定期的に開催されるようなので、参加してみてください!

Java Day Tokyo 2016行ってきましたンゴ!! #JavaDayTokyo

お仕事として参加してきましたー!!
www.oracle.co.jp

希望のセッションが満席で事前予約できなかったんですが、
空席があれば入れるシステムだったので、
希望のセッションを聞くことが出来ました。


参加したセッションは以下の通り!

  • Innovate, Collaborate, with Java

 Java8の成功でJavaの人気が盛り返してきた話。
 コミュニティの話。


 損保ジャパンのCOBOLからJavaへの移行
  COBOLからJavaへ完全移行していくとの話でした。
  偉い人からCDIやらORMという単語が出てくるだけで羨ましい感じ。
  自動変換ではなくて本気でJava化へ取り組んでいくんだろうなっと。
  一つだけ気になったのはパワポの中の英語が全部大文字・全角ぽかったこと。「JAVA」

  Flight Recorder便利。

  • Java EE 7アプリケーションとWebセキュリティ

 みんな注目のスーツメガネコスの裏紙さん!!
 実案件でのセキュリティ診断で指摘された事項が、具体的に何を防ぐための物か分かったので良かった。

  • Putting Hypermedia Back in REST with JAX-RS

 やっぱ同時通訳じゃ内容が入ってこない…。
 ライブコーディングでJAX-RSのコードが見られたのは良かった。

  • 実践して分かったJavaマイクロサービス開発

 みんな大好きせろさん。
 直前まで資料が出来ていなかったとは思えないほどの、講演の完成度はさすがです。
 もっと具体的な話も聞いてみたいです。

  • オラクルコンサルが語るJava SE 8新機能の勘所

 ちっひーさんのお話。
 予約出来てなかったんですが、当日参加で行けました。
 最前列が空いてたので特等席で聴講。
 隣にはゆとりさんやきつねさん、櫻庭さんがいました。

 要するにJava8で加わったDate & Time API,ラムダ式,Stream APIを使わないっていう選択肢はないってこと。
 物によっては使うリソースが微増するけど、可読性は断然上がりますしね。

 最後のExaLogicによる36コア72スレッド環境での実測値は圧巻。
 parallelって書くだけで物理コアをきちんと使い切れるのが分かって面白かった。

裏でMicrosoftのde:code2016と被ってしまったのが残念でしたが、
大変面白いイベントでした。

来年はJava Day Tokyoとde:code双方に参加したい!