使用RSyslog将Nginx Access Log写入Kafka

devtools/2025/1/16 10:40:45/

个人博客地址:使用RSyslog将Nginx Access Log写入Kafka | 一张假钞的真实世界

环境说明

  • CentOS Linux release 7.3.1611
  • kafka_2.12-0.10.2.2
  • nginx/1.12.2
  • rsyslog-8.24.0-34.el7.x86_64.rpm

创建测试Topic

$ ./kafka-topics.sh --zookeeper 192.168.72.25:2181/kafka --create --topic develop-test-topic --partitions 10 --replication-factor 3

RSyslog安装

一般系统自带RSyslog服务无需另外安装。但是因为数据需要通过RSyslog的omkafka模块写入到Kafka,而omkafka在RSyslog的v8.7.0+版本才支持,所以要看当前系统中RSyslog的版本是否需要升级。使用以下命令查看:

# rsyslogd -v
rsyslogd 7.4.7, compiled with:FEATURE_REGEXP:				YesFEATURE_LARGEFILE:			NoGSSAPI Kerberos 5 support:		YesFEATURE_DEBUG (debug build, slow code):	No32bit Atomic operations supported:	Yes64bit Atomic operations supported:	YesRuntime Instrumentation (slow code):	Nouuid support:				YesSee http://www.rsyslog.com for more information.

执行以下命令安装:

# sudo yum install rsyslog

安装依赖关系如下:

kafka模块">添加omkafka模块

# yum install rsyslog-kafka

RSyslog Client Nginx配置

注意,Nginx 1.7.1之后才支持syslog的方式处理日志。具体配置项参见官网文档Logging to syslog。

Nginx配置主要是日志格式和Access Log配置项:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';server {listen 11000;location / {proxy_pass http://10.16.0.144:11000;access_log syslog:server=localhost,facility=local7,tag=nginx11000Root,severity=info main;}
}

RSyslog Server端配置

RSyslog的主配置文件/etc/rsyslog.conf,其中会包含引入/etc/rsyslog.d下扩展名为conf的配置文件。

修改配置文件/etc/rsyslog.conf将下面两行前面的注释去掉:

$ ModLoad imudp
$ UDPServerRun 514

/etc/rsyslog.d目录下创建rsyslog_nginx_kafka_cluster.conf,配置内容如下:

module(load="imudp")
input(type="imudp" port="514")# nginx access log ==> rsyslog server(local) ==> kafka
module(load="omkafka")template(name="nginx-11000-root" type="string" string="%msg%")if $inputname == "imudp" then {if ($programname == "nginx11000Root") thenaction(type="omkafka"template="nginx-11000-root"broker=["192.168.72.10:9092","192.168.72.20:9092","192.168.72.25:9092","192.168.72.26:9092","192.168.72.27:9092","192.168.72.48:9092","192.168.72.55:9092","192.168.72.80:9092","192.168.72.81:9092","192.168.72.97:9092"]topic="develop-test-topic"partitions.auto="on"confParam=["socket.keepalive.enable=true"])
}:rawmsg, contains, "nginx11000Root" ~

联调测试

启动RSyslog服务:

# service rsyslog start
Redirecting to /bin/systemctl start  rsyslog.service

遇到的问题

syslog tag 只能包含字母和数字

# nginx -t
nginx: [emerg] syslog "tag" only allows alphanumeric characters and underscore in     /etc/nginx/conf.d/jx-11000-jenkins149-36-144.conf:7
nginx: configuration file /etc/nginx/nginx.conf test failed

kafka’-is-unknown">‘omkafka’ is unknown

RSyslog中没有包含omkafka模块,需要另外安装。查看/var/log/messages日志信息会有以下提示:

