Elasticsearch/Kibanaのインストールからcliでのデータ操作とブラウザでのデータ確認を試す

Elasticsearchをインストール

Install Elasticsearch from archive on Linux or MacOS | Elasticsearch Reference [7.8] | Elastic

JavaはElasticsearchに同梱されていますので、事前のJavaインストールは不要です。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.8.0-linux-x86_64.tar.gz

$ tar xvzf elasticsearch-7.8.0-linux-x86_64.tar.gz

同梱されていたJavaのバージョンはこちらです。

$ ./elasticsearch-7.8.0/jdk/bin/java -version
openjdk version "14.0.1" 2020-04-14
OpenJDK Runtime Environment AdoptOpenJDK (build 14.0.1+7)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 14.0.1+7, mixed mode, sharing)

ディレクトリ構成

  • bin/
  • config/
    • config/elasticsearch.keystore は起動すると作成されるファイル
  • data/
  • jdk/
    • 同梱されているJavaランタイム
    • バージョン 14.0.1
  • lib/
    • jarファイル群
  • logs/
    • 起動すると中身が作成される
  • modules/
  • plugins/

Kibanaをインストール

Install Kibana with .tar.gz | Kibana User Guide [5.0] | Elastic

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-7.8.0-linux-x86_64.tar.gz

$ tar xvzf kibana-7.8.0-linux-x86_64.tar.gz

KibanaはNode.jsで動くようです。同梱されていたNode.jsのバージョンはこちらです。

$ ./kibana-7.8.0-linux-x86_64/node/bin/node --version
v10.21.0

ディレクトリ構成

  • bin/
  • built_assets/
  • config/
  • data/
    • 起動すると中身が作成される
  • .i18nrc.json
  • node/
    • 同梱されているNodeランタイム
    • バージョン 10.21.0
  • node_modules/
  • optimize/
  • package.json
  • plugins/
  • src/
  • webpackShims/
  • x-pack/

起動

$ ./elasticsearch-7.8.0/bin/elasticsearch & ./kibana-7.8.0-linux-x86_64/bin/kibana &

コンソールにログが流れていきます。これ以降のコンソールの操作は別のコンソールを開いたほうが見やすいです。

Elasticsearchのデータ操作をコンソールから試す

Elasticsearchはデフォルトでは9200番ポートで動きます。

別のコンソールからアクセスします。

$ curl http://localhost:9200/
{
  "name" : "9b660779cd64",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "7dWqEfrWS9akI4NMEzs-ew",
  "version" : {
    "number" : "7.8.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "757314695644ea9a1dc2fecd26d1a43856725e65",
    "build_date" : "2020-06-14T19:35:50.234439Z",
    "build_snapshot" : false,
    "lucene_version" : "8.5.1",
    "minimum_wire_compatibility_version" : "6.8.0",
    "minimum_index_compatibility_version" : "6.0.0-beta1"
  },
  "tagline" : "You Know, for Search"
}

Elasticsearchに存在するインデックスの一覧を見てみます。

$ curl 'http://localhost:9200/_cat/indices?v'
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana-event-log-7.8.0-000001 -TjdCLKQTUqbMPXcvOP2Ew   1   0          1            0      5.2kb          5.2kb
green  open   .apm-custom-link               zJ9WU10aQoutF5Uybx3yLQ   1   0          0            0       208b           208b
green  open   .kibana_task_manager_1         7pchraIzSCyzoEcCR3NhHA   1   0          5           15     62.1kb         62.1kb
green  open   .apm-agent-configuration       dGJm3UpWT5ClSoxWUbbO0w   1   0          0            0       208b           208b
green  open   .kibana_1                      p6eJGY4xSeilbrEOLSznEg   1   0          4            0     31.1kb         31.1kb

なお、Kibanaを起動する前はインデックスは1つもありません。上記5つのインデックスはすべてKibanaが保存したもののようです。

$ curl 'http://localhost:9200/_cat/indices?v'
health status index uuid pri rep docs.count docs.deleted store.size pri.store.size

itemsというインデックスに適当にドキュメントを登録してみます。

$ curl -XPOST -H 'Content-Type: application/json' -d '{"Title":"aaa", "category":"c1"}' 'http://localhost:9200/items/_doc'
{"_index":"items","_type":"_doc","_id":"rd5f3nIBOj9gCf2NKvyO","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":0,"_primary_term":1}

