Logstash的输入插件

发表时间:2017-09-25 15:21:36 浏览量( 23 ) 留言数( 0 )

学习目标:

1、Logstash输入插件的语法

2、了解Logstach的标准输入和文件输入


学习过程:

logstash的输入可以是标准输入、文件、TCP或者reids等等都可以的。我们主要学习比较常用的标准输入和文件输入,标准输入一般可以用来测试用的,而文件输入就更常用了。因为我们平时收集的日志其实就是文件了。

一、标准输入

我们再上一节课的test.conf的基础上面进行修改。可以拷贝一份

[root@newrun1 etc]# cp test.conf testinput.conf

[root@newrun1 etc]# vim testinput.conf 

修改内容如下:

input {

    stdin {

        add_field => {"key" => "value"}

        codec => "plain"

        tags => ["add"]

        type => "std"

    }

}

output

{

     stdout {}

}

保存退出

启动

[root@newrun1 logstash]# ./bin/logstash -f etc/testinput.conf 

稍等一会,然后再屏幕上面输入,顺便输入点东西,比如我输入liu bao

liu bao

{

    "@timestamp" => 2017-10-13T07:09:52.175Z,

      "@version" => "1",

          "host" => "newrun1.com",

       "message" => "liu bao",

          "type" => "std",

           "key" => "value",

          "tags" => [

        [0] "add"

    ]

}

我们可以看看输入和输出的内容。

@timestamp,用来标记事件的发生时间

host 标记事件发生在哪里。

message 就是信息的内容

type 标记事件的唯一类型。

tags 标记事件的某方面属性。这是一个数组,一个事件可以有多个标签。


type 和 tags 是 logstash 事件中两个特殊的字段。通常来说我们会在输入区段中通过 type 来标记事件类型 —— 我们肯定是提前能知道这个事件属于什么类型的。而 tags 则是在数据处理过程中,由具体的插件来添加或者删除的。

最常见的用法是像下面这样:

input {

    stdin {

        type => "web"

    }

}

filter {

    if [type] == "web" {

        grok {

            match => ["message", %{COMBINEDAPACHELOG}]

        }

    }

}

output {

    if "_grokparsefailure" in [tags] {

        nagios_nsca {

            nagios_status => "1"

        }

    } else {

        elasticsearch {

        }

    }

}


二、文件输入

    Logstash 使用一个名叫 FileWatch 的 Ruby Gem 库来监听文件变化。这个库支持 glob 展开文件路径,而且会记录一个叫 .sincedb 的数据库文件来跟踪被监听的日志文件的当前读取位置。所以,不要担心 logstash 会漏过你的数据。

1、先说file吧

基本格式

input {

    file {

        codec =>...                              #可选项, codec,默认是plain,可通过这个参数设置编码方式

        discover_interval =>...          #可选项,number,logstash 每隔多久去检查一次被监听的 path 下是否有新文件。默认值是 15 秒。

        exclude =>...                           #可选项,array,不想被监听的文件可以排除出去,这里跟 path 一样支持 glob 展开。

        sincedb_path =>...                 #可选项,string,如果你不想用默认的 $HOME/.sincedb(Windows 平台上在C:\Windows\System32\config\systemprofile\.sincedb),可以通过这个配置定义 sincedb 文件到其他位置。

        sincedb_write_interval =>...              #可选项, number,logstash 每隔多久写一次 sincedb 文件,默认是 15 秒。

        stat_interval =>...                                #可选项, number, logstash 每隔多久检查一次被监听文件状态(是否有更新),默认是 1 秒。

        start_position =>...               #可选项, string , logstash 从什么位置开始读取文件数据,默认是结束位置,也就是说 logstash 进程会以类似 tail -F 的形式运行。如果你是要导入原有数据,把这个设定改成 “beginning”,logstash 进程就从头开始读取,有点类似cat,但是读到最后一行不会终止,而是继续变成 tail –F;默认值end

        path =>...            # 必选项, array ,定需处理的文件路径, 可以定义多个路径

        tags =>...            # 可选项, array,在数据处理过程中,由具体的插件来添加或者删除的标记

        type =>...            # 可选项, string,自定义将要处理事件类型,可以自己随便定义,比如处理的是linux的系统日志,可以定义为"syslog"

        }

}


上面的配置比较复杂,其实出来基本的path、type、start_position ,有一些比较有用的配置项,可以用来指定 FileWatch 库的行为:

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。



实例:比如现在要监听Elash的日志。新建一个文件,并放在logstach的bin目录下面

input {

    file {

        path => ["/opt/elasticsearch1.7.1/logs/elasticsearch.log"]

        type => “eslog"

        start_position => "beginning"

    }

}

output {

    stdout{ }

}

例子, 可读取多个日志,可使用 * 通配符 :

input {

    file {

        path=>["/var/log/messages","/var/log/syslog","/var/log/*.log"]

        type => "system"

        start_position => "beginning"

    }

}

output {

    stdout{ }

}

例子, 也可定义多个file :

input {

    file {

        path => ["/opt/elasticsearch1.7.1/logs/elasticsearch.log"]

        type => “eslog"

        start_position => "beginning"

    }

    file {

        path=>"/var/log/apache2/access.log"

        type=>"apache-access"

        start_position => "beginning"

    }

}


动手实战一下吧:

新建一个配置文件,内容如下:

[root@newrun1 logstash]# vim etc/testfileinput.conf 

input {

  file {

        path => ["/opt/test.log"]

        type => "testlog"

    }

}

output

{

     stdout {

         codec=>rubydebug

     }

}

启动

[root@newrun1 logstash]# ./bin/logstash -f etc/testfileinput.conf 

上面会监听/opt/test.log这个日志

再打开一个linux的客户端,我们可以往这里面添加内容尝试一下:

[root@newrun1 opt]# echo "hello" >> test.log

再看看控制台是否有输出:

{

      "@version" => "1",

          "host" => "newrun1.com",

          "path" => "/opt/test.log",

    "@timestamp" => 2017-10-13T07:28:25.994Z,

       "message" => "hello",

          "type" => "testlog"

}