Logstash的使用以及语法格式

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"}
}
}

Logstash是一个开源的数据收集引擎,用于实时处理和转发日志和其他事件数据。它使用简单的配置文件来定义数据流的输入、过滤和输出。以下是Logstash的基本语法组成: 1. 输入插件(Input):用于从不同来源收集数据。常见的输入插件包括file(读取文件)、stdin(读取标准输入)、tcp(接收TCP数据)等。 2. 编码插件(Codec):用于解析和编码数据。它可以将数据从一种格式转换为另一种格式,例如将JSON数据解析为结构化数据。常见的编码插件包括json(解析JSON数据)、plain(纯文本编码)等。 3. 过滤器插件(Filter):用于对数据进行处理和转换。它可以根据条件过滤数据、添加字段、修改字段值等。常见的过滤器插件包括grok(通过正则表达式解析日志数据)、mutate(修改字段值)、date(解析日期字段)等。 4. 输出插件(Output):用于将处理后的数据发送到不同的目的地。常见的输出插件包括elasticsearch(发送数据到Elasticsearch)、stdout(输出到标准输出)、file(写入文件)等。 以下是一个示例配置文件,演示了Logstash的基本语法: ```shell input { file { path => "/var/log/nginx/access.log" start_position => "beginning" } } filter { grok { match => { "message" => "%{COMBINEDAPACHELOG}" } } } output { elasticsearch { hosts => ["localhost:9200"] index => "nginx-access-%{+YYYY.MM.dd}" } stdout { codec => rubydebug } } ``` 上述配置文件的含义是:从指定路径的文件中读取日志数据,使用grok插件解析日志数据,然后将处理后的数据发送到Elasticsearch,并在标准输出中打印调试信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值