如何在 Logstash 中漂亮地打印电子邮件正文的 JSON?

2023-12-19

我有一个 Logstash 配置,一直用来转发电子邮件中的日志消息。它用json and json_encode解析和重新编码 JSON 日志消息。

json_encode用于漂亮地打印 JSON,这使得电子邮件看起来非常漂亮。不幸的是,随着最近的 Logstash 升级,它不再漂亮地打印。

有什么方法可以将事件的漂亮形式放入可用于电子邮件正文的字段中吗?我对 JSON、Ruby 调试或大多数其他人类可读格式很满意。

filter {
    if [type] == "bunyan" {
        # Save a copy of the message, in case we need to pretty-print later
        mutate {
            add_field => { "@orig_message" => "%{message}" }
        }

        json {
            source => "message"
            add_tag => "json"
        }
    }

    // other filters that might add an "email" tag

    if "email" in [tags] {
        # pretty-print JSON for the email
        if "json" in [tags] {
            # re-parse the message into a field we can encode
            json {
                source => "@orig_message"
                target => "body"
            }

            # encode the message, but pretty this time
            json_encode {
                source => "body"
                target => "body"
            }
        }

        # escape the body for HTML output
        mutate {
            add_field => { htmlbody => "%{body}" }
        }
        mutate {
            gsub => [
                'htmlbody', '&', '&',
                'htmlbody', '<', '&lt;'
            ]
        }
    }
}

output {
    if "email" in [tags] and "throttled" not in [tags] {
        email {
            options => {
                # config stuff...
            }
            body => "%{body}"
            htmlbody => "
<table>
  <tr><td>host:</td><td>%{host}</td></tr>
  <tr><td>when:</td><td>%{@timestamp}</td></tr>
</table>
<pre>%{htmlbody}</pre>
"
        }
    }
}

正如 approxiblue 所说,这个问题是由 Logstash 引起的新的 JSON 解析器 https://github.com/logstash-plugins/logstash-filter-json_encode/blob/master/lib/logstash/filters/json_encode.rb(小杰克逊)。您可以使用旧解析器 https://github.com/elastic/logstash-contrib/blob/master/lib/logstash/filters/json_encode.rb作为一种解决方法,直到再次添加漂亮的打印支持。具体方法如下:

您需要更改插件 ruby​​ 文件的两行。路径应该是这样的:

LS_HOME/vendor/bundle/jruby/1.9/gems/logstash-filter-json_encode-0.1.5/lib/logstash/filters/json_encode.rb

换线5

require "logstash/json" 

into

require "json" 

并换线44

event[@target] = LogStash::Json.dump(event[@source])

into

event[@target] = JSON.pretty_generate(event[@source])

就这样。重新启动 Logstash 后应该会再次漂亮地打印。

补充:

如果您不喜欢更改 ruby​​ 源,您也可以使用 ruby​​ 过滤器而不是 json_encode:

