Elasticsearch:Golang ECS 日志记录 - zap

news2024/11/15 16:03:04

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

编码器以 JSON 格式记录日志,并在可能的情况下依赖默认的 zapcore/json_encoder。它还处理 ECS 错误格式的错误字段记录。

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

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

安装

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

go.mod

module zerolog-logging
require go.elastic.co/ecszap master
require go.uber.org/zap master

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

go get go.elastic.co/ecszap
go get go.uber.org/zap

配置

设置默认记录器。例如:

encoderConfig := ecszap.NewDefaultEncoderConfig()
core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
logger := zap.New(core, zap.AddCaller())

你可以自定义 ECS 记录器。例如:

encoderConfig := ecszap.EncoderConfig{
  EncodeName: customNameEncoder,
  EncodeLevel: zapcore.CapitalLevelEncoder,
  EncodeDuration: zapcore.MillisDurationEncoder,
  EncodeCaller: ecszap.FullCallerEncoder,
}
core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
logger := zap.New(core, zap.AddCaller())

示例

使用结构化日志记录

zap1.go

package main

import (
	"errors"
	"os"

	"go.elastic.co/ecszap"
	"go.uber.org/zap"
)

func main() {
	encoderConfig := ecszap.NewDefaultEncoderConfig()
	core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
	logger := zap.New(core, zap.AddCaller())

	logger = logger.With(zap.String("custom", "foo"))
	logger = logger.Named("mylogger")

	// Use strongly typed Field values
	logger.Info("some logging info",
		zap.Int("count", 17),
		zap.Error(errors.New("boom")))
}

我们可以使用如下的方法来运行上面的应用:

go run zap1.go | jq .

Log errors

zap_error.go

package main

import (
	"errors"
	"os"

	pkgerrors "github.com/pkg/errors"
	"go.elastic.co/ecszap"
	"go.uber.org/zap"
)

func main() {
	encoderConfig := ecszap.NewDefaultEncoderConfig()
	core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
	logger := zap.New(core, zap.AddCaller())

	err := errors.New("boom")
	logger.Error("some error", zap.Error(pkgerrors.Wrap(err, "crash")))
}

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

go run zap_error.go | jq .

使用 sugar logger

zap_sugar.go

package main

import (
	"os"

	"go.elastic.co/ecszap"
	"go.uber.org/zap"
)

func main() {
	encoderConfig := ecszap.NewDefaultEncoderConfig()
	core := ecszap.NewCore(encoderConfig, os.Stdout, zap.DebugLevel)
	logger := zap.New(core, zap.AddCaller())

	sugar := logger.Sugar()
	sugar.Infow("some logging info",
		"foo", "bar",
		"count", 17,
	)
}

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

go run zap_sugar.go | jq .

 把日志写入到 Elasticsearch

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

 Filebeat 7.16+

filebeat.yaml

filebeat.inputs:
- type: filestream  # 1
  paths: /path/to/logs.json
  parsers:
    - ndjson:
      overwrite_keys: true # 2
      add_error_key: true  # 3
      expand_keys: true    # 4

processors: # 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: log
  paths: /path/to/logs.json
  json.keys_under_root: true
  json.overwrite_keys: true
  json.add_error_key: true
  json.expand_keys: true

processors:
- add_host_metadata: ~
- add_cloud_metadata: ~
- add_docker_metadata: ~
- add_kubernetes_metadata: ~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1944332.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

集合的概念

目录 概述 1 集合定义 1.1 基本定义 1.2 元素和集合的关系表述 1.3 集合分类 1.4 集合描述 1.5 集合关系描述 2 集合的运算 2.1 集合关系的定义 2.2 集合的运算 概述 在高等数学中&#xff0c;集合是指由一些具有共同特征的对象组成的整体。这些对象可以是数字、字母…

最短路径 | 743. 网络延迟时间之 Dijkstra 算法和 Floyd 算法

目录 1 基于 Dijkstra 算法1.1 代码说明1.2 完整代码 2 基于 Floyd 算法2.1 代码说明2.2 完整代码 前言&#xff1a;我在做「399. 除法求值」时&#xff0c;看到了基于 Floyd 算法的解决方案&#xff0c;突然想起来自己还没有做过最短路径相关的题。因此找来了「743. 网络…

灰色关联分析【系统分析+综合评价】

系统分析&#xff1a; 判断哪个因素影响最大 基本思想&#xff1a;根据序列曲线几何形状的相似程度来判断其练习是否紧密 绘制统计图并进行分析 确定子序列和母序列 对变量进行预处理&#xff08;去量纲、缩小变量范围&#xff09; 熟练使用excel与其公式和固定&#xff08…

微服务安全——OAuth2详解、授权码模式、SpringAuthorizationServer实战、SSO单点登录、Gateway整合OAuth2

文章目录 Spring Authorization Server介绍OAuth2.0协议介绍角色OAuth2.0协议的运行流程应用场景授权模式详解客户端模式密码模式授权码模式简化模式token刷新模式 OAuth 2.1 协议介绍授权码模式PKCE扩展设备授权码模式拓展授权模式 OpenID Connect 1.0协议Spring Authorizatio…

C语言数据结构:基于EasyX的飞机订票系统,有前端界面

数据结构课程设计说明书 学 院、系&#xff1a; 软件学院 专 业&#xff1a; 软件工程 班 级&#xff1a; 学 生 姓 名&#xff1a; 范 学 号&#xff1a; 设 计 题 目&#xff1a; 飞机订票系统 起 迄 日 期: 2024年6月18日~ 20…

笔记小结:现代卷积神经网络之批量归一化

