rsyslog & kafka 流量日志


1、rsyslog安裝

  在線安裝: https://www.rsyslog.com/rhelcentos-rpms/

  離線安裝:

  1)版本要求:

    操作系統: Centos 7.2

    應用版本: 8.34.0

  2)依賴:

       (一般來說安裝最新版本的依賴就可以)

           必須:

      Gcc

                     Libestr 0.1.10

                     Libfastjson 0.99.8

            非必須(某些插件要求):

  3)依賴安裝:

    a)  Libestr

      下載libestr最新版安裝包, 解壓到某個目錄, 進入該目錄;

      執行: ./configure --libdir=/usr/lib64 --includedir=/usr/include

      執行:  make && make install

      查看/usr/lib64目錄下是否出現libestr.so等鏈接庫,

      查看/usr/lib64/pkgconfig目錄下是否出現libestr.pc

    b)   Libfastjson

      下載libfastjson最新版安裝包, 解壓到某個目錄, 進入該目錄

      執行: ./configure --libdir=/usr/lib64 --includedir=/usr/include

      執行:make && make install

      查看/usr/lib64目錄下是否出現libfastjson.so等鏈接庫,

      查看/usr/lib64/pkgconfig目錄下是否出現libfastjson.pc

  4) rsyslog 安裝:

          下載rsyslog 8.34.0的安裝包。

     http://rpms.adiscon.com/v8-stable/epel-7/x86_64/RPMS/rsyslog-8.34.0-1.el7.centos.x86_64.rpm

     rpm -i  rsyslog-8.34.0-2.el7.centos.x86_64.rpm

          輸入rsyslogd –version 查看版本號, 是否安裝成功

  5) redis插件安裝

    rsyslog的redis插件依賴於hiredis, 下載hiredis 0.13.0 rpm包

    rpm –i hiredis-0.13.3-7.fc28.x86_64.rpm

         下載rsyslog-hiredis插件包

          rpm -i --nodeps rsyslog-hiredis-8.34.0-1.fc29.x86_64.rpm

          (--nodeps 否則會失敗)

          查看/usr/lib64/rsyslog/omhiredis.so 是否存在

       6) kafka 插件安裝

    下載liblz4 rpm包安裝

    rpm –i --nodeps lz4-1.7.3-1.el7.x86_64.rpm

     下載rsyslog-kafka插件包

    rpm -i –nodeps rsyslog-kafka-8.34.0-2.el7.centos.x86_64.rpm

    查看/usr/lib64/rsyslog/omkafka.so是否存在

 

2、Kafka安裝

  1)    版本要求

    Kafka 1.1.0

   2)    依賴

    Java 1.8

    Zookeeper

  3)    依賴安裝

    Java

    Zookeeper(kafka自帶,但zookeeper一般至少3個節點)

  4) kafka安裝

    略

  5)需要注意問題

    Zookeeper和kafka一般都是集群方式部署, 流量采集服務器單台怎么部署集群,磁盤問題。

 

3、Rsyslog插件

  1) redis  

# Provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514

# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

# An on-disk queue is created for this action. If the remote host is
# down, messages are spooled to disk and sent when it is up again.
#$ActionQueueFileName /data/rsyslog/queue/syslog # unique name prefix for spool files
#$ActionQueueMaxDiskSpace 10g   # 1gb space limit (use as much as possible)
#$ActionQueueSaveOnShutdown on # save messages to disk on shutdown
#$ActionQueueType LinkedList   # run asynchronously
#$ActionResumeRetryCount -1    # infinite retries if host is down
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
$ModLoad omhiredis
#module(load="omhiredis")
action(
type="omhiredis"
name="push_redis"
server="127.0.0.1"
serverport="6379"
mode="queue"
key="syslog"
)

  2) kafka  

# Provides UDP syslog reception
#$ModLoad imudp
#$UDPServerRun 514

# Provides TCP syslog reception
#$ModLoad imtcp
#$InputTCPServerRun 514
#module(load="imtcp" maxsessions="1000")
#input(
#  type="imtcp"
#  address="0.0.0.0"
#  port="514"
#)
module(load="imudp" threads="2"
       timeRequery="8" batchSize="128")
module(load="imptcp" threads="4")

input(type="imudp" port="514"
      ruleset="write2kafka")
input(type="imptcp" port="514"
      ruleset="write2kafka")

