Fluent Bit配置与使用——基于版本V2.2.2

Fluent Bit日志采集终端

文档适用版本:V2.2

1、日志文件处理流程

数据源是一个普通文件,其中包含 JSON 内容,使用tail插件记录日志,通过parsers进行格式化匹配(图里没写),通过两个筛选器(filter): grep初步排除某些记录,以及record_modifier更改记录内容,添加和删除特定键,最终通过输出器(output)输出。

请添加图片描述

还可以每个步骤之间添加数据验证检查点,以便了解数据结构是否正确,我们通过使用期望过滤器(expect filter)来实现这一点 。

请添加图片描述

可选值:

参数值描述
key_exists检查日志中是否存在Key
key_not_exists检查日志中是否不存在Key
key_val_is_null检查Key的值是否为Null
key_val_is_not_null检查Key的值是否不为Null
key_val_eq检查Key的值是否等于配置值
action不匹配时采取的操作,警告(warn)、退出(exit),警告会记录日志,错误会直接退出(状态码:255)

示例:

[FILTER]name        expectmatch       *key_exists  color   # color键是否存在action      exit    # 不存在直接退出

2、安装流程

RPM包安装

tar zxf fluent-bit_v2.2.2.gz
rpm -ivh libyaml-0.1.4-11.el7_0.x86_64.rpm
rpm -ivh postgresql-libs-9.2.24-9.el7_9.x86_64.rpm
rpm -ivh fluent-bit-2.2.2-1.x86_64.rpm

总配置文件路径:/etc/fluent-bit/fluent-bit.conf

执行文件路径:/opt/fluent-bit/bin/fluent-bit

docker安装

docker pull cr.fluentbit.io/fluent/fluent-bit

kubernetes安装(Helm方式)

# 添加FluentBit Helm库
helm repo add fluent https://fluent.github.io/helm-charts
# 安装默认配置的FluentBit
helm upgrade --install fluent-bit fluent/fluent-bit

3、配置详情

配置 Fluent Bit 的方法之一是使用主配置文件。Fluent Bit 允许使用一个配置文件,该配置文件可以在全局范围内工作。

主配置文件支持 4 种类型的配置段:

Service 全局配置(在这里引入解析器parsers)
Input 输入器
Filter 过滤器
Output 输出器

此外,还可以使用函数将主配置文件拆分为多个文件,以包含外部文件:

Include File

[SERVICE]flush        1  # 设置引擎将由输入插件进入的记录何时由输出插件输出daemon       Off   # Fluent Bit 是否应该作为守护(后台)进程运行log_file     /var/log/fluentbit.log   # 可选日志文件的绝对路径。默认情况下,所有日志都输出到标准输出(stdout)log_level    info  # 输出的日志级别parsers_file parsers.conf  # 解析器配置文件路径。配置段中可配置多个 Parsers_File 配置项plugins_file plugins.conf  # plugins 配置文件中可定义外部插件的路径。http_server  Off   # 是否启用内置 HTTP 服务http_listen  0.0.0.0  # HTTP 服务启用时,监听地址 http_port    2020  # HTTP 服务的 TCP 端口[INPUT] # INPUT 配置段定义数据源(与输入插件相关联)。请注意,每个输入插件都可以添加自己的配置项:name cpu   # 输入插件名称(必须项)tag  cpu.local   # 与该插件产生的所有记录关联的标签名称[FILTER]  # FILTER 配置段定义一个过滤器(与过滤插件相关联)。请注意,每个过滤插件都可以添加自己的配置项:Name  stdout  # 过滤插件名称Match *  # 与传入记录的标签匹配的模式[OUTPUT]  # UTPUT 配置段指定记录标签匹配后的目的地。该配置支持以下配置项name  stdout  # 输出插件名称match *    # 匹配输入插件标签@INCLUDE input-nginx.conf  # 调用其它配置文件,避免单文件过长(INPUT、FILTER、OUTPUT字段均可进行外部引入)

4、数据管道

4.1 Input 插入插件

Dummy # 虚拟输入插件,用于生成虚拟事件。它对于测试、调试、基准测试和开始使用 Fluent Bit 非常有用。

HTTP # HTTP 输入插件允许您将自定义记录发送到 HTTP 端点。

Health # Health插件允许您检查 TCP 服务器的健康状况。它通过每隔一定的时间间隔发出一次 TCP 连接来执行检查。

Tail # Tail输入插件允许监控一个或多个文本文件。它具有类似于 tail -f shell 命令的行为。

Dummy插件

该插件用于生成虚拟时间记录,主要用于测试、调试。

