全部产品
弹性计算 会员服务 网络 安全 移动云 数加·大数据分析及展现 数加·大数据应用 管理与监控 云通信 阿里云办公 培训与认证 更多
存储与CDN 数据库 域名与网站(万网) 应用服务 数加·人工智能 数加·大数据基础服务 互联网中间件 视频服务 开发者工具 解决方案 物联网 智能硬件
日志服务

插件-处理采集数据

更新时间:2018-01-14 23:45:47

Logtail对于各类非文本的输入源提供了统一的数据处理配置,用户可对一个输入源配置多个处理方式,Logtail会根据配置顺序逐一执行各个处理方式。

注意:目前数据处理配置只适用于Binlog、MySQL查询结果、Nginx监控和HTTP输入源。

配置流程

实现原理

如下图所示,您可对每个输入源设置一个或多个处理方式,Logtail根据配置顺序执行各个处理方式,最终把处理完成的数据发送到日志服务。

数据处理原理

处理方式

目前支持的处理方式如下:

您也可以根据以上处理方式,为您的输入源定制组合配置

使用说明

为采集数据配置处理方式,处理配置的key为processors,value为json object的数组,数组内每个object代表一个处理方式配置。

单一处理方式包含两个字段:typedetail,其中type为该处理方式的类型,detail内部为该处理方式的详细配置。

  1. "processors" : [
  2. {
  3. "type" : "processor_anchor",
  4. "detail" : {
  5. ...
  6. }
  7. },
  8. {
  9. "type" : "processor_regex",
  10. "detail" : {
  11. ...
  12. }
  13. }
  14. ]

正则提取

该方式通过对指定字段进行正则表达式匹配来提取其中匹配的字段。

参数说明

正则提取方式的类型(type)为processor_regex

参数 类型 必选或可选 参数说明
SourceKey string 必选 原始字段名,即需要进行正则提取的字段。
Regex string 必选 用于匹配的正则表达式,需要提取的字段使用()标注,具体参考
Keys string 数组 必选 需要提取的字段名,例如[“key1”, “key2” …]。
NoKeyError bool 可选 默认为false,为true时若没有找到SourceKey字段则报错。
NoMatchError bool 可选 默认为false,为true时若正则不匹配则报错。
KeepSource bool 可选 默认为false,为true时匹配完后不丢弃SourceKey字段。
FullMatch bool 必选 默认为true,为true时只有字段完全匹配Regex时才会进行提取,为false时部分字段匹配也会进行提取。

示例

配置提取Access日志,详细配置如下:

  • 输入

    1. "content" : "10.200.98.220 - - [10/Aug/2017:14:57:51 +0800] \"POST /PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D HTTP/1.1\" 0.024 18204 200 37 \"-\" \"aliyun-sdk-java"
  • 配置详情

    1. {
    2. "type" : "processor_regex",
    3. "detail" : {"SourceKey" : "content",
    4. "Regex" : "([\\d\\.]+) \\S+ \\S+ \\[(\\S+) \\S+\\] \"(\\w+) ([^\\\"]*)\" ([\\d\\.]+) (\\d+) (\\d+) (\\d+|-) \"([^\\\"]*)\" \"([^\\\"]*)\" (\\d+)",
    5. "Keys" : ["ip", "time", "method", "url", "request_time", "request_length", "status", "length", "ref_url", "browser"],
    6. "NoKeyError" : true,
    7. "NoMatchError" : true,
    8. "KeepSource" : false
    9. }
    10. }
  • 处理后结果

    1. "ip" : "10.200.98.220"
    2. "time" : "10/Aug/2017:14:57:51"
    3. "method" : "POST"
    4. "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D"
    5. "request_time" : "0.024"
    6. "request_length" : "18204"
    7. "status" : "200"
    8. "length" : "27"
    9. "ref_url" : "-"
    10. "browser" : "aliyun-sdk-java"

标定提取

该方式通过标定指定字段起始结束关键字进行提取,标定后的字符串支持直接提取和JSON展开方式。

参数说明

标定提取方式的类型(type)为processor_anchor

参数 类型 必选或可选 参数说明
SourceKey string 必选 原始字段名,即需要进行提取的字段。
Anchors Anchor 数组 必选 标定项列表,具体参见下述表格。
NoAnchorError bool 可选 默认为false,为true时若查找不到关键字则报错。
NoKeyError bool 可选 默认为false,为true时若没有找到SourceKey字段则报错。
KeepSource bool 可选 默认为false,为true时匹配完后不丢弃SourceKey字段。

Anchor类型说明

