check_statuscode
功能介绍
本脚本通过ELK查询nginx日志统计过去一分钟所有的请求,及http返回码为4xx和5xx的请求个数,输出PMS所需的数据。
使用前,需修改脚本第13行,uri参数中的ip为实际项目elk地址,如下:
#修改ip即可,注意跟elasticsearch的配置文件保持一致
uri = "http://192.168.105.118:9200/logstash*/_search"
默认判断如下:
1、输出状态,错误率((4xx+5xx)/all),所有请求个数、4xx请求个数、5xx请求个数
python /usr/local/nagios/libexec/check_statuscode.py
Warning! One mintue Errorrate is: 1.88%, Count of all requests: 7351, count of 4xx: 138, count of 5xx: 0
2、如果错误率大于0,Warning状态(报警);
3、如果错误率大于5%,critical状态(严重报警);
4、如果无错误,OK状态;
各项目可以根据需要调整脚本报警状态,如果连续出现warning或critical可能需要人工介入判断处理。
此脚本依赖python的requests库,如果默认python没有这个库,可以尝试本地安装,具体参见文档;
https://www.sumaott.com/doc/static/pms/Python_env.html
修改ELK输出
ELK目前在项目上使用filebeat采集nginx日志后直接输出到elasticsearch,需要修改为经过logstash处理后再输出到elasticsearch。
修改步骤如下:
修改nginx主服务器的filebeat配置:
grep -v '^$' /etc/filebeat/filebeat.yml |grep -v "^#"|grep -v "^ #"|grep -v "^ #"
#修改后,结果如下所示,即注释掉原有output.elasticsearch,改为输出到logstash
filebeat.prospectors:
- input_type: log
paths:
- /usr/local/nginx/logs/access.log
output.logstash:
hosts: ["10.255.134.118:5044"]
image
修改ELK所在服务器,logstash配置:
注意修改配置文件output中es地址为实际项目地址:
cd /home/ELK/logstash/test/
#删除test目录下无用配置文件
vim filebeat.conf
#添加如下文件内容
input {
beats {
port => "5044"
}
}
filter {
json {
source => "message"
remove_field => "message"
}
mutate {
remove_field => ["tags", "beat"]
}
date {
match => [ "timestamp", "dd/MMM/yyyy:HH:mm:ss Z" ]
target => ["datetime"]
}
geoip {
source => "clientip"
}
}
output {
elasticsearch {
hosts => "192.168.105.118:9200"
index => "logstash-%{+YYYY.MM.dd}"
}
}
修改完成后启动logstash,
setsid /home/ELK/logstash/bin/logstash -f /home/ELK/logstash/test/ >/dev/null 2>&1 &
推荐使用supervisior启动,具体启动方式见原来的ELK部署部分:https://www.sumaott.com/doc/static/elk/index.html
修改ELK页面,添加logstash索引:
登录kibana页面,点击management——>index pattern——>creat index pattern——>输入logstash-*——>Create保存,然后在discover里就可以看到logstash索引的数据了。 如下图所示: image添加监控至PMS
将check_statuscode脚本上传至nginx服务器的/usr/local/nagios/libexec目录,赋予可执行权限:
cd /usr/local/nagios/libexec
chmod +x check_statuscode.py
修改nrpe配置,最后一行添加:
cd /usr/local/nagios/etc
vim nrpe.cfg
#添加到最后一行即可
command[check_statuscode]=/usr/local/nagios/libexec/check_statuscode.py
修改nagios服务端配置,最后添加:
注意修改host_name字段为项目自己的主机名
cd /usr/local/nagios/etc/objects/
vim services.cfg
#添加文件末尾,修改为对应项目自定义主机名
define service{
use local-service
host_name JNNGINX
service_description check_statuscode
check_command check_nrpe!check_statuscode
}
#最后重启nagios
/etc/init.d/nagios restart
监控效果如下:
image
网友评论