file

file source用于日志采集。

Example

  1. sources:
  2. - type: file
  3. name: accesslog

Tips

如果你使用logconfig/clusterlogconfig采集容器日志,file source里还增加了额外的字段,请参考这里

paths

字段类型是否必填默认值含义
pathsstring数组必填采集的path路径,使用glob表达式来匹配。支持glob扩展表达式Brace ExpansionGlob Star

Example

需要采集的目标文件:

  1. /tmp/loggie/service/order/access.log
  2. /tmp/loggie/service/order/access.log.2022-04-11
  3. /tmp/loggie/service/pay/access.log
  4. /tmp/loggie/service/pay/access.log.2022-04-11

对应配置:

  1. sources:
  2. - type: file
  3. paths:
  4. - /tmp/loggie/**/access.log{,.[2-9][0-9][0-9][0-9]-[01][0-9]-[0123][0-9]}

excludeFiles

字段类型是否必填默认值含义
excludeFilesstring数组非必填排除采集的文件正则表达式

Example

  1. sources:
  2. - type: file
  3. paths:
  4. - /tmp/*.log
  5. excludeFiles:
  6. - \.gz$

ignoreOlder

字段类型是否必填默认值含义
ignoreOldertime.Duration非必填例如48h,表示忽略更新时间在2天之前的文件,无需进行采集
字段类型是否必填默认值含义
ignoreSymlinkbool非必填false是否忽略符号链接(软链接)的文件

addonMeta

字段类型是否必填默认值含义
addonMetabool非必填false是否添加默认的日志采集state元信息

event示例

  1. {
  2. "body": "this is test",
  3. "state": {
  4. "pipeline": "local",
  5. "source": "demo",
  6. "filename": "/var/log/a.log",
  7. "timestamp": "2006-01-02T15:04:05.000Z",
  8. "offset": 1024,
  9. "bytes": 4096,
  10. "hostname": "node-1"
  11. }
  12. }

state含义解释:

  • pipeline: 所在的pipeline名称
  • source: 所在的source名称
  • filename: 采集的文件名称
  • timestamp: 采集时刻的时间戳
  • offset: 采集的数据在文件的offset偏移量
  • bytes: 采集的数据字节数
  • hostname: 所在节点名称

workerCount

字段类型是否必填默认值含义
workerCountint非必填1读取文件内容的工作线程(goroutine)数。单节点超过100个文件的时候考虑提高

readBufferSize

字段类型是否必填默认值含义
readBufferSizeint非必填65536单次读取文件的数据量。默认64K=65536

maxContinueRead

字段类型是否必填默认值含义
maxContinueReadint非必填16连续读取同一个文件内容的次数,达到这个次数将强制切换到下个文件读取。主要作用是用来避免活跃文件一直占据读取资源,非活跃文件长时间得不到读取采集

maxContinueReadTimeout

字段类型是否必填默认值含义
maxContinueReadTimeouttime.Duration非必填3s同一个文件最长读取时间,超过这个时间将强制切换下个文件读取。作用与maxContinueRead类似

inactiveTimeout

字段类型是否必填默认值含义
inactiveTimeouttime.Duration非必填3s如果当文件从上一次采集到现在超过inactiveTimeout的话,则认为文件进入不活跃状态(即最后一条日志已经写入完成),则可以安全的采集最后一行日志

firstNBytesForIdentifier

字段类型是否必填默认值含义
firstNBytesForIdentifierint非必填128使用采集目标文件的前n个字符来生成文件唯一code。如果文件的大小小于n,则该文件暂时不会采集。用途主要是,结合文件inode信息,用来精确标识一个文件。辅助判断文件是否删除或者是改名

charset

编码转换,用于将不同的编码转换为utf8,当下支持的编码转换格式.

Example

  1. sources:
  2. - type: file
  3. name: demo
  4. paths:
  5. - /tmp/log/*.log
  6. fields:
  7. topic: "loggie"
  8. charset: "gbk"
字段类型是否必填默认值含义
charsetstringutf-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

  1. sources:
  2. - type: file
  3. name: demo
  4. lineDelimiter:
  5. type: carriage_return_line_feed
  6. value: "\r\n"
  7. charset: gbk

type

字段类型是否必填默认值含义
typebool非必填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

对应的换行符为:

  1. auto: {'\u000A'},
  2. line_feed: {'\u000A'},
  3. vertical_tab: {'\u000B'},
  4. form_feed: {'\u000C'},
  5. carriage_return: {'\u000D'},
  6. carriage_return_line_feed: []byte("\u000D\u000A"),
  7. next_line: {'\u0085'},
  8. line_separator: []byte("\u2028"),
  9. paragraph_separator: []byte("\u2029"),
  10. null_terminator: {'\u0000'},
  11. ```
  1. ### value
  2. <table><thead><tr><th><code>字段</code></th><th><code>类型</code></th><th><code>是否必填</code></th><th><code>默认值</code></th><th><code>含义</code></th></tr></thead><tbody><tr><td>value</td><td>string</td><td>非必填</td><td>\n</td><td>换行符的内容</td></tr></tbody></table>
  3. ### charset
  4. <table><thead><tr><th><code>字段</code></th><th><code>类型</code></th><th><code>是否必填</code></th><th><code>默认值</code></th><th><code>含义</code></th></tr></thead><tbody><tr><td>charset</td><td>string</td><td>非必填</td><td>utf-8</td><td>换行符编码</td></tr></tbody></table>
  5. ## multi
  6. 多行采集相关配置
  7. Example

sources:

  • type: file name: accesslog multi: active: true ```

active

字段类型是否必填默认值含义
activebool非必填false是否开启多行采集模式

pattern

字段类型是否必填默认值含义
patternstring当multi.active=true的时候必填false判断为一条全新日志的正则表达式。例如配置为‘^[‘,则认为行首以[开头才是一条新日志,否则将这行内容合入上一条日志作为上一条日志的一部分

maxLines

字段类型是否必填默认值含义
maxLinesint非必填5001条日志最多包含几行内容。默认500行,超过上限将强制发送当前日志,超出部分作为新的一条日志

maxBytes

字段类型是否必填默认值含义
maxBytesint64非必填1310721条日志最多包含几个字节。默认128K,超过上限将强制发送当前日志,超出部分作为新的一条日志

timeout

字段类型是否必填默认值含义
timeouttime.Duration非必填5s1条日志最多等待多久采集为完整的1条日志。默认5s,超过上限将强制发送当前日志,超出部分作为新的一条日志

ack

source的确认机制相关配置。如果需确保要at least once,需要开启ack机制,但是会有一定性能顺耗

Caution

该配置只能配置在defaults中

Example

  1. defaults:
  2. sources:
  3. - type: file
  4. ack:
  5. enable: true

enable

字段类型是否必填默认值含义
enablebool非必填true是否开启确认机制

maintenanceInterval

字段类型是否必填默认值含义
maintenanceIntervaltime.Duration非必填20h维护周期。用来定时清理过期的确认文件数据(例如不再采集的文件的ack信息)

db

使用sqlite3作为数据库。保存采集过程中的文件名称、文件inode、文件采集的offset等信息。用来在loggie reload或者重启后恢复上一次的采集进度

Caution

该配置只能配置在defaults中

Example

  1. defaults:
  2. sources:
  3. - type: file
  4. db:
  5. file: "./data/loggie.db"

file

字段类型是否必填默认值含义
filestring非必填./data/loggie.db数据库文件路径

tableName

字段类型是否必填默认值含义
tableNamestring非必填registry数据库表名称

flushTimeout

字段类型是否必填默认值含义
flushTimeouttime.Duration非必填2s定时将采集信息写入到数据库

bufferSize

字段类型是否必填默认值含义
bufferSizeint非必填2048输入数据库的采集信息的缓冲区大小

cleanInactiveTimeout

字段类型是否必填默认值含义
cleanInactiveTimeouttime.Duration非必填504h清理数据库中的过期数据。如果数据的更新时间超过配置值,将会删除该条数据。默认保留21天

cleanScanInterval

字段类型是否必填默认值含义
cleanScanIntervaltime.Duration非必填1h周期性的检查数据库中的过期数据。默认每隔1小时检查一次

watcher

监控文件变化的相关配置

Caution

该配置只能配置在defaults中

Example

  1. defaults:
  2. sources:
  3. - type: file
  4. watcher:
  5. enableOsWatch: true

enableOsWatch

字段类型是否必填默认值含义
enableOsWatchbool非必填true是否启用OS的监控通知机制。例如linux的inotify指令

scanTimeInterval

字段类型是否必填默认值含义
scanTimeIntervaltime.Duration非必填10s周期性的检查文件的状态变更(例如文件的新建、删除等)。默认每隔10s检查一次

maintenanceInterval

字段类型是否必填默认值含义
maintenanceIntervaltime.Duration非必填5m周期性的维护工作(例如上报采集统计信息、清理文件等)

fdHoldTimeoutWhenInactive

字段类型是否必填默认值含义
fdHoldTimeoutWhenInactivetime.Duration非必填5m当文件的上次采集到现在的时间超过限制(文件长时间没有写入,认为大概率不会再写入内容),将会释放该文件的文件句柄以释放系统资源

fdHoldTimeoutWhenRemove

字段类型是否必填默认值含义
fdHoldTimeoutWhenRemovetime.Duration非必填5m当文件被删除且未采集完成,会等待的最大时间来采集完成。超过限制不管文件最终是否采集完成,都会直接释放文件句柄不再采集

maxOpenFds

字段类型是否必填默认值含义
maxOpenFdsint非必填1024最大打开的文件句柄数量,超出后的文件将暂时不会采集

maxEofCount

字段类型是否必填默认值含义
maxEofCountint非必填3最大连续读取文件遇到eof的次数。超过限制认为文件暂时不活跃,将进入“僵尸”队列等待更新事件被激活

cleanWhenRemoved

字段类型是否必填默认值含义
cleanWhenRemovedbool非必填true当文件被删除后,是否同步删除db中的采集相关信息

readFromTail

字段类型是否必填默认值含义
readFromTailbool非必填false是否从文件的最新一行开始采集,而不管历史写入到文件的内容。适用于采集系统的迁移等场景

taskStopTimeout

字段类型是否必填默认值含义
taskStopTimeouttime.Duration非必填30s采集任务退出的超时时间。是一个兜底方案,放在采集任务假死导致无法reload

cleanFiles

清理文件相关配置。过期且已经采集完成的文件将会直接从磁盘删除以释放磁盘空间

maxHistoryDays

字段类型是否必填默认值含义
maxHistoryDaysint非必填(采集完成后的)文件最多保留的天数。如果超出限制,将会把文件直接从磁盘中删除。不配置则永远不会删除文件