参数 类型 必选或可选 参数说明
Start string 必选 起始关键字,若为空则代表匹配字符串开头。
Stop string 必选 结束关键字,若为空则代表匹配字符串结尾。
FieldName string 必选 提取的字段名。
FieldType string 必选 提取字段类型,支持”string”、”json”两种类型。
ExpondJson bool 可选 默认为false,为true且FieldTypejson时将提取的json逐层展开。
ExpondConnecter string 可选 JSON展开的连接符,默认为_
MaxExpondDepth int 可选 JSON展开最大深度,默认为0(无限制)。

示例

如下配置对某混合类型输入的处理结果如下:

  • 输入

    1. "content" : "time:2017.09.12 20:55:36\tjson:{\"key1\" : \"xx\", \"key2\": false, \"key3\":123.456, \"key4\" : { \"inner1\" : 1, \"inner2\" : false}}"
  • 配置详情

    1. {
    2. "type" : "processor_anchor",
    3. "detail" : {"SourceKey" : "content",
    4. "Anchors" : [
    5. {
    6. "Start" : "time",
    7. "Stop" : "\t",
    8. "FieldName" : "time",
    9. "FieldType" : "string",
    10. "ExpondJson" : false
    11. },
    12. {
    13. "Start" : "json:",
    14. "Stop" : "",
    15. "FieldName" : "val",
    16. "FieldType" : "json",
    17. "ExpondJson" : true
    18. }
    19. ]
    20. }
    21. }
  • 处理后结果

    1. "time" : "2017.09.12 20:55:36"
    2. "val_key1" : "xx"
    3. "val_key2" : "false"
    4. "val_key3" : "123.456"
    5. "value_key4_inner1" : "1"
    6. "value_key4_inner2" : "false"

单字符分隔符

该方式通过指定分隔符对字段进行分割,可指定Quote进行分隔符屏蔽。

参数说明

单字分隔符方式的类型(type)为processor_split_char

参数 类型 必选或可选 参数说明
SourceKey string 必选 原始字段名,即需要进行提取的字段。
SplitSep string 必选 分隔符,必须为单字符,可以设置不可见字符,例如\u0001
SplitKeys string 数组 必选 切分后的字段名,例如[“key1”, “key2”…]。
QuoteFlag bool 可选 默认为false,为true时代表使用quote。
Quote string 可选 必须为单字符,QuoteFlag为true时生效,可以设置不可见字符,例如\u0001
NoKeyError bool 可选 默认为false,为true时若没有找到SourceKey字段则报错。
NoMatchError bool 可选 默认为false,为true时若切分。
KeepSource bool 可选 默认为false,为true时匹配完后不丢弃SourceKey字段。

示例

对分隔符数据输入配置单字符分隔符处理方式,配置详情及处理结果如下:

  • 输入

    1. "content" : "10.200.98.220|10/Aug/2017:14:57:51 +0800|POST|PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D|0.024|18204|200|37|-|aliyun-sdk-java"
  • 配置详情

    1. {
    2. "type" : "processor_split_char",
    3. "detail" : {"SourceKey" : "content",
    4. "SplitSep" : "|",
    5. "SplitKeys" : ["ip", "time", "method", "url", "request_time", "request_length", "status", "length", "ref_url", "browser"]
    6. }
    7. }
  • 处理后结果

    1. "ip" : "10.200.98.220"
    2. "time" : "10/Aug/2017:14:57:51 +0800"
    3. "method" : "POST"
    4. "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D"
    5. "request_time" : "0.024"
    6. "request_length" : "18204"
    7. "status" : "200"
    8. "length" : "27"
    9. "ref_url" : "-"
    10. "browser" : "aliyun-sdk-java"

多字符分隔符

和单字符分隔符类似,多字符分隔符不支持Quote,完全按照分隔符拆分日志。

参数说明

多字符分隔符方式类型(type)为processor_split_string

参数 类型 必选或可选 参数说明
SourceKey string 必选 原始字段名,即需要进行提取的字段。
SplitSep string 必选 分隔符,可以设置不可见字符,例如\u0001\u0002
SplitKeys string 数组 必选 切分后的字段名,例如[“key1”, “key2”…]。
PreserveOthers bool 可选 默认为false, 为true时若分割的字段大于SplitKeys长度会保留超出部分。
ExpandOthers bool 可选 默认为false,为true时继续解析超出部分。
ExpandKeyPrefix string 可选 超出部分命名前缀,例如配置的expand_,则key为expand_1expand_2
NoKeyError bool 可选 默认为false,为true时若没有找到SourceKey字段则报错。
NoMatchError bool 可选 默认为false,为true时若切分。
KeepSource bool 可选 默认为false,为true时匹配完后不丢弃SourceKey字段。

