首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在日志中打印电子邮件正文的JSON?

如何在日志中打印电子邮件正文的JSON?
EN

Stack Overflow用户
提问于 2015-08-18 15:59:15
回答 1查看 2.7K关注 0票数 3

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

json_encode曾经很漂亮的打印JSON,这使得非常漂亮的电子邮件。不幸的是,随着Logstash最近的升级,它不再是漂亮的指纹。

有什么办法,我可以得到一个漂亮的形式的事件进入一个领域,我可以使用电子邮件的主体?我对JSON、Ruby调试或其他大多数人类可读的格式都很满意。

代码语言:javascript
复制
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>
"
        }
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-08-25 16:12:07

正如approxiblue所说,这个问题是由logstash的新JSON解析器 (JrJackson)引起的。您可以使用旧解析器作为解决办法,直到再次添加漂亮打印支持为止。以下是如何:

您需要更改插件的红宝石文件的两行。路径应该类似于:

代码语言:javascript
复制
LS_HOME/vendor/bundle/jruby/1.9/gems/logstash-filter-json_encode-0.1.5/lib/logstash/filters/json_encode.rb

换行5

代码语言:javascript
复制
require "logstash/json" 

转到

代码语言:javascript
复制
require "json" 

换行44

代码语言:javascript
复制
event[@target] = LogStash::Json.dump(event[@source])

转到

代码语言:javascript
复制
event[@target] = JSON.pretty_generate(event[@source])

就这样。重新启动日志后,应该再次漂亮地打印。

补编:

如果您不喜欢更改您的红宝石源,您也可以使用红宝石过滤器而不是json_encode:

代码语言:javascript
复制
# encode the message, but pretty this time
ruby  {
    init => "require 'json'"
    code => "event['body'] = JSON.pretty_generate(event['body'])"
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32077228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档