LoginSignup
6
0

IntelliJ, Docker, Dashboardsを使用してOpenSearchのデバッグ環境をサクッと作ってみた

Last updated at Posted at 2023-12-22

こんにちは。Supership株式会社データソリューションスタジオの懸川です。

この記事は、Supershipグループ Advent Calendar 2023の23日目の記事になります。

はじめに

先日、OpenSearchの内部の処理を見てみるという目的でOpenSearchをソースコードからビルドしてIntelliJでデバッグをしてみました。挙動を理解する上で、サンプルデータがあった方が色々と都合がいいのですが、いちいち用意するのは面倒でした。そこでOpenSearch Dashboardという可視化ツールの機能の一部であるサンプルデータの生成を利用して、ワンクリックでデータを用意しました。
この記事では, DockerでOpenSeach Dashboardsを起動&サンプルデータ生成し、IntelliJでサクッとOpenSearchのデバッグ環境を作る方法を紹介したいと思います。

環境

  • OS: macOS Ventura (m1)
  • OpenSearch: v2.11.2
  • OpenSearch Dashboards: v2.11.1
  • IDE: IntelliJ IDEA 2023.2.5 (Community Edition)
  • Java: v17.0.9
  • Docker Desktop: v4.25.2

※ 本記事はIntelliJの使用を前提としています。IntelliJはインストール後に特に設定をしなくてもポチポチするだけですぐデバッグできたのでおすすめです。IntellijのCommunity Editionであれば無料で使用することができるので是非。

1 IntelliJでOpenSearchをデバッグモードで起動

1.1 OpenSearchのソースコードをクローン

https://github.com/opensearch-project/OpenSearch
ローカルに上のリポジトリをクローンします。

$ git clone -b 2.11 git@github.com:opensearch-project/OpenSearch.git

今回はmainブランチではなく最新のリリースバージョンのブランチ(作成時は2.11)を使用します。これは後でDockerで起動させるOpenSearch Dashboardsとバージョンを合わせる必要があるためです。存在するDashboardsのコンテナイメージのバージョンはこちらのDocker Hubから確認できます。(パッチバージョンに関してはズレていても動きました)

1.2 OpenSearchのbuild

今回はローカル環境でのみ動けば良いので以下のコマンドでビルドします。

$ ./gradlew localDistro

1.3 IntelliJでデバッガを起動

ここまでできたら、IntelliJを起動してクローンしたOpenSearchディレクトリを開きます。
開くと、右上に虫のマークのボタンがあると思うのでこれをクリックします。おそらくデフォルトの設定のままで問題ありません。
スクリーンショット 2023-12-21 1.00.00.png

1.4 デバッグモードでOpenSearchを起動

--debug-jvmオプションをつけてOpenSearchを起動させます。

$ ./gradlew run --debug-jvm

うまくいけば9200番ポートでOpenSearchが立ち上がっているはずです。

$ curl localhost:9200
{
  "name" : "runTask-0",
  "cluster_name" : "runTask",
  "cluster_uuid" : "5VoG1PGdSRWj847fe1D8Vw",
  "version" : {
    "distribution" : "opensearch",
    "number" : "2.11.2-SNAPSHOT",
    "build_type" : "tar",
    "build_hash" : "a5cc55494530c8992220d53a94c2c09994f3e14f",
    "build_date" : "2023-12-20T15:18:42.527656Z",
    "build_snapshot" : true,
    "lucene_version" : "9.7.0",
    "minimum_wire_compatibility_version" : "7.10.0",
    "minimum_index_compatibility_version" : "7.0.0"
  },
  "tagline" : "The OpenSearch Project: https://opensearch.org/"
}

これでOpenSearch側の準備は完了です。

2 Docker でOpenSearch Dashboardsを起動

2.1 ファイルの準備

基本的にはOpenSearch Dashboardsのコンテナイメージがあるのでそれを使用すればいいのですが、デフォルトの設定だとユーザー名とパスワードの入力が必要になります。
Quic Startにはどちらもadminで認証ができると書いてあるのですが、私の環境ではなぜか認証できませんでした。そこで今回の目的はあくまでOpenSearchの内部の処理の確認ということもあり、ユーザー認証を除外するようにします。(認証除外ドキュメント)
以下がユーザー認証を除外しつつOpenSearch Dashboardsを起動するのに必要なファイルです。

$ tree opensearch-dashboards
opensearch-dashboards
├── Dockerfile
├── compose.yml
└── opensearch_dashboards.yml
Dockerfile
FROM opensearchproject/opensearch-dashboards:2.11.1
RUN /usr/share/opensearch-dashboards/bin/opensearch-dashboards-plugin remove securityDashboards
COPY --chown=opensearch-dashboards:opensearch-dashboards opensearch_dashboards.yml /usr/share/opensearch-dashboards/config/

compose.yml
services:
  opensearch-dashboards:
    build: .
    image: opensearch-dashboards-no-security
    container_name: opensearch-dashboards
    ports:
      - 5601:5601

opensearch_dashboards.yml
---
server.name: opensearch-dashboards
server.host: "0.0.0.0"
opensearch.hosts: http://host.docker.internal:9200

ポイントはopensearch_dashboards.ymlのopensearch.hosts: http://host.docker.internal:9200です。OpenSearch自体はホストマシン上で動作しているので、opensearch-dashboardsコンテナからはDockerホストの9200番に向けて通信させるようにします。

2.2 OpenSearch Dashboardsのイメージのビルドとコンテナの起動

イメージのビルド

docker compose build

コンテナの起動

docker compose up -d

ブラウザからlocalhost:5601にアクセスして以下のようにホーム画面になれば成功です。
image.png

2.3 サンプルデータの追加

ホーム画面に左下のAdd sample dataをクリックすると以下のような画像になるので好きなサンプルデータを追加します。
image.png

これでDashboards側の準備は完了です。

3 IntelliJでブレークポイントを追加し、DashboardsからAPIを叩いてみる

最後に私がこれらを使ってどのように挙動を確認しているか紹介します。

3.1 IntelliJでブレークポイントの設置

今回はドキュメント数を返すAPIが実装されている箇所にブレークポイントを設置します。
image.png

3.2 DashboardsからOpenSearchAPIにリクエスト

Dashboardsのホーム画面 > Interact with OpenSearch APIから以下のようなコンソール画面が開けて、ここからAPIに対してリクエストができます。今回はGET _countで実行してみます。
image.png

3.3 IntelliJで確認

Dashboardからリクエストをすると画像のようにブレークポイントで処理が止まり、呼び出しの流れや変数の中身などを確認することができます。キャプチャ中央あたりに4691 hitsと書いてあるのがわかるかと思います。
image.png

おわりに

今回はIntelliJやDocker, OpenSearch Dashboardsを使用して簡単にOpenSearchのデバッグ環境を作成する方法を紹介しました。必要な作業も少なく、また一度環境を作ってしまえば次からは数コマンドで作り直すことができるので「OpenSearchの内部を確認する」という本来の目的に集中できるのではないかと思います。

最後に宣伝です。

Supershipではプロダクト開発やサービス開発に関わる人を絶賛募集しております。
ご興味がある方は以下リンクよりご確認ください。
Supership 採用サイト
是非ともよろしくお願いします。

6
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
0