logstash学习——02

一、File(Input plugins)

(一)插件介绍

从文件中流式传输事件,通常通过以类似于tail -0F但可选地从头读取它们的方式拖尾。

通常,日志记录会在写入的每一行的末尾添加一个换行符。默认情况下,每个事件被假定为一行,并且一行被视为换行符之前的文本。如果您想将多个日志行加入一个事件,您需要使用多行编解码器。该插件在发现新文件和处理每个发现的文件之间循环。发现的文件具有生命周期,它们以“已监视”或“已忽略”状态开始。生命周期中的其他状态是:“active”、“closed”和“unwatched”

默认情况下,使用 4095 个文件的窗口来限制正在使用的文件句柄数。处理阶段有多个阶段:

检查自上次以来“关闭”或“忽略”文件的大小是否发生了变化,如果是,则将它们置于“已监视”状态。
选择足够多的“监视”文件来填充窗口中的可用空间,这些文件被“激活”。
活动文件被打开和读取,每个文件默认从最后一个已知位置读取到当前内容(EOF)的末尾。
在某些情况下,能够控制首先读取哪些文件、排序以及文件是完全读取还是条带化/条带化是很有用的。完整的阅读是所有的文件中的文件,然后B,则对文件C等。条带或条带读取是文件 A 的一部分,然后是文件 B,然后是文件 C,依此类推,再次循环到文件 A,直到读取所有文件。带状阅读是通过更改file_chunk_count和可能指定的 file_chunk_size。如果您希望所有文件中的某些事件尽早出现在 Kibana 中,分块和排序可能会很有用。

该插件有两种操作模式,Tail 模式和 Read 模式。

  1. 尾部模式编辑
    在这种模式下,插件旨在跟踪更改的文件并在附加到每个文件时发出新内容。在这种模式下,文件被视为永无止境的内容流,EOF 没有特殊意义。该插件始终假设会有更多内容。旋转文件时,检测到较小或零大小,当前位置重置为零并继续流式传输。必须先看到分隔符,然后才能将累积的字符作为一行发出。

  2. 阅读模式编辑
    在这种模式下,插件将每个文件视为内容完整,即有限的行流,现在 EOF 很重要。不需要最后一个分隔符,因为 EOF 意味着累积的字符可以作为一行发出。此外,这里的 EOF 意味着可以关闭文件并将其置于“未监视”状态 - 这会自动释放活动窗口中的空间。此模式还可以处理内容完整的压缩文件。读取模式还允许在完全处理文件后执行操作。

(二)配置项

