はじめに
KibanaのDev Console(Dev Toolsの機能)はElasticsearchのAPIを試すのに非常に有用なツールです。
https://www.elastic.co/guide/en/kibana/current/devtools-kibana.html
これまではDev Consoleで試したAPI入力をcURL形式で出力する方法はサポートされていましたが、8.16より新しくPythonとJavascriptのコードの形で出力できるようになりました。
https://www.elastic.co/guide/en/kibana/current/console-kibana.html#import-export-console-requests
今回は上記の機能に加えて8.16で追加になった履歴機能なども紹介していきます。
Dev Tools
開発者用の便利機能集です。
- Dev Console
- 今回紹介する機能
- Search Profiler
- 検索にかかった時間など詳細に調べるための機能
- Grok Debugger
- Grokパターンツール
- Painless Lab
- Painlessスクリプトツール
Dev Consoleとは?
左上の3本線=>Managementの下のDev Toolsをクリックすると、デフォルトでDev Consoleが開きます。8.16から以下のようになりました。
地味ですが以下の2つの機能がかなり嬉しいです。
- Clear this input
- これまでは長くなると自分で消すしかなく面倒でしたがクリック一つで消えるようになりました。
- 消す前に右上にある
Export requests
を実行しておくとテキストファイルとして残せます - 保存したテキストファイルはImportもできます
- History
Dev Consoleの簡単な紹介
名前の通り開発者向けではありますが、ちょっと調べたいときには使えるので簡単に紹介しておきます。
基本的には下記に記載のあるAPIを実行するためのツールです。
https://www.elastic.co/guide/en/elasticsearch/reference/current/rest-apis.html
例えば検索では以下のように使います。
seminar
というインデックスに対して、description
フィールドにある全文検索でテスト
というキーワードを探す、というものです。
GET seminar/_search
{
"query": {
"match": {
"description": "テスト"
}
}
}
インデックスを作成したり、設定の変更などにはPUTやPOSTを利用します。
よく使うのはクラスタの状態を確認する_cat
APIです。
GET _cat/indices?v
と入力して、赤く囲った三角をクリックすると実行されます。
右側が実行結果ですが、これはインデックスの一覧が表示されています。
?v
をつけることで一番上に表示されている情報が何かというのが示されています。
Code Exportの機能
Code ExportはDev Consoleで実行したものを外部から実行する際のコードとして出力するものです。これまではcURLコマンドとして出力できました。
実行するための右矢印の横にある3つの点をクリックするとCopy as curl
というのが出てきます。
クリップボードにコピーされているので、テキストエディタ等に貼り付けると以下のように表示されます。
(URLの部分は一部隠してあります)
curl -X GET -H "Content-Type: application/json" -d '{"query":{"match":{"description":"テスト"}}}' "https://xxxxxx.asia-northeast1.gcp.cloud.es.io:443/seminar/_search"
これをsh
などで実行するとDev Consoleで表示されたものと同じものが返ってきます。
ここにAuthenticationの情報はないのでそれは追加する必要はあります。
例えば、以下のようにelastic
ユーザとパスワードを指定します。
curl -X GET -u elastic:hogehoge -H "Content-Type: application/json" -d '{"query":{"match":{"description":"テスト"}}}' "https://xxxxxx.asia-northeast1.gcp.cloud.es.io:443/seminar/_search"
PythonでのExport
Copy as curl
の横にchange
とあるので、それをクリックすると以下のようになります。
ここでPythonを選び、Copy code
をクリックするとPythonコードがクリップボードにコピーされるので、テキストエディタに貼り付けてみます。
import os
from elasticsearch import Elasticsearch
client = Elasticsearch(
hosts=["https://xxxxxxxx.asia-northeast1.gcp.cloud.es.io:443"],
api_key=os.getenv("ELASTIC_API_KEY"),
)
resp = client.search(
index="seminar",
query={
"match": {
"description": "テスト"
}
},
)
print(resp)
ELASTIC_API_KEY
というAPIキーでアクセスする形のコードが出てきています。
このAPIキーは以下のページに説明があります。
https://www.elastic.co/guide/en/kibana/current/api-keys.html
デフォルト出力をPythonにする
以下の画面でSet as default
をクリックするとPythonがデフォルトのExportに切り替わります。
JavascriptでのExport
Javascriptで出力すると以下のようになります。
const { Client } = require("@elastic/elasticsearch");
const client = new Client({
nodes: [
"https://xxxxxxxx.asia-northeast1.gcp.cloud.es.io:443",
],
auth: {
apiKey: process.env["ELASTIC_API_KEY"],
},
});
async function run() {
const response = await client.search({
index: "seminar",
query: {
match: {
description: "テスト",
},
},
});
console.log(response);
}
run();
まとめ
こちらの機能を利用することで、まずDev Consoleで動きを確かめてから、PythonやJavascriptで本格的にコーディングに入る、という効率的な開発を行うことができます。
新しくなったDev Consoleを是非お試しください。