# tail -f messages
Mar 15 15:13:40 192-168-72-29 systemd: Started System Logging Service.
Mar 15 15:13:40 192-168-72-29 rsyslogd: could not load module '/usr/lib64/rsyslog/omkafka.so', dlopen:     /usr/lib64/rsyslog/omkafka.so: cannot open shared object file: No such file or directory  [v8.24.0-34.el7 try     http://www.rsyslog.com/e/2066 ]
Mar 15 15:13:40 192-168-72-29 rsyslogd: could not load module '/usr/lib64/rsyslog/omkafka.so', dlopen:     /usr/lib64/rsyslog/omkafka.so: cannot open shared object file: No such file or directory  [v8.24.0-34.el7 try     http://www.rsyslog.com/e/2066 ]
Mar 15 15:13:40 192-168-72-29 rsyslogd: module name 'omkafka' is unknown [v8.24.0-34.el7 try     http://www.rsyslog.com/e/2209 ]
Mar 15 15:13:40 192-168-72-29 rsyslogd: module name 'omkafka' is unknown [v8.24.0-34.el7 try     http://www.rsyslog.com/e/2209 ]

CentOS 6.5升级Rsyslog

CentOS 6.5自带的RSyslog版本是rsyslogd 5.8.10。按照以下方式安装新版本:

# cd /etc/yum.repos.d/
# wget http://rpms.adiscon.com/v8-stable/rsyslog.repo
# yum install rsyslog


http://www.ppmy.cn/devtools/150928.html

相关文章

如何学好数据结构?

相信很多小伙伴们,刚开始接触数据结构这一门学科的时候呢,害怕甚至是厌烦,感觉非常的难,不好学,那么今天呢我就我给大家讲解一下如何去学好数据结构 在编程的世界里,数据结构是基石,它决定了程序的效率和可…

太速科技-402-基于TMS320C6678+XC7K325T的高性能计算核心板

基于TMS320C6678XC7K325T的高性能计算核心板 一、板卡概述 本板卡系我公司自主研发,采用一片TI DSP TMS320C6678和一片Xilinx公司K7系列FPGA XC7K325T-2FFG900-I作为主处理器,Xilinx 的Spartans XC3S200AN作为辅助处理器。其中XC3S200AN负责管理板…

软件测试入门—功能需求分析:以一个旅游管理系统为例

在软件测试的旅程中,功能需求分析是测试人员构建高质量测试用例的基础,它确保软件的各项功能都能按照预期正常运行。接下来,我们将以一个旅游管理系统为例,详细阐述如何进行功能需求分析,帮助大家更清晰地掌握这一重要…

1_CSS3 边框 --[CSS3 进阶之路]

CSS3 引入了许多新的边框特性,使得网页设计更加灵活和富有创意。以下是一些 CSS3 边框相关的特性和属性: 1.border-radius: 用于创建圆角边框。可以为每个角指定不同的半径,甚至可以创建椭圆形的角落。 div {border: 2px solid black;bord…

【Vim Masterclass 笔记14】S07L29 + L30:练习课08 —— Vim 文本对象同步练习(含点评课内容)

文章目录 L29 Exercise 08 - Text Objects1 训练目标2 操作指令2.1. 打开 textobjectspractice.txt 文件2.2. 单词对象练习 Word Objects2.3. 区块对象 ( ) 练习 Block Object ( )2.4. 引用字符串练习 Quoted Strings2.5. 区块对象 [ ] 练习 Block Object [ ]2.6. 区块对象 <…

Rust 游戏开发框架指南

Rust 游戏开发框架指南 主流游戏引擎 1. Bevy 最受欢迎的 Rust 游戏引擎之一&#xff0c;基于 ECS&#xff08;实体组件系统&#xff09;架构。 特点&#xff1a; &#x1f680; 高性能 ECS 系统&#x1f4e6; 热重载支持&#x1f3a8; 现代渲染器&#x1f50a; 内置音频系…

科研绘图系列:R语言绘制微生物物种系统发育树(phylogenetic tree)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍构成要素有根树与无根树构建方法应用领域说明的问题教程加载R包数据下载导入数据数据预处理系统发育树可视化准备画图数据1. 构建基础系统发育树 `p1`2. 添加条形图 `p2`3. 添加热图…

小程序如何引入腾讯位置服务

小程序如何引入腾讯位置服务 1.添加服务 登录 微信公众平台 注意&#xff1a;小程序要企业版的 第三方服务 -> 服务 -> 开发者资源 -> 开通腾讯位置服务 在设置 -> 第三方设置 中可以看到开通的服务&#xff0c;如果没有就在插件管理中添加插件 2.腾讯位置服务…