跳到主內容

Graylog 7 安裝及設定 - Rocky

  BUBU 最近都忙著處理公司的事情,一直沒時間測試新系統。今天剛好有空,就把 Graylog 最新版重新安裝並實際測試了一遍。過程中雖然卡關了一陣子,最後還是順利解決,在此把完整流程記錄下來。

運行環境


本工作室的環境都架設在 Proxmox VE 虛擬化平台上,並以 LXC 模式為主;若遇到特殊狀況需要改用 VM 模式,會另行說明。

  • 系統環境:Rocky Linux 9
  • Web 服務:Nginx 1.26
  • Graylog 版本:7.1
  • MongoDB 版本:8.0

更新系統


  • 更新系統並重新開機
sudo dnf update -y && sudo reboot
  • 安裝必要的套件服務
sudo dnf install -y epel-release && \
sudo dnf install -y util-linux pwgen perl-Digest-SHA gnupg2 wget net-tools htop iftop iotop-c python3-pip glances nano curl

安裝 MongoDB


  • 新增 MongoDB 來源庫
sudo tee /etc/yum.repos.d/mongodb-org-8.0.repo > /dev/null <<'EOF'
[mongodb-org-8.0]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/9/mongodb-org/8.0/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://pgp.mongodb.com/server-8.0.asc
EOF
  • 安裝 MongoDB 服務
sudo dnf makecache && sudo dnf install -y mongodb-org
  • 設定 MongoDB 啟動服務
# 重新載入 systemd 設定檔
sudo systemctl daemon-reload

# 設定開機自動啟動,並立即啟動服務
sudo systemctl enable --now mongod.service

# 若服務已在執行,需要重新啟動時使用
sudo systemctl restart mongod.service

# 查看目前該服務的狀態
sudo systemctl status mongod.service

# 或只確認服務是否處於 active 狀態
sudo systemctl --type=service --state=active | grep mongod

安裝 Data Node 及 Graylog 服務


2025.12.23 官方在 6 版之後已開始導入自家包裝的資料儲存服務 Data Node,底層一樣是 OpenSearch,只是改由 Graylog 官方統一維護處理。

  • 新增 Data NodeGraylog 來源庫
sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-7.1-repository_latest.rpm
  • 安裝 graylog-datanodegraylog-server 服務
sudo dnf makecache && sudo dnf install -y graylog-datanode graylog-server
  • 確認 vm.max_map_count 的值是否為 262144,如果不是,請調整為官方建議的數值
cat /proc/sys/vm/max_map_count
  • BUBU 的環境是跑在 LXC 上,這個參數由母機(Proxmox VE 主機)統一控管,容器內不需要、也無法自行調整。若您是以 KVM/VM 方式安裝,請在客體系統內執行以下指令
echo 'vm.max_map_count=262144' | sudo tee -a /etc/sysctl.d/99-graylog-datanode.conf
sudo sysctl --system
cat /proc/sys/vm/max_map_count
  • 調整 Data Node(OpenSearch)的 Java 記憶體,開啟設定檔 sudo vim /etc/graylog/datanode/datanode.conf。假設本機記憶體配置為 16G,建議先撥 8G 給服務使用(官方建議不超過實體記憶體的一半)
opensearch_heap = 8g
  • 設定 Graylog 的共用密鑰 password_secret

這組密鑰是 Graylog 用來加解密內部敏感資料的共用金鑰,並不是管理員的登入密碼。server.confdatanode.conf 兩邊的值必須完全一致,長度至少 64 個字元。

使用 pwgen 輔助工具產生密鑰,並一次寫入 server.confdatanode.confpassword_secret 參數:

SECRET=$(pwgen -s 96 1)

sudo sed -i \
  -e "s|^password_secret =.*|password_secret = ${SECRET}|" \
  /etc/graylog/server/server.conf \
  /etc/graylog/datanode/datanode.conf
  • 開啟 sudo vim /etc/graylog/server/server.confsudo vim /etc/graylog/datanode/datanode.conf,確認兩邊的 password_secret 參數值是否一致

