君は心理学者なのか?

大学時代に心理学を専攻しなぜかプログラマになった、サイコ(心理学)プログラマかろてんの雑記。

ログ解析で用いられるElasticsearchとはなんなのか

f:id:karoten512:20181224231923j:plain

いきさつ

Elasticsearchについて「大量のデータをスピーディーに解析する」

くらいしか理解できていなかったので、整理することにした。

ただし、今回は「ログ解析」という観点に絞って整理する。

ログ解析の一般的な構成

おもにログ収集、ログ集積、ログ解析の3つの要素から構成されることが多い。

具体的には以下の通り。

  • ログ収集

    • Fluentd
    • Logstash
    • Apache Flume
  • ログ集積

    • Elasticsearch
    • InfluxDB
    • MongoDB
    • Datadog
    • AWS CloudSearch
    • AWS S3
    • AWS Redshift
    • GCP BigQuery
  • ログ解析(可視化)

    • Tableau
    • Kibana
    • Grafana

ElasticSearchはログ集積にあたる。

ElasticSearchを一言で

スケーラビリティに優れた全文検索エンジン

用語をざっくり理解

Elasticsearch リレーショナルデータベース
Index データベース
Type テーブル
Document レコード

実際に動かしてみる

インストール

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.0.tar.gz
$ tar -xzf elasticsearch-6.5.0.tar.gz
# 日本語で全文検索をするためのプラグインを入れておく
$ bin/elasticsearch-plugin install analysis-kuromoji

起動

$ bin/elasticsearch

http://localhost:9200

にアクセスして、以下のようにjsonが表示されればOK。

{
  "name" : "lzmX37g",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "gs4RKJXHTj6XSHeQmn_irw",
  "version" : {
    "number" : "6.5.0",
    "build_flavor" : "default",
    "build_type" : "tar",
    "build_hash" : "816e6f6",
    "build_date" : "2018-11-09T18:58:36.352602Z",
    "build_snapshot" : false,
    "lucene_version" : "7.5.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Indexを登録

基本的に操作はREST方式で行います。

Indexを登録

PUT /library/books/1

{
  "title": "Norwegian Wood",
  "name": {
    "first": "Haruki",
    "last": "Murakami"
  },
  "publish_date": "1987-09-04T00:00:00+0900",
  "price": 19.95
}
  • レスポンス
{
  "_index": "library",
  "_type": "books",
  "_id": "1",
  "_version": 1,
  "result": "created",
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "created": true
}

取得

GET /library/books/1

  • レスポンス
{
  "_index": "library",
  "_type": "books",
  "_id": "1",
  "_version": 1,
  "found": true,
  "_source": {
    "title": "Norwegian Wood",
    "name": {
      "first": "Haruki",
      "last": "Murakami"
    },
    "publish_date": "1987-09-04T00:00:00+0900",
    "price": 19.95
  }
}

検索

GET /library/books/_search

{
  "query": {
    "match": {
      "title": "fox"
    }
  }
}
  • レスポンス

長いので省略。

まとめ

わかったこと

  • Elasticsearchはログ集積に使用される

  • 操作はRESTに則っている

  • kibanaと組み合わせて使うことができる(使ってみたけどまだ使いこなせていない)

まだわかっていないこと

  • ログ収集するときは、ログを持っている各インスタンスからElasticsearchのエンドポイントを叩く感じになるのだろうか

  • そのために必要なのがログ収集用のソフトなのかな

  • どうやってスケーラビリティを高くしていくのか、具体的にわかっていない

参考サイト

qiita.com

qiita.com