Logstash常用配置和日志解析_logstash 日志输出位置

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

    sincedb_write_interval => 15
}

syslog { # 系统日志方式
type => “system-syslog” # 定义类型
port => 10514 # 定义监听端口
}

beats { # filebeats方式
port => 5044
}


以上文件来源file,syslog,beats 只能选择其中一种


注意:


* 文件的路径名需要时绝对路径
* 支持globs写法
* 如果想要监听多个目标文件可以改成数组


1、path  
 path是file中唯一必需的参数。其他都是可选参数  
 2、exclude  
 是不想监听的文件,logstash会自动忽略该文件的监听。配置的规则与path类似,支持字符串或者数组,但是要求必须是绝对路径。  
 3、start\_position  
 是监听的位置,默认是end,即一个文件如果没有记录它的读取信息,则从文件的末尾开始读取,也就是说,仅仅读取新添加的内容。对于一些更新的日志类型的监听,通常直接使用end就可以了;相反,beginning就会从一个文件的头开始读取。但是如果记录过文件的读取信息,这个配置也就失去作用了。  
 4、sincedb\_path  
 这个选项配置了默认的读取文件信息记录在哪个文件中,默认是按照文件的inode等信息自动生成。其中记录了inode、主设备号、次设备号以及读取的位置。因此,如果一个文件仅仅是重命名,那么它的inode以及其他信息就不会改变,因此也不会重新读取文件的任何信息。类似的,如果复制了一个文件,就相当于创建了一个新的inode,如果监听的是一个目录,就会读取该文件的所有信息。  
 5、关于扫描和检测的时间  
 按照默认的来就好了,如果频繁创建新的文件,想要快速监听,那么可以考虑缩短检测的时间。  
 6、add\_field  
 就是增加一个字段,例如:  
 7、tags  
 用于增加一些标签,这个标签可能在后续的处理中起到标志的作用


ogstash官方文档:  
 <https://www.elastic.co/guide/en/logstash/current/plugins-inputs-file.html#plugins-inputs-file-sincedb_path>


#### 数据过滤filter


Fillters 在Logstash处理链中担任中间处理组件。他们经常被组合起来实现一些特定的行为来,处理匹配特定规则的事件流。常见的filters如下:


* grok:解析无规则的文字并转化为有结构的格式。Grok 是目前最好的方式来将无结构的数据转换为有结构可查询的数据。有120多种匹配规则,会有一种满足你的需要。
* mutate:mutate filter 允许改变输入的文档,你可以从命名,删除,移动或者修改字段在处理事件的过程中。
* drop:丢弃一部分events不进行处理,例如:debug events。
* clone:拷贝 event,这个过程中也可以添加或移除字段。
* geoip:添加地理信息(为前台kibana图形化展示使用)


它的主要作用就是把数据解析成规则的json键值对格式便于输出到其他组件中使用。  
 logstash自带的文件正则支持grok,date,geoip



filter {

#定义数据的格式
grok {
match => { “message” => “%{DATA:timestamp}|%{IP:serverIp}|%{IP:clientIp}|%{DATA:logSource}|%{DATA:userId}|%{DATA:reqUrl}|%{DATA:reqUri}|%{DATA:refer}|%{DATA:device}|%{DATA:textDuring}|%{DATA:duringTime:int}||”}
}

#定义时间戳的格式
date {
match => [ “timestamp”, “yyyy-MM-dd-HH:mm:ss” ]
locale => “cn”
}

#定义客户端的IP是哪个字段(上面定义的数据格式)
geoip {
source => “clientIp”
}
}



#需要进行转换的字段,这里是将访问的时间转成int,再传给Elasticsearch
mutate {
convert => [“duringTime”, “integer”]
}


#### 输出配置output


outputs是logstash处理管道的最末端组件。一个event可以在处理过程中经过多重输出,但是一旦所有的outputs都执行结束,这个event也就完成生命周期。一些常用的outputs包括:


