标签:NPU 标准输出 res protobuf inf 解压 string 读取 展开
Logstash是一个日志收集器,可以理解为一个管道,或者中间件。
功能是从定义的输入源inputs读取信息,经过filters过滤器处理,输入到定义好的outputs输出源。
输入源可以是stdin、日志文件、数据库等,输出源可以是stdout、elesticsearch、HDFS等。
另外,Logstash不只是一个input | filter | output 的数据流,而是一个 input | decode | filter | encode | output 的数据流!有一个codec插件就是用来 decode、encode 事件的,可以解析我们经常用的json格式,非常的强大,接下来给大家演示一下Logstash的使用,一学就会。
直接下载安装即可,查看下载地址,下载后解压如下
启动
bin/logstash -f logstash.conf
./bin/logstash -e 'input { stdin { } } output { stdout {} }'
-e 代表可以从命令行读取配置,input { stdin { } } output { stdout {} }‘
代表从标准stdin读取,从stdout输出,我们输入
chenqionghe
no pain, no gain.
显示如下,logstash把时间等一些信息打印出来了
logstash会给事件添加一些额外的信息,最重要的就是 @timestamp
,用来标记事件的发生时间。
此外,大多数时候,还可以见到host(地址)、type (类型)、tags (事件的某方面属性)。
chenqionghe.yml
input {
stdin { }
}
output {
stdout { }
}
运行
./bin/logstash -f chenqionghe.yml
更多配置查看 :configuration
用来指定数据来源,可以是标准输入、文件、TCP数据、Syslog、Redis等
input {
file {
path => ["/Users/chenqionghe/web/log/nginx-access.log","/Users/chenqionghe/web/log/nginx-error.log"]
type => "nginx"
}
}
output {
stdout { codec => rubydebug }
}
output指定了一个rubydebug,简单的理解就是一个调试输出的插件,后面会对output进行说明
结果运行,可以看到收集到了nignx日志
常用配置项
* discover_interval
logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。
* exclude
不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。
* sincedb_path
如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。
* sincedb_write_interval
logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。
* stat_interval
logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
* start_position
logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,有点类似 cat,但是读到最后一行不会终止,而是继续变成 tail -F。
input {
generator {
count => 100
message => '{"name":"chenqionghe","hello":["light","weight","baby"]}'
codec => json
}
}
output {
stdout {}
}
运行如下
更多input查看:input-plugins
事实上,我们在上面已经用过 codec 了 ,rubydebug 就是一种 codec,虽然它一般只会用在 stdout 插件中,作为配置测试或者调试的工具。
codec 使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如 graphite、fluent、netflow、collectd,以及使用 msgpack、json、edn 等通用数据格式的其他产品等。
log_format json '{"@timestamp":"$time_iso8601",'
'"@version":"1",'
'"host":"$server_addr",'
'"client":"$remote_addr",'
'"size":$body_bytes_sent,'
'"responsetime":$request_time,'
'"domain":"$host",'
'"url":"$uri",'
'"status":"$status"}';
access_log /Users/chenqionghe/web/log/nginx-access.log json;
在logstash中配置
input {
file {
path => "/Users/chenqionghe/web/log/nginx-access.log"
codec => "json"
}
}
output {
stdout { codec => rubydebug }
}
启动请求如下
input {
stdin {
codec => multiline {
pattern => "^\["
negate => true
what => "previous"
}
}
}
输入
[2020-03-18 14:54:03] hello chenqionghe
[2020-03-18 14:54:03]hello gym
light weight baby
let's do it !
[2020-03-18 14:54:03] finished
效果如下
另外,codec还可以编解码protobuf、fluent、nmap等,可以参考:codec-plugins
logstash 威力强大的最重要的就是因为有丰富的过滤器插件。
input {stdin{}}
filter {
grok {
match => {
"message" => "\s+(?<request_time>\d+(?:\.\d+)?)\s+"
}
}
}
output {stdout{}}
启动后输入
hello 123.123 world
可以,看到配置到了我们自定义的变量request_time
input {stdin{}}
filter{
date{
match => ["message","yyyyMMdd"]
}
}
output {stdout{}}
如下
filter {
mutate {
convert => ["request_time", "float"]
}
}
input {stdin{}}
filter {
mutate {
split => ["message", "|"]
}
mutate {
join => ["message", ","]
}
}
output {stdout{}}
先用|分割成数组,再通过,合成字符串
input {stdin{}}
filter {
split {
field => "message"
terminator => "#"
}
}
output {stdout{}}
另外,还有JSON编解码、USerAgent匹配归类、Key-Value切分、自定义Ruby处理等插件,更多可以查看:filter-plugins
output {
stdout {
codec => rubydebug
}
}
代表输出到stdout,使用rubydebug格式化
input {stdin{}}
output {
file {
path => "/Users/chenqionghe/web/log/test.log"
}
}
可以看到,已经写入test.log文件
output {
elasticsearch {
host => "127.0.0.1"
protocol => "http"
index => "logstash-%{type}-%{+YYYY.MM.dd}"
index_type => "%{type}"
workers => 5
template_overwrite => true
}
}
启动后,请求nginx后日志如下
可以看到已经打印出来了,我们去使用kibana控制台查询es,可以看到索引和数据都已经有了
另外,output还可以设置输出到Redis、发送邮件、执行命令等,更多可以查看output-plugins
简单地说,logstash最主要的功能是从input获取数据,通过filter处理,再输出到指定的地方。
一般我们收集日志都是在后台运行,建议使用nohup、screen或者supervisor这样的方式启动。
是不是觉得logstash超简单,意不意外,开不开心,yeah buddy! light weight baby!
标签:NPU 标准输出 res protobuf inf 解压 string 读取 展开
原文地址:https://www.cnblogs.com/chenqionghe/p/12521113.html