「Elasticsearch にログを入れたのはいいけど、検索コマンドを毎回打つのが面倒くさい」——そんな悩みを一気に解決してくれるのが Kibana です。ブラウザから操作できるダッシュボードで、ログの可視化・検索・グラフ作成がコマンドなしでできます。
この記事では Ubuntu 24.04 LTS の環境に Docker Compose で Elasticsearch + Kibana を立ち上げ、実際に起動した画面のスクリーンショットを使いながらダッシュボード構築までの流れをまるごと紹介します。Docker 公式イメージ(バージョン 8.12.2)を実際に起動し、2026年6月13日〜14日に取得した実データ・実画面だけを載せています。
この記事のポイント
- Ubuntu 24.04 LTS + Docker Compose で Elasticsearch 8.12.2 / Kibana 8.12.2 を構築(実測済み)
- Elastic 公式 apt リポジトリの最新版は
8.19.16——バージョン選択の注意点も解説 - Home・Discover・Dashboard・Dev Tools の基本操作を実スクリーンショット付きで紹介
- 起動直後によく出る
redステータスの原因と、本番で緑にする方法 - VPS で運用するなら最低 4 GB RAM を推奨——プランの選び方も紹介
目次
1. 動作確認済み環境
2. Elasticsearch と Kibana の関係と構成
3. Docker Compose ファイルを用意する
4. コンテナを起動してバージョンを確認する
5. 起動直後のクラスターヘルスを確認する
6. Kibana にブラウザでアクセスする
7. Discover でログを検索する
8. ダッシュボードを作成する
9. Dev Tools でクエリを直接実行する
10. よくあるエラーと解決策
11. VPS で本番運用するときのポイント
12. まとめ
動作確認済み環境
この記事は以下の環境で実際に動作を確認しています。バージョンや日付は、すべて実際にコンテナを起動して取得した値です。
| 項目 | 内容 |
|---|---|
| OS イメージ | Ubuntu 24.04 LTS(Noble Numbat / Docker公式イメージ) |
| Elasticsearch | 8.12.2(docker.elastic.co 公式イメージ・JVM 21.0.2・Lucene 9.9.2) |
| Kibana | 8.12.2(docker.elastic.co 公式イメージ・Node.js v18.18.2 同梱) |
| Docker / Compose | Docker Engine + Docker Compose v2(docker compose サブコマンド) |
| 推奨 RAM | 4 GB 以上(Elasticsearch の JVM ヒープを 1 GB 固定で起動) |
| 確認日 | 2026年6月13日(バージョン・ヘルス実測)/ 6月14日(GUIスクリーンショット撮影) |

