はじめに (対象読者・この記事でわかること)
この記事は、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.ymlにelasticsearch.username/passwordだけでなく、CA証明書のパスやトークンまで求めるようになったため、旧7系の設定ファイルを流用すると起動すらしなくなります。
RPM/DEBでインストールした直後のKibanaは「/etc/kibana/kibana.ymlに何も書いていない=デフォルト値を使う」状態ですが、8系のデフォルトではセキュアな接続ができないため、最初の起動でExit code 1を返してしまいます。
原因切り分けと完全な手順
ステップ1:ログを早押しで見極める
- まずKibanaを起動して失敗させる
bash sudo systemctl start kibana - 直近のログを確認
bash sudo journalctl -u kibana --since "1 minute ago"よくあるエラーメッセージ
FATAL Error: Unable to connect to Elasticsearch. Check kibana.yml - 次にElasticsearch本体が動いているか確認
bash curl -k -u elastic:https://localhost:9200ここで401やSSL certificate problemが出たらElasticsearch側の設定が未完です。
ステップ2:Elasticsearch側でトランスペアレントTLSを無効に(検証環境用)
本番運用では証明書をちゃんと作るべきですが、ローカル検証では以下で十分です。
/etc/elasticsearch/elasticsearch.ymlの末尾に追記:
Yamlxpack.security.enabled: true xpack.security.http.ssl.enabled: false # TLS無効化 xpack.security.transport.ssl.enabled: false
設定後、Elasticsearchを再起動:
Bashsudo systemctl restart elasticsearch
ステップ3:Kibanaに接続情報を明示する
/etc/kibana/kibana.ymlをバックアップ:
Bashsudo cp /etc/kibana/kibana.yml /etc/kibana/kibana.yml.bak
以下を追記・修正:
Yamlserver.host: "0.0.0.0" server.port: 5601 elasticsearch.hosts: ["http://localhost:9200"] # 8系デフォルトはhttpsなので注意 elasticsearch.username: "kibana_system" elasticsearch.password: "YourKibanaPassword"
パスワードはElasticsearchで予め作成しておく必要があります:
Bashsudo /usr/share/elasticsearch/bin/elasticsearch-reset-password -u kibana_system
コマンド実行後に表示されるランダムパスワードを上記kibana.ymlに記載するか、あらかじめ決めて--passwordオプションで変更できます。
ステップ4:Kibanaを再起動して動作確認
Bashsudo 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にしたところ一発で解消されました。
解決策まとめ
- Elasticsearch 8系ではセキュリティがデフォルトON →
http.ssl.enabled: falseで検証環境を楽にするか、証明書を正しく配置する - Kibana 8系は
kibana_systemユーザのパスワードが必須 →elasticsearch-reset-passwordで作成 kibana.ymlにelasticsearch.hostsをhttp://で始めるか、https://に合わせて証明書を揃える- ログは
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化する方法を記事にしたいと思います。
参考資料
- Elasticsearch 8.0 Breaking changes | Elastic Docs
- Kibana 8.0 Breaking changes | Elastic Docs
- Elasticsearch RPMインストールガイド
- Kibana設定リファレンス