配置参数

描述
Dummy模拟的 JSON 事件记录,默认为 {"message":"dummy"}
Rate每秒产生的事件数,默认为 1
Interval_sec以秒为单位的虚拟基本时间戳。默认值:0
Interval_nsec以纳秒为单位的虚拟基本时间戳。默认值:0
Samples如果设置有值,则事件的数量将受到限制。例如,如果 Samples=3,插件只生成三个事件并停止。
Copies每次生成消息时要生成的消息数。默认值为 1。
Flush_on_startup如果设置为 true,则在启动时生成第一个虚拟事件。默认值:false
Metadata虚拟 JSON 元数据。默认:{}
Start_time_sec以秒为单位的虚拟基本时间戳。默认值:0
Start_time_nsec以纳秒为单位的虚拟基本时间戳。默认值:0

示例

[INPUT]Name   dummyDummy {"message": "custom dummy"}[OUTPUT]Name   stdoutMatch  *
HTTP插件

HTTP 输入插件允许您将自定义记录发送到 HTTP 端点。

配置参数

描述默认值
listen监听地址0.0.0.0
port监听端口9880
tag_key指定要覆盖标签的Key值。如果设置,则标记将被键的值覆盖4M
buffer_max_size指定接收 JSON 消息的最大缓冲区大小(以 KB 为单位)。512K
buffer_chunk_size设置传入传入 JSON 消息的区块大小。
successful_response_code成功响应代码201
success_header添加HTTP头

示例

# 模拟http请求
curl -d '{"key1":"value1","key2":"value2"}' -XPOST -H "content-type: application/json" http://localhost:8888/app.log
# 配置文件
[INPUT]name httplisten 0.0.0.0port 8888[OUTPUT]name stdoutmatch app.log
Health插件

该插件允许您检查 TCP 服务器的健康状况。它通过每隔一定的时间间隔发出一次 TCP 连接来执行检查。

配置参数

描述
Host要检查的目标主机或 IP 地址的名称。
Port要检查的目标主机或 IP 地址的端口。
Interval_Sec服务检查间隔(以秒为单位)。默认值为 1
Internal_Nsec服务检查指定纳秒间隔,与Interval_Sec配置键结合使用。默认值为 0
Alert如果启用,则仅当探活失败时,它才会生成消息。默认情况下,此选项处于禁用状态。
Add_Host将主机名追加到每条记录。默认值为 false
Add_Port将端口号追加到每条记录。默认值为 false

示例

[INPUT]Name          healthHost          127.0.0.1Port          80Interval_Sec  1Interval_NSec 0[OUTPUT]Name   stdoutMatch  *
Tail插件

该插件读取 Path 路径下的每个匹配文件,对于找到的每个新行(用换行符 (\n) 分隔),它会生成

一条新记录。或者,可以使用数据库文件(使用Sqlite记录),以便插件可以具有跟踪文件的历史记录

和偏移状态,用于重启后恢复进度。

配置参数

描述默认值
Buffer_Chunk_Size设置初始缓冲区大小以读取文件数据。此值用于增加缓冲区大小。32k
Buffer_Max_Size设置每个监控文件的缓冲区大小。如果超过此限制,则将从监控文件列表中删除该文件。32k
Path通过使用通配符指定一个或多个日志文件的
Path_Key如果启用,它将附加监控文件的名称作为记录的一部分。指定的值成为映射中的键
Exclude_Path文件排除,使用逗号分隔
Read_from_Head从文件的头部读取内容,而不是从文件尾部读取内容。False
Refresh_Interval刷新监控文件列表的时间间隔(秒)
Rotate_Wait指定监控文件的额外时间,以防止日志文件滚动丢失某些数据
Skip_Long_Lines当监控的文件由于行(Buffer_Max_Size)很长而达到缓冲区容量时,默认行为是停止监视该文件。Off
Skip_Empty_Lines跳过日志中的空行Off
DB指定跟踪监控文件的偏移量的数据库文件
DB.Sync设置默认sqlite同步方法。FULL
DB.journal_mode设置数据库的日志模式 (WAL)。WAL
Mem_Buf_Limit指定tail插件使用的最大内存,如果达到限制,插件会停止采集,刷新数据后会恢复
Parser指定解析器
Key当消息是非结构化数据时(未应用解析器),消息将以字符串形式作为 log 键的值。此选项允许为该键指定名称log
TagTag 标识数据源,用于后续处理流程Filter,output时选择数据
Tag_Regex使用通配符方法进行数据源标识

示例

