使用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 ...
随机推荐
- tsconfig常用配置全解
include, exclude, files配置项 extends配置 compilerOptions下的配置 compilerOptions.allowUnreachableCode compil ...
- DateFormat类的format方法和parse方法
/** * 使用DateFormat类中的方法format,把日期格式化为文本 * String format(Date date) 按照指定的模式把Date日期格式化为符合模式的字符串 * 使用步骤 ...
- Ubu18远程登录密匙设置
Ubu18设置远程密匙登录 相关文件 /etc/ssh/sshd_config 注意vscode使用博客园插件需要进行端口转发,在vscode端口处设置41385 本地生成密匙,任选一种,这里只介绍第 ...
- GIt后悔药:还原提交的操作(谨慎操作)
一.背景: 偶尔会遇到git的版本分支的文件被误改的情况,需要还原,此篇文章可能会帮助到你. PS: 来理解下 Git 工作区.暂存区和版本库概念,可以更好的理解以下的还原操作. * 工作区:就是你在 ...
- GTID主从和lamp架构运行原理
目录 GTID主从 GTID概念介绍 GTID工作原理 GTID主从配置 lamp lamp简介 web服务器工作流程 cgi与fastcgi http协议 是什么? lamp架构运行的原理 Apac ...
- GreatSQL季报(2021.12.26)
欢迎来到 GreatSQL社区分享的MySQL技术文章,如有疑问或想学习的内容,可以在下方评论区留言,看到后会进行解答 自从GreatSQL 8.0.25 于 2021.8.26发布以来,针对MGR的 ...
- Java中list集合自定义排序-2022新项目
一.业务场景 为了加快首页数据查询的效率,因此将首页查询的数据大多数都放在了缓存中,包括各种list集合数据.对这些 从缓存中获取的数据做了一个兜底处理,如果从缓存中没有获取到数据,则直接从数据库中去 ...
- ASP.NET Core自定义中间件的方式
ASP.NET Core应用本质上,其实就是由若干个中间件构建成的请求处理管道.管道相当于一个故事的框架,而中间件就相当于故事中的某些情节.同一个故事框架采用不同的情节拼凑,最终会体现出不同风格的故事 ...
- UVA1306 The K-League(最大流)
题面 有 n n n 支队伍进行比赛,每支队伍需要打的比赛数目相同. 每场比赛恰好一支队伍胜,另一支败. 给出每支队伍目前胜的场数 w i w_i wi 和败的场数(没用),以及每两个队伍还剩下的比 ...
- [CF1523C] Compression and Expansion (DP/贪心)
C. Compression and Expansion 题面 一个合法的表单由横向 N N N 行数字链,纵向一层或多层数字链组成,第 k k k 层的数字链(可以想象为前面打了 k k k 个制表 ...