日志介绍

分隔符日志以换行符作为边界,每一个自然行都是一条日志。每一条日志以固定分隔符连接日志的多个字段,分隔符(Separator)包括制表符、空格、竖线、逗号、分号等单字符。如果字段内部包含分隔符,使用双引号作为引用符(Quote)对字段进行包裹。

常见的分隔符日志有:CSV、TSV 等。

分隔符日志使用分隔符(Separator)将一条日志切分成多个字段,支持单字符多字符两种模式。

单字符模式

单字符模式中,您需要指定分隔符,也可以同时指定引用符。
  • 分隔符:日志字段通过单字符的分隔符进行切分,例如制表符(\t)、竖线(|)、空格、逗号(,)、分号(;)和不可见字符等单字符。
    说明 分隔符不支持设置为双引号( ")。

    如果双引号作为日志内容,而不是引用符(Quote)出现在日志中,则需要进行转义,日志中应处理为""。日志服务解析字段时会自动还原,即将""还原为"。双引号(")可以作为Quote,在字段的边界单次出现;也可以作为字段内容成对出现(即转义为""),其它情况不符合分隔符日志的格式定义,请考虑极简模式、正则模式等其它方式进行字段解析。

    例如,逗号作为分隔符,双引号和逗号作为日志字段中的一部分,需要将包含分逗号的日志字段用Quote包裹,同时将日志字段中的双引号转义为成对的双引号""。处理后的日志格式为:1999,Chevy,"Venture ""Extended Edition, Very Large""","",5000.00。该日志可以被解析为五个字段: 1999ChevyVenture "Extended Edition, Very Large"、空字段和5000.00

  • 引用符:日志字段内容中包含分隔符时,为避免日志字段被误分割,需要指定引用符(Quote)对内部包含分隔符的日志字段进行包裹隔离。被引用符包裹的内容会被日志服务解析为一个完整字段,字段之间只能存在分隔符。
    说明 如果字段之间包含空格、制表符等非分隔符字符,请修改日志格式。

    引用符可以设置为制表符(\t)、竖线(|)、空格、逗号(,)、分号(;)和不可见字符等单字符。

    例如,逗号(,)作为分隔符,双引号作为Quote时,日志格式为:1997,Ford,E350,"ac, abs, moon",3000.00。该日志可以被解析为5个字段: 1997FordE350ac, abs, moon3000.00。其中被Quote包裹的ac, abs, moon被看做是一个完整字段。

说明 日志服务支持将分隔符和引用符设置为不可见字符。不可见字符是ASCII码中编号为1~31及127的字符,指定分隔符和引用符为不可见字符时,您需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为 0x不可见字符在ASCII码中对应的十六进制数。例如ASCII码中排行为1的不可见字符填写为 0x01

多字符模式

多字符模式中,分隔符可以包括2~3个字符,如(||)、(&&&)、(^_^)等多字符。多字符分隔符模式下,日志解析完全根据分隔符进行匹配,您无需使用引用符(Quote)对日志进行包裹。

说明 需确保日志字段内容中不会出现分隔符的完整匹配,否则会产生字段误分割。

例如,分隔符设置为&&的情况下,日志:1997&&Ford&&E350&&ac&abs&moon&&3000.00会被解析为5个字段:1997FordE350ac&abs&moon3000.00

日志示例

  • 单字符分隔符日志
    05/May/2016:13:30:28,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",200,18204,aliyun-sdk-java
    05/May/2016:13:31:23,10.10.*.*,"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1",401,23472,aliyun-sdk-java
  • 多字符分隔符日志
    05/May/2016:13:30:28&&10.200.**.**&&POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1&&200&&18204&&aliyun-sdk-java
    05/May/2016:13:31:23&&10.200.**.**&&POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=****************&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=******************************** HTTP/1.1&&401&&23472&&aliyun-sdk-java

配置Logtail收集分隔符日志

配置Logtail收集分隔符日志的详细操作步骤请参考采集文本日志,根据您的网络部署和实际情况选择对应配置。

  1. Logstore列表界面单击数据接入向导图表,进入数据接入向导。
  2. 选择数据类型。

    选择文本文件并单击下一步

  3. 配置数据源。
    1. 填写配置名称、日志路径,并选择日志收集模式为分隔符模式
    2. 填写日志样例并选择分隔符和引用符。

      请根据您的日志格式选择正确的分隔符与引用符,否则日志数据会解析失败。

      说明 指定分隔符或引用符为不可见字符时,您需要查找不可见字符在ASCII码中对应的十六进制数,输入的格式为 0x不可见字符在ASCII码中对应的十六进制数。例如ASCII码中排行为1的不可见字符填写为 0x01
      图 1. 配置数据源
    3. 指定日志抽取结果中的Key。

      填写日志样例并选择分隔符后,日志服务会按照您选择的分隔符提取日志字段,并将其定义为Value,您需要分别为Value指定对应的Key。

      如上日志样例,使用不可见字符Ox01进行分割,同时使用不可见字符0x02作为引用符。日志一共包含6个字段,设置Key值分别为:time,ip,url,status,latency,user-agent。

    4. 确认是否接受部分字段。

      配置采集后,若日志中分割出的字段数少于配置的Key数量,是否上传已解析的字段。开启表示上传,关闭表示丢弃本条日志。

      例如,在配置采集分隔符日志时,示例日志为11|22|33|44|55,设置分隔符为|,日志字段会被解析为1122334455,为其分别设置Key为ABCDE。如果配置采集时开启了接受部分字段,采集日志11|22|33|55时,55字段会作为KeyD的Value被上传到日志服务。如果配置采集时关闭了接受部分字段,该条日志会因字段与Key不匹配而被丢弃。

    5. 指定日志时间。

      可以选择系统时间作为一条日志的时间,也可以使用日志的一列作为时间,比如选择 time 字段(05/May/2016:13:30:29)作为时间,配置日期格式请参考配置时间格式

      图 2. 指定日志时间


    6. 在控制台上预览日志,确认是否成功收集。
      图 3. 预览日志