こんにちは、Elastic Certified Engineerのshin0higuchiです😊
みなさん、Elasticsearchの正常性確認はどうしていますか?
実際にサービスを運用するとなると、一口に「正常性確認」と言っても色々な観点でのチェックが必要です。
システムの死活、リソースの状態、パフォーマンス、検索queryの妥当性などなど......
Monitoring+Alertingで監視したり、その他の監視ツールやelasticのsupport-diagnosticsを使ったり、人によってはcurlコマンドで確認するシーンもあるのではないでしょうか?
ただ、個人的には、観点が多いと色々なツールを組み合わせたチェックが必要になり、多少手間を感じていました。
そこで、今回は上司に教えてもらったKarateというテスト自動化ツールが、Elasticsearchと相性が良さそうだったのでしてみました。
そもそもKarateとは?
Karateは、CucumberというBDD(ビヘイビア駆動開発)を行うためのフレームワークをJavaVM上に移植したもので、Gherkinの文法を自然言語に近い形で記述できるユニットテストツールです。
こちらの@takanorigさんのQiita記事を読めば大体わかります。
qiita.com
個人的に感じているメリットとしては、
- シナリオベースのテストが簡単にかける
- 学習コストが低い
- JSONが扱いやすい
といったところです。
実際にやってみる
KarateでElasticsearchのStatusなどをチェックしてみましょう。
今回は一例として
- 想定する設定と実際のクラスタ設定の差分がないか?
- indexの検索などが正常に行われるか?
- 操作が特定時間以上かかっていないか?
などを確認します。
細かい説明は前述のQiita記事を読んでもらうとして、
Karateでは*.featureというファイルにテストしたい内容を記述します。
フォルダ構成は下記のようになっています。
src ├── main │ └── java └── test ├── java │ ├── health │ │ ├── HealthRunner.java │ │ └── health.feature │ ├── karate-config.js │ └── logback-test.xml
テストケースはhealth.featureに記述していきます。
設定例
Feature: Health Test Background: * url 'http://localhost:9200' * def index_pattern = 'kibana_sample_data_logs' * def total_nodes_num = 1 * def data_nodes_num = 1 * def master_nodes_num = 1 Scenario: clusterのステータスがgreen Given path '_cat/health' When method get Then status 200 And print response And match response contains "green" Scenario: kibana_sample_data_logs が検索可能 Given path index_pattern + '/_search' When method get Then status 200 Scenario: indexの検索レスポンスが100msec未満 Given path index_pattern + '/_search' When method get And assert responseTime < 100 And print responseTime Scenario: cluster statsの結果が正常 Given path '/_cluster/stats' When method get Then status 200 And match response.nodes.count.total == total_nodes_num And match response.nodes.count.data == data_nodes_num And match response.nodes.count.master == master_nodes_num And assert response.nodes.os.mem.free_percent > 10
ざっくり説明すると、
Backgroundというセクションで URLやその他の変数を定義しています。こちらは外部ファイルから読み込むことも可能なようです。
そして、各Scenario内で実際にAPIを叩いてその結果を検証しています。
今回はシンプルなケースにしていますが、Scenarioという名前の通り、連続した実行も可能です。
例えば _cat/indicesを叩いて、その結果を使って各indexのstatsを確認するなど。
実行コマンド
mvn clean test -Dtest=HealthRunner
結果
Karateの実行結果は、コンソール出力されるだけでなく、見やすいHTMLを生成してくれます。
例えば下の結果を見れば、StatusがGreenであることを確認するテストが失敗しています。
内容を見ると、クラスタのステータスがyellowになっていることがすぐにわかりますね。
まとめ
APIのステータスコードを確認する他、レスポンスのJSONを扱うのが容易で、サクサクとテストケースがかけるのは非常に便利だと感じました。
設定が手軽であることにくわえ、柔軟なテストケースを作成できることが魅力の一つ。
登録→検索→削除のようなシナリオを試験したり、プラグインのバージョンチェックなどもできるので、定期実行させておくと便利そうです。
以上です。お読みいただきありがとうございました。
Acroquest Technologyでは、キャリア採用を行っています。
- ディープラーニング等を使った自然言語/画像/音声/動画解析の研究開発
- Elasticsearch等を使ったデータ収集/分析/可視化
- マイクロサービス、DevOps、最新のOSSを利用する開発プロジェクト
- 書籍・雑誌等の執筆や、社内外での技術の発信・共有によるエンジニアとしての成長
少しでも上記に興味を持たれた方は、是非以下のページをご覧ください。世界初のElastic認定エンジニアと一緒に働きたい人Wanted! - Acroquest Technology株式会社のエンジニア中途・インターンシップの求人 - Wantedlywww.wantedly.com