Beats: 使用 Filebeat 进行日志结构化
文章转载自:https://blog.csdn.net/UbuntuTouch/article/details/106688240
生产一个叫做 json_logs 的文件:
{"user_name": "arthur", "id": 42, "verified": false, "event": "logged_in"}
{"user_name": "arthur", "id": 42, "verified": true, "event": "changed_state"}
这种 JSON 格式的文件人眼难以理解,但是具有的优点是,数据已经按照 Elasticsearch 喜欢的格式进行了结构化。
Filebeat 是一个用Go语言编写的开源日志传送器,可以将日志行发送到Logstash和Elasticsearch。 它提供了“至少一次”保证的数据传输,因此你永远不会丢失日志行,并且它使用了背压敏感协议,因此不会使你的管道过载。 还包括基本过滤和多行关联。
如果你的日志就像上面的示例一样,Filebeat 每行存储一个JSON对象,它还可以本地解码 JSON 对象。
这是一个示例配置文件,该文件配置Filebeat来拾取文件并将 JSON 对象发送到 Elasticsearch:
filebeat_json.yml
filebeat.inputs:
- type: log
enabled: true
tags: ["i", "love", "json"]
json.message_key: event
json.keys_under_root: true
json.add_error_key: true
fields:
planet: liuxg
paths:
- /Users/liuxg/python/logs/json_logs
output.elasticsearch:
hosts: ["localhost:9200"]
index: "json_logs1"
setup.ilm.enabled: false
setup.template.name: json_logs1
setup.template.pattern: json_logs1
在运行 Filebeat 之前,我们可以在 Kibana 中执行如下的命令:
PUT json_logs1
{
"mappings": {
"properties": {
"event": {
"type": "keyword"
},
"id": {
"type": "long"
},
"user_name": {
"type": "keyword"
},
"verified": {
"type": "boolean"
}
}
}
}
在这里,我们定义这个索引的 mapping。
我们接着执行运行 Filebeat:
./filebeat -e -c ~/python/logs/filebeat_json.yml
那么在我们的 Kibana 中,我们可以查询到最新生成的文档:
GET json_logs1/_search
{
"took" : 0,
"timed_out" : false,
"_shards" : {
"total" : 1,
"successful" : 1,
"skipped" : 0,
"failed" : 0
},
"hits" : {
"total" : {
"value" : 2,
"relation" : "eq"
},
"max_score" : 1.0,
"hits" : [
{
"_index" : "json_logs1",
"_type" : "_doc",
"_id" : "uw-jonIBB4HethT_mOIZ",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2020-06-11T09:08:48.550Z",
"user_name" : "arthur",
"verified" : false,
"tags" : [
"i",
"love",
"json"
],
"fields" : {
"planet" : "liuxg"
},
"ecs" : {
"version" : "1.5.0"
},
"agent" : {
"ephemeral_id" : "0c9b96dd-76c8-45c5-96ef-00859f9e12dc",
"hostname" : "liuxg",
"id" : "be15712c-94be-41f4-9974-0b049dc95750",
"version" : "7.7.0",
"type" : "filebeat"
},
"id" : 42,
"event" : "logged_in",
"log" : {
"offset" : 0,
"file" : {
"path" : "/Users/liuxg/python/logs/json_logs"
}
},
"input" : {
"type" : "log"
},
"host" : {
"name" : "liuxg"
}
}
},
{
"_index" : "json_logs1",
"_type" : "_doc",
"_id" : "vA-jonIBB4HethT_mOIZ",
"_score" : 1.0,
"_source" : {
"@timestamp" : "2020-06-11T09:08:48.551Z",
"event" : "changed_state",
"input" : {
"type" : "log"
},
"log" : {
"offset" : 75,
"file" : {
"path" : "/Users/liuxg/python/logs/json_logs"
}
},
"user_name" : "arthur",
"id" : 42,
"verified" : true,
"tags" : [
"i",
"love",
"json"
],
"fields" : {
"planet" : "liuxg"
},
"ecs" : {
"version" : "1.5.0"
},
"host" : {
"name" : "liuxg"
},
"agent" : {
"version" : "7.7.0",
"type" : "filebeat",
"ephemeral_id" : "0c9b96dd-76c8-45c5-96ef-00859f9e12dc",
"hostname" : "liuxg",
"id" : "be15712c-94be-41f4-9974-0b049dc95750"
}
}
}
]
}
}
如你所见,Filebeat 自动添加一个时间戳。 请注意,这是读取日志行的时间,可能与应用程序写入日志行的时间不同。 如果需要更好的准确性,可以设置 structlog 库以生成时间戳。
Filebeat 还会自动添加一些元数据(例如主机名),并使其易于通过配置文件添加自定义字段和标签。 这意味着应用程序不必担心从环境中添加元数据。

