Taste of Tech Topics

Acroquest Technology株式会社のエンジニアが書く技術ブログ

Elastic Stack 7.5 リリース、注目の Kibana Lens が新登場!

こんにちは、@shin0higuchiです😊

本日Elastic Stackの7.5がリリースされました。
今回は個人的に興味をひかれた新機能に絞って紹介します。
どんな機能が追加されたのか、早速見てみましょう。

リリースノートはこちら
https://www.elastic.co/guide/en/elasticsearch/reference/current/release-notes-7.5.0.htmlwww.elastic.co

Kibana Lens

Kibanaのvisualizationをより感覚的に作成するための機能、Lensがbetaリリースされました。
データをドラッグ&ドロップで追加しながら、グラフの種別切り替えも簡単です。
これは今回の目玉機能と言えると思います。

f:id:acro-engineer:20191203030132p:plain:w600
Kibana Lens画面

画面左のフィールド一覧から、画面右のエリアにドラッグすることで作成するようなUIになっています。

f:id:acro-engineer:20191203030441p:plain:w600
Kibana Lens画面

種別を切り替えた時に、どのような見た目になるのかも一覧でき、Kibanaの操作に慣れていないユーザーでも簡単に利用できそうです。

data frame analysisにclassificationが追加

classificationおよび、その評価を行うevaluation APIが実装されました。
※今の所、Elasticsearch側のAPIは実装されていますが、Kibanaの画面から指定できるのはoutlier_detectionとregressionのみのようです。

簡単に試すために、titanicのデータセットを取り込みます。

f:id:acro-engineer:20191203032038p:plain:w600
csv import
f:id:acro-engineer:20191203032157p:plain:w600
取り込み完了

data frame analyticsのジョブを作成します。
titanic-dataを分析し、結果はtitanic-data-predictionに入ります。
今回のポイントは、analysisの中に"classification"を指定できるようになった点です。

PUT _ml/data_frame/analytics/titanic-data
{
  "source": {
    "index": "titanic-data" 
  },
  "dest": {
    "index": "titanic-data-prediction" 
  },
  "analysis":
    {
      "classification": { 
        "dependent_variable": "Survived",
        "num_top_classes": 2,
        "training_percent":80
      }
    }
}


ジョブをスタートし...

POST _ml/data_frame/analytics/titanic-data/_start

trainingに利用されたデータを省いて結果を取得します。

GET titanic-data-prediction/_search
{
  "query": {
    "bool": {
      "filter": {
        "term": {
          "ml.is_training": false
        }
      }
    }
  }
}

Hitsは次のようになります。
ml以下に分析結果が格納されていることがわかります。

{
        "_index" : "titanic-data-prediction",
        "_type" : "_doc",
        "_id" : "07LNx24BGrho6pjYL9EM",
        "_score" : 0.0,
        "_source" : {
          "Survived" : 0,
          "Pclass" : 1,
          "Siblings/Spouses Aboard" : 0,
          "Parents/Children Aboard" : 0,
          "Sex" : "male",
          "ml__id_copy" : "07LNx24BGrho6pjYL9EM",
          "Age" : 64,
          "Name" : "Mr. Arthur Ernest Nicholson",
          "Fare" : 26,
          "ml" : {
            "top_classes" : [
              {
                "class_probability" : 0.7037370235841935,
                "class_name" : "0"
              },
              {
                "class_probability" : 0.2962629764158065,
                "class_name" : "1"
              }
            ],
            "Survived_prediction" : "0",
            "is_training" : false
          }
        }
      }

evaluate APIについても試してみます。

POST _ml/data_frame/_evaluate
{
   "index": "titanic-data-prediction",
   "evaluation": {
      "classification": { 
         "actual_field": "Survived", 
         "predicted_field": "ml.Survived_prediction.keyword", 
         "metrics": {
           "multiclass_confusion_matrix" : {} 
         }
      }
   }
}

評価結果は下記の通り。

{
  "classification" : {
    "multiclass_confusion_matrix" : {
      "confusion_matrix" : [
        {
          "actual_class" : "0",
          "actual_class_doc_count" : 545,
          "predicted_classes" : [
            {
              "predicted_class" : "0",
              "count" : 483
            },
            {
              "predicted_class" : "1",
              "count" : 62
            }
          ],
          "other_predicted_class_doc_count" : 0
        },
        {
          "actual_class" : "1",
          "actual_class_doc_count" : 342,
          "predicted_classes" : [
            {
              "predicted_class" : "0",
              "count" : 71
            },
            {
              "predicted_class" : "1",
              "count" : 271
            }
          ],
          "other_predicted_class_doc_count" : 0
        }
      ],
      "other_actual_class_count" : 0
    }
  }
}

ちなみに、リリースノートでmulti classと書いてありましたが、下記のドキュメントによると、現状は2クラス分類のみがサポートされているようです。
Data frame analytics job resources | Elasticsearch Reference [7.5] | Elastic

今後の更新が楽しみな機能の一つですね。

enrich processor

ingest pipelineにenrich processorが追加されました。
このprocessorは、他のindexにあるdataを使って、情報を付加することが可能です。
logstashでのtranslate filterに近いものですね。

他のprocessorに比べると使い方が複雑になっています。
事前にenrich policyというenrich設定を登録しておき、processor側でそれを呼び出す形になります。

次のenrich policyは公式ドキュメントの例ですが、emailフィールドでマッチしたドキュメントの、["first_name", "last_name", "city", "zip", "state"] フィールドを取得する設定になります。

PUT /_enrich/policy/users-policy
{
    "match": {
        "indices": "users",
        "match_field": "email",
        "enrich_fields": ["first_name", "last_name", "city", "zip", "state"]
    }
}


processorは下記のように指定します。

"processors" : [
    {
      "enrich" : {
        "policy_name": "users-policy",
        "field" : "email",
        "target_field": "user",
        "max_matches": "1"
      }
    }
  ]

個人的に割と欲しかった機能なので、非常に嬉しいです😊

詳細については、
Enrich your data | Elasticsearch Reference [7.5] | Elastic
をご参照ください。

SLM(Snapshot Life cycle Management)でsnapshotの管理が可能に

Kibanaの画面から、snapshotの自動取得および削除を設定できるようになりました。
Managementのタブから設定することができます。

f:id:acro-engineer:20191203113938j:plain:w600
SLM

まとめ

今回も大きな機能追加がいくつもありました。
ここで扱わなかったものも数多くあります。詳しくはリリースノートをご覧ください。
お読みいただきありがとうございました。

Acroquest Technologyでは、キャリア採用を行っています。


  • ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
  • Elasticsearch等を使ったデータ収集/分析/可視化
  • マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
  • 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長

 
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。

世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニアの求人 - Wantedlywww.wantedly.com