日頃、Amazon CloudSearchの担当をしている私ですが、ふと、Elasticsearchと戯れたくなりました。
とりあえず、おもむろにMacbookのTerminalを立ち上げます。
■ Elasticsearchを立ち上げる
現時点での最新版のElasticsearchのZipファイルをダウンロードしてきて↓
https://download.elastic.co/elasticsearch/elasticsearch/elasticsearch-1.7.1.zip
解凍して、
$ unzip elasticsearch-1.7.1.zip Archive: elasticsearch-1.7.1.zip creating: elasticsearch-1.7.1/ creating: elasticsearch-1.7.1/config/ inflating: elasticsearch-1.7.1/config/elasticsearch.yml 〜略〜
起動します。
$ bin/elasticsearch [2015-08-18 14:57:11,382][INFO ][node ] [Arsenal] version[1.7.1], pid[22952], build[b88f43f/2015-07-29T09:54:16Z] [2015-08-18 14:57:11,383][INFO ][node ] [Arsenal] initializing ... [2015-08-18 14:57:11,530][INFO ][plugins ] [Arsenal] loaded [], sites [] [2015-08-18 14:57:11,832][INFO ][env ] [Arsenal] using [1] data paths, mounts [[/ (/dev/disk1)]], net usable_space [6.3gb], net total_space [232.5gb], types [hfs] [2015-08-18 14:57:14,807][INFO ][node ] [Arsenal] initialized [2015-08-18 14:57:14,808][INFO ][node ] [Arsenal] starting ... [2015-08-18 14:57:15,032][INFO ][transport ] [Arsenal] bound_address {inet[/0:0:0:0:0:0:0:0:9300]}, publish_address {inet[/10.66.68.147:9300]} [2015-08-18 14:57:15,076][INFO ][discovery ] [Arsenal] elasticsearch/7bpI2cEtQKeCAq5lAU-hYQ [2015-08-18 14:57:18,866][INFO ][cluster.service ] [Arsenal] new_master [Arsenal][7bpI2cEtQKeCAq5lAU-hYQ][b8e85601e846.ant.amazon.com][inet[/10.66.68.147:9300]], reason: zen-disco-join (elected_as_master) [2015-08-18 14:57:18,884][INFO ][http ] [Arsenal] bound_address {inet[/0:0:0:0:0:0:0:0:9200]}, publish_address {inet[/10.66.68.147:9200]} [2015-08-18 14:57:18,884][INFO ][node ] [Arsenal] started [2015-08-18 14:57:18,900][INFO ][gateway ] [Arsenal] recovered [0] indices into cluster_state
とりあえず叩いてみますよ、と。
$ curl -i -XGET 'localhost:9200/' HTTP/1.1 200 OK Content-Type: application/json; charset=UTF-8 Content-Length: 340 { "status" : 200, "name" : "Joe Cartelli", "cluster_name" : "elasticsearch", "version" : { "number" : "1.7.1", "build_hash" : "b88f43fc40b0bcd7f173a1f9ee2e97816de80b19", "build_timestamp" : "2015-07-29T09:54:16Z", "build_snapshot" : false, "lucene_version" : "4.10.4" }, "tagline" : "You Know, for Search" }
cURLでRESTにイジれるのがElasticsearchの良いところですが、
SenseというWebなGUIからやった方が何かと簡単な気がするので、Marvelというプラグインを入れます。
$ bin/plugin -i elasticsearch/marvel/latest -> Installing elasticsearch/marvel/latest... Trying http://download.elasticsearch.org/elasticsearch/marvel/marvel-latest.zip... Downloading .....DONE Installed elasticsearch/marvel/latest into /Users/eshinoha/Downloads/elasticsearch-1.7.1/plugins/marvel
elasticsearch.ymlに↓を追記します。
388 http.cors.enabled: true 389 http.cors.allow-origin: /https?://(www.)?elastic.co/
再起動してSenseにアクセスすると↓こんなような感じでcURLじゃなくてもサクサクいろいろ出来ます。
(この例だとwebsiteっていうindexにblogっていうtypeで123ってidでデータをストア)
■ Logstashを立ち上げる
同じようにLogstashも落としてきて、
$ wget https://download.elastic.co/logstash/logstash/logstash-1.5.4.zip --2015-08-24 10:28:16-- https://download.elastic.co/logstash/logstash/logstash-1.5.4.zip Resolving download.elastic.co... 174.129.205.54, 184.73.223.96, 107.22.237.122, ... 〜略〜
解凍して、(ものすごい量のjrubyのホゲホゲしてきたヤツが落ちてきました)
$ unzip logstash-1.5.4.zip Archive: logstash-1.5.4.zip inflating: logstash-1.5.4/LICENSE inflating: logstash-1.5.4/CHANGELOG.md inflating: logstash-1.5.4/NOTICE.TXT inflating: logstash-1.5.4/CONTRIBUTORS 〜略〜
まんまだと立ち上げられないようになってます。笑
$ bin/logstash No command given Usage: logstash [command args] Run a command with the --help flag to see the arguments.
–helpで叩いたら、設定ファイル指定してねんって事だそうで。
Options: -f, --config CONFIG_PATH Load the logstash config from a specific file or directory. If a directory is given, all files in that directory will be concatenated in lexicographical order and then parsed as a single config file. You can also specify wildcards (globs) and any matched files will be loaded in the order described above.
なんとなくRedisのデータを食いたいので、ググってみると、
↓のページで設定の方法が書いてありましたよ、と。
https://www.elastic.co/guide/en/logstash/current/plugins-inputs-redis.html
data_typeをchannelにするとRedisのチャンネルが読めるっぽくて、
その際は key を設定してねって↓のように書いてありました。
The name of a Redis list or channel. TODO: change required to true
1 input { 2 redis { 3 data_type => "channel" 4 host => "127.0.0.1" 5 key => "foo" 6 port => 6379 7 } 8 } 9 10 output { 11 stdout {} 12 }
起動は出来たけど、Redisに繋げねぇぞゴルァって怒られてます。笑
$ bin/logstash -f hoge.conf $ bin/logstash -f hoge.conf Logstash startup completed Redis connection problem {:exception=>#, :level=>:warn} Redis connection problem {:exception=>#, :level=>:warn} Redis connection problem {:exception=>#, :level=>:warn}
■ Redisを立ち上げる
Redisも↓から最新版を落としてきて、解凍して、makeしてってシンプルなヤツで、
http://download.redis.io/releases/redis-3.0.3.tar.gz
起動してからの、、
a$ src/redis-server 6120:C 24 Aug 12:27:48.384 # Warning: no config file specified, using the default config. In order to specify a config file use src/redis-server /path/to/redis.conf 6120:M 24 Aug 12:27:48.386 * Increased maximum number of open files to 10032 (it was originally set to 256). _._ _.-``__ ''-._ _.-`` `. `_. ''-._ Redis 3.0.3 (00000000/0) 64 bit .-`` .-```. ```/ _.,_ ''-._ ( ' , .-` | `, ) Running in standalone mode |`-._`-...-` __...-.``-._|'` _.-'| Port: 6379 | `-._ `._ / _.-' | PID: 6120 `-._ `-._ `-./ _.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | http://redis.io `-._ `-._`-.__.-'_.-' _.-' |`-._`-._ `-.__.-' _.-'_.-'| | `-._`-._ _.-'_.-' | `-._ `-._`-.__.-'_.-' _.-' `-._ `-.__.-' _.-' `-._ _.-' `-.__.-' 6120:M 24 Aug 12:27:48.393 # Server started, Redis version 3.0.3 6120:M 24 Aug 12:27:48.395 * DB loaded from disk: 0.001 seconds 6120:M 24 Aug 12:27:48.395 * The server is now ready to accept connections on port 6379
Hello Worldしてみると、、
$ src/redis-cli publish 'foo' 'Hello World!' (integer) 1
Logstashの方にも吐き出されていますよ、と。
$ bin/logstash -f hoge.conf Logstash startup completed 2015-08-24T03:32:54.082Z %{host} Hello World!
■ Kibanaを立ち上げる
ダウンロードしてきて、解凍します、と。
$ wget https://download.elastic.co/kibana/kibana/kibana-4.1.1-darwin-x64.tar.gz $ tar xvf kibana-4.1.1-darwin-x64.tar.gz x kibana-4.1.1-darwin-x64/ x kibana-4.1.1-darwin-x64/bin/ x kibana-4.1.1-darwin-x64/bin/kibana x kibana-4.1.1-darwin-x64/bin/kibana.bat x kibana-4.1.1-darwin-x64/node/ x kibana-4.1.1-darwin-x64/node/bin/ 〜略〜
起動したら、Kibana用のインデックスが無いよ的なことを言われています。
$ bin/kibana {"name":"Kibana","hostname":"hogehoge.com","pid":6549,"level":30,"msg":"No existing kibana index found","time":"2015-08-24T03:43:27.858Z","v":0} {"name":"Kibana","hostname":"hogehoge.com","pid":6549,"level":30,"msg":"Listening on 0.0.0.0:5601","time":"2015-08-24T03:43:27.876Z","v":0}
ダッシュボードは↓こんな感じ。
■ Redisに入れたデータをLogstash経由でElasticsearchに入れてKibanaで可視化する
ようやくありそうなシチュエーションになってきました。
Logstashの設定でローカルのElasticsearchにもデータを投入するようにします。
11 output { 12 stdout {} 13 elasticsearch { 14 host => "localhost" 15 } 16 }
Redisにデータを入れてElasticsearch側から見てみます。
$ src/redis-cli publish 'foo' 'Hello World!' (integer) 1
インデックス一覧をみるのに↓のように補完してくれるの嬉しい…
# ちなみに、Elasticsearchでは、_index(RDBMSで言えばdatabase)と_type(RDBMSで言えばtable)という概念です
↓に入っていることが分かります。
インデックスを検索して、
↓データが入っているのが分かります。
続いてKibanaのダッシュボードを開くと、今度はインデックスがあるのでCREATE出来て、
Discoverに行くと、ソレっぽいのが出てきます。
—
ということで、一旦ローカルに環境は出来たので、続きは ELK テクニカルワークショップ の
ハンズオンでイロイロ楽しんできたいと思います〜(´▽`)ノ
コメント