インデックスを見てみるとドキュメントが登録されたことを確認できます。

$ curl 'http://localhost:9200/_cat/indices?v'
health status index                          uuid                   pri rep docs.count docs.deleted store.size pri.store.size
green  open   .kibana-event-log-7.8.0-000001 -TjdCLKQTUqbMPXcvOP2Ew   1   0          1            0      5.3kb          5.3kb
green  open   .apm-custom-link               zJ9WU10aQoutF5Uybx3yLQ   1   0          0            0       208b           208b
green  open   .kibana_task_manager_1         7pchraIzSCyzoEcCR3NhHA   1   0          5            0     62.8kb         62.8kb
green  open   .apm-agent-configuration       dGJm3UpWT5ClSoxWUbbO0w   1   0          0            0       208b           208b
green  open   .kibana_1                      p6eJGY4xSeilbrEOLSznEg   1   0          8            0       44kb           44kb
yellow open   items                          9kI-yvOLSP-wFRWvYltckw   1   1          1            0        4kb            4kb

もう一度適当にドキュメントを登録してみます。POSTするURLの最後にIDを付けると、そのIDでドキュメントが登録されます。

$ curl -XPOST -H 'Content-Type: application/json' -d '{"Title":"bbb", "category":"c2"}' 'http://localhost:9200/items/_doc/2'
{"_index":"items","_type":"_doc","_id":"2","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

データを見てみると2つのドキュメントを確認できます。

$ curl -s 'http://localhost:9200/items/_search' | jq .
{
  "took": 874,
  "timed_out": false,
  "_shards": {
    "total": 1,
    "successful": 1,
    "skipped": 0,
    "failed": 0
  },
  "hits": {
    "total": {
      "value": 2,
      "relation": "eq"
    },
    "max_score": 1,
    "hits": [
      {
        "_index": "items",
        "_type": "_doc",
        "_id": "rd5f3nIBOj9gCf2NKvyO",
        "_score": 1,
        "_source": {
          "Title": "aaa",
          "category": "c1"
        }
      },
      {
        "_index": "items",
        "_type": "_doc",
        "_id": "2",
        "_score": 1,
        "_source": {
          "Title": "bbb",
          "category": "c2"
        }
      }
    ]
  }
}

登録したインデックスのmappingを見てみます。

$ curl -s 'http://localhost:9200/items/_mapping' | jq .
{
  "items": {
    "mappings": {
      "properties": {
        "Title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "category": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        }
      }
    }
  }
}

3つ目のドキュメントを登録してみます。priceというフィールドを追加してみます。

$ curl -XPOST -H 'Content-Type: application/json' -d '{"Title":"ccc", "category":"c3", "price": 9200}' 'http://localhost:9200/items/_doc/3'
{"_index":"items","_type":"_doc","_id":"3","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":1}

mappingを見てみるとpriceが増えていることを確認できます。

$ curl -s 'http://localhost:9200/items/_mapping' | jq .
{
  "items": {
    "mappings": {
      "properties": {
        "Title": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "category": {
          "type": "text",
          "fields": {
            "keyword": {
              "type": "keyword",
              "ignore_above": 256
            }
          }
        },
        "price": {
          "type": "long"
        }
      }
    }
  }
}

Kibanaをブラウザから試す

Kibanaはデフォルトでは5601番ポートで動きます。ブラウザでアクセスしてみます。

http://localhost:5601/

f:id:suzuki-navi:20200624201521p:plain

右の「Explore on my own」をクリック。

f:id:suzuki-navi:20200624201538p:plain

左半分にあるメニュー「Discover」をクリック。

f:id:suzuki-navi:20200624201556p:plain

Index patternに items と入れ、「Next step」をクリック。( items* でもよいです)

f:id:suzuki-navi:20200624201641p:plain

「Create index pattern」をクリック。

f:id:suzuki-navi:20200624201656p:plain

左のメニューを開いて、

f:id:suzuki-navi:20200624201711p:plain

「Discover」をクリック。

すると、さきほどcurlコマンドで入れたデータが見れました。

f:id:suzuki-navi:20200624201727p:plain