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.mzph.cn/news/645321.shtml

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

相关文章

新能源汽车智慧充电桩管理方案:环境监测与充电安全多维感知

随着新能源技术的不断发展&#xff0c;新能源充电桩作为电动汽车的重要基础设施&#xff0c;其管理和维护变得尤为重要。环境监测类传感器能够实时监测充电桩周围的环境参数&#xff0c;如温度、湿度等&#xff0c;为管理人员提供及时、准确的数据&#xff0c;以便做出相应的调…

JS之歌词滚动案例

让我为大家带来一个歌词滚动的案例吧&#xff01; 详细的介绍都在代码块中 我很希望大家可以自己动手尝试一下&#xff0c;如果需要晴天的mp3音频文件可以私信我 上代码&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset&quo…

Excel·VBA时间范围筛选及批量删除整行

看到一个帖子《excel吧-筛选开始时间&#xff0c;结束时间范围内的所有记录》&#xff0c;根据条件表中的开始时间和结束时间构成的时间范围&#xff0c;对数据表中的开始时间和结束时间范围内的数据进行筛选 目录 批量删除整行&#xff0c;整体删除批量删除整行&#xff0c;分…

HTML+CSS:炫酷登录切换

效果演示 实现了一个登录注册页面的切换效果&#xff0c;当用户点击登录或注册按钮时&#xff0c;会出现一个叠加层&#xff0c;其中包含一个表单&#xff0c;用户可以在表单中输入用户名和密码&#xff0c;然后点击提交按钮进行登录或注册。当用户点击返回按钮时&#xff0c;会…

【Android】Android中的系统镜像由什么组成?

文章目录 总览Boot Loader 的加锁与解锁Boot 镜像内核RAM diskARM 中的设备树 (Device Tree) /System 和/Data 分区镜像参考 总览 各种Android设备都只能刷专门为相应型号的设备定制的镜像。 厂商会提供一套系统镜像把它作为“出厂默认”的 Android 系统刷在设备上。 一个完…

SpringCloudAlibaba系列之Nacos实战

目录 注意事项 参考资源 Nacos配置中心 初始化项目 进行Nacos相关配置 运行 Nacos注册中心 dubbo方式 对外暴露接口dubbo-api 服务提供者dubbo-provider 服务消费者dubbo-consumer 负载均衡客户端方法 服务提供者 服务消费者 注意事项 不管是使用Nacos配置中心&…

代码随想录 Leetcode144/94/145 二叉树的前/中/后序遍历

题目&#xff1a; 前&#xff1a; 中&#xff1a; 后&#xff1a; 代码&#xff08;首刷自解 2024年1月24日&#xff09;&#xff1a; //前序遍历&#xff0c;递归 class Solution { public:void funcOfRecursion(TreeNode* cur, vector<int>& vec) {if (cur null…

谈谈 RocketMQ 5.0 分级存储背后一些有挑战的技术优化

作者&#xff1a;斜阳 RocketMQ 5.0 提出了分级存储的新方案&#xff0c;经过数个版本的深度打磨&#xff0c;RocketMQ 的分级存储日渐成熟&#xff0c;并成为降低存储成本的重要特性之一。事实上&#xff0c;几乎所有涉及到存储的产品都会尝试转冷降本&#xff0c;如何针对消…

自动化Web页面性能测试介绍

随着越来越多的用户使用移动设备访问 Web 应用&#xff0c;使得 Web 应用需要支持一些性能并不是很好的移动设备。为了度量和测试 Web 应用是不是在高复杂度的情况下&#xff0c;页面性能能满足用户的需求。 同时&#xff0c;随着 Web 应用的空前发展&#xff0c;前端业务逐渐…

插入排序

插入排序 概述步骤代码示例输出结果 概述 插入排序是一种最简单直观的排序算法&#xff0c;它的工作原理是通过创建有序序列和无序序列&#xff0c;然后再遍历无序序列得到里面每一个数字&#xff0c;把每一个数字插入到有序序列中正确的位置。 插入排序是一种简单直观的排序…

某马头条——day10

