Skip to main content

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 號

nxlog-01.png

  • 照圖示說明設定

nxlog-02.png

  • 在 rsyslog 設定檔裡增加要接收的 port 號,重啟服務之後就可以去看 log 主機是否有正常收到資料

nxlog-03.png

備註


  BUBU 因為在測試的時候有發現到一直無法正常運行,後來發現到 NXlog 服務本身就已經有做基本的限制需要該資料表單裡面一定要有 ID 欄位才能正常運行,有跟社群的大大做詢間可以利用 SQLVIEW 功能這樣子可以正常讀取 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



參考相關網頁