Logstash使用grok插件解析Nginx日志
grok表达式的打印复制格式的完整语法是下面这样的:
%{PATTERN_NAME:capture_name:data_type}
data_type 目前只支持两个值:int 和 float。
在线gork正则的地址:http://grokdebug.herokuapp.com/
Logstash基础正则地址:https://github.com/elastic/logstash/blob/v1.4.2/patterns/grok-patterns
也可以在你的安装路径下查找grok-patterns内置的正则表达式:
/usr/local/logstash-6.2.4/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
例如:
URIPATH (?:/[A-Za-z0-$.+!*'(){},~:;=@#%&_\-]*)+
URIPARAM \?[A-Za-z0-$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]*
-----------------------------------------------------------------------------------------
可以设置的转换类型包括:"integer","float" 和 "string"。示例如下:
filter {
mutate {
convert => ["request_time", "float"]
gsub => [ "message", "aa", "" ] 字符串替换,此处为清除
}
}
注意:mutate 除了转换简单的字符值,还支持对数组类型的字段进行转换,即将 ["1","2"] 转换成 [1,2]。但不支持对哈希类型的字段做类似处理。
对已有索引进行修改并且平滑过渡:
mutate {
convert => [ "request_time", "float" ]
add_field => [ "response_time", "%{request_time}" ]
remove_field => [ "request_time" ]
}
--------------------------------------------------------------------------------
在线grok表达式解析地址:http://grokdebug.herokuapp.com/ (NGINXACCESS为规则名称,测试时不用填入)
根据已经生成的日志记录逐个参数进行调试即可。
需要注意的是当日志或可能出现“-”时,必须在NGINXACCESS中指定,例如: (?:%{NUMBER:serverelapsed}|-)
需要修改的文件位置:/usr/local/logstash/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns
如果找不到的话,grep -rw NGINXACCESS /usr/local/logstash
首先对nginx日志格式设定如下:
log_format main '$remote_addr - $remote_user [$time_local] "$request_method $uri $query_string" $status $body_bytes_sent "$http_referer" "$http_user_agent" $request_time $upstream_response_time "$http_x_forwarded_for" ';
Logstash Grok默认的参数为:
NGUSERNAME [a-zA-Z\.\@\-\+_%]+
NGUSER %{NGUSERNAME}
NGINXACCESS %{IPORHOST:clientip} %{NGUSER:ident} %{NGUSER:auth} \[%{HTTPDATE:timestamp}\] "%{WORD:verb} %{URIPATHPARAM:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:response} (?:%{NUMBER:bytes}|-) (?:"(?:%{URI:referrer}|-)"|%{QS:referrer}) %{QS:agent} %{QS:xforwardedfor} %{IPORHOST:host} %{BASE10NUM:request_duration}
我这边设置的是:
#nginx
WZ ([^ ]*)
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} %{WZ:request} HTTP/%{NUMBER:httpversion}" %{NUMBER:status} %{NUMBER:bytes} (?:%{QS:referer}|-) %{QS:agent} %{NUMBER:elapsed} (?:%{NUMBER:serverelapsed}|-) %{QS:xforward}
或拆分请求的uri和请求参数:此处需要注意的是必须确保NGINXACCESS规则是一整行
WZ ([^ ]*)
URIPARAM [A-Za-z0-9$.+!*'|(){},~@#%&/=:;_?\-\[\]<>]* #此处重新定义该匹配规则,不匹配参数开头的?
NGINXACCESS %{IP:remote_ip} \- \- \[%{HTTPDATE:timestamp}\] "%{WORD:method} (%{URIPATH:request}|-|) (%{URIPARAM:requestParam}|-)" %{NUMBER:status}
%{NUMBER:bytes} %{QS:referer} %{QS:agent} %{NUMBER:elapsed} %{NUMBER:serverelapsed} %{QS:xforward}
自定义规则时也可以在/usr/local/logstash主目录下新建一个目录:patterns,并在该目录下新建一个grok的表达式解析文件nginx,内容同上,也可以实现相同的目的。
Nginx logstash配置文件:
input{
file{
path => "/usr/local/nginx/logs/access.log"
type => "nginx"
start_position => "beginning"
} file{
path => "/usr/local/nginx/logs/admin.log"
type => "admin-nginx"
start_position => "beginning"
}
} filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
mutate {
convert => [ "elapsed", "float" ]
convert => [ "serverelapsed", "float" ]
}
} output{
if [type] == "nginx" {
elasticsearch {
hosts=> ["172.17.102.202:9200"]
index=> "nginx"
}
}
else {
elasticsearch {
hosts=> ["172.17.102.202:9200"]
index=> "admin-nginx"
}
}
}
Logstash使用grok插件解析Nginx日志的更多相关文章
- 使用logstash的grok插件解析springboot日志
使用logstash的grok插件解析springboot日志 一.背景 二.解决思路 三.前置知识 四.实现步骤 1.准备测试数据 2.编写`grok`表达式 3.编写 logstash pipel ...
- ELK+Redis 解析Nginx日志
一.ELK简介 Elk是指logstash,elasticsearch,kibana三件套,我们一般使用它们做日志分析. ELK工作原理图: 简单来讲ELK具体的工作流程就是客户端的logstash ...
- 安装logstash5.4.1,并使用grok表达式收集nginx日志
关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了. 但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题 ...
- [日志分析]Graylog2进阶 通过正则解析Nginx日志
之前分享的 [日志分析]Graylog2采集Nginx日志 主动方式 这篇文章介绍了Graylog如何通过Graylog Collector Sidecar来采集nginx日志. 由于日志是未经处理的 ...
- Goaccess解析nginx日志备忘
参考 http://nginx.org/en/docs/http/ngx_http_log_module.html?&_ga=1.92028562.949762386.1481787781#l ...
- logstash 使用grok正则解析日志
http://xiaorui.cc/2015/01/27/logstash%E4%BD%BF%E7%94%A8grok%E6%AD%A3%E5%88%99%E8%A7%A3%E6%9E%90%E6%9 ...
- 关于Logstash中grok插件的正则表达式例子
一.前言 近期需要对Nginx产生的日志进行采集,问了下度娘,业内最著名的解决方案非ELK(Elasticsearch, Logstash, Kibana)莫属. Logstash负责采集日志,Ela ...
- logstash 6.6.0 读取nginx日志 插入到elasticsearch中
logstash.conf input { # For detail config for log4j as input, # See: https://www.elastic.co/guide/en ...
- python 解析nginx 日志 url
>>> import os>>> os.chdir('e:/')>>> log=open('access.log')//这两行是获取日志流> ...
随机推荐
- 浅谈HTTP和HTTPS的区别
这篇随笔我们从六个步骤来学习: 1.了解HTTP和HTTPS的基本概念 2.HTTPS诞生的目的 3.HTTP与HTTPS的区别 4.HTTP和HTTPS的工作原理 5.HTTPS的优缺点 6.如何将 ...
- /etc/profile ~/.bash_profile ~/.bashrc 等文件的执行过程 和 区别
/etc/profile :系统的所有用户共享 ~/.bash_profile:仅针对当前用户有效 我的电脑只用于开发,因此全部配置/etc/profile 参考链接: https://blog.cs ...
- 超级简单的数据压缩算法—LZW算法
1. 前文回顾 在字符串算法—数据压缩中,我们介绍了哈夫曼压缩算法(Huffman compression),本文将介绍LZW算法. 2. LZW算法 这个算法很简单,为了方便讲述,我们将采用16进制 ...
- pom.xml中添加远程仓库
maven的pom.xml中添加远程仓库 <repositories> <repository> <id>mvnrepository</id> < ...
- 使用maven-tomcat7-plugins时调试出现source not found解决
直接看下面的步骤: 步骤1: 步骤2: 步骤3: 步骤4:
- Nginx调试入门
1.查看nginx.conf配置文件是否有错误 ./nginx -t -c ./nginx.conf #可以看到,正常情况下语法没问题,配置文件测试成功了,-t测试-c配置文件 如果我故意加入错误 ...
- js+css jQuery实现页面后退执行 & 遮罩弹框
JS部分 <script src="http://libs.baidu.com/jquery/2.0.0/jquery.js"></script> < ...
- day056-58 django多表增加和查询基于对象和基于双下划线的多表查询聚合 分组查询 自定义标签过滤器 外部调用django环境 事务和锁
一.多表的创建 from django.db import models # Create your models here. class Author(models.Model): id = mod ...
- [转]使用Cython来保护Python代码库
转自:http://blog.csdn.net/chenyulancn/article/details/77168621 最近,我在做一个需要使用Cython来保护整个代码库的Python项目. 起初 ...
- NetCore2.0 CodeFirst 解析全国区划信息
NetCore2.0 数据库:SQLite HTML解析:HtmlAgilityPack 区划数据:http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201703/t2 ...