Elastic の公式 apt リポジトリ(artifacts.elastic.co/packages/8.x/apt)を Ubuntu 24.04 コンテナで確認すると、2026年6月時点の最新候補は 8.19.16 でした。今回はあえて少し前の 8.12.2 を Docker イメージで動かしていますが、これは画面の互換性確認のためで、手順自体はどのバージョンでも同じです。本番では「最新を入れて固定する」のが基本になります。
Elasticsearch と Kibana の関係と構成
まず全体像を整理しておきます。この2つはセットで動く前提のソフトです。
- Elasticsearch——ログや JSON ドキュメントを保存・全文検索するデータストア。ポート
9200で REST API(HTTPでJSONをやり取りする操作窓口)を公開します - Kibana——Elasticsearch のデータをブラウザから操作するフロントエンド。ポート
5601でアクセスします
Kibana は単体では動かず、必ず Elasticsearch に接続して起動します。Docker Compose を使うと、この 2 つをまとめて 1 コマンドで管理できます。
Docker Compose ファイルを用意する
作業ディレクトリを作って、docker-compose.yml を用意します。
$ nano docker-compose.yml
services:
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:8.12.2
container_name: es01
environment:
– discovery.type=single-node
– xpack.security.enabled=false
– ES_JAVA_OPTS=-Xms1g -Xmx1g
ports:
– “9200:9200”
volumes:
– esdata:/usr/share/elasticsearch/data
kibana:
image: docker.elastic.co/kibana/kibana:8.12.2
container_name: kib01
ports:
– “5601:5601”
depends_on:
– elasticsearch
environment:
– ELASTICSEARCH_HOSTS=http://elasticsearch:9200
volumes:
esdata:
注意:メモリについて
ES_JAVA_OPTS=-Xms1g -Xmx1g は JVM ヒープを 1 GB に固定する設定です。ホストの RAM が 2 GB 以下だと Elasticsearch が OOM Killer(メモリ不足時にプロセスを強制終了する Linux の仕組み)に落とされやすいので、最低 4 GB の環境を推奨します。VPS で試す場合は RAM 4 GB 以上のプランを選んでください。
xpack.security.enabled=false は認証を無効にする開発・検証用の設定です。手元で動かすぶんには楽ですが、インターネットに公開するサーバーでは必ず認証を有効にしてください(後述します)。
コンテナを起動してバージョンを確認する
Docker Compose でコンテナを起動します。
[+] Running 3/3
✔ Network kibana-stack_default Created
✔ Container es01 Started
✔ Container kib01 Started
起動後、Elasticsearch の REST API でバージョンを確認します。実際に取得できた応答は次のとおりです。
{
“name”: “2fda13a1a4a5”,
“cluster_name”: “docker-cluster”,
“cluster_uuid”: “JLxePtIZQXiT6Ywpt8t0dQ”,
“version”: {
“number”: “8.12.2”,
“build_type”: “docker”,
“build_date”: “2024-02-19T10:04:32.774273190Z”,
“lucene_version”: “9.9.2”
},
“tagline”: “You Know, for Search”
}
cluster_name が “docker-cluster”、version.number が 8.12.2 であることが確認できました。Lucene(Elasticsearch の検索エンジン中核)は 9.9.2、コンテナ内の JVM は 21.0.2 でした。Kibana 側のバージョンも docker exec kib01 bin/kibana --version で 8.12.2 と一致していることを確認しています。
起動直後のクラスターヘルスを確認する
クラスターの健康状態も見ておきましょう。ここは初心者がいちばん驚くポイントです。
{
“cluster_name” : “docker-cluster”,
“status” : “red”,
“number_of_nodes” : 1,
“number_of_data_nodes” : 1,
“active_primary_shards” : 0,
“active_shards” : 0,
“unassigned_shards” : 6,
“active_shards_percent_as_number” : 0.0
}

起動直後に status: red になるのは正常です
シングルノード構成では、内部管理用インデックスのレプリカシャード(データの複製)を割り当てる先がもう一台無いため unassigned_shards が出て red になります。今回は unassigned_shards: 6 でした。自分でドキュメントを追加してインデックスを作ると yellow、本番でノードを複数台にするか number_of_replicas: 0 に設定すると green になります。Kibana の操作自体には影響しませんので、慌てなくて大丈夫です。
Kibana にブラウザでアクセスする
ここが一番つまずきやすいポイントです。Kibana は Elasticsearch より起動がかなり遅く、コンテナが Up になってから実際にブラウザで開けるまで 60秒以上かかります。今回の実測でも、/api/status が available を返すまでにコンテナ起動から約60秒かかりました。早すぎると「Kibana server is not ready yet.」という素っ気ない画面が出るだけなので、慌てずに待ちましょう。
$ curl -s http://localhost:5601/api/status | python3 -c “import sys,json;print(json.load(sys.stdin)[‘status’][‘overall’][‘level’])”
available
available が返ったら、ブラウザで http://localhost:5601 にアクセスします。VPS の場合は http://<サーバーIP>:5601 です。

