Serilog HTTP接收器+Logstash:将Serilog消息数组拆分为单独的日志事件

2023-12-12

我们正在使用Serilog HTTP 接收器将消息发送到 Logstash。但是HTTP消息体是这样的:

{
  "events": [
    {
      "Timestamp": "2016-11-03T00:09:11.4899425+01:00",
      "Level": "Debug",
      "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
      "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
      "Properties": {
        "Heartbeat": {
          "UserName": "Mike",
          "UserDomainName": "Home"
        },
        "Computer": "Workstation"
      }
    },
    {
      "Timestamp": "2016-11-03T00:09:12.4905685+01:00",
      "Level": "Debug",
      "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
      "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
      "Properties": {
        "Heartbeat": {
          "UserName": "Mike",
          "UserDomainName": "Home"
        },
        "Computer": "Workstation"
      }
    }
  ]
}

IE。日志记录事件在数组中进行批处理。可以一条一条地发送消息,但它仍然是一个单项数组。

然后该事件在 Kibana 中显示为具有字段message有价值

{
  "events": [
    {
      // ...
    },
    {
      // ...
    }
  ]
}

IE。字面意思是来自 HTTP 输入的内容。

如何拆分项目中的项目events数组到各个日志记录事件并将属性“拉”到顶层,以便我在 ElasticSearch 中拥有两个日志记录事件:


  "Timestamp": "2016-11-03T00:09:11.4899425+01:00",
  "Level": "Debug",
  "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
  "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
  "Properties": {
    "Heartbeat": {
      "UserName": "Mike",
      "UserDomainName": "Home"
    },
    "Computer": "Workstation"
  }

  "Timestamp": "2016-11-03T00:09:12.4905685+01:00",
  "Level": "Debug",
  "MessageTemplate": "Logging {@Heartbeat} from {Computer}",
  "RenderedMessage": "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
  "Properties": {
    "Heartbeat": {
      "UserName": "Mike",
      "UserDomainName": "Home"
    },
    "Computer": "Workstation"
  }

我尝试过 Logstashjson and split,但我无法让它发挥作用。


您可以使用额外的功能来实现您的期望ruby过滤以从子结构中提取字段:

filter {
  split {
   field => "events"
  }
  ruby {
    code => "
       event.to_hash.update(event['events'].to_hash) 
       event.to_hash.delete_if {|k, v| k == 'events'}     
    "
  }
}

结果事件将如下所示:

