Logstash之管道文件简介

释放双眼,带上耳机,听听看~!

第一章节我们有讲到Logstash有两种类型的配置文件:
1)管道配置文件:用来定义logstash处理管道的方式,管道配置文件即是来定义input filter output的配置的文件,管道配置文件需要我们去创建,配置里来定义要使用什么输入插件、输出插件及过滤插件等。
2)设置文件:用于控制logstash启动和执行的选项,设置文件即为下面展开的文件。

这个章节开始讲解Logstast的管道文件结构和配置以及标准输入及输出插件的用法

管道文件结构

管道文件分为三个部分,分别为input输入部分、filter过滤部分和output输出部分。

input {
}

filter {
}

output {
}

Logstash管道文件值类型

在input部分output部分以及filter部分中都需要插件来实现指令控制,插件中所支持的命令参数的值类型分为以下几种特定类型:
数组
这种类型现在大多不被推荐为使用标准类型,比如string,并使用定义了:list => true属性的插件来更多的检查类型。在不需要类型检查的情况下,仍然需要它来处理散列列表或混合类型。
例子:

users => [ {id => 1, name => bob}, {id => 2, name => jane} ]

列表
不是类型本身,而是属性类型。这使得键入check多个值成为可能。插件作者可以通过在声明参数时指定:list => true来启用列表检查。
本例配置path,它是一个字符串,包含三个字符串中的每个元素的列表。它还将uri参数配置为uri列表,如果提供的任何uri无效,则会失败。
例子:

path => [ "/var/log/messages", "/var/log/*.log" ]
uris => [ "http://elastic.co", "http://example.net" ]

布尔
布尔必须是true或者false,请注意,truefalse关键字不包含在引号中
例子:

ssl_enable => true

字节
字节字段表示有效字节单位的字符串字段,这是在插件选项中声明特定大小的便捷方式,支持SI(kMGTPEZY)和Binary(Ki Mi Gi Ti Pi Ei Zi Yi)单位。二进制单位基数为1024,SI单位基数为1000。此字段不区分大小写,并接受值和单位之间的空格。如未指定单位,则整数字符串表示字节数。
例子:

my_bytes => "1113"   # 1113 bytes
my_bytes => "10MiB"  # 10485760 bytes
my_bytes => "100kib" # 102400 bytes
my_bytes => "180 mb" # 180000000 bytes

编解码器
编解码器是用来表示数据的Logstash编解码器的名称。编解码器可用于输入和输出。输入编解码器提供了一种方便的方法,可以在数据输入之前对其进行编码。输出编解码器提供了一种方便的方法,可以在数据离开输出之前对其进行编码。使用输入或者输出编解码器,就不需要在Logstash管道中使用单独的过滤器。
例子:

codec => "json"

哈希
哈希是一组键值对的集合,以 "field1" => "value1"格式指定。注意,多个键值条目由空格而不是逗号来分割
例子:

match => {
  "field1" => "value1"
  "field2" => "value2"
  ...
}
# or as a single line. No commas between entries:
match => { "field1" => "value1" "field2" => "value2" }

数字
数字必须是有效的数值,浮点数或者整数
例子:

port => 33

密码
密码是一个没有记录或打印值的字符串
例子:

my_password => "password"

