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 Node及Graylog來源庫
sudo rpm -Uvh https://packages.graylog2.org/repo/packages/graylog-7.1-repository_latest.rpm
- 安裝
graylog-datanode及graylog-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.conf 與 datanode.conf 兩邊的值必須完全一致,長度至少 64 個字元。
使用 pwgen 輔助工具產生密鑰,並一次寫入 server.conf 及 datanode.conf 的 password_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.conf及sudo vim /etc/graylog/datanode/datanode.conf,確認兩邊的password_secret參數值是否一致
- 設定 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}' 以互動方式輸入。
- 以下是產生出來的畫面
- 將上述指令產出的雜湊值,填入
server.conf的root_password_sha2參數:sudo vim /etc/graylog/server/server.conf
- 繼續設定 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-datanode及graylog-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 服務
- 新增 Syslog 服務
- 選擇您想要接收的服務類型,例如:Syslog UDP
- 在新增畫面填入接收器名稱及連接埠(Port),填完後存檔,就可以開始接收記錄了
使用 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













