前面两节已经介绍了Logstash以及常见的配置语法,这一节介绍一下input、output的配置,然后做个file输入输出的demo。这里我介绍的都是比较常见的插件,其他插件用法类似。
1、input配置
1)读取文件(file)
Logstash 使用一个名叫 FileWatch 路径,而且会记录一个 叫 .sincedb 漏过你的数据。sincedb 文件中记录了每个被监听的文件的 inode, major number, minor number 和 pos。
配置示例:
1. input {
2. file {
3. "/var/log/*.log", "/var/log/message"] ## 读取文件的路径,可以一次读取多个文件,也可以写多个file读取多个文件
4. "blog_test" ## 添加type字段
5. "beginning" ## 读取文件记录的开始位置
6. }
7. }
其他一些比较有用的配置项:
1. ## logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。
2. discover_interval
3.
4. ## 不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。
5. exclude
6.
7. ## 一个已经监听中的文件,如果超过这个值的时间内没有更新内容,就关闭监听它的文件句柄。默认是 3600 秒,即一小时。
8. close_older
9.
10. ## 在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽略这个文件。默认是 86400 秒,即一天。
11. ignore_older
12.
13. ## 如果你不想用默认的 $HOME/.sincedb(Windows 平台上在 C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置
14. sincedb_path
15.
16. ## logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。
17. sincedb_write_interval
18.
19. ## logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。
20. stat_interval
21.
22. ## logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 "beginning",logstash 进程就从头开始读取,类似 less +F 的形式运行。
23. start_position
2) 读取redius
还记得上一节的流程图吗,logstash可以通过redis来扩展,简单说说,就是可以将一个Logstash的输出通过redis作为消息 队列,作为另一个Logstash的输入。
配置示例:
1. input {
2. redis {
3. "192.168.1.1" ## 从哪个主机读取redis数据
4. "6380" ## 相应的端口,默认为6379,我习惯用6380
5. "json" ## 读取的数据格式
6. "list" ## 读取的数据类型
7. "logstash:redis" ## 相应监听的keys
8. "123qwe" #如果有安全认证,此项为密码
9. #redis数据库的编号
10. #启用线程数量
11. }
12. }
3)从终端输入 —— 一般用来测试
1. input {
2. stdin {
3. "field_key" => "field_value"} ## 添加若干字段
4. "plain" ## 输出格式
5. "add"] ## 添加tags
6. "std" ## 添加类型字段
7. }
8. }
2、output配置
1)输出到Elasticsearch
ElasticSearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。一般通过logstash将日志格式化后,
输出到elasticSearch保存
配置示例:
1. elasticsearch {
2. "index" ## 建立索引的动作,似乎可以省略
3. "192.168.1.1:9200" ## elasticSearch所在的主机地址,默认端口一般为9200
4. "husen_test" ## 索引的名称
5. "json" ## 输出的codec格式,codec插件在后面会提到
6. }
2)保存到文件
将logstash解析后的JSON格式的日志保存到文件里
1. output {
2. file {
3. "/home/husen/result.log.gz" ## 保存文件的路径
4. "%{message}" ## 可选项 保存的格式,默认输出所有字段,此处只输出message字段的内容
5. true ## 可选项 是否压缩
6. }
7. }
3)输出到终端 —— 一般用来测试
1. output {
2. stdout {
3. ## 输出格式,此处为调试格式,即JSON
4. ##线程数,默认为系统核数
5. }
6. }
3、stdin->(file 和 stdout) demo演示
演示环境:centos7 + logstash 5.5.1
配置文件如下:
1. input {
2. # 从终端输入
3. stdin{}
4. }
5.
6. output{
7. # JSON格式输出到终端
8. stdout{
9. codec => rubydebug
10. }
11.
12. # 保存到文件
13. file{
14. "/home/husen/logstash_result/test_result.log"]
15. }
16. }
步骤:
a. 打开终端,进入 /home/husen目录下,将事先写好的配置文件上传到该目录
b. 输入以下命令运行
1. ./logstash-5.5.1/bin/logstash -f in_out_test.conf
c. 运行成功之后,直接输入 hello world 并回车,终端上以JSON格式输出解析后的内容
d. crtl+c 退出,进入到配置文件里的保存日志日志的目录,查看结果
1. ls
2. cd logstash_result/
3. ls
4. cat test_result.log
5.
6. ## 结果为,第一次把hello world 输错了,又重输了1次,所以有两行记录.....
7. {"@timestamp":"2017-09-13T03:25:20.937Z","@version":"1","host":"localhost.localdomain","message":"hello wprld"}
8. {"@timestamp":"2017-09-13T03:25:31.417Z","@version":"1","host":"localhost.localdomain","message":"hello world"}