graylog-password_secret-01.png

  • 設定 Graylog 管理員 admin 的密碼。由於密碼是以 SHA-256 雜湊演算法儲存,我們需要先把明文密碼轉換成雜湊值,再填入 root_password_sha2 參數。

例如:以下指令會產生密碼 test1234 的雜湊值。

echo -n test1234 | sha256sum | awk '{print $1}'

正式環境請勿沿用範例密碼。上述指令會把明文密碼留在 shell 的歷史紀錄中,建議改用 read -s PASSWORD; echo -n "$PASSWORD" | sha256sum | awk '{print $1}' 以互動方式輸入。

  • 以下是產生出來的畫面

graylog-hash-02.png

  • 將上述指令產出的雜湊值,填入 server.confroot_password_sha2 參數: sudo vim /etc/graylog/server/server.conf

graylog-hash-03.png

  • 繼續設定 Graylog 服務,開啟設定檔 sudo vim /etc/graylog/server/server.conf

server.conf 採用 Java Properties 格式,# 只有放在行首才會被視為註解。請勿在設定值後方接續書寫註解或說明文字,否則那些文字會被一併當成參數值讀入。

# 服務監聽的位址與連接埠
http_bind_address = 0.0.0.0:9000

# 對外公開的存取網址,請填入實際可連線的 IP 或網域,不可填 0.0.0.0
http_publish_uri = http://192.168.x.x:9000/

# 管理員的聯絡信箱(不需加引號)
root_email = [email protected]

# 設定時區。若不指定為 Asia/Taipei,進來的 Log timestamp 會以 UTC 時間紀錄
root_timezone = Asia/Taipei

# 允許以萬用字元(wildcard)開頭的搜尋語法
allow_leading_wildcard_searches = true

# 設定訊息佇列的暫存時間與容量(建議 72 小時,容量請依每日實際收集量調整)
message_journal_max_age = 72h
message_journal_max_size = 20gb
  • 設定 Graylog Server 的 JVM 記憶體,開啟設定檔 sudo vim /etc/sysconfig/graylog-server。以下是官方提出的最低建議值,如果站台收取的流量較大,需要再依實際狀況調整
GRAYLOG_SERVER_JAVA_OPTS="-Xms2g -Xmx2g -server -XX:+UseG1GC -XX:-OmitStackTraceInFastThrow"
  • 設定 graylog-datanodegraylog-server 啟動服務
# 重新載入 systemd 設定(剛改過 unit 檔或環境變數時需要執行)
sudo systemctl daemon-reload

# 1) 先啟用開機自動啟動(兩個一起)
sudo systemctl enable graylog-datanode.service graylog-server.service

# 2) 先啟動 datanode(OpenSearch)
sudo systemctl start graylog-datanode.service

# 3) 再啟動 graylog-server
sudo systemctl start graylog-server.service

# 4) 檢查服務狀態
sudo systemctl status graylog-datanode.service graylog-server.service --no-pager

登入 Graylog 網頁介面


  • 使用瀏覽器連線至 http://graylog_public_IP_domain:9000/

  • 若登入時出現下方這個彈出視窗(瀏覽器的帳密輸入框),代表前端還沒完成初始化,可先查看記錄檔確認服務狀態:sudo tail -f /var/log/graylog-server/server.log

  • 改用下圖這個方式登入即可

  • 由於改用 Data Node 的關係,服務之間連線時會要求憑證,因此接下來要設定憑證。下圖是建立新的 CA 憑證畫面,保持預設值即可

  • 系統會自動更新憑證。如果不想每個月都更新,可以自行調整更新的週期

  • 系統會直接配發憑證,只要按下 Provision certificate and continue 即可。這段會花一點時間處理,請耐心等待

  • 完成後直接按下 Resume startup

  • 系統正在設定中,完成後會自動導向登入頁面

  • 導向登入頁面後的畫面,請使用帳號 admin 與前面設定的密碼登入

登入 Graylog 設定 Syslog 服務


  1. 新增 Syslog 服務

