Skip to main content

WOWZA 使用 NXLog CE 記錄傳送到 Graylog

  BUBU 因公司有使用串流主機服務,但想要把這個串流主機服務轉送到 Graylog 上做保存日後有需求以方便查詢,那有詢問過代理說目前系統並沒有這樣子機制,所以需要用其他方式來轉送到 Graylog 上,那剛好之前 BUBU 的 IIS LOG 是用 NXLog 套件來做傳送。

運行環境


本工作室環境都是在 「Proxmox VE 」 虛擬系統上架設,都是以 「 LXC 」模式為主,除非有特殊狀況會告知使用 「 VM 」 模式

  • 系統環境:Debian 11

安裝過程


首先到官方 NXLog CE 先下載安裝檔

  • 下載安裝套件
wget https://nxlog.co/system/files/products/files/348/nxlog-ce_3.1.2319_debian11_amd64.deb
  • 安裝 NXLog
dpkg -i nxlog-ce_3.1.2319_debian11_amd64.deb
  • 在安裝過程中會警告說有兩個套件無法安裝需要手動安裝
dpkg: dependency problems prevent configuration of nxlog-ce:
 nxlog-ce depends on libapr1 (>= 1.4.8-2~); however:
  Package libapr1 is not installed.
 nxlog-ce depends on libdbi1 (>= 0.9.0); however:
  Package libdbi1 is not installed.
  • 如出現以上訊息請下這個指令,系統就會安裝相依套件這樣子 NXLog 就可以正常運行了
 apt --fix-broken install
  • 安裝完之後再進到 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>

# 這是設定 CSV
<Extension wowza_acc>
    Module  xm_csv
    # 先查看來源檔是否有表頭
    Fields $date, $time, $tz, $x-event, $x-category, $x-severity, $x-status, $x-ctx, $x-comment, $x-vhost, $x-app, $x-appinst, $x-duration, $s-ip, $s-port, $s-uri, $c-ip, $c-proto, $c-referrer, $c-user-agent, $c-client-id, $cs-bytes, $sc-bytes, $x-stream-id, $x-spos, $cs-stream-bytes, $sc-stream-bytes, $x-sname, $x-sname-query, $x-file-name, $x-file-ext, $x-file-size, $x-file-length, $x-suri, $x-suri-stem, $x-suri-query, $cs-uri-stem, $cs-uri-query
    Delimiter  \t
    QuoteChar '"'
    EscapeControl TRUE
    UndefValue -
</Extension>

<Extension wowza_err>
    Module  xm_csv
    Fields $x-severity,	$x-category, $x-event, $date, $time, $c-client-id, $c-ip, $c-port, $cs-bytes, $sc-bytes, $x-duration, $x-sname, $x-stream-id, $x-spos, $sc-stream-bytes, $cs-stream-bytes, $x-file-size, $x-file-length, $x-ctx, $x-comment
    Delimiter  \t
    QuoteChar '"'
    EscapeControl TRUE
    UndefValue -
</Extension>

# 字型轉換
<Extension charconv>
    Module  xm_charconv
    AutodetectCharsets utf-8, utf-16, utf-32, iso8859-2, windows-1252
</Extension>

# 資料來源
<Input wowza_acc_in>
    Module  im_file
    File    '/usr/local/WowzaStreamingEngine/logs/wowzastreamingengine_access.log'
    ReadFromLast  FALSE
    <Exec>
        # 忽略以#開頭的日誌行
        if $raw_event =~ /^#/ drop();
        else
        {
            convert_fields("windows-1252", "utf-8");
            # 解析為CSV格式
            # 通過xm_csv模塊對WOWZA日誌進行解析
            wowza_acc->parse_csv();
            $raw_event = replace($raw_event, ' ', "\t");
	}
    </Exec>
</Input>

<Input wowza_err_in>
    Module  im_file
    File    '/usr/local/WowzaStreamingEngine/logs/wowzastreamingengine_error.log'
    ReadFromLast        FALSE
    <Exec>
        if $raw_event =~ /^#/ drop();
        else
        {
            convert_fields("windows-1252", "utf-8");
            wowza_acc->parse_csv();
            $raw_event = replace($raw_event, ' ', "\t");
        }
    </Exec>
</Input>

<Output wowza_acc_to_graylog>
    Module om_udp
    Host log伺服器位置
    Port 12520
    OutputType GELF
</Output>

<Output wowza_err_to_graylog>
    Module om_udp
    Host log伺服器位置
    Port 12521
    OutputType GELF
</Output>

########################################
# Routes                               #
########################################

<Route 1>
    Path        wowza_acc_in => wowza_acc_to_graylog
</Route>

<Route 2>
    Path        wowza_err_in => wowza_err_to_graylog
</Route>

Graylog 設定

  • 先設定要接收的的格式及 Port 號

nxlog-01.png

  • 照圖示說明設定

nxlog-02.png

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

nxlog-03.png




參考相關網頁