[INPUT]# 使用 tail 插件Name              tail# Tag 标识数据源,用于后续处理流程Filter,output时选择数据Tag               nginx.*Path              /var/log/nginx/access.log# 指定解析器Parser            jsonMem_Buf_Limit     15MB# 初始buffer sizeBuffer_Chunk_Size 32k# 每个文件的最大buffer sizeBuffer_Max_Size   64k# 跳过长度大于 Buffer_Max_Size 的行,Skip_Long_Lines 若设为Off遇到超过长度的行会停止采集Skip_Long_Lines   On# 监控日志文件 refresh 间隔Refresh_Interval  10

4.2 Parsers 解析插件

默认情况

使用该插件,将非结构化日志条目格式化为一个具体、统一的结构,使其更容易处理和进一步过滤。

格式化类型:

Json映射

正则匹配 Fluent Bit 使用基于 Ruby 的正则表达式

配置参数

描述
Name解析器名称(唯一)
Format指定解析器格式,选项:JSON、正则、logfmt
Regex正则表达式
Time_Key
Time_Format指定时间字段的格式。
Time_Offset为本地日期指定固定的 UTC 时间偏移量(例如 -0600、+0200 等)。
Time_Keep启用此选项将使解析器在日志条目中保留原始时间字段及其值。
Skip_Empty_Values指定一个布尔值,用于确定解析器是否应跳过空值。默认值为 true

示例

# 原始日志
23-Jan-2024 18:42:06.178 信息 [Periodic background build discarder thread] hudson.model.AsyncPeriodicWork.lambda$doRun$0 Finished Periodic background build discarder. 1 ms
# 解析器
[PARSER]Name    tomcatFormat  regexRegex   ^(?<time>\d{2}-\w{3}-\d{4} (.*).(\d{3})) (?<level>[\u4e00-\u9fa5]+) (?<class>\[.*\]) (?<msg>.*)
# 输出日志
## 将原始日志拆为了
### time字段:"23-Jan-2024 18:42:06.178";
### level字段:"信息";
### class字段:"[Periodic background build discarder thread]";
### msg字段:"hudson.model.AsyncPeriodicWork.lambda$doRun$0 Finished Periodic background build discarder. 1 ms"
{"_time_":"2024-01-23T10:42:06.178810Z""time":"23-Jan-2024 18:42:06.178""level":"信息""class":"[Periodic background build discarder thread]""msg":"hudson.model.AsyncPeriodicWork.lambda$doRun$0 Finished Periodic background build discarder. 1 ms"
}
多行情况

多行解析器(Multiline Parser)默认内置了以下几种:

解析器描述
docker处理 Docker 容器引擎生成的日志条目。此解析器支持由 Docker 拆分的日志条目的串联。
cri处理 CRI-O 容器引擎生成的日志条目。与 docker 解析器类似,用于解析containerd的日志
go处理基于 Go 的语言应用程序生成的日志条目,并在检测到多行消息时执行串联。
python处理基于 Python 的语言应用程序生成的日志条目,并在检测到多行消息时执行串联。
java处理由 Java 语言应用程序生成的日志条目,并在检测到多行消息时执行串联。

可自定义的多行匹配规则

描述默认值
name为多行解析器指定名称
type设置多行解析模式,一般为:regex正则
parser事先定义解析器。注意:当解析器应用于原始文本时,正则表达式将使用 key_content 配置属性应用于结构化消息的特定键(见下文)。
key_content对于传入的结构化消息,请指定包含应由正则表达式处理并可能连接的数据的键。
flush_timeout超时刷新时间5s
rule定义多行匹配规则,可定义多个规则,但存在一定使用规定。

Rule规则的定义

一条规则由四部分组成

# 规则名 |  状态名称      |  正则规则       | 下一步状态
rules   |   state name   | regex pattern  | next state
# 第一步必须为“start_state”,正则与多行文本的首行匹配
rule      "start_state"   "/([a-zA-Z]+ \d+ \d+\:\d+\:\d+)(.*)/"   "cont"

4.3 Filters 过滤插件

官方文档:Expect - Fluent Bit: Official Manual

多个Filier过滤器顺序执行

CheckList插件

该插件会查找指定列表中的值是否存在,然后允许添加记录以告知是否找到。

配置参数

描述
file关键字匹配文件
lookup_key日志文件中需要查找的字段
record当在lookup_key字段中查到对应值时要添加的值。value:键 值
mode设置检查模式。 支持精准exact和模糊partial。默认值:exact
ignore_case是否忽略大小写。默认:false

示例:

