前言
作为运维每天都需要关注主站的5xx,4xx情况以及那个接口的问题,之前的做法是通过nginx 本身的health模块获取当前访问量然后分析之后写入influxdb里面,grafana用来读取 5xx出图,并且每分钟把5xx写入到openfalcon里面作为阈值报警但是这样还是不是实时的,并且出现问题好要自己去过滤nginx日志太麻烦。
第一版结构
所有的API日志通过rsyslog 打到logserver上,然后部署 一个logstash对日志目录进行分析过过滤出5xx和做GEOIP替换写入到es里面,这么做之后日常没有出现大规模的问题还好,一旦出现突发的5xx或者4xx事件,就会造成写入es的延时增大,这个时候快速报警系统从es里面读5xx和接口就会失效。
input {
file {
path => "/data/logs/nginx/*/One/*.log"
codec => json
discover_interval => "10"
close_older => "5"
sincedb_path => "/data/logs/.sincedb/.sincedb"
}
}
filter {
if [clientip] != "-" {
geoip {
source => "clientip"
target => "geoip"
database => "/usr/local/logstash-6.5.4/config/GeoIP2-City.mmdb"
add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ]
add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ]
}
mutate {
convert =>