Logstash的启动方式
- 第一种:logstah绝对路径/bin/logstash -e ‘input { stdin { } } output { stdout { } }’
- 第二种:logstah绝对路径/bin/logstash -f 配置文件
Logstash的语法格式
- 标准结构:
input {
stdin {}
}
output {
stdout {}
}
- 设置输出格式:
input {
stdin {}
}
output {
#输出格式常用的有json、rubydebug、plain...
stdout { codec => "json"}
}
- Logstash连接Elasticsearch:
input {
stdin {}
}
output {
stdout {}
elasticsearch { hosts => ["IP地址:9200"] }
}
- 从文件中获得事件流
input {
file {
path =>"/var/log/message" #必须有(最好是绝对路径)
# path =>["/var/log/messages","/var/log/messages-2019*"] #多文件格式
start_position =>"beginning"
sincedb_path => "/dev/null"
codec => "json" #应用编码器
}
}
output {
stdout {}
}
- grok:使用正则表达式解析任意文本和结构
input {
stdin {}
}
#过滤器
filter{
grok{
# %{类型属性:字段名}
match => { "message" => "%{NUMBER:duration} %{IP:client}"} #注意保留空格
}
}
output {
stdout { codec => "rubydebug" }
}
- grok自定义模式
input {
stdin {}
}
filter{
grok{
#标准格式
#(?<date>\d*[./-]\d*[./-]\d* \d*:\d*:\d*) %{NUMBER:duration} %{IP:client}
#匹配138开头后面跟8位长度的手机的号,字段名为Tallphone
match => {"message" => "(?<Tallphone>138\d{8})"}
}
}
output {
stdout { codec => "rubydebug"}
}
- 输出插件
input {
stdin {}
}
#output可以同时使用多个输出插件
output {
stdout{codec=>rubydebug}
file {
# file默认以JSON格式输出每行
#设置输出路径
path =>"/tmp/message.out"
}
}
- 条件判断
input{
stdin{}
}
filter{
grok{
match=>{"message"=>"%{NUMBER:duration} %{IP:client}"}
}
mutate{convert=>["duration","integer"]}
}
output{
#判断字段duration<100,则以rubydebug格式输至出控制台
if [duration]<100{
stdout{codec=>rubydebug}
}
}
测试:匹配日志信息
- 测试数据:
[2019-03-18T16:16:59,362][INFO ][logstash.modules.scaffold] Initializing module
[2019-03-18T16:17:00,114][WARN ][logstash.config.source.multilocal] Ignoring - 实现代码:
input{
file{
#创建test.json文件放入日志数据
path => "/opt/logstash/tmp/test.json"
start_position => "beginning"
sincedb_path => "/dev/null"
codec => "json"
}
}
filter{
grok{
#通过\[和\]来匹配对应数据
match => {"message" => "\[%{DATA:date}\]\[%{DATA:level}\]\[%{DATA:proc}\] %{DATA:msg}"}
}
}
output{
#当level匹配到WARN时将信息显示到控制台
if [level]=="WARN "{
stdout{codec => "rubydebug"}
}
}