[INPUT]name           tailtag            test1path           test1.logread_from_head trueparser         json[FILTER]name       checklistmatch      test1# 在日志中查找含有文件中包含关键字的部分file       ip_list.txt# 关键字所在字段lookup_key $remote_addr# 添加/替换(这里为:将`ioc`字段的值替换为abc)record     ioc    abc[OUTPUT]name       stdoutmatch      test1
Grep插件

该插件允许您根据值或嵌套值的正则表达式模式匹配或排除特定记录。

配置参数

格式描述
Regexkey regex仅保留与正则表达式匹配的字段的记录
Excludekey regex排除与正则表达式匹配的字段的记录
Logical_OpOperationSpecify which logical operator to use. AND , OR and legacy are allowed as an Operation. Default is legacy for backward compatibility. In legacy mode the behaviour is either AND or OR depending whether the grep is including (uses AND) or excluding (uses OR). Only available from 2.1+.

示例

[INPUT]name   tailpath   lines.txtparser json[FILTER]name   grepmatch  *# 仅保留log字段值为aa的日志regex  log aa[OUTPUT]name   stdoutmatch  *
Lua插件

用于应用lua脚本

Lua - Fluent Bit: Official Manual

Parser插件(常用)

该插件用于解析事件记录中的字段。

配置参数

描述默认值
Key_Name指定要解析的日志中的具体字段名称。
Parser指定解析器名称,允许多个解析器条目(每行一个)。
Preserve_Key是否保留原始字段(Key_Name里写的)False
Reserve_Data是否保留其它原始字段False

示例

# 原始日志
{"data":"100 0.5 true This is example"}
# 解析器
[PARSER]Name dummy_testFormat regexRegex ^(?<INT>[^ ]+) (?<FLOAT>[^ ]+) (?<BOOL>[^ ]+) (?<STRING>.+)$
# 过滤器
[FILTER]Name parserMatch dummy.*Key_Name dataParser dummy_test
# 输出
[0] dummy.data: [1499347993.001371317, {"INT"=>"100", "FLOAT"=>"0.5", "BOOL"=>"true", "STRING"=>"This is example"}]
Record Modifier插件

Record Modifier插件允许附加字段或排除特定字段。

配置参数

描述
Record追加字段。值为键值对
Remove_key如果键匹配,则删除。(黑名单)值为:mem.total
Allowlist_key如果键不匹配,则删除。(白名单)值为:mem.total
Uuid_key如果设置,插件会将 uuid 附加到每条记录。分配的值将成为映射中的键。

示例

# 原始记录
{"Mem.total"=>1016024, "Mem.used"=>716672, "Mem.free"=>299352, "Swap.total"=>2064380, "Swap.used"=>32656, "Swap.free"=>2031724}
# 追加
[FILTER]Name record_modifierMatch *Record hostname ${HOSTNAME}Record product Awesome_Tool
# 删除Swap.used
[FILTER]Name record_modifierMatch *Remove_key Swap.used
# 仅保留Swap.used
[FILTER]Name record_modifierMatch *Allowlist_key Swap.used
Modify插件(常用)

详情:修改 - Fluent Bit: Official Manual

Multiline插件(常用)

该插件主要用于上下文拆分为多个日志行的消息进行合并。

默认支持格式:

GO

Python

Ruby

Java(Google Cloud Platform Java stacktrace format)

配置参数

描述
multiline.parser指定一个或多个多行解析器,通过逗号分隔
multiline.key_content用于保存处理后内容键的名称。
mode
buffer启用缓冲模式。在缓冲模式下,筛选器可以从逐个引入记录的输入中连接多行(例如:转发),而不是以块的形式连接
flush_ms挂起的多行记录的刷新时间。默认值为 2000。
emitter_name
emitter_storage.type
emitter_mem_buf_limit

示例

test.log通过tail插件输入,接着进入parsers_multiline.conf进行多行解析,然后调用multiline进行多行过滤,最终输出。

[SERVICE]flush                 1log_level             infoparsers_file          parsers_multiline.conf[INPUT]name                  tailpath                  test.logread_from_head        true[FILTER]name                  multilinematch                 *multiline.key_content logmultiline.parser      go, multiline-regex-test[OUTPUT]name                  stdoutmatch                 *
Nest插件

Nest 插件允许您对嵌套数据进行操作或处理嵌套数据。

配置参数

