ELK Stack構築ガイド:SysAdminのためのログ集中管理 A to Z

Monitoring tutorial - IT technology blog
Monitoring tutorial - IT technology blog

なぜ手動でのログ確認をやめるべきなのか?

10〜20台のサーバーを管理しているのに、いまだに各サーバーにSSHでログインして tail -f を実行しているなら、それはまさに悪夢です。午前2時にシステムエラーが発生した際、数十ものNginxやアプリケーションのログファイルを grep し続けるのは、ストレス以外の何物でもありません。特にマイクロサービスアーキテクチャでは、1つのリクエストが5〜7つの異なるサービスを経由します。ログの集中管理がなければ、エラーの追跡(トレース)はほぼ不可能です。

これが、ELK Stackが業界のデファクトスタンダードとなった理由です. 以前、私は軽量なGraylogを優先していましたが、高速な全文検索や高度なダッシュボードが必要な場合、やはりELKは揺るぎない存在です。ただし、Elasticsearchは「メモリ食い(RAMを大量に消費する)」ことで有名です。かつて2GBのVPSにインストールしてみたところ、KernelのOOM Killerによって1分も経たずに強制終了されました。この記事では、正しいインストール方法と、リソース不足による罠を回避する方法を解説します。

ELKの三種の神器:それぞれの役割とは?

システムが「不調」になったときに素早くデバッグするためには、データの流れを理解しておくことが重要です:

  • Elasticsearch (The Brain): データの保存を担う心臓部です。ログにインデックスを貼ることで、数百万行のログから数ミリ秒で検索結果を表示します。
  • Logstash (The Pipe): 多機能なフィルタです。生ログを受け取り、データ(IPアドレスやUser-Agentなど)を抽出・加工してストレージへ送ります。
  • Kibana (The Face): 直感的なインターフェースです。トラフィックのグラフ作成、5xxエラー率の監視、リアルタイム監視ダッシュボードの構築などを行います。

実際には、クライアントサーバーからログを転送するために Filebeat(Beatsファミリーの一つ)を併用するのが一般的です。各ノードに重いLogstashを入れる代わりに、わずか10〜20MBのRAMしか消費しない軽量なFilebeatを使用します。

導入前のインフラ準備

サーバーが頻繁にフリーズするのを防ぐため、低スペックな構成でELKを動かそうとするのはやめましょう。推奨構成は以下の通りです:

  • OS: Ubuntu 22.04 LTS(現在最も安定しています)。
  • RAM: 検証環境で最低4GB、本番環境(Production)で16GB〜32GB。
  • CPU: 2コア以上。
  • ディスク: SSDは必須です。ELKのログ書き込み速度は非常に高いため、HDDではすぐにI/Oボトルネックが発生します。

ステップ1:Elasticsearchのインストール – ストレージの設定

まず、GPGキーをインポートし、Elasticの公式リポジトリを追加します:

wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
sudo apt-get install apt-transport-https
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
sudo apt-get update && sudo apt-get install elasticsearch

注意: バージョン8.xでは、セキュリティ機能がデフォルトで有効になっています。インストールが完了すると、ターミナルに elastic ユーザーのパスワードが表示されます。すぐにメモ帳などにコピーしてください。ターミナルを閉じてしまうと、パスワードのリセットが必要になり非常に面倒です。

/etc/elasticsearch/elasticsearch.yml ファイルを開き、シングルノード向けの基本設定を編集します:

network.host: 0.0.0.0
discovery.type: single-node
xpack.security.enabled: true

再起動時に自動起動するようにサービスを有効化します:

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

ステップ2:Kibanaのインストール – データの可視化ウィンドウ

Kibanaのインストールは、初期段階では複雑な設定を必要としないため比較的簡単です:

sudo apt-get install kibana
sudo systemctl enable kibana
sudo systemctl start kibana

ブラウザ経由でインターフェースにアクセスするには、/etc/kibana/kibana.yml 内の server.host"0.0.0.0" に変更する必要があります。その後、http://あなたのIPアドレス:5601 にアクセスしてください。Kibanaから登録トークン(enrollment token)を求められます。以下のコマンドで生成してください:

sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana

ステップ3:Logstashの設定 – インテリジェントなパイプライン処理

Logstashは、散らかったログを構造化されたデータに変換します。sudo apt-get install logstash でインストールし、/etc/logstash/conf.d/nginx-log.conf にパイプライン設定ファイルを作成します:

Share: