使用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 ...
随机推荐
- springboot中配置skywalking请求日志
pom.xml配置 <dependency> <groupId>org.apache.skywalking</groupId> <artifactId> ...
- led的进化
1.一个led亮100ns,灭400ns,循环 2.一个led亮2500ns,灭5000ns,亮7500ns,灭10000ns循环 3.以2500ns为变化周期,20000ns为一个循环,每个周期的亮 ...
- 字符编码和字符集和编码引出的问题_FileReader读取GBK格式的文件
字符编码 计算机中鵆的信息都是用二进制数表示的,而我们在屏幕上看到的数字.英文.标点符号.汉子等字符都是二进制数转换之后的结果.按照某种规则,将字符存储到计算机中,称为编码.反之,将存储在计算机中的二 ...
- 什么是WordPress
首先,假设您没有WordPress的经验: 我将从基础开始. 在本教程中,我将回答问题:"什么是WordPress?" 在这篇文章中,我将说明您可以在哪里获得WordPress以及 ...
- [NCTF2019]Fake XML cookbook-1|XXE漏洞|XXE信息介绍
1.打开之后显示如图所示: 2.根据题目名字就能看出来和xml有关,和xml有关的那就是注入,brup抓包看下数据包,结果如下: 3.查看post数据,确实很像xml实体注入,那就进行尝试以下,将po ...
- SpringBoot定时任务 - 开箱即用分布式任务框架xxl-job
除了前文介绍的ElasticJob,xxl-job在很多中小公司有着应用(虽然其代码和设计等质量并不太高,License不够开放,有着个人主义色彩,但是其具体开箱使用的便捷性和功能相对完善性,这是中小 ...
- 【AGC】构建服务1-云函数示例
前言:上一次笔者给大家带来了AGC领域的远程配置服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读者不了解.所谓AGC就是AppGal ...
- Slf4j的MDC初尝试
为什么会用到MDC? 本人使用Java两年时间,鉴于经验有限,在开发java后端代码过程中,为了定位问题,希望同一个线程的requestId可以从web层的日志一直输出到dao层,这样使用Linux命 ...
- 什么?WPF 不支持 SVG ?
什么?WPF 不支持 SVG ? 控件名:SharpVectors 作者:Elinam LLC (Japan) 项目地址: https://github.com/ElinamLLC/SharpVect ...
- 解决QIcon引用qrc不显示图片
引用Qrc 对于Qt来说,添加qrc之后,可以使用":"来直接访问qrc的文件,比如 QIcon icon(":/icon/red.png"); 绝对路径 当然 ...