文章目录

  • 引言
  • 安装
    • 推荐的安装方式:
    • 其他安装方式的采坑
    • 测试验证
  • 学习过程
    • 1. 先学习一个简单的采集示例:
    • 2. 学习一下fluentd相关的关键字配置。
  • 日志接入实践
  • 总结

引言

Fluentd是一个通用的数据收集框架,通常用来作为统一的日志处理平台,这篇文章主要记录Fluentd的学习与使用过程,也包括一些采坑的点,和大家分享经验。

安装

安装一个fluentd的环境是一个基本操作, 最有价值的参考信息当然是fluentd的指导文档了,URL链接为: https://docs.fluentd.org/installation
笔者使用的Euler2.9的环境, 在安装过程中遇到了一些坑。

推荐的安装方式:

推荐使用rpm包的方式安装td-agent— fluentd的一个稳定发布版本(stable distribution)
推荐原因: 简单方便, 不需要安装ruby通过gem安装。

安装指导:
主要可以参考:https://docs.fluentd.org/installation/install-by-rpm

要点:

  • 获取安装脚本:
# td-agent 4
$ curl -L https://toolbelt.treasuredata.com/sh/install-redhat-td-agent4.sh | sh
  • 使用的是Euler2.9的操作系统,运行脚本会报错,因此修改脚本的内容, 使得/etc/yum.repos.d/td.repo的$releasever 的值为 8, 然后重新运行脚本即可。
  • 启动服务,即可运行
sudo systemctl restart td-agent.service
  • 默认的配置文件位置:
    /etc/td-agent/td-agent.conf

其他安装方式的采坑

总结:

  • 安装的难易很大程度上取决于操作系统,有的操作系统可能只需要几行命令就可以安装成功了。
  • 使用ruby gem的安装方式,看似简单, 主要就两个命令:
yum install ruby
gem install fluentd --no-doc

但是这两个命令对euler操作系统并不友好,遇到如下报错, 尝试解决未果

mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
  • 使用docker安装的方式, 主要是遇到了权限不足的错误,可能是配置文件的设置不对, 也是尝试解决未果。
docker pull fluent/fluentd:v1.7-1docker run -p 8888:8888 --rm -v $(pwd)/etc:/fluentd/etc -v $(pwd)/log:/fluentd/log fluent/fluentd:v1.7-1 -c /fluentd/etc/fluentd_basic_setup.conf -v

测试验证

td-agent默认配置了 8888端口的监听,可以用于测试

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

效果:

2022-08-02 20:30:50.129095885 +0800 debug.test: {"json":"message"}

学习过程

参考文档:
http://t.zoukankan.com/wzs5800-p-13528430.html

需求推动学习, 描述一下自己在实践中遇到的需求:

目的: 将日志自动接入到日志平台中。

先通过几个简单的示例熟悉这个中间件的使用。

1. 先学习一个简单的采集示例:

<source>@type tailpath /home/fluentd/test.logpos_file /var/log/td-agent/test.postag fluent.test<parse>@type none</parse>
</source>
<match **>@type stdout
</match>
  • 通过tail的方式跟踪日志文件/home/fluentd/test.log,将其输出到控制台终端。
  • 在中指定了输入插件in_tail,在中指定了输出插件out_stdout
  • 为了识别日志格式,in_tail插件需要设置一个Parser插件,通过将parser.type设置为none,告诉td-agent日志为单列文本。
  • pos_file 会记录日志的行数, 是必选项目。

2. 学习一下fluentd相关的关键字配置。

source: 配置数据的来源

# Receive events from 24224/tcp
# This is used by log forwarding and the fluent-cat command
<source>@type forwardport 24224
</source># http://<ip>:9880/myapp.access?json={"event":"data"}
<source>@type httpport 9880
</source>

可以添加的数据配置

tag: myapp.access # 指定数据的方向
time: (current time) # 时间
record: {“event”:“data”} # 记录,json格式
match: 指定输出的方向

match: 可以设置日志的输出

下面的例子可以通过发送http请求来获取日志

# http://<ip>:9880/myapp.access?json={"event":"data"}
<source>@type httpport 9880
</source># Match events tagged with "myapp.access" and
# store them to /var/log/fluent/access.%Y-%m-%d
# Of course, you can control how you partition your data
# with the time_slice_format option.
<match myapp.access>@type filepath /var/log/fluent/access
</match>

下面的例子是 把nginx 日志传入到kafka

<source>@type tcpport 1517bind 0.0.0.0tag nginx<parse>@type syslog</parse>
</source><match nginx>@type kafka2brokers 1.2.3.4:9092use_event_time false<format>@type json</format>topic_key nginx_logdefault_topic nginx_log
</match>

发现有几个标签的功能不是特别了解,在这里补充一下

@type    :  表示输入的插件
@label   :  个人理解是为了简化tag的路由。 在<source>中指定了输入和label, 而label又关联了对应的filter和match, 这样可以简化逻辑。
<parse></parse> : 可以用于<source> <match> <filter>中, 是一个解析插件, 可以解析csv, nginx, json等格式的数据。
<format></format> : 用于<match><filter>中, 输出为csv,json等格式,作用是输出的格式化。

日志接入实践

  • fluntd如何把日志传入到kafka
    前提条件, 需要有一个kafka的环境(需要自行安装一个并运行)

如果kafa作为数据生产者的话,可以通过如下方式进行消息传播
发送消息:
bin/kafka-console-producer.sh --broker-list localhost:9092 --topic test

