zabbix监控ELK导入的项目日志

大鹏一日同风起,扶摇直上九万里。这篇文章主要讲述zabbix监控ELK导入的项目日志相关的知识,希望能为你提供帮助。
1、ELK监控概述    ELK日志分析系统在运维使用过程中,很多情况都是通过filebeat接入,把日志数据放到Elasticsearc中,这样子原始化的项目日志,对于绝大部分开发来说,还是很好用的。但是仅仅如此的话,ELK存在的必须性就不是很大了,为了更好地使用ELK这个庞大的日志分析系统,可以通过logstash对于日志数据进行数据清洗,通过logstash中的zabbix插件将日志中的错误信息通过zabbix实现告警功能。

zabbix监控ELK导入的项目日志

文章图片

如上图中,用户可以通过kibana查看日志相关信息,logstash通过zabbix插件可以接到zabbix服务实现错误日志告警。其他相关功能不再这里做其他介绍。


2、Logstash规则2.1、nginx日志格式


$ sudo vim /etc/nginx/nginx.conf
{
....
http {
....
log_formataccess escape=json\'$remote_addr - $remote_user [$time_local] "$request" \'
\'$status $body_bytes_sent "$request_body" "$http_referer" \'
\'$request_time $host "$http_lnhost" "$http_user_agent" $http_x_forwarded_for\';
access_log/var/log/nginx/access.logaccess;
}
....
}

zabbix监控ELK导入的项目日志

文章图片

2.2、logstash安装zabbix


# /usr/share/logstash/bin/logstash-plugininstall logstash-output-zabbix#部署zabbix插件

2.3、logstash配置


# cd /etc/logstash/conf.d/
# vimnginx-log.conf
input {
kafka {
bootstrap_servers => "172.16.0.6:9092"#kafka连接,根据实际 情况填写
topics => ["nginxlog"]#kafaka的topics
codec => "json"
}
}

filter {
if [fields][log_topic] == "nginxlog" {
grok {
match => {
"message" => \'%{IP:remote_addr}\\ -\\\\[%{HTTPDATE:log_timestamp}\\]\\ \\"%{DATA:method} %{DATA:request} %{DATA:httpversion}\\" %{NUMBER:status:int}\\ %{NUMBER:body_bytes_sent:float}\\ %{QUOTEDSTRING:request_body}\\ %{QUOTEDSTRING:http_referer}\\ %{NUMBER:request_time:float}\\ %{URIHOST:hostname}\\ %{QUOTEDSTRING:http_lnhost}\\ %{GREEDYDATA:http_user_agent}\\ \'
}
remove_field => ["message","timestamp"]
}
mutate {
split => ["request", "?"]
add_field => {
"request_uri" => "%{[request][0]}"
}
add_field => {
"request_params" => "%{[request][1]}"
}
remove_field => [ "request" ]
}
mutate {
add_field => [ "[zabbix_key]", "nginxlogs" ]#zabbix的key
add_field => [ "[zabbix_host]", "127.0.0.1" ]#zabbix相应的agent
add_field => [ "msg","访问IP:%{remote_addr} WEB状态码:%{status} 请求页面:https://%{hostname}%{request_uri} 请求参数:%{request_params} 请求耗时:%{request_time}" ]
}
date {
match => ["timestamp","dd/MMM/yyyy:HH:mm:ss Z"]
}
}
}

output {
if [fields][log_topic] == "nginxlog" {
elasticsearch {
hosts => ["http://172.16.32.16:9200"]#根据实际情况填写
index => "nginx-access-log-%{+YYYY-MM-dd}"
user => "elastic"
password => "*************"
}
}

if [status] == 403 {
zabbix {
zabbix_host => "[zabbix_host]"
zabbix_key => "[zabbix_key]"
zabbix_server_host => "172.16.32.6"#zabbix-server地址
zabbix_server_port => "10051"#zabbix-server端口
zabbix_value =https://www.songbingjia.com/android/>"msg"
}
}
}

filter:
1、[fields][log_topic] 字段内容根据filebeat中的值填写
2、grok下message根据相应的日志规律进行拆分,由于es自带字段表中含有message,因此需要用到移除remove_field
3、mutate使用split功能对于相应的字段进行二次拆分,需要新增字段用到add_field
检测logstash文件是否有配置错误:


# /usr/share/logstash/bin/logstash --path.settings /etc/logstash/ -f /etc/logstash/conf.d/nginx-log.conf-t

启动方式通过指定配置文件启动:


# nohup/usr/share/logstash/bin/logstash /etc/logstash/conf.d/> & /dev/null &

3、zabbix对接Logstash
zabbix监控ELK导入的项目日志

文章图片



zabbix监控ELK导入的项目日志

文章图片



键值特别注意,这个是监控能否成功的关键所在
zabbix监控ELK导入的项目日志

文章图片

上图中的logstash配置
“zabbix_key"对应”nginxlogs“对应zabbix中的键值,必须完全一致
“zabbix_host”对应“127.0.0.1”代表的是这个监控项放在哪个zabbix_agent上
“msg”输出到zabbix上的报错信息
【zabbix监控ELK导入的项目日志】
zabbix监控ELK导入的项目日志

文章图片

上图中的logstash配置
判断的“status”字段是日志中进行拆分后的字段,这里监控的web状态码403等等
"zabbix_server_host"表示的zabbix服务端地址
“zabbix_server_port”表示的zabbix服务端端口
“zabbix_value”表示的是上面定义的msg报错信息
zabbix监控ELK导入的项目日志

文章图片

触发器设置方式:
nodata()表示的周期T内没有数据,1-true,0-false
上图中问题表达式:表示10分钟收到错误信息
恢复表达式:表示10分钟没有收到错误信息
如下图收到nginx错误信息
zabbix监控ELK导入的项目日志

文章图片








    推荐阅读