file
file source用于日志采集。
Example
sources:
- type: file
name: accesslog
Tips
如果你使用logconfig/clusterlogconfig采集容器日志,file source里还增加了额外的字段,请参考这里。
paths
字段 |
类型 |
是否必填 |
默认值 |
含义 |
paths |
string数组 |
必填 |
无 |
采集的path路径,使用glob表达式来匹配。支持glob扩展表达式Brace Expansion 和Glob Star |
Example
需要采集的目标文件:
/tmp/loggie/service/order/access.log
/tmp/loggie/service/order/access.log.2022-04-11
/tmp/loggie/service/pay/access.log
/tmp/loggie/service/pay/access.log.2022-04-11
对应配置:
sources:
- type: file
paths:
- /tmp/loggie/**/access.log{,.[2-9][0-9][0-9][0-9]-[01][0-9]-[0123][0-9]}
excludeFiles
字段 |
类型 |
是否必填 |
默认值 |
含义 |
excludeFiles |
string数组 |
非必填 |
无 |
排除采集的文件正则表达式 |
Example
sources:
- type: file
paths:
- /tmp/*.log
excludeFiles:
- \.gz$
ignoreOlder
字段 |
类型 |
是否必填 |
默认值 |
含义 |
ignoreOlder |
time.Duration |
非必填 |
无 |
例如48h,表示忽略更新时间在2天之前的文件,无需进行采集 |
ignoreSymlink
字段 |
类型 |
是否必填 |
默认值 |
含义 |
ignoreSymlink |
bool |
非必填 |
false |
是否忽略符号链接(软链接)的文件 |
字段 |
类型 |
是否必填 |
默认值 |
含义 |
addonMeta |
bool |
非必填 |
false |
是否添加默认的日志采集state元信息 |
event示例
{
"body": "this is test",
"state": {
"pipeline": "local",
"source": "demo",
"filename": "/var/log/a.log",
"timestamp": "2006-01-02T15:04:05.000Z",
"offset": 1024,
"bytes": 4096,
"hostname": "node-1"
}
}
state含义解释:
- pipeline: 所在的pipeline名称
- source: 所在的source名称
- filename: 采集的文件名称
- timestamp: 采集时刻的时间戳
- offset: 采集的数据在文件的offset偏移量
- bytes: 采集的数据字节数
- hostname: 所在节点名称
workerCount
字段 |
类型 |
是否必填 |
默认值 |
含义 |
workerCount |
int |
非必填 |
1 |
读取文件内容的工作线程(goroutine)数。单节点超过100个文件的时候考虑提高 |
readBufferSize
字段 |
类型 |
是否必填 |
默认值 |
含义 |
readBufferSize |
int |
非必填 |
65536 |
单次读取文件的数据量。默认64K=65536 |
maxContinueRead
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxContinueRead |
int |
非必填 |
16 |
连续读取同一个文件内容的次数,达到这个次数将强制切换到下个文件读取。主要作用是用来避免活跃文件一直占据读取资源,非活跃文件长时间得不到读取采集 |
maxContinueReadTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxContinueReadTimeout |
time.Duration |
非必填 |
3s |
同一个文件最长读取时间,超过这个时间将强制切换下个文件读取。作用与maxContinueRead 类似 |
inactiveTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
inactiveTimeout |
time.Duration |
非必填 |
3s |
如果当文件从上一次采集到现在超过inactiveTimeout的话,则认为文件进入不活跃状态(即最后一条日志已经写入完成),则可以安全的采集最后一行日志 |
firstNBytesForIdentifier
字段 |
类型 |
是否必填 |
默认值 |
含义 |
firstNBytesForIdentifier |
int |
非必填 |
128 |
使用采集目标文件的前n个字符来生成文件唯一code。如果文件的大小小于n,则该文件暂时不会采集。用途主要是,结合文件inode信息,用来精确标识一个文件。辅助判断文件是否删除或者是改名 |
charset
编码转换,用于将不同的编码转换为utf8,当下支持的编码转换格式.
sources:
- type: file
name: demo
paths:
- /tmp/log/*.log
fields:
topic: "loggie"
charset: "gbk"
字段 |
类型 |
是否必填 |
默认值 |
含义 |
charset |
string |
否 |
utf-8 |
提取字段的匹配模型 |
当前支持的转换为utf-8的编码格式有
nop
plain
utf-8
gbk
big5
euc-jp
iso2022-jp
shift-jis
euc-kr
iso8859-6e
iso8859-6i
iso8859-8e
iso8859-8i
iso8859-1
iso8859-2
iso8859-3
iso8859-4
iso8859-5
iso8859-6
iso8859-7
iso8859-8
iso8859-9
iso8859-10
iso8859-13
iso8859-14
iso8859-15
iso8859-16
cp437
cp850
cp852
cp855
cp858
cp860
cp862
cp863
cp865
cp866
ebcdic-037
ebcdic-1040
ebcdic-1047
koi8r
koi8u
macintosh
macintosh-cyrillic
windows1250
windows1251
windows1252
windows1253
windows1254
windows1255
windows1256
windows1257
windows1258
windows874
utf-16be-bom
utf-16le-bom
lineDelimiter
换行符相关配置
Example
sources:
- type: file
name: demo
lineDelimiter:
type: carriage_return_line_feed
value: "\r\n"
charset: gbk
type
字段 |
类型 |
是否必填 |
默认值 |
含义 |
type |
bool |
非必填 |
auto |
只有在type是custome时候value才会有效 |
当前支持的type有
auto
line_feed
vertical_tab
form_feed
carriage_return
carriage_return_line_feed
next_line
line_separator
paragraph_separator
null_terminator
对应的换行符为:
```
auto: {'\u000A'},
line_feed: {'\u000A'},
vertical_tab: {'\u000B'},
form_feed: {'\u000C'},
carriage_return: {'\u000D'},
carriage_return_line_feed: []byte("\u000D\u000A"),
next_line: {'\u0085'},
line_separator: []byte("\u2028"),
paragraph_separator: []byte("\u2029"),
null_terminator: {'\u0000'},
```
value
字段 |
类型 |
是否必填 |
默认值 |
含义 |
value |
string |
非必填 |
\n |
换行符的内容 |
charset
字段 |
类型 |
是否必填 |
默认值 |
含义 |
charset |
string |
非必填 |
utf-8 |
换行符编码 |
multi
多行采集相关配置
Example
sources:
- type: file
name: accesslog
multi:
active: true
pattern: '^\d{4}-\d{2}-\d{2}'
active
字段 |
类型 |
是否必填 |
默认值 |
含义 |
active |
bool |
非必填 |
false |
是否开启多行采集模式 |
pattern
字段 |
类型 |
是否必填 |
默认值 |
含义 |
pattern |
string |
当multi.active=true的时候必填 |
false |
判断为一条全新日志的正则表达式。例如配置为'^\[' ,则认为行首以[ 开头才是一条新日志,否则将这行内容合入上一条日志作为上一条日志的一部分 |
假设有多行日志如下所示:
2023-05-11 14:30:15 ERROR Exception in thread "main" java.lang.NullPointerException
at com.example.MyClass.myMethod(MyClass.java:25)
at com.example.MyClass.main(MyClass.java:10)
配置pattern正则:^\d{4}-\d{2}-\d{2}
会将日志变成一行。这样在日志查询的时候,不会产生上面的多行异常日志堆栈乱序等问题。
maxLines
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxLines |
int |
非必填 |
500 |
1条日志最多包含几行内容。默认500行,超过上限将强制发送当前日志,超出部分作为新的一条日志 |
maxBytes
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxBytes |
int64 |
非必填 |
131072 |
1条日志最多包含几个字节。默认128K,超过上限将强制发送当前日志,超出部分作为新的一条日志 |
timeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
timeout |
time.Duration |
非必填 |
5s |
1条日志最多等待多久采集为完整的1条日志。默认5s,超过上限将强制发送当前日志,超出部分作为新的一条日志 |
ack
source的确认机制相关配置。如果需确保要at least once
,需要开启ack机制,但是会有一定性能顺耗
Caution
该配置只能配置在defaults中
Example
defaults:
sources:
- type: file
ack:
enable: true
enable
字段 |
类型 |
是否必填 |
默认值 |
含义 |
enable |
bool |
非必填 |
true |
是否开启确认机制 |
maintenanceInterval
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maintenanceInterval |
time.Duration |
非必填 |
20h |
维护周期。用来定时清理过期的确认文件数据(例如不再采集的文件的ack信息) |
db
使用sqlite3
作为数据库。保存采集过程中的文件名称、文件inode、文件采集的offset等信息。用来在loggie reload或者重启后恢复上一次的采集进度
Caution
该配置只能配置在defaults中
Example
defaults:
sources:
- type: file
db:
file: "./data/loggie.db"
file
字段 |
类型 |
是否必填 |
默认值 |
含义 |
file |
string |
非必填 |
./data/loggie.db |
数据库文件路径 |
tableName
字段 |
类型 |
是否必填 |
默认值 |
含义 |
tableName |
string |
非必填 |
registry |
数据库表名称 |
flushTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
flushTimeout |
time.Duration |
非必填 |
2s |
定时将采集信息写入到数据库 |
bufferSize
字段 |
类型 |
是否必填 |
默认值 |
含义 |
bufferSize |
int |
非必填 |
2048 |
输入数据库的采集信息的缓冲区大小 |
cleanInactiveTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
cleanInactiveTimeout |
time.Duration |
非必填 |
504h |
清理数据库中的过期数据。如果数据的更新时间超过配置值,将会删除该条数据。默认保留21天 |
cleanScanInterval
字段 |
类型 |
是否必填 |
默认值 |
含义 |
cleanScanInterval |
time.Duration |
非必填 |
1h |
周期性的检查数据库中的过期数据。默认每隔1小时检查一次 |
watcher
监控文件变化的相关配置
Caution
该配置只能配置在defaults中
Example
defaults:
sources:
- type: file
watcher:
enableOsWatch: true
enableOsWatch
字段 |
类型 |
是否必填 |
默认值 |
含义 |
enableOsWatch |
bool |
非必填 |
true |
是否启用OS的监控通知机制。例如linux的inotify指令 |
scanTimeInterval
字段 |
类型 |
是否必填 |
默认值 |
含义 |
scanTimeInterval |
time.Duration |
非必填 |
10s |
周期性的检查文件的状态变更(例如文件的新建、删除等)。默认每隔10s检查一次 |
maintenanceInterval
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maintenanceInterval |
time.Duration |
非必填 |
5m |
周期性的维护工作(例如上报采集统计信息、清理文件等) |
fdHoldTimeoutWhenInactive
字段 |
类型 |
是否必填 |
默认值 |
含义 |
fdHoldTimeoutWhenInactive |
time.Duration |
非必填 |
5m |
当文件的上次采集到现在的时间超过限制(文件长时间没有写入,认为大概率不会再写入内容),将会释放该文件的文件句柄以释放系统资源 |
fdHoldTimeoutWhenRemove
字段 |
类型 |
是否必填 |
默认值 |
含义 |
fdHoldTimeoutWhenRemove |
time.Duration |
非必填 |
5m |
当文件被删除且未采集完成,会等待的最大时间来采集完成。超过限制不管文件最终是否采集完成,都会直接释放文件句柄不再采集 |
maxOpenFds
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxOpenFds |
int |
非必填 |
1024 |
最大打开的文件句柄数量,超出后的文件将暂时不会采集 |
maxEofCount
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxEofCount |
int |
非必填 |
3 |
最大连续读取文件遇到eof的次数。超过限制认为文件暂时不活跃,将进入“僵尸”队列等待更新事件被激活 |
cleanWhenRemoved
字段 |
类型 |
是否必填 |
默认值 |
含义 |
cleanWhenRemoved |
bool |
非必填 |
true |
当文件被删除后,是否同步删除db中的采集相关信息 |
readFromTail
字段 |
类型 |
是否必填 |
默认值 |
含义 |
readFromTail |
bool |
非必填 |
false |
是否从文件的最新一行开始采集,而不管历史写入到文件的内容。适用于采集系统的迁移等场景 |
taskStopTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
taskStopTimeout |
time.Duration |
非必填 |
30s |
采集任务退出的超时时间。是一个兜底方案,放在采集任务假死导致无法reload |
cleanFiles
清理文件相关配置。过期且已经采集完成的文件将会直接从磁盘删除以释放磁盘空间
maxHistoryDays
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxHistoryDays |
int |
非必填 |
无 |
(采集完成后的)文件最多保留的天数。如果超出限制,将会把文件直接从磁盘中删除。不配置则永远不会删除文件 |