はじめに (対象読者・この記事でわかること)

この記事は、Elasticsearch+Kibana 8系をRPM/DEBパッケージでインストールしようとして「Exit code 1」で起動に失敗した方、または「Kibana server is not ready yet」と表示されたまま先に進めない方向けです。
記事を読むと、Kibanaが起動しない根本原因の切り分け方、解決に必要な3つの設定ファイルの書き換え手順、そして同様のトラビアを回避するための最小構成のdocker-compose.ymlまで手に入ります。
ローカル検証環境だけでなく、本番VPSでも再現したため、ログの読み方と対策を共有します。

前提知識

  • Linux(CentOS 7/8、RHEL、Ubuntu 20.04以降)でのsystemctlコマンドが使える
  • journalctlでユニットログを絞り込める
  • YAMLのインデントルールを理解している
  • Elasticsearch/Kibanaが同一マシンに入っている

事象の概要:8系で増えた「セキュリティオンbyデフォルト」が引き金

Elasticsearch 8系から、セキュリティ機能(x-pack security)が標準で有効になり、TLS通信と認証が必須になりました。
Kibanaもそれに準じて、kibana.ymlelasticsearch.username/passwordだけでなく、CA証明書のパスやトークンまで求めるようになったため、旧7系の設定ファイルを流用すると起動すらしなくなります。
RPM/DEBでインストールした直後のKibanaは「/etc/kibana/kibana.ymlに何も書いていない=デフォルト値を使う」状態ですが、8系のデフォルトではセキュアな接続ができないため、最初の起動でExit code 1を返してしまいます。

原因切り分けと完全な手順

ステップ1:ログを早押しで見極める

  1. まずKibanaを起動して失敗させる
    bash sudo systemctl start kibana
  2. 直近のログを確認
    bash sudo journalctl -u kibana --since "1 minute ago" よくあるエラーメッセージ
    FATAL Error: Unable to connect to Elasticsearch. Check kibana.yml
  3. 次にElasticsearch本体が動いているか確認
    bash curl -k -u elastic:https://localhost:9200 ここで401SSL certificate problemが出たらElasticsearch側の設定が未完です。

ステップ2:Elasticsearch側でトランスペアレントTLSを無効に(検証環境用)

本番運用では証明書をちゃんと作るべきですが、ローカル検証では以下で十分です。
/etc/elasticsearch/elasticsearch.ymlの末尾に追記:

Yaml
xpack.security.enabled: true xpack.security.http.ssl.enabled: false # TLS無効化 xpack.security.transport.ssl.enabled: false

設定後、Elasticsearchを再起動:

Bash
sudo systemctl restart elasticsearch

ステップ3:Kibanaに接続情報を明示する

/etc/kibana/kibana.ymlをバックアップ:

Bash
sudo cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak

以下を追記・修正:

Yaml
server.host: "0.0.0.0" server.port: 5601 elasticsearch.hosts: ["http://localhost:9200"] # 8系デフォルトはhttpsなので注意 elasticsearch.username: "kibana_system" elasticsearch.password: "YourKibanaPassword"

パスワードはElasticsearchで予め作成しておく必要があります:

Bash
sudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system

コマンド実行後に表示されるランダムパスワードを上記kibana.ymlに記載するか、あらかじめ決めて--passwordオプションで変更できます。

ステップ4:Kibanaを再起動して動作確認

Bash
sudo systemctl daemon-reload sudo systemctl start kibana sudo systemctl status kibana

ブラウザでhttp://<サーバーIP>:5601を開き、Elasticのログイン画面が出ればOKです。
まだ「Kibana server is not ready yet」が出る場合は/var/log/kibana/kibana.logを見て、

  • ポート5601使用中(EADDRINUSE
  • 権限不足でkibana.keystoreが作れない
  • Elasticsearchにkibana_systemロールが付与されていない

の3点をチェックすると早期解決できます。

ハマったポイント:証明書ファイルパスを相対パスで書いたらFail

elasticsearch.ssl.certificateAuthorities: [ "config/certs/http_ca.crt" ]と書くと、Kibanaの起動ディレクトリが/usr/share/kibanaなので、意図したファイルが読めずExit code 1。
絶対パス/etc/kibana/certs/http_ca.crtにしたところ一発で解消されました。

解決策まとめ

  1. Elasticsearch 8系ではセキュリティがデフォルトON → http.ssl.enabled: falseで検証環境を楽にするか、証明書を正しく配置する
  2. Kibana 8系はkibana_systemユーザのパスワードが必須 → elasticsearch-reset-passwordで作成
  3. kibana.ymlelasticsearch.hostshttp://で始めるか、https://に合わせて証明書を揃える
  4. ログはjournalctl/var/log/kibana/kibana.logの両方を追うと原因特定が早い

まとめ

本記事では、Kibana 8系で「Exit code 1」が出た際の切り分け手順と、最小限の設定で起動するためのポイントをまとめました。

  • Elasticsearch 8系のセキュリティデフォルトONが影響し、Kibanaも認証・TLSが必須
  • 検証環境ではhttp.ssl.enabled: falseでトラブルを回避できる
  • kibana_systemユーザのパスワード生成とkibana.ymlへの明示が肝

この手順で10分以内にKibanaが立ち上がるはずです。次回は証明書を正しく作って本番TLS化する方法を記事にしたいと思います。

参考資料