输入插件
模块 | 插件名 | 功能 | 重要参数说明 | 实例 |
input | beats | 接收来自beat的数据,这个插件需要与filebeat匹配 | beats { #接收数据端口 port=>5044 #数据类型 type=>"logs" } |
|
dead_letter_queue | 从logstash死信队列获取事件。“死信”模式指的是,当消费者不能处理接收到的消息时,将这个消息重新发布到另外一个队列中,等待重试或者人工干预。 | |||
elasticsearch | 从数据库获取查询结果 | |||
exec | 定时执行设定的程序,并把结果作为一个事件 | |||
file | 监听文件,并获取数据 | file{ #path属性接受的参数是一个数组,其含义是标明需要读取的文件位置 # path =>‘pathA’ path => [‘pathA’,‘pathB’] #表示多就去path路径下查看是够有新的文件产生。默认是15秒检查一次。 #排除哪些文件,也就是不去读取那些文件 exclude => [‘fileName1’,‘fileNmae2’] #被监听的文件多久没更新后断开连接不在监听,默认是一个小时。 close_older =>3600 #在每次检查文件列表的时候,如果一个文件的最后修改时间超过这个值,就忽 略这个文件。 默认一天 ignore_older =>86400 #logstash 每隔多 久检查一次被监听文件状态( 是否有更新) , 默认是 1 秒 #sincedb记录数据上一次的读取位置的一个 indexsincedb_path => ’$HOME/. sincedb‘ #logstash 从什么 位置开始读取文件数据 start_position => ‘beginning’ } |
||
ganglia | 在udp上读取Ganglia包 | |||
generator | 生成随机log用于测试 | |||
graphite | 从graphite工具读取度量值 | |||
heartbeat | 生成心跳事件用于测试 | |||
http | 通过其他主机或本机的http报文 | host:发送报文的ip,默认为0.0.0.0,即接收所有 port:接收端口号 additional_codecs:配置文本类型和codec的映射,默认配置了json文本对应使用json的codec codec:如果上面的映射集合中找不到文本类型对应的codec,那么会默认按照这个属性配置的codec解析 ssl:是否开启ssl threads:服务器的启动线程数,默认4 |
||
http_poller | 解码一个http api为一个事件 | |||
imap | 从imap服务器读取事件 | |||
jdbc | 从JDBC数据生成事件 | |||
kafka | 从Kafka topic读取事件 | kafka { bootstrap_servers => "172.31.159.11:9092,172.31.159.12:9092,172.31.159.13:9092,172.31.159.14:9092" topics => "dev-usage" # group_id可以任意设 group_id => "dev-usage-6" } |
||
pipe | 从一个长时间运行的命令管道获取流事件 | pipe { #类型 type=>"sflow" #通过sh文件调用sflowtool工具,采集sflow报文并解析字段 command=>"/usr/local/bin/flowtool_wrapper.sh -l -p 6343" } |
||
rabbitmq | 从RabbitiMQ交换中拉取事件 | |||
redis | 从redis实例中读取事件 | |||
s3 | 从s3 bucket中获取流事件 | |||
snmptrap | 基于snmp trap信息创建事件 | |||
sqs | 从Amazon Web服务的简单队列服务队列事件 | |||
stdin | 标准输入,主要用于调试 | |||
syslog | 读取syslog信息为事件 | syslog { #接收数据的端口 port => "514" #类型 type => "syslog" } |
||
tcp | 接收tcp报文 | |||
从Twitter流api读取事件 | ||||
udp | 接收udp报文 | udp { #端口 port => 4739 #使用netflow插件解析字段 codec => netflow } |
||
unix | 从UNIX套接字读取事件 | |||
过滤插件
模块 | 插件名 | 功能 | 重要参数说明 | 实例 |
filter | aggregate | 将一个任务的几个事件聚集 | ||
anonymize | ||||
cidr | 检查IP地址是否与网络模块的列表冲突 | |||
clone | 复制事件。将在克隆列表中为每个类型创建一个克隆。原始事件保持不变 | |||
csv | 解析含csv数据的字段,并存储为自己命名的字段,可以解析带任何分隔符的数据,而不仅仅是”,”号 | columns:定义列名。如果没有参数columns,或没有足够的列指定,默认的列名称是“column1”、“column2”等;在csv数据中有更多的列时,额外的列将自动编号:(如“user_defined_1”、“user_defined_2“,”的位置”,“column4”,等) separator:定义分隔符 |
csv { columns => ['col1', 'col2', 'col3', 'col4', 'col5'] } |
|
date | 解析字段中的日期,然后将解析后的日期或时间戳作为logstash事件的时间戳。 | date { match => [ "logdate", "MMM dd yyyy HH:mm:ss" ] } #对于有可能有多种形式的日期格式,可以使用: match => [ "logdate", "MMM dd yyyy HH:mm:ss", "MMM d yyyy HH:mm:ss", "ISO8601" ] |
||
de_dot | 通过替换来重命名字段,代价昂贵,必须将源字段的内容复制到新的目标字段(不含有点),然后删除相应的源字段,无其他选择时采用该过滤器 | de_dot { add_field => { "foo_%{somefield}" => "Hello world, from %{host}" } } |
||
dissect | 允许一组分隔符进行字符串分隔,该过滤器不使用正则且速度快,但是如果文本中各行的数据形式不一,Grok过滤器会更适合。存在和Grok混合使用的情况 | dissect { mapping => { "message" => "%{ts} %{+ts} %{+ts} %{src} %{} %{prog}[%{pid}]: %{msg}" } } |
||
dns | 执行标准的或反向的DNS查找,一次只执行一个事件,在实时环境下会减慢logstash速率, | action:定义动作,"append"或"replace" | dns { reverse => [ "source_host", "field_with_address" ] resolve => [ "field_with_fqdn" ] action => "replace" } |
|
drop | 丢弃所有事件 | |||
elasticsearch | 从elasticsearch复制先前事件的字段作为当前事件 | |||
fingerprint | figerprint字段替换为一致性哈希的值 | |||
geoip | 增加IP地址的地理信息 | database:位置信息库文件路径 fields:在geoip的返回结果中筛选部分字段 periodic_flus:是否定时刷新 source:需要解析的存有ip的字段名称 |
||
grok | 正则过滤 | |||
jdbc_streaming | 丰富事件和数据库数据 | |||
json | 解析json事件 | |||
kv | 解析key-value对(foo=bar) | allow_duplicate_values:是否允许一键多值 | ||
metrics | 聚集指标数据 | |||
mutate | 处理数据的格式,可以把一个字符串转为数字(需要合法),可以设置的转换类型 包括: "integer", "float" 和 "string"。 | mutate { convert =>[ #把request_time的值装换为浮点型 "request_time", "float", #costTime的值转换为整型 "costTime", "integer" ] } |
||
ruby | 执行任意ruby代码,ruby插件有两个属性,一个init 还有一个code init属性是用来初始化字段的,你可以在这里初始化一个字段,无论是什么类型的都可以,code属性使用两个冒号进行标识,所有ruby语法都可以在里面进行 |
ruby { #解决@timestamp比系统时间早8小时的问题,添加了'timestamp'字段 code => "event.set('timestamp', event.get('@timestamp').time.localtime + 8*60*60)" } |
||
sleep | 睡眠指定时间,对速率限制有用 | replay:true/false,每个时间睡眠指定时长 | sleep { time => "1" # Sleep 1 second every => 10 # on every 10th event } |
|
split | 将多行信息分为不同的事件 | field:分解的字段,默认为"message" | split { field => "results" } |
|
syslog_pri | 解析syslog的优先级字段,如果没有设置优先级,则默认为13(每个RFC) | |||
throttle | 用于节流多事件,有一个下限"before_count"和一个上限"after_count"和一段时间。线程安全,用于跟踪过去事件 | throttle { #收到2个事件后,限制10分钟内收到的事件不超过3个 period => 600 max_age => 1200 before_count => 3 after_count => 5 } throttle { #限制每个小时只收到一个事件 period => 600 max_age => 1200 before_count => 3 after_count => 5 } |
||
translate | 基于hash或文件搜索和替换字段内容,目前支持的文件包括(YAML,JSON,CSV),简单的查找和替换可以使用mutate插件 | dictionary:用于替换的哈希表,不可与dictionary_path共用 dictionary_path:哈希表文件路径 |
translate { dictionary => [ "100", "Continue", "101", "Switching Protocols", "merci", "thank you", "old version", "new version" ] } |
|
truncate | 对于超过指定长的字段进行截断 | field:需要截断的字段 length_bytes:截断后的长度 |
truncate { #"hello world, how are you?"截断后为"hello worl" length_bytes => 10 } |
|
urldecode | 解码url编码的字段 | charset:解码方式,默认"UTF-8" field:需要解码的字段 |
||
useragent | 基于BrowserScope数据,将用户代理字符串解析为结构化数据。 过滤用户代理,增加信息如:family, operating system, version, and device |
|||
xml | 解析XML字段 | xml { namespaces => { "xsl" => "http://www.w3.org/1999/XSL/Transform" "xhtml" => "http://www.w3.org/1999/xhtml" } } |
||
注:(每个过滤插件都有add_field/add_tag/remove_field/remove_tag四个参数) |
输出插件
模块 | 插件名 | 功能 | 重要参数说明 | 实例 |
output | cloudwatch | 收集并发送指标数据到AWS云监控 | ||
csv | 以分隔符形式将事件写到磁盘 | csv_options:csv输出选项,一个典型的用例是使用替代的列或行的分离器如:csv_options => {"col_sep"=>"t" "row_sep"=>"\r\n"} | ||
elasticsearch | 将事件写入elasticsearch服务器 | |||
收到输出时发送邮件到指定地址 | subject:主题 | email { to => '[email protected]' from => '[email protected]' subject => 'Alert - %{title}' body => "Tags: %{tags}\\n\\Content:\\n%{message}" domain => 'mail.example.com' port => 25 } |
||
file | 将事件写入磁盘的文件中 | filename_failure:如果生成的文件路径无效,事件将会被保存在"_filename_failure"路径下 gzip:在写入磁盘前,压缩输出流 |
file { path => ... codec => line { format => "custom format: %{message}"} } |
|
graphite | 从日志中提取度量值并发往garphite(存储和绘图度量的开源工具) | |||
http | 将事件发往通用的http(s)端点,为满足并行性能会执行到pool_max(调优时需要考虑),并行时,不能保证事件的严格排序,不支持codec,使用format选项 | |||
kafka | 将数据发往kafka | kafka { #单机服务器bootstrap_servers => "172.18.34.12:9092" #kafka集群,需要在/etc/hosts内映射ip bootstrap_servers=>"172.31.159.11:9092,172.31.159.12:9092, 172.31.159.13:9092,172.31.159.14:9092" topic_id => "snort_syslog" codec => "json_lines" } |
||
lumberjack | 使用lumberjack协议发送事件 | |||
nagios | 发送被动检测结果到nagios | |||
null | ||||
pagerduty | 基于预配置服务和升级政策发送通知 | |||
pipe | 将管道事件作为其他程序标准输入 | |||
rabbitmq | 将事件发往RabbitMQ 交换 | |||
redis | 使用RPUSH命令将事件发往Redis | |||
s3 | 将事件发往亚马逊简单存储服务器 | |||
sns | 将事件发往亚马逊简单通知服务器 | |||
sqs | 将事件发往Amazon Web服务的简单队列服务队列 | |||
stdout | 标准输出,主要用于测试 | |||
tcp | 将事件写到tcp套接字,每行为一个json事件,可以接受客户端的连接,也可以连接到服务器,取决于模式 | host:模式为server时,该地址为监听地址;模式为client时,该地址为连接地址。 mode:模式(server/client) port:监听端口/连接端口 |
||
udp | 将事件写到udp,注:使用udp消息可能会丢失 | host:接收消息的ip port:发送消息的端口 |
||
webhdfs | 通过webhdfs REST api将事件写入HDFS。插件不依赖Hadoop的jar包,从而减少配置和兼容性问题。它使用Kazuki Ohta 和TAGOMORI Satoshi (@见: https://github.com/kzk/webhdfs) | webhdfs { host => "127.0.0.1" # (required) port => 50070 # (optional, default: 50070) path => "/user/logstash/dt=%{+YYYY-MM-dd}/logstash-%{+HH}.log" # (required) user => "hue" # (required) } |
||
解码插件
模块 | 插件名 | 功能 | 重要参数说明 | 实例 |
codec | cef | 读取ArcSight的公共事件格式(CEF) | ||
collectd | 从UDP协议上的二进制协议读取事件 | |||
dots | 将一个节点的事件发送到标准输出 | |||
edn | 读取edn格式数据 | |||
edn_lines | 读取换行的edn格式数据 | |||
es_bulk | ||||
fluent | 读取fluentd msgpack模式数据 | |||
graphite | 读取graphite格式化的行 | |||
json | 读取json格式的内容,每个json列中,一个元素为一个事件 | stdin{ codec=>json } |
||
json_lines | 读取字符串形式json内容 | stdout{ codec=>"json_lines" } |
||
line | 逐行读取text文本数据 | |||
msgpack | 读取MessagePack编码内容 | |||
multiline | 应用程序调试日志会包含非常丰富的内容,为一个事件打印出很多行内容。这种日志通常都很难通过命令行解析的方式做分析。multiline插件用于解决此类问题。 | pattern:正则表达式匹配 negate:布尔类型,true表示不匹配正则表达式 what:表示如果正则匹配与否,事件属于上一个或者下一个事件(previous/next) auto_flush_interval:表示当多长时间没有新的数据,之前积累的多行数据转换为一个事件 |
codec => multiline { pattern => "^%{MONTHDAY}[./-]%{MONTH}[./-]%{YEAR}" auto_flush_interval => 10 negate => true what => "previous" } |
|
netflow | 读取Netflow v5和Netflow v9数据 | |||
plain | 空的解释器 | |||
rubydebug |