暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

日志搜集分析(七)-- fluent强大的插件支持

拖地先生 2018-09-20
1045

        在EFK系统搭建中,我们用fluent替换了logstash,是因为fluent的数据流处理清晰,同时也有着丰富的插件系统。ruby简洁的语法和便利的gems管理体系放大了这个优势。



        RubyGems(简称 gems)是一个用于对 Ruby组件进行打包的 Ruby 打包系统。 它提供一个分发 Ruby 程序和库的标准格式,还提供一个管理程序包安装的工具。RubyGems的功能类似于Linux下的apt-get。使用它可以方便的从远程服务器下载并安装Rails。

        fluent提供了单独的gems管理,一般安装在 /usr/sbin/td-agent-gem。常用的操作:

        # 版本号

        /usr/sbin/td-agent-gem -v 

        安装指定gem包,程序先从本机查找gem包并安装。

      #如果本地没有,则从远程gem安装。

        /usr/sbin/td-agent-gem install [gemname] 

        更新指定的gem包

        /usr/sbin/td-agent-gem update [gemname]

      # 注意:gem update [gemname]不会升级旧版本的包,下述命令可以

        /usr/sbin/td-agent-gem install [gemname]  --version = [ver]

      # 删除某指定版本gem

        /usr/sbin/td-agent-gem uninstall [gemname] --version=[ver]

        # 查看本机已安装的所有gem包

        /usr/sbin/td-agent-gem list

        # 列出远程RubyGems.org 上有此关键字的gem包(可用正则表达式)

        /usr/sbin/td-agent-gem list -r keyword

        # 列出远程RubyGems.org 上所有Gmes清单

        /usr/sbin/td-agent-gem list -r 




    近期有个需求,从日志的某个字段中拆解出需要的KV单独输出,在浏览了所有fluentd的插件,没有找到可用的,那就自己动手写一个。fluentd插件查询地址:https://www.fluentd.org/plugins/all 

 

插件编写

        首先需要明确,fluentd的filter数据是顺序流向下一个的。项目结构:

其中比较重要的是:

1. filter_parse_request_body.rb (fluentd的filter插件,用于拦截数据,中途修改数据)

2. out_parse_request_body.rb  (fluentd的out插件,用于最后格式化输出数据

3. parse_request_body_extractor.rb (最终执行拆解数据的类)

4. fluent-plugin-parse_request_body.gemspec (项目的配置文件,包括名称、版本号等)

    感兴趣的同学,可以参见github:https://github.com/yifriday/fluent-plugin-parse_request_body.git。


插件制作

        在结束编码工作之后,使用gem制作上传插件。ruby所写的插件,都可以上传到这个网站https://rubygems.org/ 。下面是在命令行中的相关操作:

➜  fluent-plugin-parse_request_body git:(master) gem build fluent-plugin-parse_request_body.gemspec 
  Successfully built RubyGem  Name: fluent-plugin-parse_request_body  Version: 0.0.18  File: fluent-plugin-parse_request_body-0.0.18.gem
➜  fluent-plugin-parse_request_body git:(master) gem push fluent-plugin-parse_request_body-0.0.18.gem
Pushing gem to https://rubygems.org...Successfully registered gem: fluent-plugin-parse_request_body (0.0.18)

在成功上传插件后。我们就可以使用gem工具,在我们的服务器中安装了。

 

插件安装和配置

     安装直接执行下面语句即可:

/usr/sbin/td-agent-gem install fluent-plugin-parse_request_body

     在td-agent.conf中的配置如下:

# 这里要注意filter的顺序
<filter nginx.**>
  @type parse_request_body
  key                request_body
  #discard_key        true  add_field_prefix   body.
  only lat,lng
  array_value lat,lng
  array_value_key locatonGPS
  replace_key location
</filter>

        零基础起步,很快就可以满足目前的需求了。不过后续还是需要优化一点:组合数据,使用<record>标签动态配置,像geo中配置location一样,而不是现在死配置这种比较low的做法。 




其他关于日志系统的搭建使用可以参照:EFK系统搭建使用kibana分析日志数据解耦监控和告警ES数据运维自动化用户热力图


文章转载自拖地先生,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论