gpt4 book ai didi

json - NGINX 日志过滤器 $upstream_response_time JSON ELK "-"parsefailure

转载 作者:行者123 更新时间:2023-12-01 17:46:35 24 4
gpt4 key购买 nike

我的 NGINX 日志格式为 JSON:

log_format le_json '{ "@timestamp": "$time_iso8601", '
'"remote_addr": "$remote_addr", '
'"remote_user": "$remote_user", '
'"body_bytes_sent": "$body_bytes_sent", '
'"status": $status, '
'"request": "$request", '
'"request_method": "$request_method", '
'"response_time": $upstream_response_time, '
'"http_referrer": "$http_referer", '
'"http_user_agent": "$http_user_agent" }';

我的日志被 filebeat 拾取并发送到具有以下配置的 Logstash:

input {
beats {
port => 5044
codec => "json"
}
}
filter {
geoip {
database => "C:/GeoLiteCity.dat"
source => "[remote_addr]"
}
}
output {
elasticsearch {
template => "C:/ELK/logstash-2.2.2/templates/elasticsearch-template.json"
template_overwrite => true
hosts => ["127.0.0.1"]
index => "%{[@metadata][beat]}-%{+YYYY.MM.dd}"
document_type => "%{[@metadata][type]}"
}
}

我遇到的问题是$upstream_response_time。当没有回复时,NGINX 会在此帖子上添加“-”。正如你所看到的,我没有在 $upstream_response_time 周围放置“”,因为我希望它作为一个数字,这样我就可以在 Kibana 中使用它执行计算并显示。当发送“-”时,我在 Logstash 中收到 jsonparsefailure,因为它不是数字。

我想将所有“-”设置为 0。执行此操作的最佳方法是什么?我尝试在 nginx-config 中过滤它没有成功。我认为这需要在发送到 Logstash 之前完成,因为这就是解析失败发生的地方。

有什么想法吗?

最佳答案

试试这个:

map $upstream_response_time $temprt {
default $upstream_response_time;
"" 0;
}

$upstream_response_time 可以是数字,也可以未设置。 Nginx 将未设置的变量记录为破折号 (-),但 map 将它们视为空字符串。

关于json - NGINX 日志过滤器 $upstream_response_time JSON ELK "-"parsefailure,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36788856/

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