在这里, 可以把fluentd看作生产者, 那么如何进行fluentd的配置呢?

需求场景:
环境中会记录一些日志, 日志信息追加到某个特定的日志文件 test.log中, 下面希望配置fluentd和kafka对接,配置文件如下:

<source>@type tailpath /opt/test/test.logpos_file /var/log/td-agent/test.postag nuclei<parse>@type regexpexpression /^\[(?<logtime>[^\]]*)\] \[(?<vul_name>[^\]]*)\] \[(?<protocal>[^\]]*)\] \[(?<level>[^\]]*)\] (?<url>[^ ]*)(?<detail>.*)$/</parse>
</source><match nuclei>@type kafka2brokers  ip:portuse_event_time false<format>@type json</format>topic_key nucleidefault_topic nuclei
</match>

调试总结:

  • match是一对一的关系, 也就是说一个source只能对应一个match, 多个的话不生效?
  • tail 方式kafka接收消息不是实时的, 可能有一点的延迟
  • 日志路径的权限也很重要, 需要保证fluentd可以读取。
  • 不是所有消息都会打日志的, 主要还是看数据的流向是哪里。

对于各种格式的匹配, 建议使用正则的方式。

正则的调试可以在下面网址进行:
https://rubular.com/r/xfQHocREGj

总结

在实践中重点关注了tail 方式收集日志,fluentd 还支持其他许多种输入的方式,

【中间件学习】Fluentd基础学习教程相关推荐

  1. 如何将图片素材亮度调高照片光线调亮ps教程ps学习ps基础课程教程

    如何将图片素材亮度调高照片光线调亮ps教程ps学习ps基础课程教程

  2. 通道抠图怎么扣ps教程ps学习视频教程基础学习

    通道抠图怎么扣ps教程ps学习视频教程基础学习

  3. java学习_Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心

    Python基础学习教程:从0学爬虫?让爬虫满足你的好奇心 有必要学爬虫吗? 我想,这已经是一个不需要讨论的问题了. 爬虫,"有用"也"有趣"! 这个数据为王的 ...

  4. linux中断响应时间太慢_linux+arm系统学习与基础学习

    先说说arm吧.先前学习linux+arm老是觉得arm次要的,学习arm和学习单片机一样,了解了中断,UART,AD,定时器就差不多了,工作重心主要在linux上面.随着时间的推移,学习的深入,自我 ...

  5. ps去掉多余的人物#ps抠图#ps去除抠图教程学习入门基础学习

    ps去掉多余的人物#ps抠图#ps去除抠图教程学习

  6. NLP学习D2-TF2基础学习-北大教程

    今天主要学tf2和动手实践:如果有时间,看下Transformer系列的细节!!加油! 一.环境配置 老师很贴心,带着装环境. 1.我建个github仓库~ 2.设置了一个conda的默认清华镜像 参 ...

  7. 深度学习-计算机视觉-基础学习笔记-01

    图像分类的思想:收集大量已知图像数据并带有正确的标签,将以往通过一个函数传入一张图片并返回图片的类型的这个思想转变成,通过俩个函数,第一个函数传入大量的图片并通过该函数训练返回一个模型,该模型通过训练 ...

  8. [AngularJS学习笔记] 基础学习01

    2016-06-06开始学习AngularJS AngularJS是会extend HTML的 ng-directives 先学习了四个 ng-app:定义AngularJS Application的 ...

  9. Babel学习之基础学习

    Babel学习 一.简介 1. Babel是什么? 2. 整体介绍 二.presets(环境预设) 常用的环境预设包 三.plugins(插件) 一.简介 1. Babel是什么? Babel是一个编 ...

最新文章

  1. 新建swap分区的规划、挂载和自动挂载示例
  2. Material Designer的低版本兼容实现(一)—— 简介 目录
  3. [LOJ3014][JOI 2019 Final]独特的城市——树的直径+长链剖分
  4. 【elasticsearch】 flink es sink Connection refused
  5. 有限温度量子多体系统与热态张量网络
  6. bootstrap插件bootbox
  7. 文件分片上传阿里云OSS
  8. cf 1677A - Tokitsukaze and Strange Inequality
  9. websocket给指定客户端推送消息
  10. 晨风机器人插件编辑器_晨风机器人文本编辑器
  11. .Net发布到IIS服务器,IIS服务器配置
  12. 天使与海豚的爱情故事
  13. HTML编写个人日记,HTML学习日记(1-基础)
  14. 要脱大家一起脱:网络实名制与官员财产透明化
  15. strtod、strtof、strtold笔记
  16. 基于Cplex的分支定界
  17. Python实现傅里叶变换提取图像高频区域(边缘)
  18. 教你使用 Python 获取美国重要经济指标数据
  19. 您玩儿转手机通讯录了吗?
  20. 批量移动指定文件至指定文件夹

热门文章

  1. 数字孪生|交通运输可视化系统
  2. NFC顺物联网之势崛起,意法半导体实力几何?
  3. 诺贝尔物理学奖与信息通信技术发展
  4. 网络运营商名称显示SIM名称显示
  5. 基于java实现的超级马里奥游戏
  6. MATLAB TXT转Excel
  7. 品牌广告投放平台的中台化应用与实践
  8. ogre嵌入MFC教程
  9. matlab 低通 filter,matlab低通滤波器(Matlab low pass filter).doc
  10. REGEXP_REPLACE的使用方法