值格式描述
Operationnest / lift选择操作:嵌套(nest)或拆解(lift)
Wildcard通配符记录哪个字段需要进行嵌套(nest)
Nest_under字符串记录新嵌套字段的键名称
Nested_under字符串取消嵌套(lift)的嵌套字段的键名称
Add_prefix字符串使用此字符串作为受影响的键的前缀(在Key前加文本)
Remove_prefix字符串如果前缀与此字符串匹配,请从受影响的键中删除前缀

示例

# 原始文本:{"Mem.total"=>3865308, "Mem.used"=>3648492, "Mem.free"=>216816, "Swap.total"=>4194300, "Swap.used"=>1065856, "Swap.free"=>3128444}
[INPUT]Name memTag  mem.local[OUTPUT]Name  stdoutMatch *# 将所有Mem.*嵌套在LAYER1下
# 输出为:{"Swap.total"=>4194300, "Swap.used"=>1065888, "Swap.free"=>3128412, "LAYER1"=>{"Mem.total"=>3865308, "Mem.used"=>3643692, "Mem.free"=>221616}
[FILTER]Name nestMatch *Operation nestWildcard Mem.*Nest_under LAYER1
[FILTER]Name nestMatch *Operation nestWildcard LAYER1*Nest_under LAYER2
# 取消LAYER2字段嵌套,并在下一级LAYER1前新增Lifted2_
# 输出为:{"Swap.total"=>4194300, "Swap.used"=>1065680, "Swap.free"=>3128620, "Lifted2_LAYER1"=>{"Mem.total"=>3865308, "Mem.used"=>3688680, "Mem.free"=>176628}}
[FILTER]Name nestMatch *Operation liftNested_under LAYER2Add_prefix Lifted2_# 新增LAYER3嵌套,并删除上一级字段Lifted2_前缀
# 输出为:{"Swap.total"=>4194300, "Swap.used"=>1066244, "Swap.free"=>3128056, "LAYER3"=>{"LAYER1"=>{"Mem.total"=>3865308, "Mem.used"=>3660424, "Mem.free"=>204884}}}
[FILTER]Name nestMatch *Operation nestWildcard Lifted2_*Nest_under LAYER3Remove_prefix Lifted2_
Kubernetes插件

kubernetes 过滤器插件允许使用元数据丰富您的日志文件。

当 Fluent Bit 作为 DaemonSet 部署在 Kubernetes 并配置为从容器(使用 tail 或 systemd 输入插件)读取日志时,此过滤器可以执行以下操作:

分析 Tag 标签并提取以下元数据:

Pod Name

Namespace

Container Name

Container ID

查询 Kubernetes API Server 以获取有关 Pod 的额外元数据:

Pod ID

Labels

Annotations

数据将会缓存在本地内存中,并附加到每个日志记录上。

详情:Kubernetes - Fluent Bit:官方手册

示例

[FILTER]# 使用kubernetes过滤器Name                kubernetes# 匹配ingress.*这个Tag对应的 INPUTMatch               ingress.*# kubernetes API Server 地址Kube_URL            https://kubernetes.default.svc:443# kubernetes 上serviceAccount的CA证书路径Kube_CA_File        /var/run/secrets/kubernetes.io/serviceaccount/ca.crt# kubernetes 上serviceAccount的token路径Kube_Token_File     /var/run/secrets/kubernetes.io/serviceaccount/token# 当源日志来自tail插件,这个配置用于指定tail插件使用的前缀值Kube_Tag_Prefix     ingress.var.log.containers.# Merge_Log=On 解析log字段的json内容,提取到根层级, 附加到Merge_Log_Key指定的字段上Merge_Log           Off# 合并log字段后是否保持原始log字段Keep_Log            Off# 允许Kubernetes Pod 建议预定义的解析器K8S-Logging.Parser  Off# 允许Kubernetes Pod 从日志处理器中排除其日志K8S-Logging.Exclude Off# 是否在额外的元数据中包含 Kubernetes 资源标签信息Labels              Off# 是否在额外的元数据中包括 Kubernetes 资源信息Annotations         Off

4.4 Output 输出插件

Amazon S3

详情:Amazon S3 – Fluent Bit:官方手册

Elasticsearch

详情:Elasticsearch - Fluent Bit:官方手册

输出至文件

配置参数

描述默认值
Path用于存储文件的目录路径。
File设置用于存储记录的文件名。
Format文件内容的格式。(out_file、JSON、CSV、LTSV、Template)out_file
Mkdir是否递归创建输出目录。
Workers专用线程数量1
HTTP

详情:HTTP - Fluent Bit: Official Manual

kafka

详情:Kafka - Fluent Bit: Official Manual

示例

