- timestamp 用来标记事件的发生时间。因为这个字段涉及到Logstash的内部流转,所以必须是一个joda对象,如果你尝试自己给一个字符串字段重命名为@timestamp的话,Logstash会直接报错。所以,请使用 filter/date插件来管理这个字段。
- type 标记事情的唯一类型。
- host 标记事情发生在哪里。
- tags 标记事件的某方面属性。只是一个数组,一个时间可以有多个标签。
- version 标记事件的版本信息
- id 标记事件分配的ID信息
- index 标记事件所在的索引
score
可以随意的给事件添加字段或者从事件里删除字段。事实上事件就是一个Ruby对象。
命令行配置Logstash 提供了一个shell脚本叫logstash,支持以下参数:-e 执行。 bin/logstash -e 是执行一个默认的配置。
–config 或 -f 文件。
真实运用中,我们会写很长的配置,甚至可能超过shell锁能支持的1024个字符长度。所以我们必须把配置固话到文件里,然后通过 bin/logstash -f agent.conf 这样的形式来运行。可以直接用 bin/logstash -f /etc/logstash.d/ 来运行,这样logstash会自动读取/etc/logstash.d/目录下所有的*.conf 的文本文件,然后在自己内存里拼接成一个完整的大配置文件,再去执行。
–configtest 或 -t 测试。
用来测试Logstash读取到的配置文件语法是否能正常解析。LogStash列出目录下所有文件时,是用字母排序的。–logs 或 -l 日志。
Logstash默认输出日志到标准错误。–filterworkers 或 -w 工作线程。
Logstash会运行多个线程。可以使用 bin/logstash -w 5 这样的方式强制Logstash为过滤插件运行5个线程。在Logstash-2.0之前,该参数默认是1,之后修改为自动适配CPU核数的一半。–verbose 输出一定的调试日志。
– debug 输出更多的调试日志。
过程管道
Inputs:你使用Inputs去获取数据到Logstash中,下面是一些常用的inputs类型。
- file:从文件中读取,类似于UNIX命令中的 tail -0f
- syslog:监听514端口上的系统日志消息,并且根据RFC3164格式来解析。
- redis:从redis服务读取信息,使用redis管道和redis列表。Redis经常用来使用作为一个“broker”在一个集中的Logstash安装,运输Logstash事件从一个远程的Logstash“shippers”。
- beats:由Filebeat发送的进程事件。
FIlters:FIlters是在Logstash管道中的中间运输设备。你可以组合过滤条件来对符合一定规则的事件进行操作。
- grok:解析和构建任意文本。Grok是当前在Logstash中去解析未构建的日志数据变成结构化和可查询的最佳方式。在Logstash中内置了120个模式,总有一个会符合你的需求。
- mutate:执行对事件字段的一般转换。你可以重命名,删除,替换和修改字段。
- drop:丢掉一个事件,例如debug事件。
- clone:给事件做一个副本,可能添加或删除字段。
-geoip:添加关于Ip地址的地理位置信息。
Outputs:Outputs是Logstash传输途径中的最后解析。一个事件可以有多个输出,但是一旦所有的输出处理完成后,该事件就完成了它的执行。
- elasticsearch:传输数据给Elasticsearch。如果你打算保存数据在一个高效的,方便的,更轻松的可查询结构中。
- file: 将事件数据写在磁盘中。
- graphite:把数据传输到graphite,一个受欢迎的开源工具用来保存和图表化数据。
- statsd:Statsd是一个简单的网络守护进程,基于Node.js平台,通过UDP或者TCP方式侦听各种统计信息,包括计数器和定时器,并发送聚合信息到后端服务。
Codecs:基于流,可以对一部分输入输出做过滤的操作。Codes可以让你轻松的将消息从序列化的过程中分离出来。
- json:编码或解码数据为Json格式。
- multiline:合并多行数据事件例如java异常和堆栈信息为一个单独的事件。
管道在现在的版本中过滤器和输出都在同一个线程中。在2.2之前的版本中,过滤器和输出都存储在单独的空间,被独立的线程处理。新的管道大大增加了线程活跃度,减少了资源使用,提高了吞吐率。当前的Logstash管道是一个微型batching管道,比一次做一件事的方法更高效。这些效率来自很多地方,有两个比较突出的在于争夺资源的减少和线程活跃度的提高。
命令行标识Logstash有许多的命令标识。你可以使用 –help标识来展示这些信息。
Nginx : 从1.7版开始,加入了syslog支持。可以通过syslog直接发送日志出来。
配置:
access_log syslog:server=unix:/data0/rsyslog/nginx.sock locallog;
或者直接发送给远程logstash
access_log syslog:server=192.168.0.2:5140,facility=local6,tag=ngnix-access,severity=info logstashlog;
在这种情况下,Ngnix将使用local7.info等级,ngnix为标签,发送数据。注意,采用syslog发送日志的时候,无法配置buffer=16k选项。
Log4J 配置直接通过log4j写入到logstash中。
XML配置文件:
需要配置Java应用的Log4J设置,启动一个内置的
<appender name="LOGSTASH" class="org.apache.log4j.net.SocketAppender">
<param name="RemoteHost" value="logstash_hostname" />
<param name="ReconnectionDelay" value="60000" />
<param name="LocationInfo" value="true" />
<param name="Threshold" value="DEBUG" />
</appender>
然后把这个新定义的appender对象加入到 root logger 里,可以跟其他已有logger共存。
<root>
<level value="INFO"/>
<appender-ref ref="OTHERPLACE"/>
<appender-ref ref="LOGSTASH"/>
</root>
properties文件配置:
log4j.rootLogger=DEBUG, logstash
SocketAppender
log4j.appender.logstash=org.apache.log4j.net.SocketAppender
log4j.appender.logstash.Port=4560
log4j.appender.logstash.RemoteHost=logstash_hostname
log4j.appender.logstash.ReconnectionDelay=60000
log4j.appender.logstash.LocationInfo=true
- logstash 支持所有主流日志类型,插件支持最丰富,可以灵活DIY,但性能较差,JVM容易导致内存使用量高。
Input
collected 是一个守护进程,用来收集系统性能和提供各种存储方式来存储不同值的机制。它会在系统运行和存储信息时周期性的统计系统的相关统计信息。利用这些信息有助于查找当前系统性能瓶颈(如作为性能分析)和预测系统未来的load等。
Generator生成测试数据