前言
目的: 通过rsyslog 将日志发送到kafka
思路: 远端将产生的日志通过rsyslog发送到服务器的rsyslog,本地的rsyslog将日志处理成想要的格式之后发送到kafka
用到的工具:rsyslog-kafka.x86_64 插件
实现过程
- 在kafka的所有节点中创建一个主题 test
bin/kafka-topics.sh --create --bootstrap-server dn1:9092 --replication-factor 1 --partitions 1 --topic test
本地日志转发服务器进行以下配置
- 安装rsyslog+rsyslog-kafka
通过yum安装,运行下列命令
(如果没有yum源 1.进入/etc/yum.repos.d 0 2.
运行:wget http://rpms.adiscon.com/v8-stable/rsyslog.repo)
# 安装rsyslog(centos7自带,不需要安装)
yum install rsyslog
# 安装 syslog-kafka插件
yum install rsyslog-kafka.x86_64
- 安装完成后查看 /lib64/rysylog/中是否存在omkafka.so,验证rsyslog-kafka是否安装成功
- 然后在/etc/rsyslog.conf 的#### MODULES ####的下面添加如下配置
# 加载omkafka和imptcp模块
module(load="omkafka")
module(load="imptcp") # needs to be done just once
# nginx template
设置模板处理接收到的数据格式
template(name="nginxAccessTemplate" type="string" string="%hostname%<-+>%syslogtag%<-+>%msg%\n")
# ruleset
ruleset(name="test-kafka") {
#日志转发kafka
action (
type="omkafka"
template="nginxAccessTemplate"
#设置kafka的主题
topic="test"
# 设置kafka集群,不同的机器端口用逗号隔开
broker="dn1:9092,dn2:9092,dn3:9092"
)
}
# 定义消息来源及设置相关的action
input(type="imptcp" port="514" Ruleset="test-kafka")
- 修改完配置后运行:rsyslogd -N 1 或者 rsyslogd -dn 查看配置是否报错
- 然后重启rsyslog:service rsyslog restart,重启后查看/var/log/message中日志是否报错
- 在客户端的rsyslog的配置文件里面添加以下代码
mail.info @@nna:514
-
通过下面命令,重启客户端的rsyslog
service rsyslog restart
-
在kafka节点中运行以下命令等待获取kafka消息:
bin/kafka-console-consumer.sh --bootstrap-server dn1:9092 --topic test --from-beginning
- 在客户端中写用这个 输入这条命令
logger -p mail.info “你的消息“
测试
这样,在kafka中就能看到这条消息了。
附录
参考文档:
-
rsyslog接收远端发来的日志 https://www.rsyslog.com/doc/v8-stable/configuration/modules/imptcp.html?highlight=tcp
-
日志系统详解
[外链图片转存失败(img-J9F0CjnG-1564133192086)(rsyslog日志转发.assets/linux系统之日志文件系统详解.png)] 日志原文 https://blog.51cto.com/chrinux/1168233
-
rsyslog客户与rsyslgo服务器使用到的模块与配置语法:
角色 | 功能 | RPM包名 | 模块 | 配置语法 |
---|---|---|---|---|
客户 | 使用udp协议发送 | rsyslog | - | . @hostname:514 |
客户 | 使用tcp协议发送 | rsyslog | _ | . @@hostname:514 |
客户 | 使用relp协议发送 | rsyslog-relp | omrelp | . :omrelp:hostnames:2514 |
服务器 | 使用udp协议接收 | rsyslog | imudp | $ModLoad imudp $InputUDPServerRun 514 |
服务器 | 使用tcp协议接收 | rsyslog | imtcp | $ModLoad imtcp $InputTCPServerRun 514 |
服务器 | 使用relp协议接收 | rsyslog-relp | imrelp | $ModLoad imrelp $InputRELPServerRun 2514 |
服务器 | 将日志记录到MySQL | ryslog-mysql | ommysql | $ModLoad ommysql .:ommysql:DBserver,DBname,DBuser,DBpasswd |
服务器 | 将日志记录到PostgreSQL | rsyslog-pgsql | ompgsql | $ModLoad ompgsql .:ompgsql:DBserver,DBname,DBuser,DBpasswd |