graylog-05.png

  1. 選擇您想要接收的服務類型,例如:Syslog UDP

graylog-06.png

  1. 在新增畫面填入接收器名稱及連接埠(Port),填完後存檔,就可以開始接收記錄了

graylog-07.png

使用 Nginx 反向代理連線


  • 安裝必要套件
sudo dnf install -y yum-utils
  • 新增官方來源庫 sudo vim /etc/yum.repos.d/nginx.repo
[nginx-stable]
name=nginx stable repo
baseurl=https://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true

[nginx-mainline]
name=nginx mainline repo
baseurl=https://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key
module_hotfixes=true
  • 上述設定檔中 nginx-stable 為預設啟用(enabled=1),本文使用的 1.26 即屬 stable 分支,直接安裝即可。若您想改用 mainline 分支才需要額外執行以下指令,執行後裝到的會是版本較新的 mainline 版
sudo dnf config-manager --set-enabled nginx-mainline
  • 安裝 nginx 服務
sudo dnf install -y nginx

安裝完成後請先檢查 /etc/nginx/conf.d/ 目錄。使用 nginx.org 官方套件安裝時,裡面會有一份 default.conf 佔用 80 埠的預設站台,請先將它移除或改名(例如 default.conf.bak),否則請求可能被它接走。若您改用 Rocky 內建 AppStream 的 nginx,則 nginx.conf 內已有一組帶 default_server 的 80 埠設定,與下方設定併存時啟動會出現 a duplicate default server 錯誤,請擇一保留。

  • 新增 Graylog 服務的設定檔 sudo vim /etc/nginx/conf.d/graylog.conf

  • 未使用憑證(純 HTTP)

server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name 你的IP或網域名稱;

    access_log /var/log/nginx/graylog_access.log;
    error_log  /var/log/nginx/graylog_error.log;

    location / {
        proxy_set_header Host              $http_host;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        proxy_set_header X-Graylog-Server-URL http://$server_name/;
        proxy_pass http://127.0.0.1:9000;
    }
}
  • 使用憑證(HTTP 自動轉向 HTTPS)
server {
    listen 80 default_server;
    listen [::]:80 default_server;
    server_name 你的IP或網域名稱;          # 這裡填入網域名稱

    # 將訪客輸入的 http 網址一律轉向 https
    return 301 https://$host$request_uri;
}

server {
    # 使用 https 與 http/2 協定
    listen 443 ssl;
    listen [::]:443 ssl;                   # 上述設定的 IPv6 版本
    http2 on;
    server_name 你的IP或網域名稱;          # 這裡填入網域名稱

    # SSL 憑證路徑(憑證鏈需串接在同一個檔案內)
    ssl_certificate     /etc/nginx/ssl/fullchain.pem;
    # 私鑰路徑
    ssl_certificate_key /etc/nginx/ssl/privkey.pem;

    # 工作階段快取的有效期
    ssl_session_timeout 1d;
    # 工作階段快取的類型與大小
    ssl_session_cache shared:SSL:50m;

    # 使用的加密協定
    ssl_protocols TLSv1.3 TLSv1.2;
    # 加密演算法,越前面的優先權越高
    ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-CHACHA20-POLY1305;
    # 交握過程優先採用伺服器端的加密演算法順序
    ssl_prefer_server_ciphers on;

    access_log /var/log/nginx/graylog_access.log;
    error_log  /var/log/nginx/graylog_error.log;

    location / {
        proxy_set_header Host              $http_host;
        proxy_set_header X-Forwarded-Host  $host;
        proxy_set_header X-Forwarded-For   $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        # 走 HTTPS 時這裡必須是 https,否則前端會被導回 http 而發生混合內容或轉向迴圈
        proxy_set_header X-Graylog-Server-URL https://$server_name/;
        proxy_pass http://127.0.0.1:9000;
    }
}
  • 檢查設定檔語法後,啟動並設定開機自動啟動
sudo nginx -t
sudo systemctl enable --now nginx



參考相關網頁