热文章数据查询 分布式任务调度xxl-job 概述 环境搭建 docker化部署 docker run -p 3306:3306 --name mysql57 \ -v /opt/mysql/conf:/etc/mysql \ -v /opt/mysql/logs:/var/log/mysql \ -v /opt/mysql/data:/var/lib/mysql \ -e MYSQL_ROOT_PASSWORDroot\ -d mysql:5.7 dock…

尝试给docker ubuntu22.04镜像添加远程访问桌面

实在时不愿折腾&#xff0c;但是ubuntu 镜像没有桌面&#xff0c;有些操作实在太难受了&#xff0c;效率也不高。硬着头皮上吧。幸亏这是个docker的镜像。要是个虚拟机&#xff0c;这折腾来去&#xff0c;直接崩溃了。docker的好处就是立马就能从头来过&#xff0c;秒级的删除安…

分辨率 时钟频率 lane速率计算

PCLK: pixel clock(像素频率) 计算方法如下&#xff1a; 以1920x1080p/60hz为例&#xff0c;total pixel&#xff1a;2200&#xff0c;total line&#xff1a;1125&#xff0c;filed rate&#xff1a;60Hz&#xff0c;那么&#xff1a;PCLK 2200*1125*60 148.5MHz&#xff1b…

ATF(TF-A)安全通告TF-V11——恶意的SDEI SMC可能导致越界内存读取(CVE-2023-49100)

目录 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) 二、透过事务看本质SDEI是干啥的呢&#xff1f; 三、CVE-2023-49100 1、GICv2 systems 2、GICv3 systems 四、漏洞修复 一、ATF(TF-A)安全通告TFV-11 (CVE-2023-49100) Title 恶意的SDEI SMC可能导致越界内存读取&am…

Spring Security架构

文章目录 过滤器回顾DelegatingFilterProxyFilterChainProxySecurityFilterChainSecurity Filters打印Security Filters将自定义过滤器添加到过滤器链 Handling Security ExceptionsSaving Requests Between AuthenticationRequestCachePrevent the Request From Being Saved R…

《游戏-01_3D-开发》之—人物动画控制器

创建变量&#xff0c; 创建线&#xff0c; 连接&#xff0c; 选中线会变为蓝色&#xff0c;新增变量&#xff0c; 设置线&#xff0c; 双击子层进入子层&#xff0c; 创建变量&#xff0c; 双击SkillPanel 拖拽好之后返回上一层&#xff0c; 依次连接&#xff0c; 设置线&#…

[Tomcat] [从安装到关闭] MAC部署方式

安装Tomcat 官网下载&#xff1a;Apache Tomcat - Apache Tomcat 9 Software Downloads 配置Tomcat 1、输入cd空格&#xff0c;打开Tomca目录&#xff0c;把bin文件夹直接拖拉到终端 2、授权bin目录下的所有操作&#xff1a;终端输入[sudo chmod 755 *.sh]&#xff0c;回车 …

【GitHub项目推荐--不错的 Go 学习项目】【转载】

开源实时性能分析平台 Pyroscope 是基于 Go 的开源实时性能分析平台&#xff0c;在源码中添加几行代码 pyroscope 就能帮你找出源代码中的性能问题和瓶颈、CPU 利用率过高的原因&#xff0c;调用树展示帮助你理解程序&#xff0c;支持 Go、Python、Ruby 语言。 Pyroscope 可以…

k8s的图形化工具---rancher

rancher是一个开源的企业级多集群的k8s管理平台。 rancher和k8s的区别&#xff1a;都是为了容器的调度和编排系统。但是rancher不仅可以调度还可以管理整个k8s集群。 rancher自带监控(普罗米修斯) 实验部署 master01 20.0.0.32 node01 20.0.0.34 node02 20.0.0.35 test …

【Java Kubernates】Java调用kubernates提交Yaml到SparkOperator

背景 目前查询框架使用的是trino&#xff0c;但是trino也有其局限性&#xff0c;需要准备一个备用的查询框架。考虑使用spark&#xff0c;spark operator也已经部署到k8s&#xff0c;现在需要定向提交spark sql到k8s的sparkoperator上&#xff0c;使用k8s资源执行sql。 对比 …