官方使用说明:https://doc.yonyoucloud.com/doc/logstash-best-practice-cn/index.html


Grok的过滤配置选项和通用选项

grok支持下述的过滤配置选项

选项 类型 是否为必须 描述
break_on_match 布尔型 默认值为true,只会匹配第一个符合匹配条件的值,如果需要匹配多个值,则需要设置为false
keep_empty_captures 布尔型 默认值为false,如果为true,则保留空字段为事件字段
match 哈希型 意思为匹配一个字段的哈希值,单一字段可设置匹配多个匹配模式
named_captures_only 布尔型 默认值为true,意味着只保存从grok中获取的名称
overwrite 数组 此选项用于复写字段中的值
pattern_definitions 哈希型 定义被当前过滤器所使用的自动模式的名称和元组名称,如果命名的名称已存在,则会覆盖此前配置
patterns_dir 数组 指定用于保存定义好的匹配模式的文件目录
patterns_files_glob 字符串 用于在patterns_dir指定的目录中过滤匹配的文件
tag_on_failure 数组 默认值为_grokparsefailure,当匹配不成功时追加指定值到tags字段
tag_on_timeout 字符串 默认值为_groktimeout,当grok正则表达式匹配超时追加的tag
timeout_millis 数值 默认值为30000毫秒,当正则匹配运行超过指定的时间后,尝试终结此匹配操作。设置为0将关闭超时

grok的通用选项:下述选项是被所有过滤插件都支持的通用选项

选项 类型 是否为必须 描述
add_field 哈希型 如果此过滤选项匹配成功,则会向匹配的事件中添加指定的字段,字段名和内容可以调用相关的变量进行定义命名
add_tag 数组 用于当过滤成功时,向匹配的事件中添加tag
enable_metric 布尔型 默认值为true,默认情况下,启用或禁用此功能,能记录特定插件的相关度量值。
id 字符串 添加一个唯一ID到指定的插件配置中,当有多个同一类型的插件时,可更好地去区别监控logstash
periodic_flush 布尔型 默认值为false,可选项,用于在规定的间隔时间调用过滤器的刷新功能
remove_field 数组 当此插件匹配成功时,从事件中移除指定的字段
remove_tag 数组 当此插件匹配成功时,从事件中移除指定的tags

grok作为一个logstash的过滤插件,支持根据模式解析文本日志行,拆成字段。

  • nginx日志的配置:
log_format  main  '$remote_addr - $remote_user [$time_local] "$request" $status $body_bytes_sent "$http_referer" "$http_user_agent" "$http_x_forwarded_for"';
  • logstash中grok的正则(添加在/usr/local/logstash-6.2.4/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns/grok-patterns文件中)为:

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}

推荐一个正则表达式在线自动生成器  http://www.txt2re.com  http://txt2re.com ,用于自定义匹配时的变量引用

logstash的配置为:

input{
file{
path => "/usr/local/nginx/logs/access.log"
type => "nginx"
start_position => "beginning"
}
} filter {
grok {
match => { "message" => "%{NGINXACCESS}" }
}
}
output{
if [type] == "nginx" {
elasticsearch {
hosts=> ["172.17.102.202:9200"]
index=> "nginx"
}
}
}

多个Input时,采用条件判断:

input{
file{
path => "/usr/local/nginx/logs/hottopic-access.log"
type => "hottopic"
start_position => "beginning"
}
file{
path => "/usr/local/nginx/logs/foodie-access.log"
type => "foodie"
start_position => "beginning"
}
file{
path => "/usr/local/nginx/logs/ac-access.log"
type => "ac"
start_position => "beginning"
}
} filter {
grok {
match => { "message" => "%{MYNGINX}" }
}
mutate {
convert => [ "elapsed", "float" ]
convert => [ "serverelapsed", "float" ]
}
} output{
if [type] == "hottopic" {
elasticsearch {
hosts=> ["172.17.213.60:9200"]
index=> "nginx-hottopic-api"
}
}
if [type] == "foodie" {
elasticsearch {
hosts=> ["172.17.213.60:9200"]
index=> "nginx-foodie-api"
}
}
if [type] == "ac" {
elasticsearch {
hosts=> ["172.17.213.60:9200"]
index=> "nginx-ac-api"
}
}
}

添加和移除指定的字段,在grok{ }范围处进行配置

