logstash插件分析

输入插件

模块 插件名 功能 重要参数说明 实例
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 从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服务器    
email 收到输出时发送邮件到指定地址 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 v5Netflow v9数据    
plain 空的解释器    
rubydebug      

猜你喜欢

转载自blog.csdn.net/b0207191/article/details/88803418