背景 基于elk的采集端
基础架构是 rsyslog-tcp-logstash es // rsyslog-redis/kafka-logstash-es
安装
vi /etc/yum.repos.d/rsyslog.repo
[rsyslog_v8]
name=Adiscon CentOS-$releasever - local packages for $basearch
baseurl=http://rpms.adiscon.com/v8-stable/epel-$releasever/$basearch
enabled=1
gpgcheck=0
gpgkey=http://rpms.adiscon.com/RPM-GPG-KEY-Adiscon
protect=1
yum install -y --enablerepo=[rsyslog_v8] rsyslog
系统默认,6版本系统安装的是5.8版的rsyslog,7版本的系统安装的是7版本的rsyslog。
而8版的语法,可靠性,性能,功能,都在提升,新版本比老版本牛逼。防止踩不必要的坑,请使用8版本。
配置文件
一般在/etc/rsyslog.conf
有3种 不同的配置方式 basic , advance ,obsolete legacy
凡是$开头的 都是 obsolete legacy风格的配置
目前主要使用 basic和advance混搭的方式进行配置
配置主体是 input ruleset action global module
1.input
默认是从文件中获取输入 其他还有 imtcp imudp... 可以用input()函数声明输入
以tcp为例
input(
type="imtcp"
address="0.0.0.0"
port="514"
)
或者
$InputTCPServerRun 514
可以有多个输入源 ??
3.action
即 output 默认输出omfile 还有 omhiredis omfwd omkafka omelasticsearch等
7.queue
队列分为 direct 磁盘 内存三种模式
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模式有用,开启磁盘辅助队列后, 如果队列大小降到该水平, 关闭磁盘辅助队列,回复内存模式
插件
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"
)
}
命令
rsyslogd –i pid文件 –f conf配置文件
可以通过 rsyslogd –N4 查看rsyslog配置是否正确
可以通过 rsyslogd –dn 进行debug
插件安装
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
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 查看版本号, 是否安装成功
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 是否存在
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是否存在
问题遗留
为什么 queue 一般情况下使用LinkedList比较好。
input怎么设置可以有多个输入源 ??
本文详细介绍了如何在Linux系统上安装和配置rsyslog8版,涉及不同输入源、action配置、队列选项以及Redis和Kafka插件的安装。重点讲解了选择LinkedList作为队列类型的原因及如何设置多个输入源。

1207

被折叠的 条评论
为什么被折叠?