本文为李沐老师《动手学深度学习》笔记小结&#xff0c;用于个人复习并记录学习历程&#xff0c;适用于初学者 训练深层神经网络是十分困难的&#xff0c;特别是在较短的时间内使他们收敛更加棘手。 本节将介绍批量规范化&#xff08;batch normalization&#xff09;&#xf…

vue3 + ts 报错:Parsing error: Unexpected token : eslint

报错&#xff1a;Parsing error: Unexpected token : eslint 解决&#xff1a; 在 .eslintrc.json 文件中加入 "parser": "babel/eslint-parser"配置 “parser”: “babel/eslint-parser” 告诉 ESLint 在检查代码之前&#xff0c;先使用 Babel 的解析器…

lua 游戏架构 之 游戏 AI (三)ai_attack

这段Lua脚本定义了一个名为 ai_attack 的类&#xff0c;继承自 ai_base 类。 lua 游戏架构 之 游戏 AI &#xff08;一&#xff09;ai_base-CSDN博客文章浏览阅读119次。定义了一套接口和属性&#xff0c;可以基于这个基础类派生出具有特定行为的AI组件。例如&#xff0c;可以…

深度学习:引领未来的人工智能技术(比喻)

深度学习&#xff1a;引领未来的人工智能技术 引言 随着人工智能&#xff08;AI&#xff09;的快速发展&#xff0c;深度学习&#xff08;Deep Learning&#xff09;作为其中最具革命性的技术之一&#xff0c;正在改变着各个行业。从自动驾驶到医疗诊断&#xff0c;从自然语言…

python—selenium爬虫

文章目录 Selenium与Requests对比一、工作原理二、功能特点三、性能表现 下载对应驱动1.首先我们需要打开edge浏览器&#xff0c;打开设置&#xff0c;找到“关于Microsoft Edge”&#xff0c;点击进入查看浏览器版本。2.查找版本之后&#xff0c;搜索edge驱动下载&#xff0c;…

Unity UGUI 之 ScrollBar与ScrollView

本文仅作学习笔记与交流&#xff0c;不作任何商业用途 本文包括但不限于unity官方手册&#xff0c;唐老狮&#xff0c;麦扣教程知识&#xff0c;引用会标记&#xff0c;如有不足还请斧正 1.什么是ScrollBar 滚动块&#xff1a;Unity - Manual: Scrollbar 2.重要参数 该笔记来源…

MMROTATE的混淆矩阵confusion matrix生成

mmdetection中加入了混淆矩阵生成并可视化的功能&#xff0c;具体的代码在tools/analysis_tools/confusion_matrix.py。 mmrotate由于主流遥感数据集中的DOTA数据集标注格式问题&#xff0c;做了一些修改&#xff0c;所以我们如果是做遥感图像检测的Dota数据集的混淆矩阵&…

Elasticsearch介绍、安装以及IK分词器 --学习笔记

Elasticsearch 是什么&#xff1f; Elasticsearch 是一个高度可扩展的开源全文搜索和分析引擎。它允许你以极快的速度存储、搜索和分析大量数据。Elasticsearch 基于 Apache Lucene 构建&#xff0c;提供了一个分布式、多租户能力的全文搜索引擎&#xff0c;带有 HTTP web 接口…

centos系统mysql数据库压缩备份与恢复

文章目录 压缩备份一、安装 xtrabackup二、数据库中创建一些数据三、进行压缩备份四、模拟数据丢失&#xff0c;删库五、解压缩六、数据恢复 压缩备份 一、安装 xtrabackup 确保已经安装了 xtrabackup 工具。可以从 Percona 的官方网站 获取并安装适合你系统的版本。 # 添加…

2024在线PHP加密网站源码

源码介绍 2024在线PHP加密网站源码 更新内容: 1.加强算法强度 2.优化模版UI 加密后的代码示例截图 源码下载 https://download.csdn.net/download/huayula/89568335

学习日志:JVM垃圾回收

文章目录 前言一、堆空间的基本结构二、内存分配和回收原则对象优先在 Eden 区分配大对象直接进入老年代长期存活的对象将进入老年代主要进行 gc 的区域空间分配担保 三、死亡对象判断方法引用计数法可达性分析算法引用类型总结1&#xff0e;强引用&#xff08;StrongReference…

Python+Flask+MySQL+日线指数与情感指数预测的股票信息查询系统【附源码,运行简单】

PythonFlaskMySQL日线指数与情感指数预测的股票信息查询系统【附源码&#xff0c;运行简单】 总览 1、《股票信息查询系统》1.1 方案设计说明书设计目标工具列表 2、详细设计2.1 登录2.2 程序主页面2.3 个人中心界面2.4 基金详情界面2.5 其他功能贴图 总览 自己做的项目&#…

【教程】在 VS Code 集成终端中解决 Node.js 环境变量识别问题

背景 外部命令&#xff0c;如 node 在外部的终端中可以识别到&#xff0c;但是在vscode的终端中不能识别到错误&#xff1a;node : 无法将“node”项识别为 cmdlet、函数、脚本文件或可运行程序的名称也就是环境变量其实是有 node 的&#xff0c;但是 vscode 的集成终端中就是…

【Django】在vscode中新建Django应用并新增路由

文章目录 打开一个终端输入新建app命令在app下的views.py内写一个视图app路由引入该视图项目路由引入app路由项目(settings.py)引入app&#xff08;AntappConfig配置类&#xff09;运行项目 打开一个终端 输入新建app命令 python manage.py startapp antapp在app下的views.py内…

let、var、const 的区别 --js面试题

作用域 ES5中的作用域有&#xff1a;全局作用域、函数作用域&#xff0c;ES6中新增了块级作用域。块作用域由 { } 包括&#xff0c;if 语句和 for 语句里面的 { } 也属于块作用域。 var 1.没有块级作用域的概念&#xff0c;但具有函数全局作用域、函数作用域的概念 {var a …