LoginSignup
3
2

More than 3 years have passed since last update.

elasticsearchを使ってみる

Posted at

Elasticsearchは、分散型でオープンソースの検索・分析エンジンです。by elastic
って、ぶっちゃけ何言ってるかよくわかんない。
全文検索できるっていうから、ちょっと前にクローラーでデータ登録してプチgoogleみたいに使って喜んでいたのだが、kibanaが絡んできたりするとなんかよくわかんねー。
なので、なんかのデータを登録して、よくわからない条件で分析などしてみて、これでおいらもデータサイエンティストさ、ごーごーデータどぶリン、って言ってみたい。
これは、そんな野望の全貌をつづった作業ログである。なんちて。

1.elasticsearchを入れてみる

環境はこんな感じにしてみる。
・VirtualBoxによる仮想サーバーを利用
・OSはcentos8
・ホストosはwindows10だけどね

centos8がインストールされたVirtualboxの仮想サーバーは、下ごしらえで各自作っておくように。

ここにjavaとelasticsearchをインストールする。
参考サイト:CentOs8 Elasticsearchをインストールする手順
言われるままにコマンド入れたりすると、javaとelasticsearchがインストールされた。よしよし。
そのあとservice登録、firewall設定と進んで、ホストOSからアクセスしたら、エラーになった。
firewall設定で開けるポートって、9200じゃね?
9200開けてみたら、つながりました。

2.データを投入してみる

とりあえずPostmanでjsonデータをいきなり入れてみる。
image.png
なんか出来たっぽい。
image.png
入れたキーを指定してGETしてみる。
image.png
さっき入れたデータが_sourceの中に入っている。
image.png
これだけ…?何にもしないでデータ登録&呼び出しができてしまった。

3.kibanaをインストールしてみる

このサイトを参考にした。さっきの記事とおんなじ人だね。多謝!
なんか設定は正しく出来ているのに、つながったりつながらなかったりする。
サーバー再起動等行って、なんか立ち上がったようだ。
image.png

4.kibanaで分析してみる

ここまではいいのだ。大体みんなが言った通りやっていればたどり着くのだ。
ここから俺はどうしたらいいのだ?
試しにkibanaでさっきPostmanから投入したデータを参照してみる。

左メニューのManagementの中の、Dev Toolsを開く
image.png
入れるコマンドは基本curlとかと同じようなイメージ。
ただ、elasticsearch前提なので、インデックス名以降を指定すればよいようだ。
image.png
入力したコマンドの右側の緑三角をクリックすると、右側に結果が表示されます。
image.png
でも、こうじゃねーんだよ。なんかもっと、データサイエンティストなどぶリンなあれをしたいんだよ。
なので、Discoverを使ってみる。
左メニューからkibanaの中のDiscoverをクリック。
image.png
どうやらindex patternというものを作るらしい。
image.png
今一つだけ出来ている「receipt」を指定してみる。
image.png
次の画面で検索するときに使用する時間関係の項目を指定する。日付とか時刻とかね。これを指定しないと、後々データが検索できない。
とりあえずcreate_atをしてしておいて、Create index patternをクリック。
image.png
何かができたらしい。
image.png
なんとなく環境出来たっぽいから、データをきちんと入れてみるよ。

5.logstashでMySQLのデータをelasticsearchに入れる

今回は昔ながらの伝票データを入れてみたいよ。
すなわち、ヘッダレコードに合計金額とか入っていて、明細レコードが複数できている、あれだ。よく知らない若者は、お父さんとか年老いたSEに聞いてみてね。
laravelでseeder使って大量発生させたデータがMySQLに入っているので、これをelasticsearchに入れてみる。
elasticsearchでは非正規データを入れろとか、親子関係はお勧めしない、なんて言われるから、logstashの中で伝票データをひとまとめにしてelasticsearchに入れてみる。
とりあえずlogstashをインストールだ。このサイトを参考にさせていただきました。が、インストールはdnfでしちまったよ。この辺は好みか?
インストール出来たら、MySQLからデータを取ってくるよう、logstash.confを作成する。
と、その前にjdbcを入れとかなくちゃならない。
見よう見まねでインストールしてみる。