* elasticsearch:如果你计划将高效的保存数据,并且能够方便和简单的进行查询.
* file:将event数据保存到文件中。
* graphite:将event数据发送到图形化组件中,一个很流行的开源存储图形化展示的组件。[http://graphite.wikidot.com/。]( )
* statsd:statsd是一个统计服务,比如技术和时间统计,通过udp通讯,聚合一个或者多个后台服务,如果你已经开始使用statsd,该选项对你应该很有用。

 默认情况下将过滤扣的数据输出到elasticsearch,当我们不需要输出到ES时需要特别声明输出的方式是哪一种,同时支持配置多个输出源



output {
#将输出保存到elasticsearch,如果没有匹配到时间就不保存,因为日志里的网址参数有些带有换行
if [timestamp] =~ /^\d{4}-\d{2}-\d{2}/ {
elasticsearch { host => localhost }
}

#输出到stdout

stdout { codec => rubydebug }

#定义访问数据的用户名和密码

user => webService

password => 1q2w3e4r

}


#### Codecs


codecs 是基于数据流的过滤器,它可以作为input,output的一部分配置。Codecs可以帮助你轻松的分割发送过来已经被序列化的数据。流行的codecs包括 json,msgpack,plain(text)。


* json:使用json格式对数据进行编码/解码
* multiline:将汇多个事件中数据汇总为一个单一的行。比如:java异常信息和堆栈信息  
 获取完整的配置信息,请参考 Logstash文档中 "plugin configuration"部分。


### 调试模式


日志解析时需要不停的对数据进行格式调试,因此这里直接配置成调试模式下使用,其实就是控制台输入模式。


logstash-7.3.0\config\logstash.conf



input {
stdin { }

file { #文件配置方式

path => “/opt/logstash/1.log”

start_position => “beginning”

}

}

filter { # 配置过滤器
grok {
patterns_dir => “D:\mnt\work_space\ELK\logstash-7.3.0\config\patterns”
match => {
“message” =>“%{IPORHOST:remote_addr} - - [%{HTTPDATE:log_timestamp}] %{HOSTNAME:http_host} %{WORD:request_method} “%{URIPATH1:uri}” “%{URIPARM1:param}” %{BASE10NUM:http_status} %{BASE10NUM:body_bytes_sent} “(?:%{URI1:http_referrer}|-)” (%{BASE10NUM:upstream_status}|-) (?:%{HOSTPORT:upstream_addr}|-) (%{BASE16FLOAT:upstream_response_time}|-) (%{BASE16FLOAT:request_time}|-) (?:%{QUOTEDSTRING:user_agent}|-) “(%{WORD:x_forword_for}|-)””
}

}

date {  
	match => [ "log_timestamp", "yyyy-MM-dd-HH:mm:ss" ]
	locale => "cn"
} 

}

output {
stdout {
codec => rubydebug # 将日志输出到当前的终端上显示
}
}


message是根据下面的日志数据格式进行的解析,它会自动解析成k-v键值对形式在控制台打印出来,这也是后面数据导入到es或者其他持久化文件中的格式,便于其他地方直接使用。


**启动logstash**



D:\mnt\work_space\ELK\logstash-7.3.0\bin

.\logstash -f D:\mnt\work_space\ELK\logstash-7.3.0\config\logstash.conf --config.reload.automatic


配置文件更新时,logstash会自动重启模式


### nginx日志数据格式实操


需要解析的日志格式ngxin的access.log日志格式配置如下



log_format main ‘$remote_addr - r e m o t e u s e r [ remote_user [ remoteuser[time_local] $http_host r e q u e s t m e t h o d " request_method " requestmethod"uri" “KaTeX parse error: Double superscript at position 35: … '̲status b o d y b y t e s s e n t " body_bytes_sent " bodybytessent"http_referer” $upstream_status $upstream_addr $request_time KaTeX parse error: Double superscript at position 44: … '̲"http_user_agent" “$http_x_forwarded_for”’ ;
access_log logs/access.log main;

192.168.0.200 - - [12/Aug/2019:01:11:51 +0800] 192.168.0.200 GET “/index.html” “name=bamboo” 200 612 “-” - - 0.000 - “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36” “-”


为了方便,我们这里直接把上面这条数据作为测数据,在控制台贴入回车,即可所见所得。


测试,启动后把上面的测试数据贴入测试环境中,可以看到打印出如下数据,



{
“host” => “DESKTOP-VLO4B8K”,
“param” => “name=bamboo”,
“message” => “192.168.0.200 - - [12/Aug/2019:01:11:51 +0800] 192.168.0.200 GET “/index.html” “name=bamboo” 200 612 “-” - - 0.000 - “Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36” “-”\r”,
“request_method” => “GET”,
“uri” => “/index.html”,
“http_status” => “200”,
“body_bytes_sent” => “612”,
“tags” => [
[0] “_dateparsefailure”
],
“log_timestamp” => “12/Aug/2019:01:11:51 +0800”,
“remote_addr” => “192.168.0.200”,
“@version” => “1”,
“http_host” => “192.168.0.200”,
“@timestamp” => 2019-08-11T17:12:25.607Z,
“upstream_response_time” => “0.000”,
“user_agent” => "“Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/76.0.3809.100 Safari/537.36"”
}


@version,@timestamp,host,message是logstash本身就需要的基本数据,其他数据则是我们在message解析后得到的键值对数据。


### 字符串正则和自定义grok正则表达式


logstash的配置文件  
 创建自定义正则目录



# mkdir -p /usr/local/logstash/patterns
# vi /usr/local/logstash/patterns/nginx

然后写入上面自定义的正则



URIPARM1 [A-Za-z0-9KaTeX parse error: Expected 'EOF', got '#' at position 14: .+!*'|(){},~@#̲%&/=:;_?\-\[\]]….+!'(){},~:;=@#%&_- ])+
URI1 (%{URIPROTO}😕/)?(?:%{USER}(?::[^@]*)?@)?(?:%{URIHOST})?(?:%{URIPATHPARAM})?
NGINXACCESS %{IPORHOST:remote_addr} - (%{USERNAME:user}|-) [%{HTTPDATE:log_timestamp}] %{HOSTNAME:http_host} %{WORD:request_method} “%{URIPATH1:uri}” “%{URIPARM1:param}” %{BASE10NUM:http_status} (?:%{BASE10NUM:body_bytes_sent}|-) “(?:%{URI1:http_referrer}|-)” (%{BASE10NUM:upstream_status}|-) (?:%{HOSTPORT:upstream_addr}|-) (%{BASE16FLOAT:upstream_response_time}|-) (%{BASE16FLOAT:request_time}|-) (?:%{QUOTEDSTRING:user_agent}|-) “(%{IPV4:client_ip}|-)” “(%{WORD:x_forword_for}|-)”


使用方式



grok {
patterns_dir => “/usr/local/logstash/patterns” //设置自定义正则路径
match => {
“message” => “%{NGINXACCESS}”
}
}


### 其他格式日志解析样例


常见的日志样例,便于参考解析



内容: - 2015-04-29 13:04:23,733 [main] INFO (api.batch.ThreadPoolWorker) Command-line options for this run:
正则:- %{TIMESTAMP_ISO8601:time} [%{WORD:main}] %{LOGLEVEL:loglevel} (%{JAVACLASS:class}) %{GREEDYDATA:mydata}

img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

mIumyAn-1715807482449)]
[外链图片转存中…(img-zeyEBCgx-1715807482450)]
[外链图片转存中…(img-zCHtcA8U-1715807482450)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上软件测试知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

需要这份系统化的资料的朋友,可以戳这里获取

  • 18
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值