使用Fluentd进行简单流处理
在某些日志采集场景中,我们需要对数据流进行一些转换。比如,我们可能需要从日志记录中提取某些字段以进行错误告警,或向日志记录中插入新的字段用以后续的分析。
本文简单介绍一下使用Fluentd进行数据操作的技术细节。
- 根据日志字段取值来过滤事件
谈到过滤,我们通常会想到正则表达式,在linux中通常使用grep来进行文本查找和过滤。Fluentd内置了filter_grep过滤插件,可对数据流进行正则过滤。
假设我们正在使用一个web服务,比如Apache,我们需要对其访问日志进行监控。由输入插件产生的事件类似如下结构:
{
"host": "192.168.1.1",
"method": "GET",
"path": "/index.html",
"code": 200,
"size": 2344,
"referer": null
}
这其中的code字段表示用户请求状态,我们可能对状态为2xx的请求不太关心,这样就可以将这类事件过滤掉,专门处理用户请求可能发生的异常情况。
我们可以通过在Fluentd中增加如下<filter>配置来实现事件过滤。
<filter apache.**>
@type grep
<exclude>
key code
pattern ^2\d\d$
</exclude>
</filter>
使用grep过滤插件,通过key指定code字段为过滤字段,通过pattern匹配code值为2xx的事件,将这些事件排除(exclude)掉。
filter_grep还可以对多个字段进行过滤。比如,保留状态码为5xx的事件,但过滤掉url中以/test/开头的请求。如下所示:
<filter apache.**>
@type grep
<regexp>
key code
pattern ^5\d\d$
</regexp>
<exclude>
key path
pattern ^/test/
</exclude>
</filter>
- 向事件中插入定制字段
我们可以在某个处理阶段向日志记录中插入一些字段,供后续使用。这可以通过Fluentd内置的filter_record_transformer过滤器插件来实现。
假设我们是以集群的方式来部署web服务的,我们可能需要标记用户请求是由哪台服务器来处理的。
在Fluentd中进行如下配置即可实现此类需求:
<filter apache.**>
@type record_transformer
<record>
server "${hostname}"
</record>
</filter>
这里,record_transformer插件向事件record中插入了一个server字段,其值为web服务器的主机名。新的日志record就更新为如下格式:
{
"host": "192.168.1.1",
"method": "GET",
"path": "/index.html",
"code": 200,
"size": 2344,
"referer": null,
"server": "app1"
}
filter_record_transformer除了可以直接插入预定义的一些变量,如${hostname},还可以插入其他变量或者使用ruby表达式来计算字段值。
使用Fluentd进行简单流处理的更多相关文章
- kubernetes部署Fluentd+Elasticsearch+kibana 日志收集系统
一.介绍 1. Fluentd 是一个开源收集事件和日志系统,用与各node节点日志数据的收集.处理等等.详细介绍移步-->官方地址:http://fluentd.org/ 2. Elastic ...
- Fluentd安装——通过rpm方式
0. td-agent是何物 为了灵活性,fluentd用Ruby写的,其中一些性能敏感的部件使用c写的.普通的用户直接安装和使用Ruby进程可能有困难,这样就把它封装成Fluentd的稳定版本——t ...
- fluentd结合kibana、elasticsearch实时搜索分析hadoop集群日志<转>
转自 http://blog.csdn.net/jiedushi/article/details/12003171 Fluentd是一个开源收集事件和日志系统,它目前提供150+扩展插件让你存储大数据 ...
- Fluentd: Open Source Log Management
Fluentd: Open Source Log Management "Fluentd" is an open-source tool to collect events and ...
- ELK系列~NLog.Targets.Fluentd到达如何通过tcp发到fluentd
最近火的不能再火的日志框架就是ELK,其中E(Elasticsearch)表示日志存储,L(Logstash)表示日志收集,K(kibana)表示日志的UI界面,用来查询和分析,而其中的L可以使用Fl ...
- ELK系列~对fluentd参数的理解
这段时候一直在研究ELK框架,主要集成在对fluentd和nxlog的研究上,国内文章不多,主要看了一下官方的API,配合自己的理解,总结了一下,希望可以帮到刚入行的朋友们! Fluentd(日志收集 ...
- 万能日志数据收集器 Fluentd - 每天5分钟玩转 Docker 容器技术(91)
前面的 ELK 中我们是用 Filebeat 收集 Docker 容器的日志,利用的是 Docker 默认的 logging driver json-file,本节我们将使用 fluentd 来收集容 ...
- istio添加Fluentd
这个教程展示了istio如何自定义日志格式,并且将其发送给fluent.Fluentd 是一个开源的日志收集器,支持多种数据输出并且有一个可插拔架构.Elasticsearch是一个流行的后端日志记录 ...
- Kubernetes fluentd+elasticsearch+kibana
前提:dns服务,k8s集群 下载kubernetes,并解压 https://github.com/kubernetes/kubernetes/releases tar zxvf kubernete ...
随机推荐
- Qt点名器
项目已开源,点击跳转 废话不多说,直接上代码. CMakeLists.txt cmake_minimum_required(VERSION 3.10) project(qt-caller) find_ ...
- 4-5 Spring Boot
1. 关于Spring Boot Spring Boot是Spring官方的一个产品,其本质上是一个基于Maven的.以Spring框架作为基础的进阶框架,很好的支持了主流的其它框架,并默认完成了许多 ...
- 2535-springsecurity系列--关于授权角色“ROLE”前缀的问题
版本信息 <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring ...
- Auto.js 调用系统短信、电话
本文所有教程及源码.软件仅为技术研究.不涉及计算机信息系统功能的删除.修改.增加.干扰,更不会影响计算机信息系统的正常运行.不得将代码用于非法用途,如侵立删! Auto.js 调用系统短信.电话 操作 ...
- Changes in GreatSQL 8.0.25-16(2022-5-16)
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 目录 1.新增特性 1.1 新增仲裁节点(投票节点)角色 1.2 新增快速单主模式 1.3 新增MGR网络开销阈值 1.4 ...
- 牛客网 十二桥问题(状压DP)
https://ac.nowcoder.com/acm/contest/1104/B 注意到\(\text{K}\)只有\(12\),因此对起点与每个毕经边对应的点单源最短路,\(\text{DP}\ ...
- Webstorm设置背景图为Windows桌面背景
桌面背景图会缓存在这个目录中,文件名不确定在改变桌面背景后会不会变. C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes\CachedFiles ...
- Iterator与Generator
Iterator Iterator 概念 Iterator 提供了一种统一的接口机制,为各种不同数据结构提供统一的访问机制.定义 Iterator 就是提供一个具有 next() 方法的对象,每次调用 ...
- monodepth2学习1-原理介绍
monodepth2介绍 monodepth2是在2019年CVPR会议上提出的一种三维重建算法,monodepth2是基于monodepth进行了改进,采用的是基于自监督的神经网络,提出了一下三点优 ...
- TypeScript 项目报错 Unknown file extension ".ts"
下图是该问题的详细报错截图,经过多次捣鼓,初步猜测是模块有问题,要用 ES Module 还真是曲折,最不容易出错的就是 CommonJS 模块: 在百度.Bing 上搜索了好久的帖子也都没有相关的解 ...