示例

对分隔符数据输入采用多字符分隔符方式处理,配置详情及处理结果如下:

  • 输入

    1. "content" : "10.200.98.220|#|10/Aug/2017:14:57:51 +0800|#|POST|#|PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D|#|0.024|#|18204|#|200|#|37|#|-|#|aliyun-sdk-java"
  • 配置详情

    1. {
    2. "type" : "processor_split_string",
    3. "detail" : {"SourceKey" : "content",
    4. "SplitSep" : "|#|",
    5. "SplitKeys" : ["ip", "time", "method", "url", "request_time", "request_length", "status"],
    6. "PreserveOthers" : true,
    7. "ExpandOthers" : true,
    8. "ExpandKeyPrefix" : "expand_"
    9. }
    10. }
  • 处理后结果

    1. "ip" : "10.200.98.220"
    2. "time" : "10/Aug/2017:14:57:51 +0800"
    3. "method" : "POST"
    4. "url" : "/PutData?Category=YunOsAccountOpLog&AccessKeyId=U0UjpekFQOVJW45A&Date=Fri%2C%2028%20Jun%202013%2006%3A53%3A30%20GMT&Topic=raw&Signature=pD12XYLmGxKQ%2Bmkd6x7hAgQ7b1c%3D"
    5. "request_time" : "0.024"
    6. "request_length" : "18204"
    7. "status" : "200"
    8. "expand_1" : "27"
    9. "expand_2" : "-"
    10. "expand_3" : "aliyun-sdk-java"

GeoIP转换

GeoIP转换对数据输入中的IP进行地理位置转换,能够将IP转换成:国家、省份、城市、经纬度。

  • 注意: Logtail安装包本身并不带有GeoIP的数据库,需要您手动下载到本地并配置,建议下载精确到City的数据库。

参数说明

GeoIP转换插件类型(type)为processor_geoip

参数 类型 必选或可选 参数说明
SourceKey string 必选 原始字段名,即需要进行IP转换的字段。
DBPath string 必选 GeoIP数据库的全路径,数据库格式为mmdb,例如/user/data/GeoLite2-City_20180102/GeoLite2-City.mmdb
NoKeyError bool 可选 默认为false,为true时若没有找到SourceKey字段则报错。
NoMatchError bool 可选 默认为false,为true时若IP地址无效或数据库中未匹配到该IP则上报错误。
KeepSource bool 可选 默认为true,为false时转换完毕后丢弃SourceKey字段。
Language string 可选 语言,默认为zh-CN,需确保您的GeoIP数据库中包含相应的语言。

示例

对输入的IP采用GeoIP转换成地理位置信息,配置详情及处理结果如下:

  • 输入

    1. "source_ip" : "42.120.74.88"
  • 下载GeoIP数据库下载GeoIP数据库到安装Logtail的主机,例如可使用MaxMind GeoLite2中的City数据库

    注意: 请检查数据库格式为mmdb类型

  • 配置详情

    1. {
    2. "type": "processor_geoip",
    3. "detail": {
    4. "SourceKey": "ip",
    5. "NoKeyError": true,
    6. "NoMatchError": true,
    7. "KeepSource": true,
    8. "DBPath" : "/user/local/data/GeoLite2-City_20180102/GeoLite2-City.mmdb"
    9. }
    10. }
  • 处理后结果

    1. "source_ip_city_" : "42.120.74.88"
    2. "source_ip_province_" : "浙江省"
    3. "source_ip_city_" : "杭州"
    4. "source_ip_province_code_" : "ZJ"
    5. "source_ip_country_code_" : "CN"
    6. "source_ip_longitude_" : "120.16140000"
    7. "source_ip_latitude_" : "30.29360000"

正则过滤

该方式通过对字段进行正则表达式匹配过滤日志,可组合使用IncludeExclude两种方式。

参数说明

正则过滤方式的类型(type)为processor_filter_regex

参数 类型 必选或可选 参数说明
Include key:string value:string 的map 可选 key为日志字段,value为该字段匹配的正则表达式,若指定字段符合该表达式,则该条日志被收集。
Exclude key:string value:string 的map 可选 key为日志字段,value为该字段匹配的正则表达式,若指定字段符合该表达式,则该条日志不被收集。

注意: 一条日志只有完全被Include中的参数匹配,且不被Exclude中的任一参数匹配时才会被采集,否则直接丢弃。

