Docker上でgraylogの環境構築をしてみる

投稿日:April 21, 2024
Hero Image

前回を受けて

Ubuntu上にそのまま構築することを試みて,ドキュメント通りにやったがうまくいかなかった.(こちらを参考
そのため,今回はDockerを使用してみる.

構築方法

構築するベースの環境

  • Ubunut : 20.04(Proxmox上のLXC)
  • Docker : version 26.0.2
  • Docker Compose : version v2.6.1

構築を目指す環境

  • Graylog : 5.0.6
  • Mongo DB : 5.0
  • ElasticSerch : 7.10.2

構築手順

Qiitaの記事を大いに参考にさせていただいた.
次の内容でdocker-compose.ymlを作成する.
参考記事から,コンテナが常時起動しているように一部改変している.
また,elasticsearchの部分の"ES_JAVA_OPTS=-Xms1g -Xmx1g"に関して,公式ドキュメントのUbuntu上での構築と同様にいくなら使用可能なメモリの半分のサイズを指定するといいかもしれない.

version: '3'

services:
  mongodb:
    image: "mongo:5.0"
    volumes:
      - "mongodb_data:/data/db"
    restart: "always"

  elasticsearch:
    image: "docker.elastic.co/elasticsearch/elasticsearch-oss:7.10.2"
    environment:
      - "http.host=0.0.0.0"
      - "transport.host=localhost"
      - "network.host=0.0.0.0"
      - "ES_JAVA_OPTS=-Xms1g -Xmx1g"
    ulimits:
      memlock:
        hard: -1
        soft: -1
      nofile:
        soft: 65536
        hard: 65536
    volumes:
      - "xsearch_data:/usr/share/elasticsearch/data"
    restart: "always"

  graylog:
    image: "${GRAYLOG_IMAGE:-graylog/graylog:5.0}"
    depends_on:
      elasticsearch:
        condition: "service_started"
      mongodb:
        condition: "service_started"
    entrypoint: /usr/bin/tini -- wait-for-it elasticsearch:9200 --  /docker-entrypoint.sh
    environment:
      GRAYLOG_NODE_ID_FILE: "/usr/share/graylog/data/config/node-id"
      GRAYLOG_PASSWORD_SECRET: somepasswordpepper
      GRAYLOG_ROOT_PASSWORD_SHA2: 8c6976e5b5410415bde908bd4dee15dfb167a9c873fc4bb8a81f6f2ab448a918
      GRAYLOG_HTTP_BIND_ADDRESS: "0.0.0.0:9000"
      GRAYLOG_HTTP_EXTERNAL_URI: "http://localhost:9000/"
      GRAYLOG_ELASTICSEARCH_HOSTS: "http://elasticsearch:9200"
      GRAYLOG_MONGODB_URI: "mongodb://mongodb:27017/graylog"
    ports:
    - "514:1514/udp"     # Syslog
    - "514:1514/tcp"     # Syslog
    - "5044:5044/tcp"   # Beats
    - "5555:5555/tcp"   # RAW TCP
    - "5555:5555/udp"   # RAW TCP
    - "9000:9000/tcp"   # Server API
    - "12201:12201/tcp" # GELF TCP
    - "12201:12201/udp" # GELF UDP
    #- "10000:10000/tcp" # Custom TCP port
    #- "10000:10000/udp" # Custom UDP port
    - "13301:13301/tcp" # Forwarder data
    - "13302:13302/tcp" # Forwarder config
    volumes:
      - "graylog_data:/usr/share/graylog/data/data"
      - "graylog_journal:/usr/share/graylog/data/journal"
    restart: "always"

volumes:
  mongodb_data:
  xsearch_data:
  graylog_data:
  graylog_journal:

そのあと,上のファイルがある場所で,docker compose upする.

Proxmox上で起こる?エラー

上記の内容で行うと,次のようなエラーが出てコンテナが作成できない.

Error response from daemon: failed to create task for container: failed to create shim task: OCI runtime create failed: runc create failed: unable to start container process: error during container init: error setting rlimits for ready process: error setting rlimit type 8: operation not permitted: unknown

githubでのissueをもとに,docker-compose.ymlにおいて次のようにコメントアウトする.

   # ulimits:
   #   memlock:
   #     soft: -1
   #     hard: -1
   #   nofile:
   #     soft: 65536
   #     hard: 65536

これで動くはず.

設定

デフォルトの設定だと,ユーザー名パスワードともにadminで入れる.
ネットに繋がらないからマニュアル出せないよ!的なことを言われるけど,設定は普通にできる.
TCP/UDPの受信は,dockerの設定でポートが514から1514に転送されている.
自分の場合は,これでYAMAHA RTX1210からsyslogの転送に成功した.

やり残したこと

  • タイムゾーンを環境変数TZで設定しようとしたが反映されなかった
  • graylogの新しいバージョン(5.2?)が出ているらしいので,そちらも気になる