插入关键字 文章采集器(轻量级开源日志管理工具航程(一)|.gz)
优采云 发布时间: 2021-10-21 15:22插入关键字 文章采集器(轻量级开源日志管理工具航程(一)|.gz)
转载请注明出处
一天早上,领导们的怒吼声从远处传来,空荡荡的办公区放大了怒吼的“下流”程度。“xxxxxx……不能使用重量级的日志管理工具。xxxx不代表你要自己造轮子。拥抱开源不仅仅是口号,xxxx必须行动……”
伴随着不适合儿童的哔哔哔哔声,我开始了探索轻量级开源日志管理工具的航程。Filebeat 等开源日志管理软件进入了我的视野。都说:别人发怒的时刻,可能是你发现新世界的开始。
与前面提到的开源日志管理工具文章相比,本文适合轻量级应用的日志管理。准确的说:如何使用Filebeat从java服务到redis服务生成log采集。
Filebeat 简介
Filebeat是Beats平台系列产品中的日志采集、存储、路由工具。官方功能列表:
Filebeat 介绍
总之,Filebeat 简化了日志采集流程,完美对接数据库,是一款轻量级的开源产品。轻量级符合我们的期望,支持redis库与我们目前的服务兼容,所以是我们的选择。
本文为教程,分为安装、配置、运行三部分。按这个顺序介绍。注:由于实现场景,Filebeat 参数只涉及一部分。
关于发行说明
软件版本号:
Filebeat 6.5 (release version)Linux x86_64 x86_64 GNU/Linux(os version) redis_version: 5.0.0 (redis采用单节点模式,高可用需要集群或哨兵模式) 如何安装
Filebeat可以安装在主流操作系统上,也支持docker和k8s模式部署。是“五脏俱全的小麻雀”的典型工具。
下载门户
linux下的安装包是gz的压缩包。解压并安装:
tar xzvf filebeat-5.1.1-darwin-x86_64.tar.gz
安装目录列表
下面分别介绍一下目录的功能:
如何配置
下面介绍如何配置以及配置什么。
如何配置 Filebeat?
它提供了三种配置方法:
Filebeat 配置了哪些参数?
A、先说运行所需的最低配置参数:
filebeat.inputs:
- type: log #采集的数据格式 log
enabled: true #激活log采集功能
paths: #采集路径
- /var/log/*.log
- /var/path2/*.log
注:配置文件格式为yaml语言,类似于json的标记语言
output.redis:
hosts: ["localhost"] #*敏*感*词* redis
port: 6379 #port
password: "my_password" #用户名和密码
key: "filebeat" # filebeat是数据的key
db: 0 #数据写入的库
以上配置实现了日志导入Redis的基本配置。Filebeat有哪些特殊参数?如何实现需求的特性?这些在其他配置中一一解释。
B.其他配置说明
Filebeat 输出数据的格式为 json。像这样的东西:
{
"@timestamp": "2018-12-18T08:33:01.604Z", #采集时间UTC
"@metadata": {....}, #Describe 节拍信息
"message": "日志内容", ### 数据主题
"source": "/var/log/run.log", #数据源
“探矿者”:{“类型”:“日志”},
"input": {"type": "log" }, #数据类型
“打”: {.... },
"host": {.... }, #系统信息ip系统版本名称等
“偏移”:244 #offset
}
输出数据格式不仅包括数据主体的消息,还包括一些附加信息。对于不需要的信息,如何过滤转换?这涉及到 Filebeat 并不强大的数据过滤功能。
过滤json中的输出字段
Filebeat 为处理器提供了类似的管道功能来指定生成的字段,格式如下。
event -> filter1 -> event1 -> filter2 ->event2 ...
每个数据采集 是一个事件,每个过滤器都是一个处理器。让我们自己定义一个处理器,如下:
processors:
- drop_fields:
when:
has_fields: ['source']
fields: ["input_type"]
功能:过滤函数删除字段(drop_fields),条件是当源字段存在时,删除input_type字段。
更多 Filebeat 处理器和过滤器:链接
fields: #字段的类型可以是不同类型或者 list,也可以自定义
level: debug
review: 1
selfDefine: xxxxx
官方文档建议可以使用fields来过滤json文件,但是我的尝试没有成功。
Filebeat 提供有限的 redis 关键功能定制。如果输入数据为json格式,可以提取Json字段作为redis key。我们key的定义是数据存储时间。配置如下:
when.contains:
message: "INFO"
key: "debug_list" # send to debug_list if `message` field contains DEBUG
遗憾的是:时间不是北京时间,而是UTC时间。即不支持修改,时间输出错误。
max_bytes: 10485760 #10M 缓存层,一次采集数据超出10M 数据会丢弃
harvester_buffer_size: 16384 #收割器大小
scan_frequency: 10s #文件扫描频率
harvester_limit: 0 #采集器数量, 0 表示无限制
close_inactive: 5m #5m 无活动,关闭采集器
使用配置过程也说明:Filebeat易于配置和使用,过滤和转换功能是稍微单一的组件。与logstash相比,各有侧重,但对于大多数采集层来说已经足够了。
如何开始
./filebeat -e #简单让人们启动命令
后记和帮助
经过Filebeat+redis的实践,我们发现配置非常简单。你甚至不需要关注输入部分的内容和输出端的redis,这才是中间件该有的样子。
Filebeat 没有足够的输出终端来支持太少的数据库,社区也没有计划支持更多的数据库。
最近在看golang,萌生了写输出到postgres插件的想法。
如果你开发输出到postgres插件,你有什么想法,希望路过的大侠给点建议。感激的。.