Docker コンテナで Graylog サーバーを実行する方法 |
すべてのアプリケーションは実行時に情報を生成し、この情報はログとして保存されます。システム管理者は、これらのログを監視してシステムが適切に機能していることを確認し、リスクやエラーを防ぐ必要があります。通常、これらのログはサーバー上に分散されており、データ量が増加するにつれて管理が困難になります。
Graylog は、ネットワーク上の複数のデバイスからリアルタイム ログをキャプチャ、一元管理、表示するために使用できる無料のオープンソース ログ管理ツールです。構造化ログと非構造化ログの両方を分析するために使用できます。 Graylog セットアップは、MongoDB、Elasticsearch、および Graylog サーバーで構成されます。サーバーは、複数のサーバーにインストールされているクライアントからデータを受信し、Web インターフェイスに表示します。
以下は、Graylog アーキテクチャを示す図です。
Graylog は次の機能を提供します。
- ログ収集 – Graylog の最新のログ中心アーキテクチャは、ログ メッセージやネットワーク トラフィックなど、ほぼあらゆるタイプの構造化データを受け入れることができます。 syslog (TCP、UDP、AMQP、Kafka)、AWS (AWS Logs、FlowLogs、CloudTrail)、HTTP API からの JSON パス、Beats/Logstash、プレーン/生テキスト (TCP、UDP、AMQP、Kafka) など
- ログ分析 – Graylog は、環境内で何が起こっているかを理解するためにデータを調査する場合に真価を発揮します。それは使用しています;強化された検索、検索ワークフロー、ダッシュボード。
- データの抽出 – ログ管理システムが稼働しているときは常に、オペレーション センターの別の場所に渡す必要がある概要データが存在します。 Graylog は、次のようないくつかのオプションを提供します。スケジュールされたレポート、相関エンジン、REST API、およびデータフォワーダー。
- セキュリティとパフォーマンスの強化 – Graylog には規制された機密データが含まれることが多いため、システム自体が安全で、アクセス可能で、高速であることが重要です。これは、役割ベースのアクセス制御、アーカイブ、フォールト トレランスなどを使用して実現されます。
- 拡張可能 – 驚異的なオープンソース コミュニティにより、Graylog の機能を向上させるために拡張機能が構築され、市場で利用可能になります。
このガイドでは、Docker コンテナーで Graylog サーバーを実行する方法について説明します。すべての依存関係、Elasticsearch および MongoDB が既にバンドルされている状態で Graylog を実行および構成できるため、この方法が推奨されます。
セットアップ前提条件。
始める前に、システムを更新し、必要なパッケージをインストールする必要があります。
## On Debian/Ubuntu
sudo apt update && sudo apt upgrade
sudo apt install curl vim git
## On RHEL/CentOS/RockyLinux 8
sudo yum -y update
sudo yum -y install curl vim git
## On Fedora
sudo dnf update
sudo dnf -y install curl vim git
1. Linux に Docker と Docker-Compose をインストールする
もちろん、Docker コンテナを実行するには Docker エンジンが必要です。 Docker エンジンをインストールするには、以下の専用ガイドを使用してください。
- Linux システムに Docker CE をインストールする方法
インストールしたら、インストールされているバージョンを確認します。
$ docker -v
Docker version 20.10.13, build a224086
システム ユーザーを docker グループに追加する必要もあります。これにより、sudo
を使用せずに docker コマンドを実行できるようになります。
sudo usermod -aG docker $USER
newgrp docker
docker がインストールされたら、次のガイドに従って docker-compose をインストールします。
- Linux に Docker Compose をインストールする方法
インストールを確認します。
$ docker-compose version
Docker Compose version v2.3.3
次に、Docker を起動して、システム起動時に自動的に実行されるようにします。
sudo systemctl start docker && sudo systemctl enable docker
2. Graylog コンテナのプロビジョニング
Graylog コンテナは、Graylog サーバー、Elasticsearch、MongoDB で構成されます。これを実現するには、情報と設定をYAML ファイルにキャプチャします。
以下のように YAML ファイルを作成します。
vim docker-compose.yml
ファイルに以下の行を追加します。
version: '2'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: mongo:4.2
networks:
- graylog
#DB in share for persistence
volumes:
- /mongo_data:/data/db
# Elasticsearch: https://www.elastic.co/guide/en/elasticsearch/reference/7.10/docker.html
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2
#data folder in share for persistence
volumes:
- /es_data:/usr/share/elasticsearch/data
environment:
- http.host=0.0.0.0
- transport.host=localhost
- network.host=0.0.0.0
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
ulimits:
memlock:
soft: -1
hard: -1
mem_limit: 1g
networks:
- graylog
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
image: graylog/graylog:4.2
#journal and config directories in local NFS share for persistence
volumes:
- /graylog_journal:/usr/share/graylog/data/journal
environment:
# CHANGE ME (must be at least 16 characters)!
- GRAYLOG_PASSWORD_SECRET=somepasswordpepper
# Password: admin
- GRAYLOG_ROOT_PASSWORD_SHA2=e1b24204830484d635d744e849441b793a6f7e1032ea1eef40747d95d30da592
- GRAYLOG_HTTP_EXTERNAL_URI=http://192.168.205.4:9000/
entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh
networks:
- graylog
links:
- mongodb:mongo
- elasticsearch
restart: always
depends_on:
- mongodb
- elasticsearch
ports:
# Graylog web interface and REST API
- 9000:9000
# Syslog TCP
- 1514:1514
# Syslog UDP
- 1514:1514/udp
# GELF TCP
- 12201:12201
# GELF UDP
- 12201:12201/udp
# Volumes for persisting data, see https://docs.docker.com/engine/admin/volumes/volumes/
volumes:
mongo_data:
driver: local
es_data:
driver: local
graylog_journal:
driver: local
networks:
graylog:
driver: bridge
ファイル内で以下を置き換えます。
- GRAYLOG_PASSWORD_SECRET は独自のパスワードで、16 文字以上でなければなりません
- GRAYLOG_ROOT_PASSWORD_SHA2: 次のコマンドを使用して取得した SHA2 パスワード。
echo -n "Enter Password: " && head -1 </dev/stdin | tr -d '\n' | sha256sum | cut -d" " -f1
- GRAYLOG_HTTP_EXTERNAL_URI をサーバーの IP アドレスに置き換えます。
たとえば、SMTP によるアラート送信を有効にするなど、GRAYLOG_ を使用してサーバーのその他の構成を設定することもできます。
.......
graylog:
......
environment:
GRAYLOG_TRANSPORT_EMAIL_ENABLED: "true"
GRAYLOG_TRANSPORT_EMAIL_HOSTNAME: smtp
GRAYLOG_TRANSPORT_EMAIL_PORT: 25
GRAYLOG_TRANSPORT_EMAIL_USE_AUTH: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_TLS: "false"
GRAYLOG_TRANSPORT_EMAIL_USE_SSL: "false"
.....
3. 永続ボリュームの作成
データを永続化するには、外部ボリュームを使用してデータを保存します。このガイドでは、YAML ファイル内のボリュームをすでにマッピングしています。以下のように、MongoDB、Elasticsearch、Graylog の 3 つのボリュームを作成します。
sudo mkdir /mongo_data
sudo mkdir /es_data
sudo mkdir /graylog_journal
適切な権限を設定します。
sudo chmod 777 -R /mongo_data
sudo chmod 777 -R /es_data
sudo chmod 777 -R /graylog_journal
Rhel ベースのシステムの場合、パスにアクセスできるように SELinux を許可モードに設定する必要があります。
sudo setenforce 0
sudo sed -i 's/^SELINUX=.*/SELINUX=permissive/g' /etc/selinux/config
4. DockerコンテナでGraylogサーバーを実行する
コンテナーがプロビジョニングされたら、次のコマンドを使用して簡単にコンテナーをスピンできるようになります。
docker-compose up -d
サンプル出力:
[+] Running 30/30
⠿ graylog Pulled 23.2s
⠿ f7a1c6dad281 Pull complete 8.0s
⠿ ea8366d5a4a5 Pull complete 9.7s
⠿ 3c38647db2f9 Pull complete 10.2s
⠿ 8c1622fde1b3 Pull complete 12.9s
⠿ a51becc643cd Pull complete 17.6s
⠿ a363c7a2d0d7 Pull complete 18.5s
⠿ 208d9143b0ee Pull complete 19.1s
⠿ c30263374f43 Pull complete 19.4s
⠿ mongodb Pulled 17.5s
⠿ cf06a7c31611 Pull complete 2.2s
⠿ 5e8cbd051978 Pull complete 2.5s
⠿ 22d2e18323fe Pull complete 3.0s
⠿ ea17d81261d5 Pull complete 3.6s
⠿ ec6d044e0932 Pull complete 3.9s
.......
すべてのイメージがプルされ、コンテナが開始されたら、以下のようにステータスを確認します。
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7f969caa48f5 graylog/graylog:4.2 "/usr/bin/tini -- wa…" 30 seconds ago Up 27 seconds (health: starting) 0.0.0.0:1514->1514/tcp, :::1514->1514/tcp, 0.0.0.0:9000->9000/tcp, 0.0.0.0:1514->1514/udp, :::9000->9000/tcp, :::1514->1514/udp, 0.0.0.0:12201->12201/tcp, 0.0.0.0:12201->12201/udp, :::12201->12201/tcp, :::12201->12201/udp thor-graylog-1
1a21d2de4439 docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2 "/tini -- /usr/local…" 31 seconds ago Up 28 seconds 9200/tcp, 9300/tcp thor-elasticsearch-1
1b187f47d77e mongo:4.2 "docker-entrypoint.s…" 31 seconds ago Up 28 seconds 27017/tcp thor-mongodb-1
ファイアウォールを有効にしている場合は、Graylog サービス ポートの通過を許可します。
##For Firewalld
sudo firewall-cmd --zone=public --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
##For UFW
sudo ufw allow 9000/tcp
5. Graylog Web UI にアクセスする
次に、URL http://IP_address:9000 を使用して Graylog Web インターフェイスを開きます。
YAML で設定されたユーザー名 admin と SHA2 パスワード (StrongPassw0rd) を使用してログインします。
ダッシュボードで、[システム] タブに移動して入力を選択し、ログを取得するための最初の入力を作成しましょう。
次に、Raw/Plaintext TCP を検索し、新しい入力の起動 をクリックします。
起動すると以下のようなポップアップウィンドウが表示されます。入力の名前、ポート(1514)を変更し、入力の場所としてノードまたは「グローバル」を選択するだけです。他の詳細はそのままにしておきます。
ファイルを保存し、ポート 1514 の Graylog Raw/Plaintext TCP 入力にプレーン テキスト メッセージを送信してみます。
echo 'First log message' | nc localhost 1514
##OR from another server##
echo 'First log message' | nc 192.168.205.4 1514
実行中の Raw/Plaintext 入力で受信したメッセージを表示します。
受信したメッセージは以下のように表示されるはずです。
以下のように、これをダッシュボードにエクスポートすることもできます。
必要な情報を入力してダッシュボードを作成します。
ダッシュボードがダッシュボード タブの下に表示されます。
結論
それだ!
Docker コンテナで Graylog サーバーを実行する方法を意気揚々と説明してきました。複数のサーバー上のログを簡単に監視し、アクセスできるようになりました。これがあなたにとって有意義だったことを願っています。
関連記事:
- Let’s Encrypt を使用して Debian に Graylog サーバーをインストールする
- Let’s Encrypt SSL を使用して Graylog サーバーを Ubuntu にインストールする
- CentOS 8/RHEL 8 に Graylog をインストールする