参数名称类型默认值描述信息
add_fieldhash{}用于向Event中添加字段
close_oldernumber3600设置文件多久秒内没有更新就关掉对文件的监听
codecstring“plain”输入数据之后对数据进行解码
delimiterstring“\n”文件内容的行分隔符,默认按照行进行Event封装
discover_intervalnumber15间隔多少秒查看一下path匹配对路径下是否有新文件产生
enable_metricbooleantrue
excludearraypath匹配的文件中指定例外,如:path => “/var/log/“;exclude =>”.gz”
idstring区分两个相同类型的插件,比如两个filter,在使用Monitor API监控是可以区分,建议设置上ID
ignore_oldernumber忽略历史修改,如果设置3600秒,logstash只会发现一小时内被修改过的文件,一小时之前修改的文件的变化不会被读取,如果再次修改该文件,所有的变化都会被读取,默认被禁用
max_open_filesnumberlogstash可以同时监控的文件个数(同时打开的file_handles个数),如果你需要处理多于这个数量多文件,可以使用“close_older”去关闭一些文件
patharray必须设置项,用于匹配被监控的文件,如“/var/log/.log”或者“/var/log/*/*.log”,必须使用绝对路径
sincedb_pathstring文件读取记录,必须指定一个文件而不是目录,文件中保存没个被监控的文件等当前inode和byteoffset,默认存放位置“$HOME/.sincedb*”
sincedb_write_intervalnumber15间隔多少秒写一次sincedb文件
start_position“beginning”,“end”” end”从文件等开头还是结尾读取文件内容,默认是结尾,如果需要导入文件中的老数据,可以设置为“beginning”,该选项只在第一次启动logstash时有效,如果文件已经存在于sincedb的记录内,则此配置无效
stat_intervalnumber1间隔多少秒检查一下文件是否被修改,加大此参数将降低系统负载,但是增加了发现新日志的间隔时间
tagsarray可以在Event中增加标签,以便于在后续的处理流程中使用
typestringEvent的type字段,如果采用elasticsearch做store,在默认情况下将作为elasticsearch的type

(三)实例

input {
    file{
        path => ["D:/lihua/javacode/jmqtt/iot-jmqtt/code/jmqttlogs/*.log","D:/lihua/javacode/jmqtt/iot-jmqtt/code/jmqttlogs/"]
        type => "test"
        exclude => ["brokerLog.log","remotingLog.log"]
    }
}

二、Grok (filter plugins)

(一)插件介绍

解析任意文本并对其进行结构化。

Grok 是将非结构化日志数据解析为结构化和可查询的东西的好方法。

该工具非常适合 syslog 日志、apache 和其他网络服务器日志、mysql 日志,以及通常为人类而不是计算机使用编写的任何日志格式。

默认情况下,Logstash 附带了大约 120 种模式。你可以在这里找到它们:https : //github.com/logstash-plugins/logstash-patterns-core/tree/master/patterns。你可以简单地添加你自己的。(见patterns_dir设置)

如果您需要帮助构建模式以匹配您的日志,您会发现 http://grokdebug.herokuapp.com和http://grokconstructor.appspot.com/应用程序非常有用!注意:这两个Grok 在线工具,解析日志需要使用。

(二)配置项

空的配置项是很多插件通用的配置项,具体信息参考File插件

参数名称类型默认值描述信息
add_field
add_tag
break_on_matchbooleantruematch字段存在多个pattern时,当第一个匹配成功后结束后面的匹配,如果想匹配所有的pattern,将此参数设置为false
enable_metric
id
keep_empty_capturesbooleanfalse如果为true,捕获失败的字段奖设置为空值
matcharray{}设置pattern数组: match=> {“message” => [“Duration: %{NUMBER:duration}”,”Speed: %{NUMBER:speed}”]}
named_captures_onlybooleantrueIf true, only store named captures from grok.
overwritearray[]覆盖字段内容: match=> { “message” => “%{SYSLOGBASE} %{DATA:message}” }
overwrite=> [ “message” ]
patterns_dirarray[]指定自定义的pattern文件存放目录,Logstash在启动时会读取文件夹内patterns_files_glob 匹配的所有文件内容
patterns_files_globstring“*”用于匹配patterns_dir中的文件
periodic_flushbooleanfalse定期调用filter的flush方法
remove_fieldarray[]从Event中删除任意字段: remove_field=> [ “foo_%{somefield}” ]
remove_tagarray[]删除“tags”中的值: remove_tag=> [ “foo_%{somefield}” ]
tag_on_failurearray[“_grokparsefailure”]当没有匹配成功时,将此array添加到“tags”字段内
tag_on_timeoutstring“_groktimeout”当匹配超时时,将此内容添加到“tags”字段内
timeout_millisnumber30000设置单个match到超时时间,单位:毫秒,如果设置为0,则不启用超时设置

(三)实例

filter {
    grok {
        match => { "message" => "(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:messagebody}$" }
    }
}

怎么获取匹配正则:

(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:messagebody}$
  1. 获取log4j2 日志输出格式pattern
    找到log4j2.xml配置文件。
    在这里插入图片描述
    获取pattern的值。
    在这里插入图片描述
  2. 使用Grok 在线调试工具生成
    打开在线工具,打不开就翻墙
    在这里插入图片描述
    在这里插入图片描述
(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:message}$
  1. 测试获取到的正则
    日志:
2021-11-24 16:18:57,270 [INFO] dispatcherMsgLog – {"clientId":"mqttx_50b1eb31","ip":"/127.0.0.1:54457","logType":"Consumer","payload":"{\n  \"id\": \"12\",\n  \"name\":\"lihua\",\n  \"age\":\"18\"\n}","topic":"testtopic/1"}

修改获取到的正则

# 这里将后面的{GREEDYDATA:message} 改为{GREEDYDATA:messagebody},因为在event中已经存在了message这个field(字段)
(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:messagebody}$

打开另外一个在线调试工具
在这里插入图片描述
解析结果:
在这里插入图片描述
解析过程:

(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:messagebody}$

2021-11-24 16:18:57,270 [INFO] dispatcherMsgLog – {"clientId":"mqttx_50b1eb31","ip":"/127.0.0.1:54457","logType":"Consumer","payload":"{\n  \"id\": \"12\",\n  \"name\":\"lihua\",\n  \"age\":\"18\"\n}","topic":"testtopic/1"}

# 创建一个field(字段)key为timestamp,value为: 2021-11-24 16:18:57,270
# 创建一个field(字段)key为loglevel,value为: INFO
# 创建一个field(字段)key为logger,value为: dispatcherMsgLog
# 创建一个field(字段)key为messagebody,value为:{"clientId":"mqttx_50b1eb31","ip":"/127.0.0.1:54457","logType":"Consumer","payload":"{\n  \"id\": \"12\",\n  \"name\":\"lihua\",\n  \"age\":\"18\"\n}","topic":"testtopic/1"}

三、elasticsearch (output plugins)

(一)插件介绍

Elasticsearch 为所有类型的数据提供近乎实时的搜索和分析。Elasticsearch 输出插件可以在 Elasticsearch 中存储时间序列数据集(例如日志、事件和指标)和非时间序列数据。

(二)配置项

参数名称类型默认值描述信息
absolute_healthcheck_pathbooleanfalse当配置了“healthcheck_path”时,决定elasticsearch健康检查URL是否按照绝对路径配置。例如: elasticsearch访问路径为:”http://localhost:9200/es“,“healthcheck_path”为”/health”, 当前参数为true时的访问路径为:”http://localhost:9200/es/health“, 当前参数为false时的访问路径为:”http://localhost:9200/health
absolute_sniffing_pathbooleanfalse当配置了“sniffing_path”时,决定elasticsearch的sniffing访问路径配置。例如: elasticsearch访问路径为:“http://localhost:9200/es”,“sniffing_path”为“/_sniffing”, 当前参数为true时的访问路径为:“http://localhost:9200/es/_sniffing”, 当前参数为false时的访问路径为:“http://localhost:9200/_sniffing
actionstring“index”对elasticsearch的操作类型,可用的操作类型: index:索引Logstash事件数据到elasticsearch; delete:根据id删除文档,id必须指定; delete:根据id删除文档,id必须指定; update:根据id更新文档
cacertstring.cer或者.pem证书文件路径,使用证书进行elasticsearch认证
codec
doc_as_upsertbooleanfalse使update启用upsert模式,即文档不存在时创建新文档
document_idstringelasticsearch中的文档id,用来覆盖已经保存到elasticsearch中的文档
document_typestring指定存入elasticsearch中的文档的type,没有指定的情况下会使用Event信息中的“type”字段的值作为elasticsearch的type
enable_metric
failure_type_logging_whitelistarray[]elasricsearch报错白名单,白名单的异常信息不会被记入logstash的log中,比如你想忽略掉所有的“document_already_exists_exception”异常
flush_size
healthcheck_pathstring“/”elasricsearch检查状态检查路径
hostsstring[//127.0.0.1]elasticsearch服务地址列表,如果配置多个将启用负载均衡
id
idle_flush_timenumber1间隔多长时间将数据输出到elasticsearch中一次,主要用于较慢的事件
indexstring“logstash-%{+YYYY.MM.dd}”指定elasticsearch存储数据时的所有名称,支持变量引用,比如你可以按天创建索引,方便删除历史数据或者查询制定范围内的数据
keystorestring用于指定密钥库路径,可以是.jks或者.p12
keystore_passwordstring密钥库密码
manage_templatebooleantrue是否启用elasticsearch模版,Logstash自带一个模版,但是只有名称匹配“logstash-*”的索引才会应用该默版
parametershash添加到elasticsearch URL后面的参数键值对
parentstring“nil”为文档子节点指定父节点的id
passwordstringelasticsearch集群访问密码
pathstring当设置了elasticsearch代理时用此参数从定向HTTP API,如果“hosts”中已经包含此路径,则不需要设置
pipelinestring“nil”设置Event管道
pool_maxnumber1000elasticsearch最大连接数
pool_max_per_routenumber100每个“endpoint”的最大连接数
proxystring代理URL
resurrect_delaynumber5检查挂掉的“endpoint”是否恢复正常的频率
retry_initial_intervalnumber2设置批量重试的时间间隔,重试到 “retry_max_interval”次
retry_max_intervalnumber64Setmax interval in seconds between bulk retries.
retry_on_conflictnumber1Thenumber of times Elasticsearch should internally retry an update/upserteddocument
routingstring指定Event路由
scriptstring“”设置“scriptedupdate”模式下的脚本名称
script_langstring“painless”设置脚本语言
script_type“inline”、“indexed”、 “file”[“inline”]Definethe type of script referenced by “script” variable inline :”script” contains inline script indexed : “script” containsthe name of script directly indexed in elasticsearch file : “script”contains the name of script stored in elasticseach’s config directory
script_var_namestring“event”Setvariable name passed to script (scripted update)
scripted_upsertbooleanfalseifenabled, script is in charge of creating non-existent document (scriptedupdate)
sniffing
sniffing_delay
sniffing_path
ssl
ssl_certificate_verification
templatestring设置自定义的默版存放路径
template_namestring“logstash”设置使用的默版名称
template_overwritebooleanfalse是否始终覆盖现有模版
timeoutnumber60网络超时时间
truststorestring“:truststore”或者“:cacert”证书库路径
truststore_passwordstring证书库密码
upsertstring“”Setupsert content for update mode.s Create a new document with this parameter asjson string if document_id doesn’texists
userstring“”elasticsearch用户名
validate_after_inactivitynumber10000间隔多长时间保持连接可用
versionstring存入elasticsearch的文档的版本号
version_type“internal”、“external”、 “external_gt”、 “external_gte”、“force”
workersstring1whenwe no longer support the :legacy type This is hacky, but it can only be herne

(三)实例

output {
    elasticsearch {
        hosts => ["192.168.1.83:9200"]
        index => "jmqttlogs-%{type}-%{logger}-%{loglevel}-%{+YYYY.MM}"
    }
    # 配置控制台输出插件
    stdout { codec => rubydebug }
}

四、TCP (input plugins)

(一)插件介绍

通过 TCP 套接字读取事件。

与标准输入和文件输入一样,每个事件都被假定为一行文本。

可以接受来自客户端的连接或连接到服务器,具体取决于mode.

(二)配置项

参考文档

(三) 实例

  1. 配置Log4j2.xml
<Configuration>
  <Appenders>
     <Socket name="Socket" host="localhost" port="12345">
       <JsonLayout compact="true" eventEol="true" />
    </Socket>
  </Appenders>
  <Loggers>
    <Root level="info">
      <AppenderRef ref="Socket"/>
    </Root>
  </Loggers>
</Configuration>
  1. 配置Logstash
input {
  tcp {
    port => 12345
    codec => json
  }
}

五、在线工具

官网提供的根据log4j2输出格式生成grok->match工具 【国内需要翻墙】
grok 调试工具【国内使用】

六、参考

logstash常用插件
解析logstash日志字段

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值