URI
URI可以是来自完整的URL( 如http://elastic.co/ )的任何内容,指向一个简单的标识符,比如foobar。如果URI包含诸如http://user:pass@example.net 之类的密码,则不会记录或打印URI的密码部分。
例子:

my_uri => "http://foo:bar@example.net"

路径
路径是表示有效操作系统路径的字符串
例子:

my_path => "/tmp/logstash"

字符串
字符串必须是单个字符序列。注意,字符串值用双引号或单引号括起来。

转义序列
默认情况下,不启用转义序列。如果你希望在带引号的字符串中使用转义序列,则需要config.support_escapes: true在你的logstash.yml中设置,何时true,引用字符串(double和single)将进行此转换:

文本 结果
\r 回车(ASCII 13)
\n 换行(ASCII 10)
\t 制表符(ASCII 9)
\ 反斜杠(ASCII 92)
" 双引号(ASCII 34)
\' 单引号(ASCII 39)

注释
注释与perl、ruby和python中的注释相同。注释以#字符开始,不需要位于行首。
例如:

# this is a comment

input { # comments can appear at the end of a line, too
  # ...
}

标准输入输出演示

stdin为常用的输入测试插件,是从标准输入来收集数据。
stdout为常用的输出测试插件,输出内容到屏幕上的标准输出。

cat logstash-standard.conf 
input { 
  stdin {                       #input部分的stdin插件
    type => standard            #stdin插件的type命令选项,可选
 }
}

filter {
}

output {
  stdout {                      #output输出部分的stdout插件
    codec => rubydebug          #stdout插件的codec命令选项,rubydebug为调试模式,可选
 }
}

Logstash输入配置通用选项

设置 输入类型 描述
add_field hash 可选
codec codec 可选
enable_metric boolean 可选
id string 可选
tags array 可选
type string 可选

add_field
哈希是一组键值对的集合,以 key => value格式置顶,多个键值条目由空格分隔

  • 值类型是哈希值
  • 默认为{ }
  • 作用:向配置中添加字段

举个栗子:

add_field => { 
    "Key1" => "value1"
    "Key2" => "value2"
    ...
}

或者也可以写成这样
add_field => { "Key1" => "value1" "Key2" => "value2" }

codec
用于输入数据的编解码器。输入编解码器是一种在数据进入输入之前解码数据的便捷方法,无需在Logstash管道中使用单独的过滤器。

  • 值类型是编解码器
  • 默认是为"line"
  • 作用:编解码器可用于输入和输出,输入编解码器提供了一种方法的方法,可以在数据输入之前对其进行解码,输出编解码器可在数据离开输出之前对其进行编码,也就是对数据进行了一次拆封在封装,封装格式为codec所指定的格式,如果在logstash中设置了编解码器,那么就不需要在logstash管道中再单独使用过滤功能了
    举个栗子:
    我们在输出管道配置文件中设置编解码器的格式为json,默认为line,当数据输出的时候,就是已经经过了编解码器拆封再封装的json格式数据。
codec => "json"

enable_metric
默认情况下,我们会记录我们能记录的所有度量,但是你可以禁用特定插件的度量集合

  • 值类型是布尔,布尔型的值只有两个结果,truefalse
  • 默认值为true
    举个例子:
enable_metric => false

id

  • 值类型为字符串
  • 此类型没有默认值
    向插件配置添加唯一ID,如果没有指定ID,Logstash将生产一个ID,强烈建议在配置中设置此ID,当你有两个或者多个相同类型插件时,这尤其有用,例如,如果你有两个stdin输入,在本例中添加一个命名ID将有助于在使用监视API时监视Logstash
    大概意思为:在我们stdin输入中添加一个标识符ID,以防多个stdin混淆
    举个栗子:
    我们ID即是为name字段,添加了一个标示而已
 name =>“Hello world”

tags

  • 值类型为数组
  • 没有默认值
  • 作用:在配置中添加标记,有助于以后的处理
    举个栗子:
users => [ {id => 1, name => bob}, {id => 2, name => jane} ]

type
此类型用的较多,主要是为了根据类型值来进行判断输出指向或者过滤内容

  • 值类型为字符串
  • 没有默认值
  • 作用:type指定一个字符串,同样可用作标示,一般会根据判断type值来进行输出或过滤

每个部分都要使用各种插件来完成我们的需求,我们常用的插件在第一章节中已简单描述
input更多输入插件见官网:https://www.elastic.co/guide/en/logstash/7.0/input-plugins.html
filter更多过滤插件见官网:https://www.elastic.co/guide/en/logstash/7.0/filter-plugins.html
output更多输出插件见官网:https://www.elastic.co/guide/en/logstash/7.0/output-plugins.html

启动演示

input {
  stdin {
    type => standard
    add_field => {
           "migu" => "xu"
           "wd" => "xuwl"
        }
    enable_metric => false
 }
}

filter {
}

output {
  stdout {
    codec => rubydebug
 }
}

启动后在标准输入中输入hello world!测试

hello world!
{
    "@timestamp" => 2019-06-14T07:31:16.526Z,
          "type" => "standard",
          "migu" => "xu",
      "@version" => "1",
       "message" => "hello world!",
            "wd" => "xuwl",
          "host" => "sx-sj-movie-yqwd-5.novalocal"
}

人已赞赏
0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
有新消息 消息中心
搜索