基于fluentd实现读取nginx日志输出到kafka

2023-11-02 19:10

本文主要是介绍基于fluentd实现读取nginx日志输出到kafka,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

基于fluentd实现读取nginx日志输出到kafka

  • 一、浅谈fluentd
    • 1.1、什么是Fluentd?
    • 1.2、应该选择 fluentd 还是 td-agent?
  • 二、安装td-agent服务器
    • 2.1、安装td-agent
    • 2.2、启动td-agent服务
    • 2.3、使用http post请求测试
  • 三、怎么去使用这个td-agent
    • 3.1、了解td-agent的内部结构
      • 1)Input Plugin
      • 2)Parse Plugin
      • 3)Filter Plugin
      • 4)Output Plugin
  • 四、Fluentd在实际中的架构以及实际应用

一、浅谈fluentd

1.1、什么是Fluentd?

Fluentd是一个用于统一日志层的开源数据收集器。Fluentd允许您统一数据收集和使用,以便更好地使用和理解数据。Fluentd是云端原生计算基金会(CNCF)的成员项目之一,遵循Apache 2 License协议。
Treasure Data, Inc 对该产品提供支持和维护。fluent-bit 是一个用 C 写成的插件式、轻量级、多平台开源日志收集工具。它允许从不同的源收集数据并发送到多个目的地。这个两个日志收集组件完全兼容docker 和kubernetes 生态环境。随着 Kubernetes 的强势崛起,业务分布在多个计算节点,日志收集凸显重要,本文主要讲述本人在使用 fluentd 和 fluent-bit 中碰到的问题,以及解决方法。
在这里插入图片描述

Fluentdtd-agent
支持社区驱动Treasure Data提供支持和维护
安装Ruby gemsrpm / deb / dmg 软件包
配置自己配置预配置了几个建议设置
其它组件$ fluent-gem install fluent-plugin-xx$ /usr/sbin/td-agent-gem install fluent-plugin-xx
/etc/init.d/ 脚本
内存分配方式系统默认优化(jemalloc)

1.2、应该选择 fluentd 还是 td-agent?

td-agent 是基于 fluentd 核心功能开发,td-agent 优先考虑稳定性而不是新功能。如果您希望自己控制Fluentd功能和更新,建议使用 Fluentd gem。如果您是第一次使用 Fluentd 或在生产环境集群环境中使用它,建议使用td-agent。每2或3个月发布一次新版本的td-agent。

二、安装td-agent服务器

博主使用的是centos7虚拟机,所以按照官网的安装手册是这样的,别的系统可参考==>fluentd安装

2.1、安装td-agent

在这里插入图片描述

curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent3.sh | sh

在这里插入图片描述

2.2、启动td-agent服务

systemctl start td-agent.service
systemctl status td-agent.service

在这里插入图片描述

2.3、使用http post请求测试

td-agent的配置文件是/etc/td-agent/td-agent.conf
td-agent的日志文件是/var/log/td-agent/td-agent.log

curl -X POST -d 'json={"json":"message"}' http://localhost:8888/debug.test
tail -n 1 /var/log/td-agent/td-agent.log

在这里插入图片描述

三、怎么去使用这个td-agent

3.1、了解td-agent的内部结构

在这里插入图片描述

1)Input Plugin

自带插件:tail、forward、udp、tcp、http等等
需安装插件:sql、dstat等等

<source>@type tailpath /var/log/httpd-access.logpos_file /var/log/td-agent/httpd-access.log.postag apache.access<parse>@type apache2</parse>
</source>

2)Parse Plugin

自带插件:regexp、apache2、nginx、csv、json、multiline等等

<parse>@type regexpexpression /^\[(?<logtime>[^\]]*)\] (?<name>[^ ]*) (?<title>[^ ]*) (?<id>\d*)$/time_key logtimetime_format %Y-%m-%d %H:%M:%S %ztypes id:integer
</parse>

3)Filter Plugin

自带插件:record_transformer、grep、parser等等

<filter foo.bar>@type grep<regexp>key messagepattern /cool/</regexp><regexp>key hostnamepattern /^web\d+\.example\.com$/</regexp><exclude>key messagepattern /uncool/</exclude>
</filter>
The value of the message field contains cool. 
这个message值中包含cool
The value of the hostname field matches web<INTEGER>.example.com. 
这个hostname中匹配这个规则
The value of the message field does NOT contain uncool.
这个message值中不包含uncool

4)Output Plugin

自带插件:file、forward、http、copy、kafka、elasticsearch等等
需要安装的插件:sql、hdfs等等

<match pattern>@type kafka2# list of seed brokersbrokers <broker1_host>:<broker1_port>,<broker2_host>:<broker2_port>use_event_time true# buffer settings<buffer topic>@type filepath /var/log/td-agent/buffer/tdflush_interval 3s</buffer># data type settings<format>@type json</format># topic settingstopic_key topicdefault_topic messages# producer settingsrequired_acks -1compression_codec gzip
</match>
brokers       kafka的服务器地址
buffer        缓存刷新(可以保存到文件,设置刷新时间)
format        格式化
topic         目标topic
default_topic 默认topic

四、Fluentd在实际中的架构以及实际应用

