なぜ従来の’grep’からELKに乗り換えるべきなのか?
5台のサーバーに散らばった50GBのログから1行のエラーを探すために、夜通しgrepを叩いた経験があれば、あの絶望感はよくわかるはずだ。SysAdminになりたての頃、小さなシステム障害の原因を特定するだけで午前中が丸ごと消えたことがある。会社がCentOS 7からCentOS Stream 9へ移行したタイミングで、その悪夢を終わらせるべくElasticsearchとKibanaを導入した。
ElasticsearchはLuceneをベースにした強力な検索エンジンで、毎秒数百万件のレコードを処理できる。Kibanaはその可視化レイヤーとして、生データをわかりやすいグラフやダッシュボードに変換する役割を担う。CentOS Stream 9ではSELinuxとFirewalldの制御が非常に厳格なため、設定を正しく理解していないとPermission deniedやConnection refusedといったエラーに悩まされることになる。
ElasticsearchとKibanaのインストール手順
CentOS 9のデフォルトリポジトリにはElasticが含まれていない。公式リポジトリを追加して、最新の8.xバージョンをインストールしていく。
ステップ1:リポジトリの設定
まず、ElasticのパッケージをシステムがGPGキーで信頼できるよう読み込む:
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
次に、リポジトリの設定ファイルを作成する:
sudo vi /etc/yum.repos.d/elasticsearch.repo
以下の内容を貼り付ける。8.xバージョンを使用している点に注意:
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
ステップ2:インストールとリソースの準備
DNFコマンドでElasticsearchとKibanaをまとめてインストールする:
sudo dnf install elasticsearch kibana -y
警告:ElasticsearchはRAMを大量に消費する。サーバーには最低4GBのRAMを用意しておくこと。インストール完了後、ターミナルにelasticユーザーのパスワードが表示される。これは一度しか表示されないので、すぐにメモ帳などにコピーしておくこと。
実践的な設定:SELinuxとFirewalldの壁を乗り越える
これが、システムを理論だけでなく実際に動かすための最も重要なパートだ。
Elasticsearchの設定
/etc/elasticsearch/elasticsearch.ymlを開く。シングルノード構成(サーバー1台)の場合、以下のパラメータを調整する:
network.host: 0.0.0.0
http.port: 9200
discovery.type: single-node
network.host: 0.0.0.0を設定することで、ノードがすべてのネットワークインターフェースをリッスンするようになる。セキュリティについては、この後Firewalldでアクセス元IPを制限するので心配しなくて大丈夫だ。
SELinuxを徹底的に対処する
CentOS Stream 9ではSELinuxがEnforcingモードで有効になっている。ログ書き込み権限がブロックされてElasticsearchが起動できないエラーを防ぐため、コンテキストラベルを設定する:
sudo semanage fcontext -a -t elasticsearch_log_t "/var/log/elasticsearch(/.*)?"
sudo restorecon -Rv /var/log/elasticsearch/
sudo semanage fcontext -a -t elasticsearch_data_t "/var/lib/elasticsearch(/.*)?"
sudo restorecon -Rv /var/lib/elasticsearch/
Firewalldでポートを開放する
必要な2つのポートだけを開放する。9200(API)と5601(Web UI)だ。可能であれば--add-sourceを使って内部IPからのアクセスのみに制限することを推奨する:
sudo firewall-cmd --permanent --add-port=9200/tcp
sudo firewall-cmd --permanent --add-port=5601/tcp
sudo firewall-cmd --reload
サービスの確認と有効化
サービスを起動し、システム起動時に自動で立ち上がるよう設定する:
sudo systemctl daemon-reload
sudo systemctl enable --now elasticsearch kibana
Elasticsearchが正常に動いているか確認するには、curlコマンドを使う(your_passwordは実際のパスワードに置き換えること):
curl -u elastic -k https://localhost:9200
JSONレスポンスの中に"tagline": "You Know, for Search"という行が表示されていれば、90%は成功だ。
Kibanaの管理画面にアクセスする
ブラウザでhttp://<IP-Server>:5601を開く。KibanaはEnrollment Tokenの入力を求めてくる。インストール時に保存し忘れた場合は、以下のコマンドで新しいトークンを生成できる:
sudo /usr/share/elasticsearch/bin/elasticsearch-create-enrollment-token -s kibana
次に、Kibanaのログから確認コード(verification code)を取得するには、以下を実行する:
sudo journalctl -u kibana | grep "verification code"
コードを入力すれば、FilebeatからログをElasticsearchに送って監視を始められる。CentOS 9へのELKスタック導入は、単なるログ管理の効率化にとどまらない。SELinuxを通じて、本物のセキュリティ思考を実践する絶好の機会でもある。ログのために夜更かしする日々からついに解放されることを願っている。

