您的位置:首页 > 其它

如何使用Logstash

2020-03-19 07:13 337 查看
[toc] # 一、什么是Logstash Logstash是一个日志收集器,可以理解为一个管道,或者中间件。 功能是从定义的输入源inputs读取信息,经过filters过滤器处理,输入到定义好的outputs输出源。 输入源可以是stdin、日志文件、数据库等,输出源可以是stdout、elesticsearch、HDFS等。 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225735684-152581427.png) 另外,Logstash不只是一个input | filter | output 的数据流,而是一个 input | decode | filter | encode | output 的数据流!有一个codec插件就是用来 decode、encode 事件的,可以解析我们经常用的json格式,非常的强大,接下来给大家演示一下Logstash的使用,一学就会。 # 二、如何安装 最简单方式是直接[下载](https://www.elastic.co/cn/downloads/logstash)安装,另外也可以通过[docker安装](https://www.elastic.co/guide/en/logstash/current/docker.html), 我是直接下载的zip包,解压后如下 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225740925-1116536827.png) # 三、快速使用 * 直接启动 ``` ./bin/logstash -e 'input { stdin { } } output { stdout {} }' ``` ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225748989-2019347732.png) -e 代表可以从命令行读取配置,`input { stdin { } } output { stdout {} }'`代表从标准stdin读取,从stdout输出,我们输入 ``` chenqionghe no pain, no gain. ``` 显示如下,logstash把时间等一些信息打印出来了 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225826906-986983807.png) logstash会给事件添加一些额外的信息,最重要的就是 `@timestamp`,用来标记事件的发生时间。此外,大多数时候还可以见到host、type、tags 等属性 * 使用配置启动 例如我们可以将上面的-e定义成一个`chenqionghe.yml` ```yaml input { stdin { } } output { stdout { } } ``` 运行 ``` ./bin/logstash -f chenqionghe.yml ``` 更多配置查看 :[configuration](https://www.elastic.co/guide/en/logstash/current/configuration.html) # 四、Input输入插件 用来指定数据来源,可以是标准输入、文件、TCP数据、Syslog、Redis等 * 读取文件 例如,我要收集nginx的访问文件和错误文件,可以这样写 ``` 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日志 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225912684-1618147731.png) 常用配置项 ``` * 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。 ``` * 生成测试数据 例如可以使用generator来生成测试输入数据,下面的例子相当于循环了100次 ``` input { generator { count => 100 message => '{"name":"chenqionghe","hello":["light","weight","baby"]}' codec => json } } output { stdout {} } ``` 运行如下 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225918321-1953460792.png) 更多input查看:[input-plugins](https://www.elastic.co/guide/en/logstash/current/input-plugins.html) # 五、codec编码插件 事实上,我们在上面已经用过 codec 了 ,rubydebug 就是一种 codec,虽然它一般只会用在 stdout 插件中,作为配置测试或者调试的工具。 codec 使得 logstash 可以更好更方便的与其他有自定义数据格式的运维产品共存,比如 graphite、fluent、netflow、collectd,以及使用 msgpack、json、edn 等通用数据格式的其他产品等。 * JSON编码 直接输入预定义好的 JSON 数据,以nginx的配置为例,添加如下配置,让nginx输出json ``` 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 } } ``` 启动请求如下 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318225958399-473433344.png) * 合并多行数据 multiline 插件可以收集多行数据,用于用于其他类似的堆栈式信息 示例如下 ``` 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 ``` 效果如下 ![](https://img2020.cnblogs.com/blog/662544/202003/662544-20200318230003650-1490515023.png) 另外,codec还可以编解码protobuf、fluent、nmap等,可以参考:[codec-plugins](https://www.elastic.co/guide/en/logstash/current/codec-plugins.html) # 六、filter过滤器插件 logstash 威力强大的最重要的就是因为有丰富的过滤器插件。 * Grok 正则捕获 Grok 是 Logstash 最重要的插件,可以在 grok 里预定义好命名正则表达式,在之后(grok参数或者其他正则表达式里)引用它,示例 ``` input {stdin{}} filter { grok { match => { "message" => "\s+(?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: