MySQL 使用 NXLog CE 記錄傳送到 Graylog
BUBU 因公司有把一些訊息寫入到資料庫上面,想利用 NXLog 方式轉送到 Graylog 上做保存日後有需求以方便查詢。
運行環境
本工作室環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式
- 系統環境:CentOS 7
安裝過程
112.02.15 BUBU 下載新版的安裝程式時發現官方已有更改下載方式,只能先手動下載安裝檔後再利用 WinSCP 上傳到該服務。
首先到官方 NXLog CE 先下載安裝檔。
- 安裝 NXLog
yum install nxlog-ce-3.1.2319_rhel9.x86_64.rpm
- 因為要讀取資料庫的關係,需要官方說需要安裝套件,因 BUBU 目前使用的系統是 CentOS 環境需要安裝套件如下
yum install -y libdbi-dbd-mysql
- 安裝完之後再進到
cd /etc/nxlog
目錄下編輯nxlog.conf
或者先複製一份原預設值再來編輯,再將下方的內容填入到該設定檔裡
## This is a sample configuration file. See the nxlog reference manual about the
## configuration options. It should be installed locally under
## /usr/share/doc/nxlog-ce/ and is also available online at
## http://nxlog.org/docs
########################################
# Global directives #
########################################
User nxlog
Group nxlog
include /etc/nxlog/nxlog.d/*.conf
LogFile /var/log/nxlog/nxlog.log
LogLevel INFO
########################################
# Modules #
########################################
# 載入相關模組
<Extension gelf>
Module xm_gelf
</Extension>
<Extension json>
Module xm_json
</Extension>
# 資料來源
<Input db_log>
Module im_dbi
Driver mysql
Option host 127.0.0.1
Option username username
Option password password
Option dbname dbname
SQL SELECT id, a,b FROM log
Exec to_json();
</Input>
<Output db_log_to_graylog>
Module om_udp
Host log伺服器位置
Port 12520
OutputType GELF
</Output>
########################################
# Routes #
########################################
<Route 1>
Path db_log => db_log_to_graylog
</Route>
Graylog 設定
- 先設定要接收的的格式及 Port 號
- 照圖示說明設定
- 在 rsyslog 設定檔裡增加要接收的 port 號,重啟服務之後就可以去看
log
主機是否有正常收到資料
備註
BUBU 因為在測試的時候有發現到一直無法正常運行,後來發現到 NXlog 服務本身就已經有做基本的限制需要該資料表單裡面一定要有 ID
欄位才能正常運行,有跟社群的大大做詢間可以利用 SQL
的 VIEW
功能這樣子可以正常讀取 LOG。
- BUBU 剛好同事有寫出一個範本來做測試,以下是怎麼用語法方式來建立 VIEW 表單
-- 函式庫自動產生流水號
DELIMITER $$
CREATE FUNCTION `view_auto_id`(reset BIT) RETURNS int
NO SQL
NOT DETERMINISTIC
begin
IF reset THEN
SET @var := 0;
ELSE
SET @var := IFNULL(@var,0) + 1;
END IF;
return @var;
end $$
DELIMITER ;
-- 建立 VIEW 語法順便建立 ID 欄位
-- 建立新的表單及欄位
CREATE OR REPLACE VIEW test1.view_test ( id, e_b, e_c)
-- 設定來源想要查詢的欄位
AS SELECT view_auto_id(0),e_b, e_c
-- 指定該資料庫某個表單
FROM test1.ErrorLog
-- 連接上面的剛剛建立函式
JOIN (SELECT view_auto_id(1)) r