上のスクリーンショットが実際の起動直後のホーム画面です(Playwright で実撮影)。「Welcome home」の見出しの下に「Observability」「Security」「Analytics」の 3 つのソリューションが並んでいます。ログ可視化なら Observability、自由に検索・グラフを作りたいなら Analytics を選ぶと馴染みやすいです。
正直、最初は「どれを選べばいいんだ」と迷いますが、ホーム画面はあとから変えられるので、とりあえず何でもクリックして探索してみてください。なお認証を無効にしているため、右下に「Your data is not secure」という警告が出ます。これは公開前にセキュリティを有効にしてね、という注意です。
Discover でログを検索する
左サイドバーの「Discover」に進むと、インデックスのログを時系列で見られます。ただし最初は「データビュー」(旧称:インデックスパターン)を作る必要があります。まずはテスト用のログを Elasticsearch に投入しましょう。
$ curl -s -X POST “http://localhost:9200/access-logs/_doc” \
-H ‘Content-Type: application/json’ \
-d ‘{“@timestamp”:”2026-06-13T10:00:00Z”,”level”:”INFO”,”message”:”GET /api/health 200″}’
{“_index”:”access-logs”,”_id”:”abc123″,”result”:”created”, … }
今回は INFO / WARN / ERROR を混ぜた 8 件を投入しました。データが入ったら、Kibana 上部の検索バーから「Create a data view」でデータビュー access-logs* を作成し、時刻フィールドに @timestamp を指定します。API から一発で作ることもできます。
-H ‘kbn-xsrf: true’ -H ‘Content-Type: application/json’ \
-d ‘{“data_view”:{“title”:”access-logs*”,”name”:”access-logs”,”timeFieldName”:”@timestamp”}}’
# → HTTP 200。data_view の id が返ってくる

上が実際の Discover 画面です。上部のヒストグラムで件数の時間分布が見え、下に各ドキュメントが展開できる状態で並びます。KQL(Kibana Query Language)の基本は level: "ERROR" のようにフィールド名: 値で絞り込むだけなので、SQL を触ったことがあれば直感的に使えます。時間範囲は右上の「Last 1 hour」などから変更できます——データが見えないときは、まずここの時間範囲が原因のことが多いです。
ちなみに投入した 8 件を level.keyword で集約すると、INFO が 4 件、ERROR と WARN が 2 件ずつでした。これは Dev Tools の terms 集約クエリで実際に取得した値です。

ダッシュボードを作成する
「Dashboard」メニューから新規作成し、ビジュアライゼーション(グラフ・数値カード・テーブルなど)を配置します。8.12 系では手順が少し変わっているので、実画面で確認しましょう。
- 左メニュー「Dashboards」→「Create dashboard」をクリック
- 空のダッシュボードが開くので「Create visualization」をクリック(Lens エディタが開く)
- 左のフィールドリストから
@timestampを横軸に、level.keywordを内訳(Breakdown)にドラッグ - 「Bar vertical stacked」などのチャートを選んで「Save and return」

上が実際の新規ダッシュボード画面です。「This dashboard is empty. Let’s fill it up!」と表示され、中央の「Create visualization」または「Add from library」からパネルを足していきます。一度作ると URL を共有するだけで同僚と同じ画面を見られるのが Kibana の強みです。グラフをいちいち画像で送る必要がありません。
Dev Tools でクエリを直接実行する
Elasticsearch の REST API をブラウザから手軽に叩けるのが「Dev Tools」です。左メニューの「Dev Tools」で開きます。

