Logstash收集nginx日志之使用grok过滤插件解析日志
官方使用说明: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过滤插件解析日志的更多相关文章
- logstash收集nginx访问日志
logstash收集nginx访问日志 安装nginx #直接yum安装: [root@elk-node1 ~]# yum install nginx -y 官方文档:http://nginx.org ...
- Logstash收集nginx访问日志和错误日志
1.收集访问日志 1).首先是要在nginx里面配置日志格式化输出 log_format main "$http_x_forwarded_for | $time_local | $reque ...
- logstash收集Nginx日志,转换为JSON格式
Nginx日志处理为JSON格式,并放置在http区块: log_format json '{"@timestamp":"$time_iso8601",' '& ...
- logstash收集nginx日志
(1)安装nginx 1.安装nginx yum install epel-release -y yum install nginx -y 2.修改日志文件格式为json #vim /etc/ngin ...
- 使用logstash收集java、nginx、系统等常见日志
目录 1.使用codec的multiline插件收集java日志... 1 2.收集nginx日志... 2 3.收集系统syslog日志... 3 4.使用fliter的grok模块收集mysql日 ...
- 第七章·Logstash深入-收集NGINX日志
1.NGINX安装配置 源码安装nginx 因为资源问题,我们先将nginx安装在Logstash所在机器 #安装nginx依赖包 [root@elkstack03 ~]# yum install - ...
- Logstash使用grok过滤nginx日志(二)
在生产环境中,nginx日志格式往往使用的是自定义的格式,我们需要把logstash中的message结构化后再存储,方便kibana的搜索和统计,因此需要对message进行解析. 本文采用grok ...
- 使用Logstash filter grok过滤日志文件
Logstash提供了一系列filter过滤plugin来处理收集到的log event,根据log event的特征去切分所需要的字段,方便kibana做visualize和dashboard的da ...
- 安装logstash5.4.1,并使用grok表达式收集nginx日志
关于收集日志的方式,最简单性能最好的应该是修改nginx的日志存储格式为json,然后直接采集就可以了. 但是实际上会有一个问题,就是如果你之前有很多旧的日志需要全部导入elk上查看,这时就有两个问题 ...
随机推荐
- [UE4]射击起点、终点的计算方法
一.射击起点,这个简单,一般是以角色的相机位置为作为射击起点,而不是枪口的位置作为起点 二.射击终点,角色朝向 * 射击距离 + 射击起点 角色朝向:单位向量 角色朝向 * 射击距离:向量长度 向量长 ...
- windows下pem转ppk
下载puttygen.exe,启动 下载路径:链接:https://pan.baidu.com/s/1hstORTa 密码:kvfi pem -> ppk :通过PuTTYgen 转换 1. I ...
- 使用SecureCRT软件运维的配置习惯
使用 SecureCRT 软件运维的配置习惯 作者:Eric 微信:loveoracle11g 选项--->全局选项 配置文件存放路径 默认CRT配置的配置文件在C盘 常规--->默认会话 ...
- 在linux下,去除^M,将windows格式文件(dos文件)改为unix格式文件
在Windows系统下编辑的文件,换行符回车的格式为'\r\n',在linux系统下,回车的格式为'\n',在Windows下编辑的文本文件在上传至linux服务器时,回车'\r\n'就显示成^M+' ...
- Linux常用指令之二
1.用户权限 1).查看文件属性 ls -l file(ll别名) drwxr-x--- 2 root root 4096 Jan 20 19:39 mnt # ...
- jvm内存分区及各区线程问题
一.java内存模型图 二.直观分类图 三.各区简单描述 1.堆(heap):主要存放对象的实例也包括数组,是垃圾管理的主要作用区,是线程共享的 2.栈(stack):①虚拟机栈:描述的是 Java ...
- Docker 系列01: Centos7.3 上安装docker
Docker从1.13版本之后采用时间线的方式作为版本号,分为社区版CE和企业版EE. 社区版是免费提供给个人开发者和小型团体使用的,企业版会提供额外的收费服务,比如经过官方测试认证过的基础设施.容器 ...
- ThinkPHP5调用PHPExcel类实现导入导出
注意:extend是放置第三方类的地方,不要乱配置命名空间那些,引起不必要的类错误 代码如下 <?php namespace app\index\controller; use think\Co ...
- MySQL 中的三中循环 while loop repeat 的基本用法
-- MySQL中的三中循环 while . loop .repeat 求 1-n 的和 -- 第一种 while 循环 -- 求 1-n 的和 /* while循环语法: while 条件 DO 循 ...
- 8.2.1-优化SELECT语句
8.2.1.优化 SELECT 语句 由SELECT 语句组成的查询,在数据中执行所有的查询.对这类语句的调优排在首位,无论是调优动态web网页的二级响应时间,还是减少生成巨大隔夜报告的时间. 而且, ...