当前位置 : 主页 > 操作系统 > centos >

【ZABBIX】zabbix监控ELK导入的项目日志

来源:互联网 收集:自由互联 发布时间:2022-06-20
1、ELK监控概述 ELK日志分析系统在运维使用过程中,很多情况都是通过filebeat接入,把日志数据放到 Elasticsearc中,这样子原始化的项目日志,对于绝大部分开发来说,还是很好用的。但

1、ELK监控概述

    ELK日志分析系统在运维使用过程中,很多情况都是通过filebeat接入,把日志数据放到Elasticsearc中,这样子原始化的项目日志,对于绝大部分开发来说,还是很好用的。但是仅仅如此的话,ELK存在的必须性就不是很大了,为了更好地使用ELK这个庞大的日志分析系统,可以通过logstash对于日志数据进行数据清洗,通过logstash中的zabbix插件将日志中的错误信息通过zabbix实现告警功能。

【ZABBIX】zabbix监控ELK导入的项目日志_logstash

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


2、Logstash规则

2.1、nginx日志格式


$ sudo vim /etc/nginx/nginx.conf
{
....
http {
....
log_format access 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.log access;
}
....
}

【ZABBIX】zabbix监控ELK导入的项目日志_zabbix_02

2.2、logstash安装zabbix


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

2.3、logstash配置


# cd /etc/logstash/conf.d/
# vim nginx-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 => "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】zabbix监控ELK导入的项目日志_监控_03


【ZABBIX】zabbix监控ELK导入的项目日志_logstash_04


键值特别注意,这个是监控能否成功的关键所在

【ZABBIX】zabbix监控ELK导入的项目日志_zabbix_05

上图中的logstash配置

“zabbix_key"对应”nginxlogs“对应zabbix中的键值,必须完全一致

“zabbix_host”对应“127.0.0.1”代表的是这个监控项放在哪个zabbix_agent上

“msg”输出到zabbix上的报错信息

【ZABBIX】zabbix监控ELK导入的项目日志_监控_06

上图中的logstash配置

判断的“status”字段是日志中进行拆分后的字段,这里监控的web状态码403等等

"zabbix_server_host"表示的zabbix服务端地址

“zabbix_server_port”表示的zabbix服务端端口

“zabbix_value”表示的是上面定义的msg报错信息

【ZABBIX】zabbix监控ELK导入的项目日志_logstash_07

触发器设置方式:

nodata()表示的周期T内没有数据,1-true,0-false

上图中问题表达式:表示10分钟收到错误信息

恢复表达式:表示10分钟没有收到错误信息

如下图收到nginx错误信息

【ZABBIX】zabbix监控ELK导入的项目日志_ELK_08



上一篇: oeasy教您玩转vim - 51 - # 读写文件
下一篇:没有了
网友评论