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データをいきなり入れてみる。
なんか出来たっぽい。
入れたキーを指定してGETしてみる。
さっき入れたデータが_sourceの中に入っている。
これだけ…?何にもしないでデータ登録&呼び出しができてしまった。
3.kibanaをインストールしてみる
このサイトを参考にした。さっきの記事とおんなじ人だね。多謝!
なんか設定は正しく出来ているのに、つながったりつながらなかったりする。
サーバー再起動等行って、なんか立ち上がったようだ。
4.kibanaで分析してみる
ここまではいいのだ。大体みんなが言った通りやっていればたどり着くのだ。
ここから俺はどうしたらいいのだ?
試しにkibanaでさっきPostmanから投入したデータを参照してみる。
左メニューのManagementの中の、Dev Toolsを開く
入れるコマンドは基本curlとかと同じようなイメージ。
ただ、elasticsearch前提なので、インデックス名以降を指定すればよいようだ。
入力したコマンドの右側の緑三角をクリックすると、右側に結果が表示されます。
でも、こうじゃねーんだよ。なんかもっと、データサイエンティストなどぶリンなあれをしたいんだよ。
なので、Discoverを使ってみる。
左メニューからkibanaの中のDiscoverをクリック。
どうやらindex patternというものを作るらしい。
今一つだけ出来ている「receipt」を指定してみる。
次の画面で検索するときに使用する時間関係の項目を指定する。日付とか時刻とかね。これを指定しないと、後々データが検索できない。
とりあえずcreate_atをしてしておいて、Create index patternをクリック。
何かができたらしい。
なんとなく環境出来たっぽいから、データをきちんと入れてみるよ。
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を作ってみる。
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で見てみると、なんか入ってる。
よしゃ。
左メニューから項目をポイントして、表示された「ADD」のボタンをクリックすると、その項目だけ表示されるようになる。必要な項目だけ選べるので見やすくなる。
しかし、どうせやるならやっぱりグラフとか地図とかにしたいよね。
とりあえずグラフ作ってみよう。
右メニューからvisualizeをクリックする。
最初に作るときは、真ん中の青ボタンをクリック。
New Visualizationの中からPieをクリック。
作成したreceiptを選択。
初期画面が表示される。
まずは対象となる時間帯を指定する。右上の、今「Last 15 minutes」の前にあるカレンダーマークをクリック。
時間帯を選択できる画面が表示される。
今回はざっくり「Last 1year」を選択する。と、初期画面が表示される。
右の「Buckets」の「Add」をクリックすると追加するBucketの選択画面が表示されるので、Split sliceをクリック。
Splitslice
BacketsにSplit sliceが表示され、その下に「Aggregation」という項目が表示される。リストボックスから「RANGE」を指定すると、項目と範囲を指定できる画面が表示される
Fieldにグラフにする項目を指定して、その下に値の範囲を指定する。
適当に指定したら、右下の「Update」をクリックする。
こんな風にグラフが作成される。
できた!
これでelasticsearchにデータを投入して、kibanaで分析する第一歩ができたね。
実際はどう分析するかが肝なんだろうけど。
それはおいおい考えていくよ。そのうち何とかなるだろう。
それじゃーね。ちゃお、あみーち!