Beats: 使用 Filebeat 进行日志结构化的更多相关文章
- .NET Core开发日志——结构化日志
在.NET生态圈中,最早被广泛使用的日志库可能是派生自Java世界里的Apache log4net.而其后来者,莫过于NLog.Nlog与log4net相比,有一项较显著的优势,它支持结构化日志. 结 ...
- Beats: 使用 Filebeat 进行日志json结构化 - Python
文章转载自:https://elasticstack.blog.csdn.net/article/details/106688240
- 重新整理 .net core 实践篇—————日志系统之结构化[十八]
前言 什么是结构化呢? 结构化,就是将原本没有规律的东西进行有规律话. 就比如我们学习数据结构,需要学习排序然后又要学习查询,说白了这就是一套,没有排序,谈如何查询是没有意义的,因为查询算法就是根据某 ...
- Asp.Net Core中利用Seq组件展示结构化日志功能
在一次.Net Core小项目的开发中,掌握的不够深入,对日志记录并没有好好利用,以至于一出现异常问题,都得跑动服务器上查看,那时一度怀疑自己肯定没学好,不然这一块日志不可能需要自己扒服务器日志来查看 ...
- .NET下使用 Seq结构化日志系统
前言 我们公司在日志管理方面一直没有统一,主要痛点有: 每个开发人员都是各用各的,存储日志的形式也是五花八门,如:本地文件,数据库,Redis,MongoDB 由于公司访问服务器要通过堡垒机,所以本机 ...
- 结构化日志类库 ---- Serilog库
在过去的几年中,结构化日志已经大受欢迎.而Serilog是 .NET 中最著名的结构化日志类库 ,我们提供了这份的精简指南来帮助你快速了解并运用它. 0. 内容 设定目标 认识Serilog 事件和级 ...
- 探索ASP.Net Core 3.0系列六:ASP.NET Core 3.0新特性启动信息中的结构化日志
前言:在本文中,我将聊聊在ASP.NET Core 3.0中细小的变化——启动时记录消息的方式进行小的更改. 现在,ASP.NET Core不再将消息直接记录到控制台,而是正确使用了logging 基 ...
- 如何利用NLog输出结构化日志,并在Kibana优雅分析日志?
上文我们演示了使用NLog向ElasticSearch写日志的基本过程(输出的是普通文本日志),今天我们来看下如何向ES输出结构化日志.并利用Kibana中分析日志. NLog输出结构化日志 Elas ...
- FILEBEAT+ELK日志收集平台搭建流程
filebeat+elk日志收集平台搭建流程 1. 整体简介: 模式:单机 平台:Linux - centos - 7 ELK:elasticsearch.logstash.kiban ...
随机推荐
- JSP页面+请求转发+EL表达式
1) JSP全称Java Server Pages,顾名思义就是运行在java服务器中的页面,也就是在我们JavaWeb中的动态页面,其本质就是一个Servlet.2) 其本身是一个动态网页技术标准, ...
- Throwable类中3个异常处理的方法和finally代码块
/* Throwable类中定义了3个异常处理的方法 String getMessage() 返回此 throwable 的简短描述. String toString() 返回此 throwable ...
- CSS进阶内容——布局技巧和细节修饰
CSS进阶内容--布局技巧和细节修饰 我们在之前的文章中已经掌握了CSS的大部分内容,但仍有一些内容我们没有涉略,这篇文章就是为了补充前面没有涉及的内容,为我们的知识做出补充并且介绍一些布局技巧 当然 ...
- 手机APP无法抓包HTTPS解决方案
问题表现:某个APP的HTTPS流量抓取不到,Fiddler报错,但可以正常抓取其它的HTTPS流量 可能原因: 1.Flutter应用,解决方案:https://www.cnblogs.com/lu ...
- 基于ABP实现DDD--仓储实践
由于软件系统中可能有着不同的数据库,不同的ORM,仓储思想的本质是解耦它们.在ABP中具体的实现仓储接口定义在领域层,实现在基础设施层.仓储接口被领域层(比如领域服务)和应用层用来访问数据库,操作 ...
- RabbitMQ细说之开篇
前言 关于消息中间件的应用场景,小伙伴们应该都耳熟能详了吧,比如经常提到的削峰填谷.分布式事务.异步业务处理.大数据分析等等,分布式消息队列成为其中比较关键的桥梁,也就意味着小伙伴们得掌握相关技能:当 ...
- CF1656D K-good
题意: 给定一个整数 \(n\),请找出一个大于等于 \(2\) 的整数 \(k\),使得 \(n\) 可以表示成 \(k\) 个除以 \(k\) 的余数互不相同的数之和. 注意\(k\)个除以 \( ...
- Redis 定长队列的探索和实践
vivo 互联网服务器团队 - Wang Zhi 一.业务背景 从技术的角度来说,技术方案的选型都是受限于实际的业务场景,都以解决实际业务场景为目标. 在我们的实际业务场景中,需要以游戏的维度收集和上 ...
- (一)esp32开发环境搭建(VSCode+IDF实现单步调试)
保姆级手把手教学视频 https://www.bilibili.com/video/BV1RL411A7CU 前言 因为碰上一个学长,跟他聊了会儿天,推荐我做一点物联网的项目,想来想去,那就用WiFi ...
- uni-app 从0 到 1 制作一个项目,收藏等于学会
uni-app 是使用 vue.js 开发的所有前端应用框架,开发者编写的一套代码,可以发布到 ios.android.web ,以及各种小程序平台. 一.创建uni-app 1.hBuilderX ...