(二)logstash简介

1:logstash简介

Logstash 基于插件开发和应用,包括输入、过滤器和输出三大类插件。
输 入插件指定了数据来源
过滤器插件则对数据做过滤清洗
而输出插件则指定了 数据将被传输到哪里

LogStash 是一个类似实时流水线的开源数据传输引擎,它像一个两头连接不 同数据源的数据传输管道,将数据实时地从一个数据源传输到另一个数据源中。

1:安装启动logstash

1:安装

elk官网全套相关组件下载

下载:curl -L -O https://artifacts.elastic.co/downloads/logstash/logstash-6.8.13.rpm
或者手动官网下载
解压:sudo rpm -i logstash-6.8.13.rpm
2:配置

Logstash提供了用于从各种输入中读取的输入插件。在本指南中,您将创建一个Logstash管道配置,该配置侦听Beats输入并将接收到的事件发送到Elasticsearch输出。
vim demo-metrics-pipeline.conf
该文件配置我们的数据监听哪里,怎么处理,发送到哪里?

input {			
  beats {
    port => 5044
  }
}

# The filter part of this file is commented out to indicate that it :filter部分是可选的
# is optional.
# filter {
#
# }

output {			
  elasticsearch {
    hosts => "localhost:9200"
    manage_template => false
    index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
  }
}
3:启动logstash

-f就是我们创建的配置文件
也可以用 -e指定启动参数,不用-f启动文件

./bin/logstash -f demo-metrics-pipeline.conf 

4:logstash单元测试

logstash可不依赖beats使用。elk进行单独测试
前提es,kibana必须按照正常使用
1:创建测试配置文件:vim demo-metrics-pipeline.conf

input {					
 stdin{}   #stdin是监控控制台输入,也就是我们启动后的窗口 可以作为控制台输入数据发送到output
}

# The filter part of this file is commented out to indicate that it :filter部分是可选的
# is optional.
# filter {
#
# }

output {			#输出我们是写了两个地方,为了验证logstash的安装正确
 # elasticsearch {
 #   hosts => "localhost:9200"
 #   manage_template => false
 #   index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
 # }
	stdout{             #输出1:控制台,也就是我们的输入会在控制台再输出一次
		codec => rubydebug {}
	}
	  elasticsearch {	#输出2:正常的话输出到es,存到索引
	    hosts => "es-ip:9200"
	    manage_template => false
	    index => "logsatsh-%{+YYYY.MM.dd}"
	  }
}

2:启动logstash

./bin/logstash -f demo-metrics-pipeline.conf 

此时就是一个交互窗口。我们可以发送数据hh,控制台会输出我们的索引结果

 ./bin/logstash -f demo-metrics-pipeline.conf 
hh

[INFO ] 2021-01-07 06:27:31.495 [Ruby-0-Thread-1: /usr/share/logstash/lib/bootstrap/environment.rb:6] agent - Pipelines running {:count=>1, :running_pipelines=>[:main], :non_running_pipelines=>[]}
{
    "@timestamp" => 2021-01-06T22:27:31.482Z,
      "@version" => "1",
          "host" => "hdp01",
       "message" => "hh"
}
[INFO ] 2021-01-07 06:27:32.176 [Api Webserver] agent - Successfully started Logstash API endpoint {:port=>9600}

3:此时去kibana可以查看:GET logsatsh-2021.01.06/_search
写入成功

2:深入logstash

1:事件

Logstash 事件由一组属性组成,包括数据本身、事件产生时间、版本等。不同输入插件产生事件的属性各不相同,这些事件属性可以在过滤器插件和输出 插件中访问、添加、修改或是删除。

1.1:事件属性

比如@version 、 @ timestamp 和 @ metadata 等。这类属性大多以 @开头,可以认为是事件的元属性
访问事件属性:%{属性名称} 这样的访问获取属性的值

2:数据持久化队列

Logstash 输入插件默认使用基于内存的事件队列,这就意味中如果 Logstash 因为意外崩溃,队列中未处理的事件将全部丢失。
如果想要开启 Logstash 持久化队列,只要在 logstash. yml 文件中将 queue. type 参数设置为 persisted 即可,它的默认值是 memory 。当开启了持久化队列 后,队列数据存储到磁盘。默认存储在 Logstash 数据文件路径的 queue 目录中

queue.type:指定persisted启用持久队列。默认情况下,永久队列是禁用的(默认值:)queue.type: memory。
path.queue:将存储数据文件的目录路径。默认情况下,文件存储在中path.data/queue。
queue.page_capacity:队列页面的最大大小(以字节为单位)。队列数据由称为“页面”的仅附加文件组成。默认大小为64mb。更改此值不太可能带来性能优势。
queue.drain:指定true是否要让Logstash等待直到永久队列耗尽后再关闭。排空队列所需的时间取决于队列中累积的事件数。因此,除非队列(即使已满)相对较小并且可以快速耗尽,否则应避免使用此设置。
queue.max_events:队列中允许的最大事件数。默认值为0(无限制)。
queue.max_bytes:队列的总容量,以字节数为单位。默认值为1024mb(1gb)。确保磁盘驱动器的容量大于您在此处指定的值。

3:logstash插件

在这里插入图片描述
Logstash 官方提供的插件并非全部绑定在 Logstash 中,有一部分插件需要 用户在使用时手工安装,比如 log4j 输入插件在默认情况下就没有安装。 Logstash 提供了一条插件管理的命令 logstash-plugin, 可以用于查看、安装、更新或删除 插件