利用Fluentd在各个服务器上抓取日志信息,再推送给Mysql或者ES或者JAVA应用等等进行可视化展示
在这里插入图片描述
博主实现的是利用Fluentd抓取nginx日志到kafka
配置的td-agent.conf

<source>@type tail@id input_tailpath /mydata/nginx/logs/access.logpos_file /var/log/td-agent/nginx-access.log.pos<parse>@type regexpexpression /^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)"(?:\s+(?<http_x_forwarded_for>[^ ]+))? "(?<request_time>[^\"]*)" "(?<response_time>[^\"]*)" "(?<request_length>[^\"]*)" "(?<upstream_addr>[^\"]*)")?$/time_key timetime_format %d/%b/%Y:%H:%M:%S %z</parse>tag td.nginx.access
</source><filter td.nginx.access>@type grepregexp1 path catalog.json
</filter><match td.nginx.access>@type kafka2brokers 127.0.0.1:9092use_event_time true<buffer nginx>flush_interval  5s</buffer><format>@type json</format>topic_key nginxdefault_topic messagesrequired_acks -1compression_codec gzip
</match>

根据nginx日志记录的格式抓取
在这里插入图片描述
使雍springboot继承kafka监听消息
成功消费kafka中推送的日志信息
在这里插入图片描述

最后感谢B站大佬的指导视频 ===> 分布式日志采集工具:fluentd-20200708-王子健

这篇关于基于fluentd实现读取nginx日志输出到kafka的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/332684

相关文章

C++使用栈实现括号匹配的代码详解

《C++使用栈实现括号匹配的代码详解》在编程中,括号匹配是一个常见问题,尤其是在处理数学表达式、编译器解析等任务时,栈是一种非常适合处理此类问题的数据结构,能够精确地管理括号的匹配问题,本文将通过C+... 目录引言问题描述代码讲解代码解析栈的状态表示测试总结引言在编程中,括号匹配是一个常见问题,尤其是在

Java实现检查多个时间段是否有重合

《Java实现检查多个时间段是否有重合》这篇文章主要为大家详细介绍了如何使用Java实现检查多个时间段是否有重合,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录流程概述步骤详解China编程步骤1:定义时间段类步骤2:添加时间段步骤3:检查时间段是否有重合步骤4:输出结果示例代码结语作

Nginx设置连接超时并进行测试的方法步骤

《Nginx设置连接超时并进行测试的方法步骤》在高并发场景下,如果客户端与服务器的连接长时间未响应,会占用大量的系统资源,影响其他正常请求的处理效率,为了解决这个问题,可以通过设置Nginx的连接... 目录设置连接超时目的操作步骤测试连接超时测试方法:总结:设置连接超时目的设置客户端与服务器之间的连接

使用C++实现链表元素的反转

《使用C++实现链表元素的反转》反转链表是链表操作中一个经典的问题,也是面试中常见的考题,本文将从思路到实现一步步地讲解如何实现链表的反转,帮助初学者理解这一操作,我们将使用C++代码演示具体实现,同... 目录问题定义思路分析代码实现带头节点的链表代码讲解其他实现方式时间和空间复杂度分析总结问题定义给定

Java覆盖第三方jar包中的某一个类的实现方法

《Java覆盖第三方jar包中的某一个类的实现方法》在我们日常的开发中,经常需要使用第三方的jar包,有时候我们会发现第三方的jar包中的某一个类有问题,或者我们需要定制化修改其中的逻辑,那么应该如何... 目录一、需求描述二、示例描述三、操作步骤四、验证结果五、实现原理一、需求描述需求描述如下:需要在

Debezium 与 Apache Kafka 的集成方式步骤详解

《Debezium与ApacheKafka的集成方式步骤详解》本文详细介绍了如何将Debezium与ApacheKafka集成,包括集成概述、步骤、注意事项等,通过KafkaConnect,D... 目录一、集成概述二、集成步骤1. 准备 Kafka 环境2. 配置 Kafka Connect3. 安装 D

C#中读取XML文件的四种常用方法

《C#中读取XML文件的四种常用方法》Xml是Internet环境中跨平台的,依赖于内容的技术,是当前处理结构化文档信息的有力工具,下面我们就来看看C#中读取XML文件的方法都有哪些吧... 目录XML简介格式C#读取XML文件方法使用XmlDocument使用XmlTextReader/XmlTextWr

如何使用Java实现请求deepseek

《如何使用Java实现请求deepseek》这篇文章主要为大家详细介绍了如何使用Java实现请求deepseek功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1.deepseek的api创建2.Java实现请求deepseek2.1 pom文件2.2 json转化文件2.2

python使用fastapi实现多语言国际化的操作指南

《python使用fastapi实现多语言国际化的操作指南》本文介绍了使用Python和FastAPI实现多语言国际化的操作指南,包括多语言架构技术栈、翻译管理、前端本地化、语言切换机制以及常见陷阱和... 目录多语言国际化实现指南项目多语言架构技术栈目录结构翻译工作流1. 翻译数据存储2. 翻译生成脚本

如何通过Python实现一个消息队列

《如何通过Python实现一个消息队列》这篇文章主要为大家详细介绍了如何通过Python实现一个简单的消息队列,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录如何通过 python 实现消息队列如何把 http 请求放在队列中执行1. 使用 queue.Queue 和 reque