• 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏吧

logstash 入门

互联网 diligentman 4天前 3次浏览

安装

国内在官网下载会很慢,推荐使用华为的镜像下载: 华为镜像 。

解压后,执行如下命令来验证是否安装成功 . linux是单引号,windows是双引号

binlogstash.bat -e "input { stdin { } } output { stdout {} }"

等待启动成功,直接输入“hello world”,会显示

{
      "@version" => "1",
    "@timestamp" => 2019-06-20T06:46:48.310Z,
       "message" => "hello world",
          "host" => "localhost.localdomain"
}

Logstash工作原理

logstash 入门 

 

Logstash的数据处理过程主要包括:Inputs, Filters, Outputs 三部分, 另外在Inputs和Outputs中可以使用Codecs对数据格式进行处理。这四个部分均以插件形式存在,用户通过定义pipeline配置文件,设置需要使用的input,filter,output, codec插件,以实现特定的数据采集,数据处理,数据输出等功能

  • (1)Inputs:用于从数据源获取数据,常见的插件如file, syslog, redis, beats 等[详细参考]
  • (2)Filters:用于处理数据如格式转换,数据派生等,常见的插件如grok, mutate, drop, clone, geoip等[详细参考]
  • (3)Outputs:用于数据输出,常见的插件如elastcisearch,file, graphite, statsd等[详细参考]
  • (4)Codecs:Codecs不是一个单独的流程,而是在输入和输出等插件中用于数据转换的模块,用于对数据进行编码处理,常见的插件如json,multiline[详细参考]

执行模型:

  • (1)每个Input启动一个线程,从对应数据源获取数据
  • (2)Input会将数据写入一个队列:默认为内存中的有界队列(意外停止会导致数据丢失)。为了防止数丢失Logstash提供了两个特性: Persistent Queues:通过磁盘上的queue来防止数据丢失 Dead Letter Queues:保存无法处理的event(仅支持Elasticsearch作为输出源)
  • (3)Logstash会有多个pipeline worker, 每一个pipeline worker会从队列中取一批数据,然后执行filter和output(worker数目及每次处理的数据量均由配置确定)

语法

区段

Logstash 设计了自己的 DSL ,包括有区域,注释,数据类型(布尔值,字符串,数值,数组,哈希),条件判断,字段引用等。

Logstash 用 {} 来定义区域,区域内可以包括插件区域定义,你可以在一个区域内定义多个插件。插件区域内则可以定义键值对设置。示例如下:

input {}
filter {}
output {}

数据类型

类型 示例
bool debug => true
bytes my_bytes => “113” # 113 bytes
string host => “hostname”
number port => 214
array match =>[ “/var/log/messages”, “/var/log/*.log” ]
hash options => {key1 => “value1”,key2 => “value2” }

条件判断

名称 符号
等于 ==
不等于 !=
小于 <
大于 >
小于等于 <=
大于等于 >=
匹配正则 =~
不匹配正则 !~
包含 in
不包含 not in
and
or
非与 nand
非或 xor
复合表达式 ()
取反符合 !()

 

使用例子

1、读取文件,并输出到屏幕

文件的内容,截取部分如下,内容来自nginx的访问日志:

127.0.0.1 - - [17/Nov/2019:23:38:50 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://localhost:8082/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"
127.0.0.1 - - [17/Nov/2019:23:39:26 +0800] "GET / HTTP/1.1" 200 612 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"

logstash配置:

input {
    file{
        path => "D:/dev-tools/elk/logstash/logstash-7.6.2/test/access.log"
        start_position => "beginning"
        type => "nginx_access_log"
    }
}

output {
	stdout { codec => rubydebug }
}

type :标志是什么类型,用在filter和output中。

start_position => “beginning” 。input从文件的起始读取,默认情况下从文件的末尾读取

stdout 是输出到控制台。codec => rubydebug 用于美化格式化输出。

执行命令 ,启动

binlogstash.bat -f configlogstash-read-file.conf

 输出内容,截图如下。内容中,给我们加上了时间戳和版本号,以及我们前面定义的type

{
          "path" => "D:/dev-tools/elk/logstash/logstash-7.6.2/test/access.log",
    "@timestamp" => 2020-11-20T15:13:39.139Z,
          "type" => "nginx_access_log",
          "host" => "HUANGHUAN-MSI",
       "message" => "127.0.0.1 - - [17/Nov/2019:23:38:46 +0800] "GET / HTTP/1.1" 404 571 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"r",
      "@version" => "1"
}
{
          "path" => "D:/dev-tools/elk/logstash/logstash-7.6.2/test/access.log",
    "@timestamp" => 2020-11-20T15:13:39.115Z,
          "type" => "nginx_access_log",
          "host" => "HUANGHUAN-MSI",
       "message" => "127.0.0.1 - - [17/Nov/2019:23:15:09 +0800] "GET /favicon.ico HTTP/1.1" 404 571 "http://localhost/" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/77.0.3865.120 Safari/537.36"r",
      "@version" => "1"
}

 

 


程序员灯塔
转载请注明原文链接:https://www.wangt.cc/2020/11/logstash-%e5%85%a5%e9%97%a8/
喜欢 (0)