示例

对输入日志采正则过滤方式处理,配置详情及处理结果如下:

  • 输入

    • 日志1
      1. "ip" : "10.237.34.22"
      2. "method" : "POST"
      3. ...
      4. "browser" : "aliyun-sdk-java"
    • 日志2
      1. "ip" : "10.237.34.22"
      2. "method" : "POST"
      3. ...
      4. "browser" : "chrome"
    • 日志3
      1. "ip" : "192.168.1.1"
      2. "method" : "POST"
      3. ...
      4. "browser" : "ali-sls-ilogtail"
  • 配置详情

    1. {
    2. "type" : "processor_filter_regex",
    3. "detail" : {
    4. "Include" : {
    5. "ip" : "10\\..*",
    6. "method" : "POST"
    7. },
    8. "Exclude" : {
    9. "browser" : "aliyun.*"
    10. }
    11. }
    12. }
  • 处理后结果

    日志是否匹配原因
    日志1不匹配browser匹配上了Exclude。
    日志2 匹配-
    日志3 不匹配Include中”ip”字段不匹配,不以”10”开头。

组合配置

各个处理配置可以组合搭配使用。您可以参考下述配置对日志先进行分隔符切分后,再对切分后的detail进行标定提取。

  • 输入

    1. "content" : "ACCESS|QAS|11.175.88.71|1508729889935|52460dbed4d540b88a973cf5452b1447|1238|appKey=ba,env=pub,requestTime=1508729889913,latency=22ms,request={appKey:ba,optional:{\\domains\\:\\daily\\,\\version\\:\\v2\\},rawQuery:{\\query\\:\\去乐山的路线\\,\\domain\\:\\导航\\,\\intent\\:\\navigate\\,\\slots\\:\\to_geo:level3=乐山\\,\\location\\:\\北京\\},requestId:52460dbed4d540b88a973cf5452b1447},response={answers:[],status:SUCCESS}|"
  • 配置详情

    1. "processors" : [
    2. {
    3. "type" : "processor_split_char",
    4. "detail" : {"SourceKey" : "content",
    5. "SplitSep" : "|",
    6. "SplitKeys" : ["method", "type", "ip", "time", "req_id", "size", "detail"]
    7. }
    8. },
    9. {
    10. "type" : "processor_anchor",
    11. "detail" : "SourceKey" : "detail",
    12. "Anchors" : [
    13. {
    14. "Start" : "appKey=",
    15. "Stop" : ",env=",
    16. "FieldName" : "appKey",
    17. "FieldType" : "string"
    18. },
    19. {
    20. "Start" : ",env",
    21. "Stop" : ",requestTime=",
    22. "FieldName" : "env",
    23. "FieldType" : "string"
    24. },
    25. {
    26. "Start" : ",requestTime=",
    27. "Stop" : ",latency",
    28. "FieldName" : "requestTime",
    29. "FieldType" : "string"
    30. },
    31. {
    32. "Start" : ",latency=",
    33. "Stop" : ",request=",
    34. "FieldName" : "latency",
    35. "FieldType" : "string"
    36. },
    37. {
    38. "Start" : ",request=",
    39. "Stop" : ",response=",
    40. "FieldName" : "request",
    41. "FieldType" : "string"
    42. },
    43. {
    44. "Start" : ",response=",
    45. "Stop" : "",
    46. "FieldName" : "response",
    47. "FieldType" : "json"
    48. }
    49. ]
    50. }
    51. }
    52. ]
  • 处理后结果

    1. "method" : "ACCESS"
    2. "type" : "QAS"
    3. "ip" : "11.175.88.71"
    4. "time" : "1508729889935"
    5. "req_id" : "52460dbed4d540b88a973cf5452b1447"
    6. "size" : "1238"
    7. "appKey" : "ba"
    8. "env" : "pub"
    9. "requestTime" : "1508729889913"
    10. "latency" : "22ms"
    11. "request" : "{appKey:nui-banma,optional:{\\domains\\:\\daily-faq\\,\\version\\:\\v2\\},rawQuery:{\\query\\:\\\345\216\273\344\271\220\345\261\261\347\232\204\350\267\257\347\272\277\\,\\domain\\:\\\345\257\274\350\210\252\\,\\intent\\:\\navigate\\,\\slots\\:\\to_geo:level3=\344\271\220\345\261\261\\,\\location\\:\\\345\214\227\344\272\254\\},requestId:52460dbed4d540b88a973cf5452b1447}"
    12. "response_answers" : "[]"
    13. "response_status" : "SUCCESS"
本文导读目录