win搭建ELK7.10.1分析Nginx日志绘制图表

前言

ELK分析日志非常强大,解析Nginx日志可以获得很多非常有价值的信息。

搭建

■ 下载

https://elasticsearch.cn/download/
中文社区下载对应安装包,速度更快。

■ 一些特殊配置

ES需要安装elasticsearch-head,然后


elasticsearch.yml添加配置处理跨域。

http.cors.enabled: true
http.cors.allow-origin: "*"

kibana.yml添加配置修改为中文

i18n.locale: "zh-CN"

kibana.yml添加配置修改地图为高德中文

map.tilemap.url: 'https://webrd02.is.autonavi.com/appmaptile?lang=zh_cn&size=1&scale=1&style=7&x={x}&y={y}&z={z}'

■ 修改Nginx日志格式

修改nginx.conf配置Nginx日志为json格式,并配置所需字段。

log_format main_json '{"domain":"$server_name",'
    '"remote_addr":"$remote_addr",'
    '"time_local":"$time_iso8601",'
    '"request":"$request",'
    #'"request_body":"$request_body",'
    '"status":$status,'
    '"body_bytes_sent":"$body_bytes_sent",'
    '"http_referer":"$http_referer",'
    '"upstream_response_time":"$upstream_response_time",'
    '"request_time":"$request_time",'
    '"http_user_agent":"$http_user_agent",'
    '"upstream_addr":"$upstream_addr",'
    '"upstream_status":"$upstream_status"}';
  
	#用来指定日志文件的路径以及使用何种日志格式记录日志
	access_log  logs/access.log  main_json;

■ 配置logstash.conf

① 配置如下

input{
    
    
	file{
    
    
		path => ["路径/nginx-1.18.0/logs/access*.log"]	
		type => "nginx_access"
		start_position => "beginning"
	}
	file{
    
    
		path => ["路径/nginx-1.18.0/logs/error*.log"]	
		type => "nginx_error"
		start_position => "beginning"
	}
}
filter {
    
    
	if [type] == "nginx_access" {
    
    
		mutate {
    
    
			gsub => ["message", "\\x", "\\\x"]
		}
		json {
    
    
			source => "message"
			remove_field => "message"
			remove_field => "@timestamp"
		}
		date {
    
    
			match => ["time_local", "ISO8601"]
			target => "@timestamp"
		}
		grok {
    
    
			match => {
    
     "request" => "%{WORD:method} (?<url>.* )" }
		}
		mutate {
    
    
			remove_field => ["host", "event", "input", "offset", "prospector", "source", "tags", "beat"]
			rename => {
    
    "http_user_agent" => "agent"}
			rename => {
    
    "upstream_response_time" => "response_time"}
			convert => ["request_time", "float"]
			split => {
    
    "x_forwarded_for" => ","}
			split => {
    
    "response_time" => ","}
		}
		geoip {
    
    
            source => "remote_addr"
			target => "geoip"
			add_field => [ "[coordinates]", "%{[geoip][latitude]},%{[geoip][longitude]}" ]
        }
	}
	if [type] == "nginx_error" {
    
    
        mutate {
    
    
            remove_field => ["@timestamp"]
        }
        grok {
    
    
            match => {
    
    "message" => "(?<datetime>%{YEAR}[./-]%{MONTHNUM}[./-]%{MONTHDAY}[- ]%{TIME}) \[%{LOGLEVEL:severity}\] %{POSINT:pid}#%{NUMBER}: %{GREEDYDATA:errormessage}(?:, client: (?<real_ip>%{IP}|%{HOSTNAME}))(?:, server: %{IPORHOST:domain}?)(?:, request: %{QS:request})?(?:, upstream: (?<upstream>\"%{URI}\"|%{QS}))?(?:, host: %{QS:request_host})?(?:, referrer: \"%{URI:referrer}\")?"}
        }
        date {
    
    
            match => ["datetime", "yyyy/MM/dd HH:mm:ss"]
            target => "@timestamp"
        }
    }
} 
output{
    
    
	elasticsearch {
    
    
	#这里记得写的是hosts,因为可能会是集群的 elasticsearch,但是配置的之后只要写上主节点就行了	
        hosts => "localhost:9200"
	#规定存储日志的索引规则,动态配置,方便管理
        index => "nginx-%{type}=%{+YYYY.MM.dd}"
		template => "路径/ELK/logstash-7.10.1/config/template/nginx-logstash.json"
		template_name => "nginx-logstash"
		template_overwrite => true
    }
	stdout{
    
    
		codec => rubydebug
	}
}

② 注意要点

  1. 即使是win下,路径也应使用/。
  2. request_time转换为浮点型,便于计算平均值,最大值等。
  3. 定义的index索引规则必须和自己数据相匹配,自定义名称就需要自定义模板。由于需要绘制地图所以配置了模板以识别geo_point。
    参考文章ELK7.10.1绘制热力地图Kibana无法识别geo_point

绘图

■ 成品展现

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

■ 绘制

① 访问热度地图

比较复杂,独立写了一篇文章
ELK7.10.1绘制IP热力地图Kibana无法识别geo_point找不到索引

② QPS折线图

需求较大,独立写了一篇文章
ELK分析Nginx统计QPS图表

③ 访问量TOP5的流量折线图

没啥特殊配置如下
在这里插入图片描述

在这里插入图片描述

④ 访问量TOP5的响应时间平均值

在这里插入图片描述
在这里插入图片描述
X轴照旧。

⑤ 访问量TOP5的响应时间最大值

如④,Y轴聚合改为最大值即可。

⑥ 饼图

在这里插入图片描述

⑦ 水平条形图

在这里插入图片描述

⑧ 面板设置

面板设置还可以设置网格、阈值之类。
在这里插入图片描述

最后

这样,一套非常可观的ELK分析Nginx日志图表系统即可完成。

猜你喜欢

转载自blog.csdn.net/qq_24054301/article/details/113369925