官方使用说明: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. [UE4]小地图接口设计

    一.地图缩略图片 二.要显示的图标及其对应的Actor 三.比例尺 四.对位点,只需要一个对位点就可以了. 函数名称 SetupMap 函数功能 设置地图 参数类型 MapImage:地图缩略图 Ma ...

  2. Linux下Mysql的odbc配置

    在安装配置之前,需要先大概了解一下MyODBC的架构. MyODBC体系结构建立在5个组件上,如下图所示: Driver Manager: 负责管理应用程序和驱动程序间的通信,主要功能包括:解析DSN ...

  3. 1-hadoop安装、ssh、节点退役与服役

    1.准备 四台虚拟机 ①卸载openjdk ②安装jdk 2. 配置静态ip: ip : 每个机器在internet上的唯一标识 子网掩码: 必须结合IP地址一起使用,将某个IP地址划分成网络地址和主 ...

  4. 安全测试8_Web安全实战2(暴力破解)

    1.暴力破解的概念 顾名思义,暴力破解的原理就是使用攻击者自己的用户名和密码字典,一个一个去枚举,尝试是否能够登录.因为理论上来说,只要字典足够庞大,枚举总是能够成功的! 2.暴力破解的实战 在有了之 ...

  5. 关于js中的时间——计算时间差等

    获取当前(系统)时间: var NowDate= new Date(); // 获取当前日期时间 // 输出为: Wed May 03 2017 14:52:08 GMT+0800 (中国标准时间) ...

  6. tornado 和 djanjo 转义处理对比

    tornado tornado默认是转义所有字符,比较安全,但有时候我们的确需要把字符当做html来解析处理,因此我们需要做些处理. 所有的模板输出都已经通过 tornado.escape.xhtml ...

  7. python变量存储和深浅拷贝

    python的变量及其存储 在高级语言中,变量是对内存及其地址的抽象.对于python而言,python的一切变量都是对象,变量的存储,采用了引用语义的方式,存储的只是一个变量的值所在的内存地址,而不 ...

  8. code signing is required for product type 'Application' in SDK 'iOS 8.1' 错误分析以及解决方案

    在真机测试的时候往往会突然出现这样一个错误,code signing is required for product type 'Application' in SDK 'iOS 7.0'  ,就是说 ...

  9. 阿里云实现putty私钥登录全过程

    阿里云实现putty私钥登录全过程 1 putty生成公钥和私钥 1)putty生成公钥和私钥 记得在空白区域 滑动 2 公钥上传到阿里云 1)公钥上传  私钥存到本地 3 公钥绑定要登录的实例 4 ...

  10. 《算法》第五章部分程序 part 1

    ▶ 书中第五章部分程序,包括在加上自己补充的代码,字母表类,字符串低位优先排序(桶排) ● 字母表类 package package01; import edu.princeton.cs.algs4. ...