# Where to place auxiliary files
#
# # Use default timestamp format
#$ActionFileDefaultTemplate RSYSLOG_TraditionalFileFormat
template(name="rawFormat" type="string" string="%rawmsg%")
#$ActionFileDefaultTemplate rawFormat
#
# remote host is: name/ip:port, e.g. 192.168.0.1:514, port optional
#*.* @@remote-host:514
# ### end of the forwarding rule ###
#$ModLoad omkafka
#
module(load="omkafka")

ruleset(
name="write2kafka"
queue.filename="syslog"
queue.spoolDirectory="/data/rsyslog/queue"
queue.size="10000000"
queue.maxdiskspace="10G"
queue.type="LinkedList"
queue.saveonshutdown="on"
queue.dequeueBatchSize="4096"
queue.workerThreads="10"
queue.workerThreadMinimumMessages="100000"
)
{
action(
template="rawFormat"
type="omkafka"
topic="syslog"
confParam=["compression.codec=snappy",
           "socket.timeout.ms=20",
           "socket.keepalive.enable=true"]
partitions.auto = "on"
resubmitonfailure = "on"
)
}

 

4、Rsyslog 配置

  rsyslog有3種不同配置方式: basic(已過時,兼容), advance, obsolete legacy(已過時,兼容, 官方建議不要使用這種方式)。

  目前rsyslog主要使用basic和advance混搭的方式進行配置, 凡是$開頭的配置,都是obsolete legacy風格的配置, 大都有。

  rsyslog的配置主體分為input, ruleset, action, global,module

  1)  input

    input代表輸入, 默認是從文件中獲取輸入, 其他還有imtcp. imudp等

         可以使用input()函數聲明輸入, input函數的type參數是必須的, 必須是輸入源的module名,如tcp使用imtcp模塊, 則type必須是imtcp,其他參數根據不同的module而定, 如tcp必須約定address(主機名), port(監聽的端口)等等。

         以tcp為例, 輸入配置為:

          input(

                         type="imtcp"

                         address="0.0.0.0"

                         port="514"

    )

    或者

    $InputTCPServerRun 514

    可以有多個輸入源

  

  2)  ruleset

    略

  3)  action

    action即output, 默認輸出omfile, 其他還有omhiredis, omfwd, omkafka, omelasticseasch等。

    可以使用action()函數聲明輸出, action的type參數必須是輸出插件的module名,其他參數依不同插件而定, 需要說明的是action里面可以設置隊列參數,如queue.type和queue.size等,具體見隊列

       4)       global

    全局參數, 可以使用global()函數約定,或$參數名約定。

    5)  module

    導入模塊的函數module(), 無論input或是action等, 使用的插件都必須通過module方法導入,module函數的load必須, 必須是插件的名稱,如imfile, omfile等。其他可選參數依據不同的module而定, 可以性能調優。

    也可通過$ModLoad module_name的方式導入模塊。

  6)  include

    等同於$IncludeConfig

  7)  queue

    rsyslog對列分為direct, 磁盤, 內存3種模式, direct和磁盤模式都影響性能,內存模式分為FixedArray和LinkedList, 一般情況下使用LinkedList比較好。

    也可以啟用DA模式,內存隊列和磁盤隊列結合使用, 默認情況下,優先使用內存隊列,當內存中隊列已滿時,開啟磁盤隊列。即可以保證高性能, 又可以防止數據丟失。

    重要參數:

    queue.size  隊列的最大大小,不能設太小,影響性能

    queue.type  可選值:FixedArray / LinkedList / Direct / Disk

    queue.saveonshutdown on/off

    queue.workerthreads 工作線程數,官方建議1

    queue.filename 存儲隊列的文件名稱, 僅對磁盤隊列有用, 需要注意的是只能是文件名,不能包含目錄

    queue.spoolDirectory 存儲隊列的工作目錄, 僅對磁盤隊列有用

    queue.maxdiskspace 存儲隊列的最大大小,僅對磁盤隊列有用

    queue.highwatermark 僅對DA模式有用, 隊列大小達到該水平,開啟磁盤輔助隊列

    queue.lowwatermark僅對DA模式有用,開啟磁盤輔助隊列后, 如果隊列大小降到該水平, 關閉磁盤輔助隊列,回復內存模式

 

5、Rsyslog 運行

  1)    systemctl

    systemctl start|status|stop rsyslog   讀取/etc/rsyslog.conf 及 /etc/rsyslogd.d/*.conf

    systemctl status –l rsyslog 查看rsyslog運行情況, 可以看到報錯信息

  2)    命令行

    rsyslogd –i pid文件 –f conf配置文件

    可以通過 rsyslogd –N4 查看rsyslog配置是否正確

    可以通過 rsyslogd –dn  進行debug


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM