定制软件【中间件学习】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
  • 1
  • 2
  • 3
  • 使用的是Euler2.9的操作系统,运行脚本会报错,因此修改脚本的内容, 使得/etc/yum.repos.d/td.repo的$releasever 的值为 8, 然后重新运行脚本即可。
  • 启动服务,即可运行
sudo systemctl restart td-agent.service
  • 1
  • 默认的配置文件位置:
    /etc/td-agent/td-agent.conf

其他安装方式的采坑

总结:

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

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

mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h
  • 1
  • 使用docker安装的方式, 主要是遇到了权限不足的错误,可能是配置文件的设置不对, 也是尝试解决未果。
docker pull fluent/fluentd:v1.7-1 docker 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
  • 1
  • 2
  • 3

测试验证

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

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

效果:

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

学习过程

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

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

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

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

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

<source>  @type tail  path /home/fluentd/test.log  pos_file /var/log/td-agent/test.pos  tag fluent.test  <parse>    @type none  </parse></source><match **>    @type stdout</match>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 通过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 forward  port 24224</source># http://<ip>:9880/myapp.access?json={"event":"data"}<source>  @type http  port 9880</source>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

可以添加的数据配置

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

match: 可以设置日志的输出

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

# http://<ip>:9880/myapp.access?json={"event":"data"}<source>  @type http  port 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 file  path /var/log/fluent/access</match>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

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

<source>  @type tcp  port 1517  bind 0.0.0.0  tag nginx  <parse>    @type syslog  </parse></source><match nginx>  @type kafka2  brokers 1.2.3.4:9092  use_event_time false  <format>    @type json  </format>  topic_key nginx_log  default_topic nginx_log</match>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20

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

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

日志接入实践

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

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

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

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

<source>  @type tail  path /opt/test/test.log  pos_file /var/log/td-agent/test.pos  tag nuclei  <parse>    @type regexp    expression /^\[(?<logtime>[^\]]*)\] \[(?<vul_name>[^\]]*)\] \[(?<protocal>[^\]]*)\] \[(?<level>[^\]]*)\] (?<url>[^ ]*)(?<detail>.*)$/  </parse></source><match nuclei>  @type kafka2  brokers  ip:port  use_event_time false  <format>    @type json  </format>  topic_key nuclei  default_topic nuclei</match>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21

调试总结:

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

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

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

总结

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

网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发