Graylog6: Dockerによるログ管理環境の構築

5年ほど前にsyslogサーバでGraylog3で監視していたが、途中のバージョンアップで起動できなくなりそのまま放置していたので、Graylogを6へバージョンアップし、再稼働した。

下記の情報を参考にさせていただき、ほぼAIで作成しました

Rsyslog

syslogサーバでは/var/log/rsyslogに他のPCやネットワーク機器やFWなどのログを収集しており、

すでにgraylog用にrsyslogの設定は済んでいるが、確認のためメモしておく

設定変更

rsyslogの設定を更新して、Graylogにログを転送します:

# /etc/rsyslog.d/90-graylog.conf
$template GRAYLOGRFC5424,"<%PRI%>%PROTOCOL-VERSION% %TIMESTAMP:::date-rfc3339% %HOSTNAME% %APP-NAME% %PROCID% %MSGID% %STRUCTURED-DATA% %msg%\n"
$ActionFileDefaultTemplate GRAYLOGRFC5424
*.* @localhost:1514

rsyslogの再起動
sudo systemctl restart rsyslog

これらの設定により、/var/log/rsyslog内のログファイルがGraylogで監視・管理できるようになります。Web UIで「Streams」や「Dashboards」を使用して、ログの可視化や分析が可能です。

Graylog

docker-compose.yml
version: '3.8'

services:
  # MongoDB
  mongodb:
    image: mongo:6.0
    container_name: mongodb
    restart: unless-stopped
    volumes:
      - mongo_data:/data/db
    networks:
      - graylog-network

  # Elasticsearch (OpenSearch)
  opensearch:
    image: opensearchproject/opensearch:2.12.0
    container_name: opensearch
    restart: unless-stopped
    environment:
      - cluster.name=opensearch-cluster
      - node.name=opensearch-node1
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "OPENSEARCH_JAVA_OPTS=-Xms512m -Xmx512m"
      - "DISABLE_INSTALL_DEMO_CONFIG=true"
      - "DISABLE_SECURITY_PLUGIN=true"
    ulimits:
      memlock:
        soft: -1
        hard: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - opensearch_data:/usr/share/opensearch/data
    networks:
      - graylog-network

  # Graylog
  graylog:
    image: graylog/graylog:6.2
    container_name: graylog
    restart: unless-stopped
    environment:
      - GRAYLOG_PASSWORD_SECRET=M4GOFiQ2rTaqTucY
      - GRAYLOG_ROOT_PASSWORD_SHA2=a566a48802b69c38e0b5f6b3194648f15b80d8
      - GRAYLOG_HTTP_EXTERNAL_URI=http://127.0.0.1:9000/
      - GRAYLOG_ELASTICSEARCH_HOSTS=http://opensearch:9200
      - GRAYLOG_MONGODB_URI=mongodb://mongodb:27017/graylog
    depends_on:
      - mongodb
      - opensearch
    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:
      - graylog_data:/usr/share/graylog/data
      - /var/log:/var/log:ro
    networks:
      - graylog-network

volumes:
  mongo_data:
    driver: local
  opensearch_data:
    driver: local
  graylog_data:
    driver: local

networks:
  graylog-network:
    name: graylog-network
    driver: bridge

パスワードの生成
# GRAYLOG_PASSWORD_SECRET の生成(最低16文字)
pwgen -N 1 -s 96

# GRAYLOG_ROOT_PASSWORD_SHA2 の生成(adminパスワードのハッシュ)
echo -n "password" | sha256sum | cut -d" " -f1
起動
docker-compose up -d
3. アクセス
  • Web UI: syslog:9000
  • ユーザー名: admin
  • パスワード: 設定したパスワード

ポート説明

  • 9000: Graylog Web UI
  • 1514: Syslog入力 (TCP/UDP)
  • 12201: GELF入力 (TCP/UDP)

Graylog Web UIでの設定
  1. System > Inputs に移動
  2. 「Select Input」から「Syslog UDP」を選択
  3. 「Launch new input」をクリック
  4. 以下の設定を入力:
    • - Title: Local Rsyslog
    • - Bind address: 0.0.0.0
    • - Port: 1514
  5. 「Save」をクリック

最後に、Inputsで設定したSyslogUDPのStart inputボタンを押すこと

Image in a image block

Throughput / Metricsでログデータが取得出来ていれば、SearchやStreamsでグラフ表示されます

最後に

今回は社内での運用なので、HTTPS化は実施しておらず、またDockerボリュームの永続化もおこなっておりません。