[OUTPUT]# 使用kafka插件Name              kafka# 匹配Nginx access日志Match             tomcat.*# 指定Kafka Brokers地址Brokers           192.168.142.12:9092# 指定Kafka topic,如果需要推送到多个topic,多个topic通过','分隔Topics            fluentBit-tomcat-topic# 将Timestamp_Key设置为_time_,原默认值为@timestampTimestamp_Key     _time_# 指定时间戳转成成的时间字符串格式Timestamp_Format  iso8601# 设置为false表示不限制重试次数Retry_Limit       false# 当kafka结束空闲连接时,隐藏"Receive failed: Disconnected"报错rdkafka.log.connection.close false# Kafka生产者队列中总消息容量最大值,此处设置为10MB,producer buffer is not included in http://fluentbit.io/documentation/0.12/configuration/memory_usage.html#estimatingrdkafka.queue.buffering.max.kbytes 10240# Kafka生产者在leader已成功收到的数据并得到确认后才发送下一条message。rdkafka.request.required.acks 1

5、配置实例

Nginx

输入日志:"192.168.142.1 - - [22/Jan/2024:08:25:24 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/119.0.0.0 Safari/537.36" "-" "

[PARSER]Name   nginxFormat regexRegex ^(?<remote>[^ ]*) (?<host>[^ ]*) (?<user>[^ ]*) \[(?<time>[^\]]*)\] "(?<method>\S+)(?: +(?<path>[^\"]*?)(?: +\S*)?)?" (?<code>[^ ]*) (?<size>[^ ]*)(?: "(?<referer>[^\"]*)" "(?<agent>[^\"]*)")Time_Key timeTime_Format %d/%b/%Y:%H:%M:%S %z
[INPUT]Name              tailTag               nginx.*Path              /var/log/nginx/access.logParser            jsonMem_Buf_Limit     15MBBuffer_Chunk_Size 32kBuffer_Max_Size   64kSkip_Long_Lines   OnRefresh_Interval  10
[OUTPUT]Name              kafkaMatch             nginx.*Brokers           192.168.142.12:9092Topics            fluentBit-nginx-topicTimestamp_Key     _time_Timestamp_Format  iso8601Retry_Limit       falserdkafka.log.connection.close falserdkafka.queue.buffering.max.kbytes 10240rdkafka.request.required.acks 1

输出:

请添加图片描述

Tomcat

输入日志:[INFO ] 2024-01-22 01:42:32,748 --http-nio-8080-exec-7-- [com.hylh.mobile.biz.mq.sender.impl.QueueSenderServiceImpl] 测试发送结束

![Tomcat](F:\Work\Fluent Bit\Tomcat.png)![Tomcat](F:\Work\Fluent Bit\Tomcat.png)[MULTILINE_PARSER]Name    multiline-tomcatType  regexFlush_timeout 1000rule      "start_state"    "/^(?<level>\[ERROR\]) (?<time>\d{4}-\d{2}-\d{2} (.*),(\d{3})) (?<thread>--(.*)--) (?<class>\[\w(.*).\w\]) (?<message>(.*))/"  "cont"rule      "cont"   "/(^com|org|java).\w(.*).\w(.*): \w(.*)/"  "cont"rule      "cont"          "/\s+at.*/"  "cont"[INPUT]Name              tailTag               tomcat.*Path              /opt/apache-tomcat-8.5.88/logs/catalina.outParser            tomcatMem_Buf_Limit     15MBBuffer_Chunk_Size 32kBuffer_Max_Size   64kSkip_Long_Lines   OnRefresh_Interval  5[FILTER]name                  multilinematch                 tomcat.*multiline.key_content logmultiline.parser      multiline-tomcat[OUTPUT]Name              kafkaMatch             tomcat.*Brokers           192.168.142.12:9092Topics            fluentBit-tomcat-topicTimestamp_Key     _time_Timestamp_Format  iso8601Retry_Limit       falserdkafka.log.connection.close falserdkafka.queue.buffering.max.kbytes 10240rdkafka.request.required.acks 1

Docker-Tomcat

输入日志:{"log":"[ERROR] 2024-01-22 08:53:22,090 --schedule-pool-6-- [com.rx.common.utils.Threads] Invalid bound statement (not found): com.test.system.mapper.store.sytem.SysStoreOperLogMapper.insertOperlog \r\n","stream":"stdout","time":"2024-01-22T00:53:22.092252133Z"}