レポジトリ登録
# dnf localinstall https://dev.mysql.com/get/mysql80-community-release-el8-1.noarch.rpm
インストール
# dnf install mysql-connector-java

どこに入ったかわからないので、探してみる。

# find / mysql-connector* | grep "mysql-connector"
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0/repodata
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0/repodata/repomd.xml
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0/repodata/4a1e62c80aefb9ae9dcc85524652f5e6f6d01fdb-filelists.xml.gz
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0/repodata/408890bf2054a439cca0f5a2988e8e11c7a08276-primary.xml.gz
/var/cache/dnf/mysql-connectors-community-36a49e3556a965a0/packages
/var/cache/dnf/mysql-connectors-community.solv
/var/cache/dnf/mysql-connectors-community-filenames.solvx
/usr/share/doc/mysql-connector-java
/usr/share/doc/mysql-connector-java/CHANGES
/usr/share/doc/mysql-connector-java/INFO_BIN
/usr/share/doc/mysql-connector-java/INFO_SRC
/usr/share/doc/mysql-connector-java/LICENSE
/usr/share/doc/mysql-connector-java/README
/usr/share/java/mysql-connector-java.jar

/usr/share/java/に入っていた。
これを指定して、logstash.confを作ってみる。

/etc/logstash/conf.d/logstash.conf
input {
  jdbc {
    jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.10.10:3306/receipt"
    jdbc_user => "receipt"
    jdbc_password => "p@ssw0rd"
    statement => "select * from receipt inner join receipt_detail on receipt.id = receipt_detail.receipt_id"
  }
}
filter {
  jdbc_streaming {
    jdbc_driver_library => "/usr/share/java/mysql-connector-java.jar"
    jdbc_driver_class => "com.mysql.cj.jdbc.Driver"
    jdbc_connection_string => "jdbc:mysql://192.168.10.10:3306/receipt"
    jdbc_user => "receipt"
    jdbc_password => "p@ssw0rd"
    statement => "select * from receipt_detail where receipt_id = :receipt_id"
    parameters => {"receipt_id" => "id"}
    target => "receipt_details"
  }
} 
output {
  elasticsearch {
    index => "receipt"
  }
} 

conf書いたら保存して、logstashを実行する。
logstashは/usr/share/logstash/binに入っていた。
なので、こんな感じで動かしてみる。

# cd /usr/share/logstash
# bin/logstash -f "/etc/logstash/conf.d/logstash.conf"

kibanaで見てみると、なんか入ってる。
image.png
よしゃ。
左メニューから項目をポイントして、表示された「ADD」のボタンをクリックすると、その項目だけ表示されるようになる。必要な項目だけ選べるので見やすくなる。
image.png
しかし、どうせやるならやっぱりグラフとか地図とかにしたいよね。
とりあえずグラフ作ってみよう。
右メニューからvisualizeをクリックする。
image.png
最初に作るときは、真ん中の青ボタンをクリック。
image.png
New Visualizationの中からPieをクリック。
image.png
作成したreceiptを選択。
image.png
初期画面が表示される。
image.png
まずは対象となる時間帯を指定する。右上の、今「Last 15 minutes」の前にあるカレンダーマークをクリック。
時間帯を選択できる画面が表示される。
image.png
今回はざっくり「Last 1year」を選択する。と、初期画面が表示される。
image.png
右の「Buckets」の「Add」をクリックすると追加するBucketの選択画面が表示されるので、Split sliceをクリック。
image.png
Splitslice
BacketsにSplit sliceが表示され、その下に「Aggregation」という項目が表示される。リストボックスから「RANGE」を指定すると、項目と範囲を指定できる画面が表示される
image.png
Fieldにグラフにする項目を指定して、その下に値の範囲を指定する。
image.png
適当に指定したら、右下の「Update」をクリックする。
image.png
こんな風にグラフが作成される。
できた!

これでelasticsearchにデータを投入して、kibanaで分析する第一歩ができたね。
実際はどう分析するかが肝なんだろうけど。
それはおいおい考えていくよ。そのうち何とかなるだろう。
それじゃーね。ちゃお、あみーち!

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2