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