插件使用帮助	./bin/logstash-plugin --help
查看插件:bin/logstash-plugin list 
安装插件:bin/logstash-plugin install plugin-name 	
		比如bin/logstash-plugin install logstash-input-beats

在这里插入图片描述

3.1:输入插件

输入插件使Logstash可以读取特定的事件源。

beats 			该插件是从beats工具读取数据
elasticsearch	从elasticsearch客户端读取数据
file			从文件读取数据
kafka			从kafka的topic读取数据
stdin			从控制台客户端读取数据
1:beats插件

配置读取的ip,端口进行读取

input {
  beats {
  	host => 0.0.0.0
    port => 5044
  }
}
2:elasticsearch插件

从elasticsearch集群读取,可以配置读取的集群地址,索引,符合查询的数据

 input {
      elasticsearch {
        hosts => "es.production.mysite.org"			#读取的集群ip:port
        index => "mydata-2018.09.*"					#读取的索引
        query => '{ "query": { "query_string": { "query": "*" } } }'		#查询语句
        size => 500						#滚动读取的大小
        scroll => "5m"
        docinfo => true
      }
    }
3:file插件

从文件读取,类似于tail -f 读取

4:kafka插件

类似于topic的一个消费者进行消费数据

5:stdin插件

默认id是本机

input {
  stdin {
    id => "my_plugin_id"
  }
}
3.2:filter过滤器

所有过滤器使用的公共参数:

match 			用于完成消息的查找和映射
add_field		给事件添加字段	 "new_field" => "new_static_value"
add_tag			给事件添加标签	 add_tag => [ "foo_%{somefield}" ]
remove_field	移除字段:remove_field => [ "foo_%{somefield}" ]
filter {
      过滤器名字{
        过滤器参数操作 => {  }
      }
    }
1:grok正则过滤器

grok过滤器文档: https://www.elastic.co/guide/en/logstash/6.8/plugins-filters-grok.html
在安装包中有过滤器的使用方法:
查看支持的正则匹配:logstashpath/vendor/bundle/jruby/2.3.0/gems/logstash-patterns-core-4.1.2/patterns

grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据弄成结构化和方便查询的结构。他是目前logstash 中解析非结构化日志数据最好的方式

grok语法:		%{语法:语义}	#需要注意的是:正则中,匹配空格和中括号要加上转义符。

测试数据:INFO - 2021-01-15 18:37:46,161 - 194.168.20.1 - Shutdown hook called

## 从数据中获取ip,ipv4是一种正则方式,详见支持的正则匹配文件
filter {
  grok {
    match => { "message" => "%{IPV4:IP}" }
  }
}
# 从数据获取日志的级别			%{LOGLEVEL:loglevel}
# 从数据中获取时间戳,不同的时间格式用不同的key			%{TIMESTAMP_ISO8601:time}
1:kibana中grok调试

kibana中提供了对grok的正则使用,便于功能调试
![在这里插入图片描述](https://img-blog.csdnimg.cn/20210117000642466.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3dlaXhpbl80MzkzMDg2NQ==,size_16,color_FFFFFF,t_70
Sample Data:测试数据
Grok Pattern:匹配表达式
执行可以看到结果

2:data时间过滤器

默认获取的值会放到元数据信息@timestamp时间字段上
获取"MMM dd yyyy HH:mm:ss" 格式的logdate时间字段的值,放到@timestamp字段值上
可以使用的参数如下

参数			类型
locale			string

match			array[string]

tag_on_failure	array

target			string		将匹配的时间戳存储到给定的目标字段中。如果未提供,则默认为更新@timestamp字段

timezone		string

时间格式

年			yyyy	 全年数字
月份			MM		两位数的月份。如果需要,请补零。示例:01一月和12十二月
			MMM		缩写的月份文本。例如:一Jan月份
			MMMM	整月文字,例如:January。
天			d或者dd 比如1或者01		
小时			HH 	一天的第多少小时
分钟			mm
秒			ss
毫秒			SS
时区偏移量		Z或者ZZ  0700 或者07:00形式

3:drop删除过滤器

删除事件。该过滤器通常与条件语句结合使用。

filter {
  if [loglevel] == "debug" {
    drop { }
  }
}
4:mutate字段修改过滤器

对字段做一些重命名,替换,删除等操作

rename 		重命名 	rename => ["old-name", "new-name" ] 将旧字段重命名
strip 		去除字段前后的空格	  strip => ["field1", "field2"]
update 		更新	update => { "sample" => "My new message" } 用新值更新现有字段
replace 	替换	replace => { "message" => "%{source_host}: My new message" } 用新值替换旧值
remove 		移除
copy		复制 	copy => { "source_field" => "dest_field" } 从字段复制另外一个字段
merge 		合并
lowercase 	转小写	lowercase => [ "fieldname" ] 将字段值转为小写
uppercase 	大写
split		切分	split => ["hostname", "."] 
			按照什么切分字段,切分到hostname[]上,获取值:%{hostname[num]}
join		将数组按照连接
gsub		对数据中的某些字符进行替换 gsub => [ "fieldname", "/", "_", ]
5:csv过滤器

解析以逗号分隔的数据,解析到指定的字段上

3.3:输出插件

输出插件将事件数据发送到特定的目的地

1:elasticsearch
output {
      elasticsearch {
      	host => ip:port
      	index => 
      }
    }
2:kafka插件
output {
      kafka {
        codec => json			#用于输出数据的编解码器。
        topic_id => "mytopic"
      }
    }
3:stdout

输出到控制台,一般用于测试

output {
      stdout {}
    }
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值