当前位置: 首页 > news >正文

Elasticsearch:Golang ECS 日志记录 - Logrus

ECS 记录器是你最喜欢的日志库的格式化程序/编码器插件。它们可让你轻松地将日志格式化为与 ECS 兼容的 JSON。

编码器以 JSON 格式记录,内部依赖于默认的 logrus.JSONFormatter。它还处理 ECS 错误格式的错误字段记录。

默认情况下,会添加以下字段:

{"log.level": "info","@timestamp": "2020-09-13T10:48:03.000Z","message":" some logging info","ecs.version": "1.6.0"
}

安装

将包添加到你的 go.mod 文件中:

module zerolog-logging
require go.elastic.co/ecslogrus master

我们使用如下的命令来下载包:

配置

设置默认记录器。例如:

log := logrus.New()
log.SetFormatter(&ecslogrus.Formatter{})

示例

使用结构化日志记录

logrus_structrued.go 

package mainimport ("errors""github.com/sirupsen/logrus""go.elastic.co/ecslogrus"
)func main() {log := logrus.New()log.SetFormatter(&ecslogrus.Formatter{})// Add custom fields.log.WithError(errors.New("boom!")).WithField("custom", "foo").Info("hello")
}

我们使用如下的命令来运行应用:

go run logrus_structrued.go 
$ go run logrus_structrued.go 
{"@timestamp":"2024-07-23T15:50:15.202+0800","custom":"foo","ecs.version":"1.6.0","error":{"message":"boom!"},"log.level":"info","message":"hello"}

将自定义字段嵌套在 “label” 下

为了完全符合 ECS 要求,自定义字段应嵌套在 “label” 对象中。

 logrus_custom.go 

package mainimport ("errors""github.com/sirupsen/logrus""go.elastic.co/ecslogrus"
)func main() {log := logrus.New()log.SetFormatter(&ecslogrus.Formatter{DataKey: "labels",})log.WithError(errors.New("boom!")).WithField("custom", "foo").Info("hello")
}

我们使用如下的命令来运行应用:

go run logrus_custom.go
$ go run logrus_custom.go
{"@timestamp":"2024-07-23T15:53:35.311+0800","ecs.version":"1.6.0","error":{"message":"boom!"},"labels":{"custom":"foo"},"log.level":"info","message":"hello"}

报告调用者信息

logrus_caller.go

package mainimport ("errors""github.com/sirupsen/logrus""go.elastic.co/ecslogrus"
)func main() {log := logrus.New()log.SetFormatter(&ecslogrus.Formatter{})log.ReportCaller = truelog.WithError(errors.New("boom!")).WithField("custom", "foo").Info("hello")
}

我们使用如下的命令来运行应用:

go run logrus_caller.go 
$ go run logrus_caller.go 
{"@timestamp":"2024-07-23T15:56:47.832+0800","custom":"foo","ecs.version":"1.6.0","error":{"message":"boom!"},"log.level":"info","log.origin.file.line":14,"log.origin.file.name":"/Users/liuxg/go/go-logging-logrus/logrus_caller.go","log.origin.function":"main.main","message":"hello"}

 把日志写入到 Elasticsearch

  1. 按照 Filebeat 快速入门
  2. 将以下配置添加到你的 filebeat.yaml 文件中。

 Filebeat 7.16+

filebeat.yaml

filebeat.inputs:
- type: filestream  # 1paths: /path/to/logs.jsonparsers:- ndjson:overwrite_keys: true # 2add_error_key: true  # 3expand_keys: true    # 4processors: # 5- add_host_metadata: ~- add_cloud_metadata: ~- add_docker_metadata: ~- add_kubernetes_metadata: ~
  1. 使用 filestream 输入从活动日志文件中读取行。
  2. 如果发生冲突,解码的 JSON 对象的值将覆盖 Filebeat 通常添加的字段(type、source、offset 等)。
  3. 如果发生 JSON 解组错误,Filebeat 将添加 “error.message” 和 “error.type: json” 键。
  4. Filebeat 将递归地从解码的 JSON 中去掉点键,并将其扩展为分层对象结构。
  5. Processors 可增强你的数据。请参阅 processors 以了解更多信息。

Filebeat < 7.16

filebeat.yaml

filebeat.inputs:
- type: logpaths: /path/to/logs.jsonjson.keys_under_root: truejson.overwrite_keys: truejson.add_error_key: truejson.expand_keys: trueprocessors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 总结
  • Redis在SpringBoot中遇到的问题:预热,雪崩,击穿,穿透
  • kafka基础介绍
  • 卷与nfs实现多台主机容器之间的数据共享
  • 十、Docker版Redis集群搭建
  • DP学习——状态模式
  • idea将普通项目转换为maven项目
  • 使用JAVA代码实现生成二维码
  • windows网络应急排查
  • 以线程完成并发的UDP服务端
  • 使用kali对操作系统和网络服务类型进行探测
  • 列举excel中调整行高列宽的五种方法
  • Telegram曝零日漏洞,可伪装成视频攻击安卓用户
  • linux系统安装pytorch_中文地址命名实体识别案例
  • 使用Kafka Streams进行事件流处理
  • ES6语法详解(一)
  • JAVA之继承和多态
  • Mysql数据库的条件查询语句
  • ViewService——一种保证客户端与服务端同步的方法
  • vue--为什么data属性必须是一个函数
  • 阿里云ubuntu14.04 Nginx反向代理Nodejs
  • 阿里云应用高可用服务公测发布
  • 百度地图API标注+时间轴组件
  • 构造函数(constructor)与原型链(prototype)关系
  • 数据科学 第 3 章 11 字符串处理
  • 物联网链路协议
  • 译自由幺半群
  • 用 vue 组件自定义 v-model, 实现一个 Tab 组件。
  • ###C语言程序设计-----C语言学习(6)#
  • #Linux杂记--将Python3的源码编译为.so文件方法与Linux环境下的交叉编译方法
  • #mysql 8.0 踩坑日记
  • #我与Java虚拟机的故事#连载06:收获颇多的经典之作
  • #我与虚拟机的故事#连载20:周志明虚拟机第 3 版:到底值不值得买?
  • (01)ORB-SLAM2源码无死角解析-(56) 闭环线程→计算Sim3:理论推导(1)求解s,t
  • (2)关于RabbitMq 的 Topic Exchange 主题交换机
  • (day6) 319. 灯泡开关
  • (Java)【深基9.例1】选举学生会
  • (笔记)Kotlin——Android封装ViewBinding之二 优化
  • (翻译)Entity Framework技巧系列之七 - Tip 26 – 28
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)计算机毕业设计ssm基于B_S的汽车售后服务管理系统
  • (蓝桥杯每日一题)love
  • (论文阅读31/100)Stacked hourglass networks for human pose estimation
  • (三)模仿学习-Action数据的模仿
  • (四) Graphivz 颜色选择
  • (学习总结16)C++模版2
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .NET 4 并行(多核)“.NET研究”编程系列之二 从Task开始
  • .net 4.0 A potentially dangerous Request.Form value was detected from the client 的解决方案
  • .Net Core 笔试1
  • .NET Core 发展历程和版本迭代
  • .NET delegate 委托 、 Event 事件
  • .Net Memory Profiler的使用举例
  • .Net MVC + EF搭建学生管理系统
  • .NET 程序如何获取图片的宽高(框架自带多种方法的不同性能)