[MULTILINE_PARSER]Name    multiline-tomcatType  regexFlush_timeout 1000rule      "start_state"    "/^(?<level>\[ERROR\]) (?<time>\d{4}-\d{2}-\d{2} (.*),(\d{3})) (?<thread>--(.*)--) (?<class>\[\w(.*).\w\]) (?<message>(.*))/"  "cont"rule      "cont"   "/(^com|org|java).\w(.*).\w(.*): \w(.*)/"  "cont"rule      "cont"          "/\s+at.*/"  "cont"
[PARSER]Name    get_levelFormat  regexRegex   (?<level>\[\w{4,5} *\])[INPUT]Name              tailTag               dockerTomcat.*Path              /opt/test-json.logRead_from_head    trueMem_Buf_Limit     15MB# 指定多行匹配,先按照docker模式进行分割multiline.parser docker, criBuffer_Chunk_Size 32kBuffer_Max_Size   64kSkip_Long_Lines   OnRefresh_Interval  5[FILTER]name                  multilinematch                 dockerTomcat.*multiline.key_content logmultiline.parser      multiline-tomcat
[FILTER]Name            parsermatch           dockerTomcat.*Key_Name        logParser          get_levelReserve_Data    TruePreserve_Key    True[OUTPUT]Name              kafkaMatch             dockerTomcat.*Brokers           192.168.142.12:9092Topics            fluentBit-docker-tomcat-topicTimestamp_Key     _time_Timestamp_Format  iso8601Retry_Limit       falserdkafka.log.connection.close falserdkafka.queue.buffering.max.kbytes 10240rdkafka.request.required.acks 1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/245918.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

VR数字展厅,平面静态跨越到3D立体化时代

近些年&#xff0c;VR的概念被越来越多的人提起&#xff0c;较为常见的形式就是VR数字展厅。VR数字展厅的出现&#xff0c;让各地以及各行业的展厅展馆的呈现和宣传都发生了很大的改变和革新&#xff0c;同时也意味着展览传播的方式不再局限于原来的图文、视频&#xff0c;而是…

2024年新提出的算法:一种新的基于数学的优化算法——牛顿-拉夫森优化算法|Newton-Raphson-based optimizer,NRBO

1、简介 开发了一种新的元启发式算法——Newton-Raphson-Based优化器&#xff08;NRBO&#xff09;。NRBO受到Newton-Raphson方法的启发&#xff0c;它使用两个规则&#xff1a;Newton-Raphson搜索规则&#xff08;NRSR&#xff09;和Trap Avoidance算子&#xff08;TAO&#…

花式沉默Defender

编者注&#xff1a;本文仅供学习研究&#xff0c;严禁从事非法活动&#xff0c;任何后果由使用者本人负责。 前言 总结了一下现在还能用的关闭Defender的方法&#xff0c;部分是原创&#xff0c;一部分借鉴的大佬。觉得字多的同学可以直接跳过思路查看步骤进行实操。 修改注册…

Git Docker 学习笔记

注意&#xff1a;该文章摘抄之百度&#xff0c;仅当做学习笔记供小白使用&#xff0c;若侵权请联系删除&#xff01; 目录 列举工作中常用的几个git命令&#xff1f; 提交时发生冲突&#xff0c;你能解释冲突是如何产生的吗&#xff1f;你是如何解决的&#xff1f; git的4个…

腾讯云轻量应用Windows服务器如何搭建幻兽帕鲁Palworld私服?

幻兽帕鲁/Palworld是一款2024年Pocketpair开发的开放世界生存制作游戏&#xff0c;在帕鲁的世界&#xff0c;玩家可以选择与神奇的生物“帕鲁”一同享受悠闲的生活&#xff0c;也可以投身于与偷猎者进行生死搏斗的冒险。而帕鲁可以进行战斗、繁殖、协助玩家做农活&#xff0c;也…

如何阅读xml电子发票

xml电子发票是官方给出的电子存档的文件格式&#xff0c;本质是文本&#xff0c;所以文件很小&#xff0c;大量发票存储&#xff0c;能够更加凸显优势。 但是xml电子发票不方便阅读&#xff0c;因为里面是xml格式&#xff0c;对于财务人员来讲&#xff0c;看“代码”简直太难了…

C语言实现希尔排序算法(附带源代码)

希尔排序 希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0…

苹果笔记本MacBook电脑怎么卸载软件?三种方法快速卸载软件

苹果笔记本MacBook电脑是一款非常流行的电脑&#xff0c;但是有时候我们可能需要卸载一些不需要的软件。下面是一些简单的步骤&#xff0c;可以帮助您在MacBook电脑上卸载软件。 苹果笔记本MacBook电脑怎么卸载软件&#xff1f;三种实用方法快速卸载软件&#xff01; 方法一&a…

