logstash学习——02

目录标题

    • 一、File(Input plugins)
    • (一)插件介绍
    • (二)配置项
    • (三)实例
    • 二、Grok (filter plugins)
    • (一)插件介绍
    • (二)配置项
    • (三)实例
    • 三、elasticsearch (output plugins)
    • (一)插件介绍
    • (二)配置项
    • (三)实例
    • 四、TCP (input plugins)
    • (一)插件介绍
    • (二)配置项
    • (三) 实例
    • 五、在线工具
    • 六、参考

一、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_field hash {} 用于向Event中添加字段
close_older number 3600 设置文件多久秒内没有更新就关掉对文件的监听
codec string “plain” 输入数据之后对数据进行解码
delimiter string “\n” 文件内容的行分隔符,默认按照行进行Event封装
discover_interval number 15 间隔多少秒查看一下path匹配对路径下是否有新文件产生
enable_metric boolean true
exclude array path匹配的文件中指定例外,如:path => “/var/log/“;exclude =>”.gz”
id string 区分两个相同类型的插件,比如两个filter,在使用Monitor API监控是可以区分,建议设置上ID
ignore_older number 忽略历史修改,如果设置3600秒,logstash只会发现一小时内被修改过的文件,一小时之前修改的文件的变化不会被读取,如果再次修改该文件,所有的变化都会被读取,默认被禁用
max_open_files number logstash可以同时监控的文件个数(同时打开的file_handles个数),如果你需要处理多于这个数量多文件,可以使用“close_older”去关闭一些文件
path array 必须设置项,用于匹配被监控的文件,如“/var/log/.log”或者“/var/log/*/*.log”,必须使用绝对路径
sincedb_path string 文件读取记录,必须指定一个文件而不是目录,文件中保存没个被监控的文件等当前inode和byteoffset,默认存放位置“$HOME/.sincedb*”
sincedb_write_interval number 15 间隔多少秒写一次sincedb文件
start_position “beginning”,“end” ” end” 从文件等开头还是结尾读取文件内容,默认是结尾,如果需要导入文件中的老数据,可以设置为“beginning”,该选项只在第一次启动logstash时有效,如果文件已经存在于sincedb的记录内,则此配置无效
stat_interval number 1 间隔多少秒检查一下文件是否被修改,加大此参数将降低系统负载,但是增加了发现新日志的间隔时间
tags array 可以在Event中增加标签,以便于在后续的处理流程中使用
type string Event的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_match boolean true match字段存在多个pattern时,当第一个匹配成功后结束后面的匹配,如果想匹配所有的pattern,将此参数设置为false
enable_metric
id
keep_empty_captures boolean false 如果为true,捕获失败的字段奖设置为空值
match array {} 设置pattern数组: match=> {“message” => [“Duration: %{NUMBER:duration}”,”Speed: %{NUMBER:speed}”]}
named_captures_only boolean true If true, only store named captures from grok.
overwrite array [] 覆盖字段内容: match=> { “message” => “%{SYSLOGBASE} %{DATA:message}” }
overwrite=> [ “message” ]
patterns_dir array [] 指定自定义的pattern文件存放目录,Logstash在启动时会读取文件夹内patterns_files_glob 匹配的所有文件内容
patterns_files_glob string “*” 用于匹配patterns_dir中的文件
periodic_flush boolean false 定期调用filter的flush方法
remove_field array [] 从Event中删除任意字段: remove_field=> [ “foo_%{somefield}” ]
remove_tag array [] 删除“tags”中的值: remove_tag=> [ “foo_%{somefield}” ]
tag_on_failure array [“_grokparsefailure”] 当没有匹配成功时,将此array添加到“tags”字段内
tag_on_timeout string “_groktimeout” 当匹配超时时,将此内容添加到“tags”字段内
timeout_millis number 30000 设置单个match到超时时间,单位:毫秒,如果设置为0,则不启用超时设置

(三)实例

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

怎么获取匹配正则:

(?<timestamp>%{TIMESTAMP_ISO8601}) \[%{LOGLEVEL:loglevel}\] (?<logger>[A-Za-z0-9$_.]+) – %{GREEDYDATA:messagebody}$
  1. 获取log4j2 日志输出格式pattern
    找到log4j2.xml配置文件。
    logstash学习——02_第1张图片
    获取pattern的值。
    logstash学习——02_第2张图片
  2. 使用Grok 在线调试工具生成
    打开在线工具,打不开就
    logstash学习——02_第3张图片
    logstash学习——02_第4张图片
(?<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}$

打开另外一个在线调试工具
logstash学习——02_第5张图片
解析结果:
logstash学习——02_第6张图片
解析过程:

(?<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_path boolean false 当配置了“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_path boolean false 当配置了“sniffing_path”时,决定elasticsearch的sniffing访问路径配置。例如: elasticsearch访问路径为:“http://localhost:9200/es”,“sniffing_path”为“/_sniffing”, 当前参数为true时的访问路径为:“http://localhost:9200/es/_sniffing”, 当前参数为false时的访问路径为:“http://localhost:9200/_sniffing”
action string “index” 对elasticsearch的操作类型,可用的操作类型: index:索引Logstash事件数据到elasticsearch; delete:根据id删除文档,id必须指定; delete:根据id删除文档,id必须指定; update:根据id更新文档
cacert string .cer或者.pem证书文件路径,使用证书进行elasticsearch认证
codec
doc_as_upsert boolean false 使update启用upsert模式,即文档不存在时创建新文档
document_id string elasticsearch中的文档id,用来覆盖已经保存到elasticsearch中的文档
document_type string 指定存入elasticsearch中的文档的type,没有指定的情况下会使用Event信息中的“type”字段的值作为elasticsearch的type
enable_metric
failure_type_logging_whitelist array [] elasricsearch报错白名单,白名单的异常信息不会被记入logstash的log中,比如你想忽略掉所有的“document_already_exists_exception”异常
flush_size
healthcheck_path string “/” elasricsearch检查状态检查路径
hosts string [//127.0.0.1] elasticsearch服务地址列表,如果配置多个将启用负载均衡
id
idle_flush_time number 1 间隔多长时间将数据输出到elasticsearch中一次,主要用于较慢的事件
index string “logstash-%{+YYYY.MM.dd}” 指定elasticsearch存储数据时的所有名称,支持变量引用,比如你可以按天创建索引,方便删除历史数据或者查询制定范围内的数据
keystore string 用于指定密钥库路径,可以是.jks或者.p12
keystore_password string 密钥库密码
manage_template boolean true 是否启用elasticsearch模版,Logstash自带一个模版,但是只有名称匹配“logstash-*”的索引才会应用该默版
parameters hash 添加到elasticsearch URL后面的参数键值对
parent string “nil” 为文档子节点指定父节点的id
password string elasticsearch集群访问密码
path string 当设置了elasticsearch代理时用此参数从定向HTTP API,如果“hosts”中已经包含此路径,则不需要设置
pipeline string “nil” 设置Event管道
pool_max number 1000 elasticsearch最大连接数
pool_max_per_route number 100 每个“endpoint”的最大连接数
proxy string 代理URL
resurrect_delay number 5 检查挂掉的“endpoint”是否恢复正常的频率
retry_initial_interval number 2 设置批量重试的时间间隔,重试到 “retry_max_interval”次
retry_max_interval number 64 Setmax interval in seconds between bulk retries.
retry_on_conflict number 1 Thenumber of times Elasticsearch should internally retry an update/upserteddocument
routing string 指定Event路由
script string “” 设置“scriptedupdate”模式下的脚本名称
script_lang string “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_name string “event” Setvariable name passed to script (scripted update)
scripted_upsert boolean false ifenabled, script is in charge of creating non-existent document (scriptedupdate)
sniffing
sniffing_delay
sniffing_path
ssl
ssl_certificate_verification
template string 设置自定义的默版存放路径
template_name string “logstash” 设置使用的默版名称
template_overwrite boolean false 是否始终覆盖现有模版
timeout number 60 网络超时时间
truststore string “:truststore”或者“:cacert”证书库路径
truststore_password string 证书库密码
upsert string “” Setupsert content for update mode.s Create a new document with this parameter asjson string if document_id doesn’texists
user string “” elasticsearch用户名
validate_after_inactivity number 10000 间隔多长时间保持连接可用
version string 存入elasticsearch的文档的版本号
version_type “internal”、“external”、 “external_gt”、 “external_gte”、“force”
workers string 1 whenwe 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.

(二)配置项

参考文档

环境 输入类型 必需的

dns_reverse_lookup_enabled

布尔值

ecs_compatibility

细绳

host

细绳

mode

字符串,其中之一["server", "client"]

port

数字

是的

proxy_protocol

布尔值

ssl_cert

有效的文件系统路径

ssl_certificate_authorities

大批

ssl_enable

布尔值

ssl_extra_chain_certs

大批

ssl_key

有效的文件系统路径

ssl_key_passphrase

密码

ssl_verify

布尔值

tcp_keep_alive

布尔值

(三) 实例

  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日志字段

你可能感兴趣的:(ELK,ELK,Logstash,Log4j2)