# encode the message, but pretty this time
ruby  {
    init => "require 'json'"
    code => "event['body'] = JSON.pretty_generate(event['body'])"
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Logstash 中漂亮地打印电子邮件正文的 JSON? 的相关文章

随机推荐

  • 关闭打开的子菜单 - jQuery 手风琴

    我有一个 jQuery 菜单 我希望能够关闭一个打开的菜单 以便关闭所有菜单 立即关闭它的唯一方法是单击打开另一个菜单 我已经为此工作了很长时间 但相对没有任何进展 有什么方法可以让打开的菜单关闭而无需单击其他菜单 这是代码 http js
  • 将 hive 中的 Ascii 值转换为字符

    我想转换ascii对其价值特点在 hive 中 hive 中是否有任何现有函数 就像我们有的那样 字符函数在 SQL Server 中 有谁知道如何在配置单元中实现这一点 例如 对于 65 结果将为 A 提前致谢 这可以通过组合一些内置函数
  • 如何在 Windows 中克隆包含 Windows 文件系统无效符号的存储库

    我想克隆一个 git 存储库 但是此存储库中有一个名为 Image Arrow 的文件夹 标记对于 Windows 中的文件名和文件夹名来说是无效的符号 因此我无法在 Windows 系统中克隆它 即使我将存储库下载为 zip 文件 该 z
  • 为下一个 C++ 标准做准备

    一连串的问题涉及BOOST FOREACH促使我询问 Boost 库的用户他们正在做什么 如果有的话 来准备他们的代码以移植到提议的新 C 标准 又名 C 0x 例如 如果您使用shared ptr ifdef CPPOX include
  • JSch 连接关闭后“tail -f”进程不会退出

    我使用 JSch 来跟踪远程计算机中的文件 但我发现程序退出后 tail f 进程仍然存在于远程计算机中 如果我删除 f 参数 一切正常 我尝试使用 sendSignal 但它不起作用 OpenSSH 似乎没有实现该功能 这是测试代码 pu
  • sorl-thumbnail:写入图像文件时编码器错误-2

    我已经使用 sorl thumbnail 一段时间了 没有出现任何问题 但是 开始出现以下错误 encoder error 2 when writing image file 以下代码会导致错误 from sorl thumbnail im
  • 绑定到特定的IP地址和端口来接收UDP数据

    我正在尝试接收由 PlayCap 广播到网络地址 192 168 103 255 端口 3000 的 UDP 数据 http www signal11 us oss playcap http www signal11 us oss play
  • 如何对 redux 形式 FieldArray 状态的切片运行验证

    我正在运行与这里的示例非常相似的东西 http redux form com 6 0 5 examples fieldArrays http redux form com 6 0 5 examples fieldArrays 假设我想在每个
  • Java Spring Batch 中的 ETL 与 Apache Spark 基准测试

    我使用 Apache Spark Scala 已有 5 年多了 学术和专业经验 我一直发现 Spark Scala 是构建任何类型的批处理或流式 ETL ELT 应用程序的强大组合之一 但最近 我的客户决定将 Java Spring Bat
  • Android Matcher 和 Pattern 从链接中切出

    我有一个包含链接的字符串 ex 字符串的 我们喜欢吃巧克力 吃一份http t co 9BDZvcx59d http t co 9BDZvcx59d 所以如果我按原样显示这个字符串 它会是一样的 但如果我使用匹配器和模式来检测链接并为其着色
  • VTK 与真实 X 一起工作,与 Xvfb 一起崩溃

    我正在调试一个第 3 方 Python 脚本 该脚本使用 VTK 库实现无头图像处理 当使用常规 X 窗口会话运行时 它会按预期工作 窗口会瞬间闪烁 当针对 Xvfb 内存中的虚拟帧缓冲区 运行时 它会崩溃 脚本是这样的 省略了一些废话 i
  • 执行“if”条件“x”毫秒并停止“y”毫秒并重复该条件?

    我有一个程序 可以在程序运行期间连续测试 if 循环内的条件 但我想要这个如果条件在一段时间内 例如 5ms 变为 true 或 active 然后停用如果条件接下来的 10 毫秒 然后继续这个模式直到用户关闭程序 我不知道如何解决这个问题
  • Symfony2 中的系统 (SonataAdminBundle) 缺少请求的 PHP 扩展 intl

    我尝试安装沙箱 但从作曲家那里收到以下错误 加载包含包信息的 Composer 存储库 来自锁定文件的依赖项 您的要求无法解析为 一组可安装的软件包 问题1 Installation request for sonata project i
  • 溢出错误图

    我想做声音 音频和音乐处理方面的事情 在此之前 我创建了一个 10 秒扫描的样本信号 我有一个简单的脚本 必须绘制一些信号 第一个信号是一个简单的正弦波 第二次扫描 两者的频率都略低于奈奎斯特频率 所以没问题 代码 import impor
  • 修改每个方面的 x 轴标签

    我有这个图表 我想向每个标签添加文本N xx来表示观测值的数量 我知道如何做到这一点 并且我已经在没有面的图表上做到了这一点 当我在多面图表上尝试时 它不起作用 我在所有 3 个图表上的开盘价位上得到相同的 N 在受限制的图表上得到相同的
  • 返回 Django 中的附近位置

    我有一个 django 模型 它有一个名为的自定义属性LocationField class List models Model id models AutoField primary key True title models CharF
  • 退出按钮php

    我有这段代码 需要代码来添加注销按钮 任何人都可以写出用于注销用户的注销按钮的代码 我读了一些有关销毁会话的内容 但不知道如何编写代码 谢谢你
  • Mongoid 自定义 setter/getter 和 super

    我正在尝试修改属性 Mongoid 模型上的设置器 但与 ActiveRecord 不同 我无法调用 super 来让 Mongoid 实际设置属性 因为模型正在使用include Mongoid Document而不是一个子类Active
  • 条件格式单元格(如果在表的列中找到其值)

    我认为这会非常简单 COUNTIF Foo Bar A1 gt 0 将此应用于整个列 我认为会突出显示在表 Foo 的列栏中找到的任何单元格 但 Excel 告诉我我的公式包含错误 即使当我将其粘贴到单元格中时它确实给出了正确的 True
  • 如何在 Logstash 中漂亮地打印电子邮件正文的 JSON?

    我有一个 Logstash 配置 一直用来转发电子邮件中的日志消息 它用json and json encode解析和重新编码 JSON 日志消息 json encode用于漂亮地打印 JSON 这使得电子邮件看起来非常漂亮 不幸的是 随着