Logstash语法常用案例解析(一)

发布时间:2024-10-05 点击:59
建站服务器
摘要
简述logstash的常用插件,以及简单的使用案例
一:基础运行
建议使用supervisor来管理elk中的各个组件,方便同一管理
安装 https://www.aolens.cn/?p=809 有讲解
提供一个常用的配置:
[program:logstash]command=/opt/logstash/bin/logstash-f/opt/logstash/conf/index.confnumprocs=1;开几个进程dirrectory=/opt/logstashuser=root;用户stdout_logfile=/opt/logstash/logs/logstash.logstdout_logfile_maxbytes=1mb;每个日志大小stdout_logfile_backups=10;保留10个日志文件stderr_logfile=/opt/logstash/logs/logstash_err.logstderr_logfile_maxbytes=1mbstderr_logfile_backups=10运行参数:
启动logstash服务(常用supervisor守护进程)
./bin/logstash-f/etc/logstash/conf.d/* -t #检查配置文件是否ok
./bin/logstash -f conf.d/nginx.conf -w 5 -l /var/log/logstash/
二:配置语法
1,区域:(section)
logstash用{}来定义区域。可以在区域中定义多个插件区域,插件区域内可以定义键值对
eg:
input{#输入数据file{path=[/var/log/messages,/var/log/*.log]type=systemstart_position=beginning}}filter{#数据过滤处理if[type]==system{grok{match=[message,%{combinedapachelog}]}}}output{#数据处理输出stdout{codec=rubydebug}}2,数据类型:
string——普通字符串
name=>helloworld
name=>\\\’it\\\\\\\’sabeautifulday\\\’
array——数组可以是单个或者多个字符串值。
path=>[/var/log/messages,/var/log/*.log]
path=>/data/mysql/mysql.log
hash——键值对,注意多个键值对用空格分隔,而不是逗号。
match=>{
field1=>value1
field2=>value2
…}
codec——用来表示数据编码。用于input和output段。便于数据的处理。
codec=>json
number——必须是有效的数值,浮点数或者整数。
port=>33
boolean——布尔值必须是true或者false。
ssl_enable=>true
bytes——指定字节单位。默认是byte。
my_bytes=>1113#1113bytes
my_bytes=>10mib#10485760bytes
my_bytes=>100kib#102400bytesbinary(ki,mi,gi,ti,pi,ei,zi,yi)单位1024
my_bytes=>180mb#180000000bytessi(k,m,g,t,p,e,z,y)单位基于1000
password——一个单独的字符串。
my_password=>password
path——代表有效的操作系统路径。
my_path=>/tmp/logstash
3:字段引用
logstash配置中要使用字段的值,只需要把字段的名字写在中括号[]里。只要是input输入的值,都可以引用
eg:
[geoip][location][-1]
4,条件判断
表达式支持的操作符
==(等于),!=(不等),<(小于),>(大于),<=(小等),>=(大等)
=~(匹配正则),!~(不匹配正则)
in(包含),not in(不包含)
and(与),or(或),nand(与非),xor(非或)
()(复合表达式),!()(取反复合表达式结果)
三:常用插件
1,插件管理
./bin/plugin -h
install
uninstall
update
list
eg:
bin/plugininstalllogstash-output-webhdfs
bin/pluginupdatelogstash-input-tcp
2,常用插件 input,output,filter,codec
2.1 input插件
stdin:标准输入,常用于测试,
input{stdin{type=stringtags=[add]codec=plain}}file:从文件系统中读取文件,类似linux下的tail -f。 最常用
input{file{path=[/var/log/*.log,/var/log/message]#logstash只支持文件的绝对路径type=system#type记录文件类型,定义的变量为全局变量,其他插件都可以调用start_position=beginning}}redis:从redis服务器读取,同时使用redis channel和redis list。
input{redis{data_type=listkey=logstash-nginxhost=192.168.1.250port=6379db=1threads=5}}将源数据写入redisoutput{redis{host=192.168.1.250port=6379db=1data_type=listkey=logstash-nginx}}tcp/udp: 输入
#nc127.0.0.18888/var/log/nginx/access.json#可以是json文件直接传值#echo\\\'{name:liuziping,age:18}\\\'|nc127.0.0.18888input{tcp{port=8888#定义tcp监听端口codec=json#规定传入的数据为json格式,k/v结构方便分析mode=server}}
syslog:监听在514端口的系统日志信息,并解析成rfc3164格式。
input{syslog{port=514}}
beats: 通过filebeat发送事件。
2.2:output 插件
stdout:标准输出
output{stdout{codec=rubydebugworkers=2}}file :保存成文件
output{file{path=/path/to/%{ yyyy/mm/dd/hh}/%{host}.log.gzmessage_format=%{message}gzip=true}}elasticsearch:保存进elasticsearch ,也是最为重要的
output{elasticsearch{hosts=>[192.168.0.2:9200]#或者cluster=>“clustername“index=>logstash-%{type}-%{ yyyy.mm.dd}#索引名,统一格式,方便kibana导入,会讲统一类型的日志,全部导入这里的type=input中的type值document_type=>nginxworkers=>1#启动一个进程flush_size=>20000#攒够20000条数据一次性发给es,默认500条idle_flush_time=>10#如果10s内没攒够20000条也发一次给es,默认1stemplate_overwrite=>true}}redis:保存到redis中在input插件中已讲解
tcp:输出tcp
output{tcp{host=192.168.0.2port=8888codec=json_lines}}email:发送邮件
exec:调用命令执行

请协助开通或给开通教程-虚拟主机/数据库问题
云和服务器的区别文档介绍内容
腾讯云买的服务器需要备案吗
公司员工统一邮箱怎么申请
游戏服务器CDN加速配置,游戏网站如何配置CDN加速包?
上海买阿里云华东地区服务器
域名名称可以随便取吗?域名可以用自己的名字吗?
域名解析不生效!-域名及账户问题