input {
beats {
port =>
type => "nginx"
}
} filter {
if [type] == "nginx" {
grok {
match => { "message" => ["(?<RemoteIP>(\d*.\d*.\d*.\d*)) - %{DATA:[nginx][access][user_name]} \[%{HTTPDATE:[nginx][access][time]}\] \"%{WORD:[nginx][access][method]} %{DATA:[nginx][access][url]} HTTP/%{NUMBER:[nginx][access][http_version]}\" %{NUMBER:[nginx][access][response_code]} %{NUMBER:[nginx][access][body_sent][bytes]} \"%{DATA:[nginx][access][referrer]}\" \"%{DATA:[nginx][access][agent]}\""] }
add_field => {
"Device" => "Charles Desktop"
}
remove_field => [ "message","beta.version","beta.name" ]
}
}
} output {
if [type] == "nginx" {
elasticsearch {
hosts => "10.10.10.6:9200"
index => "logstash-testlog"
} }
}

排除字段

字段的排除需要在filter中进行操作,使用一个叫做 mutate 的工具,具体操作如下

//比如我们可能需要避免日志中kafka的一些字段占用宝贵的磁盘空间。
filter {
mutate {
remove_field => ["kafka"]
}
}

排除整条相关数据

比如apache日志中状态为200 的监控服务器不关心的,这里用到drop工具

filter {
if [status] == "" { //不知道这边的多个判断的语法要如何写
drop{}
}
}

Logstash收集nginx日志之使用grok过滤插件解析日志的更多相关文章

  1. logstash收集nginx访问日志

    logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...

  2. Logstash收集nginx访问日志和错误日志

    1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...

  3. logstash收集Nginx日志,转换为JSON格式

    Nginx日志处理为JSON格式,并放置在http区块: log_format json '{"@timestamp":"$time_iso8601",' '& ...

  4. logstash收集nginx日志

    (1)安装nginx 1.安装nginx yum install epel-release -y yum install nginx -y 2.修改日志文件格式为json #vim /etc/ngin ...

  5. 使用logstash收集java、nginx、系统等常见日志

    目录 1.使用codec的multiline插件收集java日志... 1 2.收集nginx日志... 2 3.收集系统syslog日志... 3 4.使用fliter的grok模块收集mysql日 ...

  6. 第七章·Logstash深入-收集NGINX日志

    1.NGINX安装配置 源码安装nginx 因为资源问题,我们先将nginx安装在Logstash所在机器 #安装nginx依赖包 [root@elkstack03 ~]# yum install - ...

  7. Logstash使用grok过滤nginx日志(二)

    在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析. 本文采用grok ...

  8. 使用Logstash filter grok过滤日志文件

    Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...

  9. 安装logstash5.4.1,并使用grok表达式收集nginx日志

    关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了. 但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题 ...

随机推荐

  1. URL传值乱码

    JS端: &value=encodeURIComponent("value") C端: HttpUtility.UrlDecode(Request.Params[" ...

  2. python3基础操作

    ubuntu下python连接mysql apt-get install python-mysqldb 获取当前时间 >>> from datetime import datetim ...

  3. PHP:引用Phpword导出数据到word文档

    下载地址https://www.cnwenhui.cn/html/show-597.html(其中有中文使用手册可以下载看看) 1.首先要下载Phpword类库,放在如下图目录下 2.调用方法 pub ...

  4. BZOJ2134 luoguP1297 [国家集训队]单选错位

    单选错位 [问题描述] gx和lc去参加noip初赛,其中有一种题型叫单项选择题,顾名思义,只有一个选项是正确答案.试卷上共有n道单选题,第i道单选题有ai个选项,这ai个选项编号是1,2,3,…,a ...

  5. POJ2311 Cutting Game 博弈 SG函数

    Cutting Game Description Urej loves to play various types of dull games. He usually asks other peopl ...

  6. Microsoft Office Access数据库或项目包含一个对文件“dao360.dll”版本5.0.的丢失的或损坏的引用。

    今天使用 office 2007 access 打开 2003 的数据库中的表时候,提示这个错误.经过搜索,发现是没有 dao360.dll 的问题. 在 https://cn.dll-files.c ...

  7. uva-141-枚举

    旋转过程的下标变化,画个2x2的表格,模拟就可以出来了 #include <string> #include<iostream> #include<map> #in ...

  8. 安装JavaFX Scene Builder,并配置到Eclipse

    转载自:https://www.yiibai.com/javafx/install-javafx-scene-builder-into-eclipse.html 1-JavaFX Scene Buil ...

  9. 2. springboot启动报错:Field userMapper in com.service.UserService required a bean of type 'com.dao.UserMapper' that could not be found.

    报错信息: 2018-06-25 14:26:17.103  WARN 49752 --- [  restartedMain] ationConfigEmbeddedWebApplicationCon ...

  10. [手把手教你] 用Swoft 搭建微服务(TCP RPC)

    序言 Swoft Framework 基于 Swoole 原生协程的新时代 PHP 全栈式协程框架 Swoft 是什么? Swoft 框架是首个基于Swoole 原生协程的新时代 PHP高性能协程全栈 ...