gpt4 book ai didi

logging - 如果适用,获取Logstash将syslog消息字符串视为JSON

转载 作者:行者123 更新时间:2023-12-03 01:02:41 27 4
gpt4 key购买 nike

我有各种shell脚本,可通过它们运行syslog的logger行,并以json格式显示一条消息:

printf '{"task_id": "%s", "seconds": %f, "success": %s}' ${task_id} ${num_seconds} ${success_bool}

这将在/ var / log / syslog中获得以下输出:
Feb  1 15:12:16 my-machine logger: {"task_id": "231232xyz", "seconds": 12.453000, "success": true}

我使用常规的logstash syslog输入来接收此消息,并将单个日志作为常规日志接收,并将消息作为字符串:
"_source": {
"message": "{\"task_id\": "231232xyz", \"seconds\": 12.453000, \"success\": true}",
"tags": [
"_jsonparsefailure",
"_grokparsefailure"
],

我显然可以只使用常规消息作为
task_id: 221232xyz, seconds: 12.453000, success: true

并使用grok提取值并将其解析为字段(包括将秒数转换为浮点数),但是我觉得在使用cee或仅是最适合我的普通消息之间应该有一个解决方案。显然,来自Syslog的其他消息将包含非json消息。将syslog消息的内容解析为JSON是否可行?

根据评论的请求,编辑logstash输入:
input {
syslog {
port => 5000
host => "0.0.0.0"
type => "syslog"
codec => "json"
}
}

grok筛选器是我(正在工作)的尝试,以匹配用逗号分隔的消息,并开始从中提取执行时间:
filter {
grok {
match => ["message", "seconds: %{NUMBER:exec_time}"
}
mutate {
convert => {"exec_time" => "float"}
}
}

最佳答案

我的logstash conf中的以下过滤器似乎可以转换我的json消息字符串并正确提取字段:

filter {
grok {
overwrite => ["message"]
}
json {
source => "message"
}
}

我在JSON中拥有的三个键/值对在JSON条目的_source中似乎都是正确的类型,现在我可以将它们作为字段使用:
{
"_source: {
"task_id": "231232xyz",
"seconds": 12.453000,
"success": true
...
}

关于logging - 如果适用,获取Logstash将syslog消息字符串视为JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35139779/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com