{
           "@version" => "1",
         "@timestamp" => "2017-01-20T04:51:39.223Z",
               "host" => "iMac.local",
          "Timestamp" => "2016-11-03T00:09:12.4905685+01:00",
              "Level" => "Debug",
    "MessageTemplate" => "Logging {@Heartbeat} from {Computer}",
    "RenderedMessage" => "Logging { UserName: \"Mike\", UserDomainName: \"Home\" } from \"Workstation\"",
         "Properties" => {
        "Heartbeat" => {
                  "UserName" => "Mike",
            "UserDomainName" => "Home"
        },
         "Computer" => "Workstation"
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Serilog HTTP接收器+Logstash:将Serilog消息数组拆分为单独的日志事件 的相关文章

随机推荐

  • 来自已安装应用程序的 OpenID 身份验证

    我目前正在计划一个新的网络项目 客户端将使用常规 Web 浏览器进行连接 如果是常规支持 Java 的手机 则使用 j2me 客户端进行连接 我真的很想利用 OpenID 身份验证 对于常规网络浏览器来说 事情非常简单 但是 我真的不确定已
  • gcc-4.2 失败,退出状态为 1

    我一直在寻找这个问题的答案 但找不到 所以就在这里 我正在尝试安装统一转换器使用 setup py 文件将其导入 MacOS X Lion Python 2 7 2 python setup py install 然后我得到以下错误代码 r
  • ES6类中的构造函数和原型中的构造函数之间的区别?

    ES6 类和函数原型都有一个contructor 但我想知道它们是一样的吗 让我给出更多解释 因此 我创建了一个 Cat 函数 例如 const Cat function name this name name The Cat has th
  • WPF 数据变化动画

    我正在开发一个列出一些对象的 WPF 网格 如果对象的数据发生变化 我想启动动画 下面列出了 XAML 代码的摘录
  • 在生产环境中使用 PGO(配置文件引导优化)的风险

    我有一个系统 Linux 和 C 执行密集的信号 图像处理操作 我想使用 PGO 来提高我们应用程序的性能 使用 PGO 时我应该注意哪些风险 潜在问题 单元测试 E2E测试是否足以验证PGO没有破坏任何东西 微软有一个系统 它根据使用统计
  • 永久添加到 MAC 上的 DYLD_LIBRARY_PATH 会导致 X11 错误

    我正在使用 Python 2 7 并尝试导入 graph tool 并且我的 libboost thread mt dylib 似乎位于 opt local lib 而不是 usr local lib 中 如果我启动 X11 终端并输入 e
  • 在运行时修改 Spring Security 配置

    我正在使用最新的 Spring Boot Spring Boot Starter Security 来构建简单的代理应用程序 目标是使用单一路由 方法启动应用程序 RequestMapping value api register meth
  • 在文本框控件内添加标签

    我想创建一个继承自 TextBox 的控件 其中有一个标签 其中 粘贴 到文本框的右侧 并且该文本不可由用户编辑 而是由属性设置 如何才能做到这一点 我意识到可能有很多原因导致这种用户体验是一个坏主意 但我必须这样做 改编自汉斯 帕桑特的w
  • 使用“月-年”日期值创建带有时间线的 D3.js 散点图

    我有一个列出日期的数据集 如下所示 var dataset 1 2006 20 3 2009 90 11 2004 50 5 2012 33 4 2008 95 4 2004 12 7 2000 44 5 2006 67 6 2007 21
  • POSIX 相当于 boost::thread::hardware_concurrency [重复]

    这个问题在这里已经有答案了 可能的重复 以编程方式查找机器上的核心数 用于确定系统在不超额订阅的情况下可以运行的最大线程数的 POSIX 或 x86 x86 64 特定系统调用是什么 谢谢 它使用 C 兼容的结构 那么为什么不直接使用实际的
  • Magento 模块在本地主机上运行良好,但在实时服务器上运行不佳

    我这里有一个奇怪的案例 I m making a simple magento module right now Some kind of script injection module similar to google analytic
  • 使用 UML 进行 C 编程

    我正在开发一个基于标准规范的嵌入式软件 该软件很大 在开始编码之前我需要设计我的软件 UML是一种面向对象的语言 可能是一个解决方案 但我不知道如何将它用于C软件 有没有任何文档可以帮助使用 UML 进行 C 编程 或者还有其他的c软件设计
  • 使用 cookie 保留整个网站的样式表偏好

    我有一个简单的 JavaScript 函数 它允许我在网站的每个页面中的不同样式表之间进行交换 目前 我的网站上没有实施任何 cookie 因此每当我进入新页面时 都会加载默认样式表 如果用户想要使用备用样式表 他们将被迫再次交换 我想通过
  • ios 中键盘显示方向错误

    我有一个viewcontroller在支持横向和纵向方向的应用程序中 单击按钮后 会出现一个弹出窗口 我应该在其中输入名称 在纵向模式下一切正常 但是 如果我关闭键盘 向左或向右旋转设备 然后打开弹出窗口 键盘仍会以纵向模式打开 I ve
  • 在c#中读取原始图像文件

    如何在未安装编解码器的情况下解码 打开 CR2 或 NEF 和 ARW 等原始图像文件 例如 lightroom 打开原始文件 我的代码如下所示 if fe CR2 fe NEF fe ARW BitmapDecoder bmpDec Bi
  • Xamarin MonoAndroid 设备管理

    我正在使用 Visual Studio 2017 来开发 Android 单视图应用程序 该应用程序应该是一个信息亭应用程序 我的目标是 API 21 在 Visual Studio AVD 设备 提供的模拟器上 我遇到的问题是我似乎无法制
  • 在 Joda 中将 UTC 转换为 LocalDateTime?

    DateTime dt new DateTime 2014 09 15T21 20 14 System out println dt System out println dt plusMillis 581042272 toDateTime
  • Android - 将下一个和上一个按钮添加到软键盘,该按钮在我的活动中单击编辑文本时出现

    我需要将 下一个 和 上一个 按钮添加到我的软键盘上 该键盘在单击活动页面中的编辑文本字段时出现 请为我提供有关实现此概念的教程的指导 提前致谢 您可以通过以下方式在 xml 中执行此操作 android imeOptions action
  • 如何在 WCF 客户端中提供用户名和客户端证书(为什么此示例有效)?

    考虑一个 WCF 服务 其目的是让传输层需要客户端证书 客户端证书在 IIS 中设置为 必需 同样 消息层也会有用户名认证 现在我已经看到这个问题了 禁止 WCF 客户端证书和用户名凭据 我可以在某种程度上理解那里发生的事情 并意识到 WC
  • Serilog HTTP接收器+Logstash:将Serilog消息数组拆分为单独的日志事件

    我们正在使用Serilog HTTP 接收器将消息发送到 Logstash 但是HTTP消息体是这样的 events Timestamp 2016 11 03T00 09 11 4899425 01 00 Level Debug Messa