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. .NET Core 3.0 使用Nswag生成Api文档和客户端代码

    摘要 在前后端分离.Restful API盛行的年代,完美的接口文档,成了交流的纽带.在项目中引入Swagger (也称为OpenAPI),是种不错的选择,它可以让接口数据可视化.下文将会演示 利用N ...

  2. Java流程控制之(一)条件

    目录 条件语句 单if情况 单if/else情况 if/else多分支情况 switch条件语句 条件语句+循环语句,直接甩图甩代码! 条件语句 Java希望在某个条件为真时执行相应的语句. 单if情 ...

  3. scrapy自动抓取蛋壳公寓最新房源信息并存入sql数据库

    利用scrapy抓取蛋壳公寓上的房源信息,以北京市为例,目标url:https://www.dankegongyu.com/room/bj 思路分析 每次更新最新消息,都是在第一页上显示,因此考虑隔一 ...

  4. 数据降维-NMF非负矩阵分解

    1.什么是非负矩阵分解? NMF的基本思想可以简单描述为:对于任意给定的一个非负矩阵V,NMF算法能够寻找到一个非负矩阵W和一个非负矩阵H,使得满足 ,从而将一个非负的矩阵分解为左右两个非负矩阵的乘积 ...

  5. P1035 级数求和

    题目描述 已知:S_n= 1+1/2+1/3+…+1/nSn​=1+1/2+1/3+…+1/n.显然对于任意一个整数KK,当nn足够大的时候,S_nSn​大于KK. 现给出一个整数KK(1 \le k ...

  6. C语言l博客作业06

    C语言l博客作业06 问题 回答 这个作业属于哪个课程 C语言程序设计ll 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homew ...

  7. 带着canvas去流浪系列之二 绘制折线图

    [摘要] 用canvasAPI实现echarts简易图表 示例代码托管在:http://www.github.com/dashnowords/blogs 一. 任务说明 使用原生canvasAPI绘制 ...

  8. Flask开发天气查询软件,带你掌握pipenv的使用与手机Termux下的部署

    关于pipenv 昨天介绍了pipenv这个相比于virtualenv更高端大气上档次的虚拟环境管理软件,但看了下流量貌似不是很受欢迎,也许是我介绍的不够好吧.那么今天就拿它做一个例子,开发一款天气预 ...

  9. vars()

    返回一个字典,包含所有在本函数调用时存在的变量

  10. 第七章终结篇——8251A的总结

    总算把这个第七章复习完了,我把剩下一点关于8251A的发上来吧 本来在讲解8251A书本上还有关于RS232和串口通信的讲解,但是太浅了,就不放了,有兴趣的朋友可以自行参考其他文章 串行通信芯片825 ...