Java强训day4(选择题编程题)

选择题 接口中的方法是为了让重写编程题 题目 import java.util.Scanner;public class Main {public static void main(String[] args) {Scanner sc new Scanner(System.in);int a_b sc.nextInt();int b_c sc.nextInt();int ab sc.nextInt();int bc sc.nextInt();for(in…

【C++】入门

结束数据结构初阶的学习后&#xff0c;很高兴继续学习C&#xff0c;欢迎大家一起交流~ 目录 C关键字 命名空间 命名空间定义 命名空间使用 C输入&输出 缺省参数 缺省参数概念 缺省参数分类 函数重载 函数重载概念 C支持函数重载的原理--名字修饰 引用 引用概念…

选择排序(堆排序和topK问题)

选择排序 每一次从待排序的数据元素中选出最小&#xff08;或最大&#xff09;的一个元素&#xff0c;存放在序列的起始位置&#xff0c;直到全部待排序的数据元素排完 。 如果我们用扑克牌来举例&#xff0c;那么选择排序就像是提前已经把所有牌都摸完了&#xff0c;而再进行牌…

Google Chrome RCE漏洞 CVE-2020-6507 和 CVE-2024-0517 流程分析

本文深入研究了两个在 Google Chrome 的 V8 JavaScript 引擎中发现的漏洞&#xff0c;分别是 CVE-2020-6507 和 CVE-2024-0517。这两个漏洞都涉及 V8 引擎的堆损坏问题&#xff0c;允许远程代码执行。通过EXP HTML部分的内存操作、垃圾回收等流程方式实施利用攻击。 CVE-2020-…

网络编程套接字(1)

网络编程基础 为什么需要网络编程? --丰富的网络资源 用户在浏览器中,打开在线视频网站,如优酷看视频,实质通过网络,获取到网络上的一个视频资源 与本地打开视频文件类似,只是视频文件这个资源的来源是网络. 相比于本地资源来说,网络提供了更为丰富的网络资源: 所谓的网络…

uniapp状态管理Vuex介绍及vuex核心概念

状态管理Vuex Vuex 是什么&#xff1f; Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态&#xff0c;并以相应的规则保证状态以一种可预测的方式发生变化。 uni-app 内置了 Vuex 什么是“状态管理模式”&#xff1f; <!…

要做接口并发性能测试,总得先学会分析吧!

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

电脑自动开机播放PPT的解决方案

客户有个需求&#xff0c;要求与LED大屏幕连接的电脑定时自动播放PPT。为了安全电脑在不播放的时段&#xff0c;必须关机。 目录 1、使用“时控插座”并进行设置 2、戴尔电脑BIOS设置&#xff08;上电开机&#xff09; 3、设置Windows自动登录 4、任务计划设置 5、启动Au…

谷粒商城【成神路】-【1】——项目搭建

目录 &#x1f95e;1.整体架构图 &#x1f355;2.微服务划分图 &#x1f354;3.开发环境 &#x1f354;4.搭建git &#x1f32d;5.快速搭建服务 &#x1f37f;6.数据库搭建 &#x1f9c2;7.获取脚手架 &#x1f953;8.代码生成器 &#x1f373;9.创建公共模块 …

springboot优雅停机

import org.springframework.context.annotation.Configuration;import javax.annotation.PreDestroy;Configuration public class DataBackupConfig {PreDestroypublic void backData(){System.out.println("开始备份..."System.currentTimeMillis());System.out.pr…

GPT-5不叫GPT-5?下一代模型会有哪些新功能?

OpenAI首席执行官奥特曼在上周三达沃斯论坛接受媒体采访时表示&#xff0c;他现在的首要任务就是推出下一代大模型&#xff0c;这款模型不一定会命名GPT-5。虽然GPT-5的商标早已经注册。 如果GPT-4目前解决了人类任务的10%&#xff0c;GPT-5应该是15%或者20%。 OpenAI从去年开…

【STM32】STM32学习笔记-硬件SPI读写W25Q64(40)

00. 目录 文章目录 00. 目录01. SPI简介02. W25Q64简介03. SPI相关API3.1 SPI_Init3.2 SPI_Cmd3.3 SPI_I2S_SendData3.4 SPI_I2S_ReceiveData3.5 SPI_I2S_GetFlagStatus3.6 SPI_I2S_ClearFlag3.7 SPI_InitTypeDef 04. 硬件SPI读写W25Q64接线图05. 硬件SPI读写W25Q64示例06. 程序…