logstash组件详解

logstash的概念及特点。

概念:logstash是一个数据采集、加工处理以及传输(输出)的工具。

特点:

  - 所有类型的数据集中处理

  - 不同模式和格式数据的正常化

  - 自定义日志格式的迅速扩展

  - 为自定义数据源轻松添加插件

logstash安装配置。

①.下载安装
[root@node1 ~]# wget https://download.elastic.co/logstash/logstash/packages/centos/logstash-7.4.0-1.noarch.rpm
[root@node1 ~]# rpm -ivh logstash-7.4.0-1.noarch.rpm ②.简单测试
logstash,启动后输入"hello,xkops"。
[root@node1 ~]# /opt/logstash/bin/logstash -e 'input{ stdin{} } output{ stdout{} }'
*提示:如果输出"hello,xkops",则证明logstash启动成功。 ③.以服务启动方式。
[root@node1 ~]# service logstash start
总结:logstash三种启动方式,-e sting类型启动,-f 指定配置文件启动,服务启动。

logstash配置语句详解。

logstash配置文件包含三个配置部分,分别为:input{}、filter{}、output{}。

{} 定义区域,区域内可以定义一个或多个插件,通过插件对数据进行收集,加工处理,输出。

数据类型:

  • 布尔值类型: ssl_enable => true
  • 字节类型: bytes => "1MiB"
  • 字符串类型: name => "xkops"
  • 数值类型: port => 22
  • 数组: match => ["datetime","UNIX"]
  • 哈希: options => {key1 => "value1",key2 => "value2"}
  • 编码解码: codec => "json"
  • 路径: file_path => "/tmp/filename"

条件判断:

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

logstash常用插件

类型:

  • input类:也就是在input区域内定义使用的插件。
  • codec类:定于处理数据格式,如plain,json,json_lines等格式。这个可以定义在input、output区域中。
  • filter类:也就是在filter区域内定义使用的插件。
  • output类:也就是在output区域内定义使用的插件。
  • 各类插件地址:https://github.com/logstash-plugins

input类插件

input类插件,常用的插件:file、tcp、udp、syslog,beats等。

①.file插件:

file插件字段解释:
codec => #可选项,默认是plain,可设置其他编码方式。 discover_interval => #可选项,logstash多久检查一下path下有新文件,默认15s。 exclude => #可选项,排除path下不想监听的文件。 sincedb_path => #可选项,记录文件以及文件读取信息位置的数据文件。~/.sincedb_xxxx sincedb_write_interval => #可选项,logstash多久写一次sincedb文件,默认15s. stat_interval => #可选项,logstash多久检查一次被监听文件的变化,默认1s。 start_position => #可选项,logstash从哪个位置读取文件数据,默认从尾部,值为:end。初次导入,设置为:beginning。 path => #必选项,配置文件路径,可定义多个。 tags => #可选项,在数据处理过程中,由具体的插件来添加或者删除的标记。 type => #可选项,自定义处理时间类型。比如nginxlog。

实例:

[root@node1 conf.d]# cat /tmp/file{1,2}.log
This is test file-plugin in file1.log
This is test file-plugin in file2.log
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat file.conf
input{
file{
start_position => "beginning"
path => ["/tmp/file1.log","/tmp/file2.log"]
type => 'filelog'
}
}
output{
stdout{}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f file.conf -t
Configuration OK
[root@node1 conf.d]# /opt/logstash/bin/logstash -f file.conf
Settings: Default pipeline workers: 1
Pipeline main started
2019-07-16T02:50:07.410Z node1 This is test file-plugin in file1.log
2019-07-16T02:50:07.428Z node1 This is test file-plugin in file2.log
*提示:能够输出内容则证明file插件正常工作。

②.tcp插件:

tcp插件字段解释:
add_field => #可选项,默认{}。
codec => #可选项,默认plain。
data_timeout => #可选项,默认-1。
host => #可选项,默认0.0.0.0。
mode => #可选项,值为["server","client"]之一,默认为server。
port => #必选,端口。
ssl_cacert => #可选项,定义相关路径。
ssl_cert => #可选项,定义相关路径。
ssl_enable => #可选项,默认为false。
ssl_key => #可选项,定义相关路径。
ssl_key_passphrase => #可选项,默认nil
ssl_verify => #可选项,默认false。
tags => #可选项
type => #可选项

实例:

[root@node1 conf.d]# cat /tmp/tcp.log
this is test tcp-plugin in tcp.log
send tcplog data
output tcplog data
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat tcp.conf
input{
tcp{
host => "127.0.0.1"
port => 8888
type => "tcplog"
}
}
output{
stdout{}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f tcp.conf
# 此时开启另个终端,使用nc开启一个tcp端口8888,并将数据推送到8888端口。
[root@node1 conf.d]# nc 127.0.0.1 8888 < /tmp/tcp.log
# 提示:前一个终端如果出现数据,则证明tcp插件工作正常。

③udp插件:

udp插件字段解释:
add_field => #可选项,默认{}。
host => #可选项,默认0.0.0.0。
queue_size => #默认2000
tags => #可选项
type => #可选项
workers => #默认为2

实例:

[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat udp.conf
input{
udp{
host => "127.0.0.1"
port => 9999
}
}
output{
stdout{}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f udp.conf
# 打开另一终端执行如下脚本,并输入内容:"hello,udplog"。
[root@node1 conf.d]# cat /tmp/udpclient.py
#/usr/bin/env python
import socket host = "127.0.0.1"
port = 9999
file_input = raw_input("Please input udp log: ")
s = socket.socket(socket.AF_INET,socket.SOCK_DGRAM)
s.sendto(file_input,(host,port))

*提示:如果前一个终端收到日志,则证明udp插件工作正常。

④.syslog插件:

实例:

[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat syslog.conf
input{
syslog{
host => "127.0.0.1"
port => 518
type => "syslog"
}
}
output{
stdout{}
}
[root@node1 conf.d]# echo '*.* @@127.0.0.1:518' >> /etc/rsyslog.conf
[root@node1 conf.d]# /etc/init.d/rsyslog restart
关闭系统日志记录器: [确定]
启动系统日志记录器: [确定]
[root@node1 conf.d]# /opt/logstash/bin/logstash -f syslog.conf
使用logger命令向系统写入日志:
[root@node1 conf.d]# logger # 提示:此处随便输入内容,查看前一个终端是否会有内容输出,如果输出则证明syslog插件工作正常。

codec类插件

codec类插件,常用的插件:plain、json、json_lines、rubydebug、multiline等。

①.plain插件:

实例:
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat plain.conf
input{
stdin{
codec => "plain"
}
}
output{
stdout{}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f plain.conf
输入信息查看输出。

②.json插件:

实例:
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat json.conf
input{
stdin{}
}
output{
stdout{
codec => "json"
}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f json.conf
输入信息查看输出。

③.json_lines插件:(json文本过长时使用)

实例:
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat jsonlines.conf
input{
tcp{
host => "127.0.0.1"
port => 8888
codec => "json_lines"
}
}
output{
stdout{}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f jsonlines.conf
启动一个新的终端,执行如下命令。
[root@node1 conf.d]# cat /tmp/jsonlines.txt
You run a price alerting platform which allows price-savvy customers to specify a rule like "I am interested in buying a specific electronic gadget and I want to be notified if the price of gadget falls below $X from any vendor within the next month". In this case you can scrape vendor prices, push them into Elasticsearch and use its reverse-search (Percolator) capability to match price movements against customer queries and eventually push the alerts out to the customer once matches are found.
[root@node1 conf.d]# nc 127.0.0.1 8888 < /tmp/jsonlines.txt
# 提示:观察前一个终端的输出,如果正常输出,则json_lines插件工作正常。

④.rubedebug插件:

实例:

[root@node1 conf.d]# cat rubydebug.conf
input{
stdin{
codec => "json"
}
}
output{
stdout{
codec => "rubydebug"
}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f rubydebug.conf
输入json串查看输出效果。
json串:{"name":"xkops","age":"25"}

⑤.multiline插件:(处理错误日志)

multiline插件字段:
charset => #字符编码,可选
max_bytes => #bytes类型,设置最大的字节数,可选
max_lines => #number类型,设置最大的行数,默认是500行,可选
multiline_tag => #string类型,设置一个事件标签,默认是"multiline" ,可选
pattern => #string 类型,设置匹配的正则表达式 ,必选
patterns_dir => #array类型,可以设置多个正则表达式,可选
negate => #boolean类型,设置正向匹配还是反向匹配,默认是false,可选
what => #设置未匹配的内容是向前合并还是向后合并,previous, next 两个值选择,必选
错误日志:
[16-07-2016 22:54:01] PHP warning: unknown exception in /xxx/test/index.php:99
111111111111111111
222222222222222222
[16-07-2016 23:19:43] PHP warning: unknown exception in /xxx/test/index.php:93
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat codecmultilines.conf
input{
stdin{
codec => multiline{
pattern => "^\["
negate => true
what => "previous"
}
}
}
output{
stdout{}
} [root@node1 conf.d]# /opt/logstash/bin/logstash -f codecmultilines.conf
# 提示:输入上述错误日志查看输出。

filter类插件

filter插件,常用的filter插件:json、grok等。

①.json插件:

add_field =>     #hash(可选项),默认{}
add_tag => #array(可选项),默认[]
remove_field => #array(可选项),默认[]
remove_tag => #array(可选项),默认[]
source => #string(必选项)
target => #string(可选项)

实例:

[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat filterjson.conf input{
stdin{}
}
filter{
json{
source => "message"
#target => "content"
}
}
output{
stdout{
codec => "rubydebug"
}
} [root@node1 conf.d]# /opt/logstash/bin/logstash -f filterjson.conf
输入两个串,查看输出。
{"name":"xkops","age":"25"}
name xkops

②.grok插件

grok插件解析各种非结构化的日志数据插件。

grok有丰富的patterns,查看方式:

cat /opt/logstash/vendor/bundle/jruby/1.9/gems/logstash-patterns-core-2.0.5/patterns/grok-patterns
https://github.com/logstash-plugins/logstash-patterns-core/blob/master/patterns/grok-patterns

实例:

输入的元数据内容:
20.3.1.3 GET /xkops/index.html 8838 1.323
[root@node1 conf.d]# pwd
/etc/logstash/conf.d
[root@node1 conf.d]# cat filtergrok.conf
input{
stdin{}
}
filter{
grok{
match => ["message","%{IP:ip} %{WORD:method} %{URIPATH:uri} %{NUMBER:bytes} %{NUMBER:duration}"]
}
}
output{
stdout{
codec => "rubydebug"
}
}
[root@node1 conf.d]# /opt/logstash/bin/logstash -f filtergrok.conf
# 提示:输入上述元数据查看输出。

提示:grok在线工具使用:https://grokdebug.herokuapp.com/

③.kv插件

kv插件解析处理key-value键值对数据

output类插件

output插件:

  • ①.file插件
  • ②.tcp/udp插件
  • ③.redis/kfaka
  • ④.elasticsearch

附录:

redis配置:

input{
redis{
host => 'redis-server'
port => '6379'
data_type => 'list'
key => 'lb'
codec => 'json'
}
}

Logstash组件详解(input、codec、filter、output)的更多相关文章

  1. Angular6 学习笔记——组件详解之组件通讯

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  2. Android中Intent组件详解

    Intent是不同组件之间相互通讯的纽带,封装了不同组件之间通讯的条件.Intent本身是定义为一个类别(Class),一个Intent对象表达一个目的(Goal)或期望(Expectation),叙 ...

  3. Asp.Net MVC3 简单入门第一季(三)详解Controller之Filter

    前言 前面两篇写的比较简单,刚开始写这个系列的时候我面向的对象是刚开始接触Asp.Net MVC的朋友,所以写的尽量简单.所以写的没多少技术含量.把这些技术总结出来,然后一简单的方式让更多的人很好的接 ...

  4. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  5. Echars 6大公共组件详解

    Echars 六大组件详解 : title  tooltip toolbox legend  dataZoom visualMap 一.title标题详解 myTitleStyle = { color ...

  6. Angular6 学习笔记——组件详解之模板语法

    angular6.x系列的学习笔记记录,仍在不断完善中,学习地址: https://www.angular.cn/guide/template-syntax http://www.ngfans.net ...

  7. Tomcat负载均衡、调优核心应用进阶学习笔记(一):tomcat文件目录、页面、架构组件详解、tomcat运行方式、组件介绍、tomcat管理

    文章目录 tomcat文件目录 bin conf lib logs temp webapps work 页面 架构组件详解 tomcat运行方式 组件介绍 tomcat管理 tomcat文件目录 ➜ ...

  8. Java中日志组件详解

    avalon-logkit Java中日志组件详解 lanhy 发布于 2020-9-1 11:35 224浏览 0收藏 作为开发人员,我相信您对日志记录工具并不陌生. Java还具有功能强大且功能强 ...

  9. Android笔记——四大组件详解与总结

     android四大组件分别为activity.service.content provider.broadcast receiver. ------------------------------- ...

随机推荐

  1. mysqldump工具实现mysql数据库的备份还原

    简介 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热备 InnoDB:都支持 不管是热备还原还是冷备还原,还原时都 ...

  2. 迈进java初中级程序员分水岭是否合格?十个题告诉你!

    前言 不论你是职场新人还是步入职场N年的职场新人大哥大~当然这个N<3~,我能担保你答不对这十个题~不要问我为什么这么自信~,这些个题还是"有水平"的javase的基础题,传 ...

  3. 环境配置——tornado项目准备工作

    新建tornado项目后,采用Pycharm作为开发工具,采用Xshell链接Ubuntu模拟服务端方便方便测试.项目编码前进行以下几个方面的配置. 1.Ubuntu配置 1.1安装ssh服务 sud ...

  4. Sql 修改表结构

    添加字段 alter table 表名 add 字段名 nvarchar(100) not null 修改字段 alter table 表名 alter column 字段名 int not null ...

  5. desc和show

    desc只能查看表结构 查看zx1表结构 desc zx1; mysql> desc zx1 -> ; +---------+---------+------+-----+-------- ...

  6. C语言I作业08

    C语言I作业08 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/9981 ...

  7. ThinkPHP5——模型关联(一对多关联)

    关联定义 一对多关联的情况也比较常见,使用hasMany方法定义,参数包括: hasMany('关联模型名','外键名','主键名',['模型别名定义']); 例如租客表和宿舍表,一个宿舍有多个租客, ...

  8. 微信小程序——template详细使用

    WXML提供模板(template),可以在模板中定义代码片段,然后在不同的地方调用减少冗余代码. 1.1定义模板 1.1.1.创建模板文件夹  1.1.2.使用 name 属性,作为模板的名字.然后 ...

  9. 机器学习笔记(六) ---- 支持向量机(SVM)【华为云技术分享】

    版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...

  10. 对于Python函数与方法,你可能存在些误解

    欢迎添加华为云小助手微信(微信号:HWCloud002 或 HWCloud003),输入关键字"加群",加入华为云线上技术讨论群:输入关键字"最新活动",获取华 ...