上が実際の Dev Tools の Console 画面です。左ペインにクエリを書いて ▶ ボタンで実行すると、右ペインに結果が表示されます。Console のほかに Search Profiler・Grok Debugger・Painless Lab のタブもあります。curl を覚えなくても Elasticsearch の API が試せるので、初学者にとって非常に使いやすい場所です。実際に集約クエリを実行すると次のように返ります。
{
“size”: 0,
“aggs”: { “by_level”: { “terms”: { “field”: “level.keyword” } } }
}
# 実行結果(aggregations 抜粋):
“buckets”: [
{ “key”: “INFO”, “doc_count”: 4 },
{ “key”: “ERROR”, “doc_count”: 2 },
{ “key”: “WARN”, “doc_count”: 2 }
]
よくあるエラーと解決策
| エラー・症状 | 原因 | 解決策 |
|---|---|---|
Kibana server is not ready yet. |
ES の準備完了前に Kibana を開いた(起動に60秒以上かかる) | そのまま 1〜2 分待つ。curl localhost:5601/api/status が available になってから開く |
max virtual memory areas vm.max_map_count エラーで ES が起動しない |
Linux の仮想メモリ設定が不足 | sudo sysctl -w vm.max_map_count=262144 を実行(恒久化は /etc/sysctl.conf に追記) |
| Elasticsearch がすぐ落ちる(OOM) | RAM 不足で OOM Killer に終了される | ES_JAVA_OPTS=-Xms512m -Xmx512m に下げるか、VPS の RAM を増やす |
| Discover にデータが出てこない | 時間範囲の外、またはデータビュー未作成 | 右上の時間範囲を「Last 1 hour」等に広げる。データビュー access-logs* を作成する |
クラスターステータスが red のまま |
シングルノードでレプリカシャードが割り当て不能 | インデックス設定で "number_of_replicas": 0 を指定するか、ノードを追加 |
VPS で本番運用するときのポイント
ローカルで動作確認できたら、VPS に移行して本格運用してみましょう。Kibana + Elasticsearch を VPS で動かすときの最低ラインは RAM 4 GB です。ES のヒープに 1 GB、Kibana の Node.js プロセスにも数百 MB、OS とページキャッシュにも余裕が要るためで、2 GB プランだとほぼ確実に詰まります。
| VPS | 4GB相当プラン | 東京リージョン | 日本語サポート | 評価 |
|---|---|---|---|---|
| Vultr | $24/月前後〜 | あり | なし(英語) | ★★★★★ |
| DigitalOcean | $24/月前後〜 | なし(最寄シンガポール) | なし(英語) | ★★★★☆ |
| ConoHa VPS | 4GBプランあり | あり(東京・大阪) | あり | ★★★★☆ |
国内からアクセスするなら Vultr の東京リージョンが応答速度的にバランスがよいです。日本語サポートが必要なら ConoHa VPS が安心です。料金は時期やキャンペーンで変わるので、最新の金額は各社の公式ページで確認してください。
5601 ポートを外部に公開しない
認証を無効にしたまま 5601 をインターネットに開放すると、誰でもあなたのログを閲覧・操作できてしまいます。VPS では 5601 をファイアウォールで閉じ、SSH ポートフォワード(ssh -L 5601:localhost:5601 user@server)でローカルから安全にアクセスするのが鉄則です。公開する場合は必ず xpack.security.enabled=true にして認証を設定してください。
まとめ
Ubuntu 24.04 LTS + Docker Compose で Elasticsearch 8.12.2 + Kibana 8.12.2 を動かし、ダッシュボードを構築する手順を実測結果とともに紹介しました。
- Docker Compose で
docker compose up -dするだけでスタックが起動する - Kibana は起動に60秒以上かかる——
/api/statusが available になってから開く - 起動直後の
status: redはシングルノード構成では正常で、操作には影響しない - Home・Discover・Dashboard・Dev Tools の4つを押さえればログ可視化の8割はできる
- 本番 VPS では RAM 4 GB 以上・5601 ポートは非公開・SSH トンネル経由が鉄則
- apt 最新版は 8.19.16——バージョンを固定して運用し、計画的にアップグレードしよう
VPS 選びで迷ったら、東京リージョンで低遅延の Vultr がおすすめです。
次のステップとして、Filebeat や Logstash を組み合わせてログを自動収集する方法も探してみてください。


コメント