file
file source用于日志采集。
!!! example
```yaml
sources:
- type: file
name: accesslog
```
paths
字段 |
类型 |
是否必填 |
默认值 |
含义 |
paths |
string数组 |
必填 |
无 |
采集的path路径,使用glob表达式来匹配。支持glob扩展表达式Brace Expansion 和Glob Star |
!!! example
需要采集的目标文件:
```yaml
/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
```
对应配置:
```yaml
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数组 |
非必填 |
无 |
排除采集的文件正则表达式 |
ignoreOlder
字段 |
类型 |
是否必填 |
默认值 |
含义 |
ignoreOlder |
time.Duration |
非必填 |
无 |
例如48h,表示忽略更新时间在2天之前的文件,无需进行采集 |
ignoreSymlink
字段 |
类型 |
是否必填 |
默认值 |
含义 |
ignoreSymlink |
bool |
非必填 |
false |
是否忽略符号链接(软链接)的文件 |
addonMeta
字段 |
类型 |
是否必填 |
默认值 |
含义 |
addonMeta |
bool |
非必填 |
false |
是否添加默认的日志采集state元信息 |
!!! example "event示例"
```json
{
"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个文件的时候考虑提高 |
readChanSize
字段 |
类型 |
是否必填 |
默认值 |
含义 |
readChanSize |
int |
非必填 |
512 |
读取任务的channel size |
readBufferSize
字段 |
类型 |
是否必填 |
默认值 |
含义 |
readBufferSize |
int |
非必填 |
65536 |
单次读取文件的数据量。默认64K=65536 |
maxContinueRead
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxContinueRead |
int |
非必填 |
16 |
连续读取同一个文件内容的次数,达到这个次数将强制切换到下个文件读取。主要作用是用来避免活跃文件一直占据读取资源,非活跃文件长时间得不到读取采集 |
maxContinueReadTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxContinueReadTimeout |
time.Duration |
非必填 |
3s |
同一个文件最长读取时间,超过这个时间将强制切换下个文件读取。作用与maxContinueRead 类似 |
inactiveTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
inactiveTimeout |
time.Duration |
非必填 |
3s |
如果当文件从上一次采集到现在超过inactiveTimeout的话,则认为文件进入不活跃状态(即最后一条日志已经写入完成),则可以安全的采集最后一行日志 |
multi
多行采集相关配置
!!! example
```yaml
sources:
- type: file
name: accesslog
multi:
active: true
```
active
字段 |
类型 |
是否必填 |
默认值 |
含义 |
active |
bool |
非必填 |
false |
是否开启多行采集模式 |
pattern
字段 |
类型 |
是否必填 |
默认值 |
含义 |
pattern |
string |
当multi.active=true的时候必填 |
false |
判断为一条全新日志的正则表达式。例如配置为'^\[' ,则认为行首以[ 开头才是一条新日志,否则将这行内容合入上一条日志作为上一条日志的一部分 |
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
```yaml
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
```yaml
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
```yaml
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 |
周期性的维护工作(例如上报采集统计信息、清理文件等)。默认每隔10s检查一次 |
fdHoldTimeoutWhenInactive
字段 |
类型 |
是否必填 |
默认值 |
含义 |
fdHoldTimeoutWhenInactive |
time.Duration |
非必填 |
5m |
当文件的上次采集到现在的时间超过限制(文件长时间没有写入,认为大概率不会再写入内容),将会释放该文件的文件句柄以释放系统资源 |
fdHoldTimeoutWhenRemove
字段 |
类型 |
是否必填 |
默认值 |
含义 |
fdHoldTimeoutWhenRemove |
time.Duration |
非必填 |
5m |
当文件被删除且未采集完成,会等待的最大时间来采集完成。超过限制不管文件最终是否采集完成,都会直接释放文件句柄不再采集 |
maxOpenFds
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxOpenFds |
int |
非必填 |
512 |
最大打开的文件句柄数量,超出后的文件将暂时不会采集 |
maxEofCount
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxEofCount |
int |
非必填 |
3 |
最大连续读取文件遇到eof的次数。超过限制认为文件暂时不活跃,将进入“僵尸”队列等待更新事件被激活 |
cleanWhenRemoved
字段 |
类型 |
是否必填 |
默认值 |
含义 |
cleanWhenRemoved |
bool |
非必填 |
true |
当文件被删除后,是否同步删除db中的采集相关信息 |
readFromTail
字段 |
类型 |
是否必填 |
默认值 |
含义 |
readFromTail |
bool |
非必填 |
false |
是否从文件的最新一行开始采集,而不管历史写入到文件的内容。适用于采集系统的迁移等场景 |
taskStopTimeout
字段 |
类型 |
是否必填 |
默认值 |
含义 |
taskStopTimeout |
time.Duration |
非必填 |
30s |
采集任务退出的超时时间。是一个兜底方案,放在采集任务假死导致无法reload |
cleanFiles
清理文件相关配置。过期且已经采集完成的文件将会直接从磁盘删除以释放磁盘空间
maxHistoryDays
字段 |
类型 |
是否必填 |
默认值 |
含义 |
maxHistoryDays |
int |
非必填 |
无 |
(采集完成后的)文件最多保留的天数。如果超出限制,将会把文件直接从磁盘中删除。不配置则永远不会删除文件 |