ログ分析管理OSSのGraylogのv6.0.3が公開されていたので早速、Dockerで立ち上げて操作性を確認した。その際、使用したdocker-compose.ymlを備忘かねて公開する。
以下公式HP等に記載あるdocker-compose.yml例をコピペするだけでは正常にサービス稼働しない為、一部改変している。
(参考)
https://hub.docker.com/r/graylog/graylog
https://graylog.org/post/announcing-graylog-6-0/
https://go2docs.graylog.org/current/downloading_and_installing_graylog/docker_installation.htm
docker-compose.yml
version: '3.8'
services:
# MongoDB: https://hub.docker.com/_/mongo/
mongodb:
image: "mongo:6.0.15"
volumes:
- "mongodb_data:/data/db"
restart: "on-failure"
networks:
- graylog
opensearch:
image: "opensearchproject/opensearch:2.12.0"
environment:
OPENSEARCH_JAVA_OPTS: "-Xms1g -Xmx1g"
bootstrap.memory_lock: "true"
discovery.type: "single-node"
action.auto_create_index: "false"
plugins.security.ssl.http.enabled: "false"
plugins.security.disabled: "true"
# Can generate a password for `OPENSEARCH_INITIAL_ADMIN_PASSWORD` using a linux device via:
# tr -dc A-Z-a-z-0-9_@#%^-_=+ < /dev/urandom | head -c${1:-32}
OPENSEARCH_INITIAL_ADMIN_PASSWORD: "+_8r#wliY3Pv5-HMIf4qzXImYzZf-M=M"
ulimits:
memlock:
hard: "-1"
soft: "-1"
nofile:
soft: "65536"
hard: "65536"
volumes:
- "os_data:/usr/share/opensearch/data"
restart: "on-failure"
networks:
- graylog
# Graylog: https://hub.docker.com/r/graylog/graylog/
graylog:
hostname: "server"
image: "graylog/graylog:6.0.3"
depends_on:
- mongodb
- opensearch
entrypoint: "/usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh"
environment:
TZ: "Asia/Tokyo"
GRAYLOG_ROOT_TIMEZONE: "Asia/Tokyo"
GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/config/node-id"
GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
GRAYLOG_ELASTICSEARCH_HOSTS: "http://opensearch:9200"
GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
# To make reporting (headless_shell) work inside a Docker container
GRAYLOG_REPORT_DISABLE_SANDBOX: "true"
# CHANGE ME (must be at least 16 characters)!
GRAYLOG_PASSWORD_SECRET: "somepasswordpepper"
# Password: "admin"
GRAYLOG_ROOT_PASSWORD_SHA2: "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
GRAYLOG_HTTP_EXTERNAL_URI: "http://127.0.0.1:9000/"
ports:
- "514:1514/udp" # Syslog
- "514:1514/tcp" # Syslog
# Graylog web interface and REST API
- "9000:9000/tcp"
# Beats
- "5044:5044/tcp"
# Syslog TCP
- "5140:5140/tcp"
# Syslog UDP
- "5140:5140/udp"
# GELF TCP
- "12201:12201/tcp"
# GELF UDP
- "12201:12201/udp"
# Forwarder data
- "13301:13301/tcp"
# Forwarder config
- "13302:13302/tcp"
volumes:
- "graylog_data:/usr/share/graylog/data/data"
- "graylog_journal:/usr/share/graylog/data/journal"
restart: "on-failure"
networks:
- graylog
volumes:
mongodb_data:
os_data:
graylog_data:
graylog_journal:
networks:
graylog:
driver: "bridge"
docker compose up -d実行画面
▼Graylog 6.0のログイン画面
http://localhost:9000/
ID:admin PW:admin ※上記docker-compose.ymlをそのまま流用した場合
Graylog 5.x台までは白黒のトレーディングルーム?が背景だったが、6.0はずいぶんとシンプルになっているw
(参考)Graylog 5.0までのログイン画面背景
Graylog 6.0のSearch画面
今まで検索ワードの履歴が残らず不便だったが、やっと履歴をだせるようになったのが個人的に一番良いと思ったところ。
あとGraylog 5.x台までは赤色がGUI画面のメインカラーだったが、6.0からは青色がメインカラーに変更されている。
(補足)docker-compose.ymlの解説(ChatGPTにて生成)
version: '3.8'
この行では、Docker Composeファイルのバージョンを指定しています。ここでは3.8を使用しています。
services:
この行は、Docker Composeで起動するサービスのグループを定義する開始行です。
mongodb:
image: "mongo:6.0.15"
volumes:
- "mongodb_data:/data/db"
restart: "on-failure"
networks:
- graylog
この部分は、MongoDBサービスの設定を定義しています。
image: "mongo:6.0.15" は、使用するMongoDBイメージとバージョンを指定しています。
※もしもAVXに対応しないCPUを利用する場合はimage指定とplatform指定を以下の通りにする。
image: "arm64v8/mongo:6.0.15"
platform: "linux/arm64/v8"
(参考)https://qiita.com/khat/items/6f4702ca105627e3648a
volumes: では、データを永続化するためのボリュームをマウントしています。mongodb_dataボリュームを /data/db にマウントします。
restart: "on-failure" は、Dockerコンテナが異常終了した場合に自動的に再起動するよう指示しています。
networks: では、このサービスが graylog ネットワークに参加することを指定しています。
opensearch:
image: "opensearchproject/opensearch:2.12.0"
environment:
OPENSEARCH_JAVA_OPTS: "-Xms1g -Xmx1g"
bootstrap.memory_lock: "true"
discovery.type: "single-node"
action.auto_create_index: "false"
plugins.security.ssl.http.enabled: "false"
plugins.security.disabled: "true"
# Can generate a password for `OPENSEARCH_INITIAL_ADMIN_PASSWORD` using a linux device via:
# tr -dc A-Z-a-z-0-9_@#%^-_=+ < /dev/urandom | head -c${1:-32}
OPENSEARCH_INITIAL_ADMIN_PASSWORD: "+_8r#wliY3Pv5-HMIf4qzXImYzZf-M=M"
ulimits:
memlock:
hard: "-1"
soft: "-1"
nofile:
soft: "65536"
hard: "65536"
volumes:
- "os_data:/usr/share/opensearch/data"
restart: "on-failure"
networks:
- graylog
この部分は、OpenSearchサービスの設定を定義しています。
image: "opensearchproject/opensearch:2.12.0" は、使用するOpenSearchイメージとバージョンを指定しています。
environment: では、OpenSearchの環境変数を設定しています。JVMヒープサイズ、シングルノードディスカバリ、インデックス自動作成無効化、セキュリティ無効化、初期管理パスワードなどが含まれています。
ulimits: では、メモリロックとファイル記述子の制限を設定しています。
volumes: では、データを永続化するためのボリュームをマウントしています。os_data ボリュームを /usr/share/opensearch/data にマウントします。
restart: "on-failure" は、Dockerコンテナが異常終了した場合に自動的に再起動するよう指示しています。
networks: では、このサービスが graylog ネットワークに参加することを指定しています。
graylog:
hostname: "server"
image: "graylog/graylog:6.0.3"
depends_on:
- mongodb
- opensearch
entrypoint: "/usr/bin/tini -- wait-for-it elasticsearch:9200 -- /docker-entrypoint.sh"
environment:
TZ: "Asia/Tokyo"
GRAYLOG_ROOT_TIMEZONE: "Asia/Tokyo"
GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/config/node-id"
GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
GRAYLOG_ELASTICSEARCH_HOSTS: "http://opensearch:9200"
GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
# To make reporting (headless_shell) work inside a Docker container
GRAYLOG_REPORT_DISABLE_SANDBOX: "true"
# CHANGE ME (must be at least 16 characters)!
GRAYLOG_PASSWORD_SECRET: "somepasswordpepper"
# Password: "admin"
GRAYLOG_ROOT_PASSWORD_SHA2: "8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918"
GRAYLOG_HTTP_EXTERNAL_URI: "http://127.0.0.1:9000/"
ports:
- "514:1514/udp" # Syslog
- "514:1514/tcp" # Syslog
# Graylog web interface and REST API
- "9000:9000/tcp"
# Beats
- "5044:5044/tcp"
# Syslog TCP
- "5140:5140/tcp"
# Syslog UDP
- "5140:5140/udp"
# GELF TCP
- "12201:12201/tcp"
# GELF UDP
- "12201:12201/udp"
# Forwarder data
- "13301:13301/tcp"
# Forwarder config
- "13302:13302/tcp"
volumes:
- "graylog_data:/usr/share/graylog/data/data"
- "graylog_journal:/usr/share/graylog/data/journal"
restart: "on-failure"
networks:
- graylog
この部分は、Graylogサービスの設定を定義しています。
hostname: "server" は、このコンテナのホスト名を "server" に設定します。
image: "graylog/graylog:6.0.3" は、使用するGraylogイメージとバージョンを指定しています。
depends_on: では、MongoDBとOpenSearchサービスが起動した後にGraylogが起動するよう指定しています。
entrypoint: では、Graylogの起動時にOpenSearchが利用可能になるまで待機するよう指示しています。
environment: では、Graylogの環境変数を設定しています。タイムゾーン、ノードIDファイル、HTTPバインドアドレス、Elasticsearchホスト、MongoDBURI、パスワードシークレット、rootパスワードハッシュ、外部URIなどが含まれています。
ports: では、ホストとコンテナ間でマッピングする
514:1514/udp と 514:1514/tcp は、SyslogのUDP/TCPポートをマップしています。
9000:9000/tcp は、GraylogウェブインターフェースとRESTAPIのポートをマップしています。
5044:5044/tcp は、Beatsのポートをマップしています。
5140:5140/tcp と 5140:5140/udp は、Syslog TCP/UDPのポートをマップしています。
12201:12201/tcp と 12201:12201/udp は、GELF TCP/UDPのポートをマップしています。
13301:13301/tcp は、Forwarderデータのポートをマップしています。
13302:13302/tcp は、Forwarder設定のポートをマップしています。
この部分では、Graylogのデータを永続化するためのボリュームをマウントしています。
graylog_data ボリュームを /usr/share/graylog/data/data にマウントします。
graylog_journal ボリュームを /usr/share/graylog/data/journal にマウントします。
restart: "on-failure" は、Dockerコンテナが異常終了した場合に自動的に再起動するよう指示しています。
networks: では、このサービスが graylog ネットワークに参加することを指定しています。
volumes:
mongodb_data:
os_data:
graylog_data:
graylog_journal:
この部分では、使用するボリュームを定義しています。
mongodb_data は、MongoDBのデータ永続化用のボリュームです。
os_data は、OpenSearchのデータ永続化用のボリュームです。
graylog_data と graylog_journal は、Graylogのデータとジャーナルの永続化用のボリュームです。
networks:
graylog:
driver: "bridge"
この部分では、サービス間の通信に使用するネットワークを定義しています。
graylog という名前のブリッジネットワークを作成します。