Logstash语法常用案例解析(一)
建站服務器
摘要
簡述logstash的常用插件,以及簡單的使用案例
一:基礎運行
建議使用supervisor來管理ELK中的各個組件,方便同一管理
安裝 https://www.aolens.cn/?p=809 有講解
提供一個常用的配置:
[program:logstash] command=/opt/logstash/bin/logstash-f/opt/logstash/conf/index.conf numprocs=1;開幾個進程 dirrectory=/opt/logstash user=root;用戶 stdout_logfile=/opt/logstash/logs/logstash.log stdout_logfile_maxbytes=1MB;每個日志大小 stdout_logfile_backups=10;保留10個日志文件 stderr_logfile=/opt/logstash/logs/logstash_err.log stderr_logfile_maxbytes=1MB stderr_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=system
start_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=string
tags=[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=list
key=logstash-nginx
host=192.168.1.250
port=6379
db=1
threads=5
}}將源數據寫入redis
output{
redis{
host=192.168.1.250
port=6379
db=1
data_type=list
key=logstash-nginx
}}
TCP/UDP: 輸入
#nc127.0.0.18888/var/log/nginx/access.json#可以是json文件直接傳值
#echo\'{name:liuziping,age:18}\'|nc127.0.0.18888
input{
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=rubydebug
workers=2
}
}
file :保存成文件
output{
file{
path=/path/to/%{+yyyy/MM/dd/HH}/%{host}.log.gz
message_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=>nginx
workers=>1#啟動一個進程
flush_size=>20000#攢夠20000條數據一次性發給ES,默認500條
idle_flush_time=>10#如果10s內沒攢夠20000條也發一次給ES,默認1s
template_overwrite=>true
}
}
redis:保存到redis中在input插件中已講解
TCP:輸出TCP
output{
tcp{
host=192.168.0.2
port=8888
codec=json_lines
}
}
Email:發送郵件
exec:調用命令執行
總結
以上是生活随笔為你收集整理的Logstash语法常用案例解析(一)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: hyper-v简介及安装使用(图文详解)
- 下一篇: 视频如何去掉抖音号的水印