采集HTTP数据

Logtail会根据您的采集配置定期请求指定的URL,将请求返回的Body内容作为数据源上传到日志服务。本文介绍如何通过日志服务控制台创建Logtail采集配置采集HTTP数据。

前提条件

已在服务器上安装Logtail。更多信息,请参见安装Logtail(Linux系统)安装Logtail(Windows系统)

说明

目前支持Linux Logtail 0.16.0及以上版本,Windows Logtail 1.0.0.8及以上版本。

原理

Logtail根据您在采集配置中设置的HTTP请求的URL、Method、Header、Body等信息,定期对指定URL发起请求,将请求返回的状态码、body内容以及响应时间作为数据源上传到日志服务。

实现原理

功能

  • 支持配置多个URL。

  • 支持配置HTTP方法。

  • 支持配置HTTP请求的间隔。

  • 支持自定义请求头。

  • 支持HTTPS。

  • 支持检测body是否匹配固定模式。

应用场景

  • 监控应用状态(以HTTP方式提供监控接口),例如:

    • Nginx

    • Docker(HTTP方式)

    • Elastic Search

    • Haproxy

    • 其他以HTTP方式提供监控接口的服务

  • 检测服务可用性。

    定期请求服务,通过状态码以及请求延迟做服务的可用性监控。

  • 定期拉取数据,例如微博评论、粉丝数等。

使用限制

  • URL必须以httphttps开头。

  • 不支持自定义证书。

  • 不支持交互式通信方式。

操作步骤

例如每隔1000ms请求一次nginx status模块,URL为http://127.0.0.1/ngx_status,使用正则表达式提取返回body中的状态信息,操作步骤如下所示。

  1. 登录日志服务控制台

  2. 接入数据区域,选择自定义数据插件

  3. 选择目标Project和Logstore,单击下一步

  4. 创建机器组。

    • 如果您已有可用的机器组,请单击使用现有机器组

    • 如果您还没有可用的机器组,请执行以下操作(以ECS为例)。

      1. ECS机器页签中,通过手动选择实例方式选择目标ECS实例,单击创建

        具体操作,请参见安装Logtail(ECS实例)

        重要

        如果您的服务器是与日志服务属于不同账号的ECS、其他云厂商的服务器和自建IDC时,您需要手动安装Logtail。具体操作,请参见安装Logtail(Linux系统)安装Logtail(Windows系统)。手动安装Logtail后,您必须在该服务器上手动配置用户标识。具体操作,请参见配置用户标识

      2. 确认参数配置无误后,单击确定

      3. 安装完成后,单击确认安装完毕

      4. 创建机器组页面,输入名称,单击下一步

        日志服务支持创建IP地址机器组和用户自定义标识机器组,详细参数说明请参见创建IP地址机器组创建用户自定义标识机器组

  5. 确认目标机器组已在应用机器组区域,单击下一步

    重要

    创建机器组后立刻应用,可能因为连接未生效,导致心跳为FAIL,您可单击自动重试。如果还未解决,请参见Logtail机器组无心跳进行排查。

  6. 数据源设置页签中,设置配置名称插件配置,然后单击下一步

    • inputs为数据源配置,必选项。

      重要

      一个inputs中只允许配置一个类型的数据源。

    • processors为处理配置,用于解析数据。可选项,您可以配置一种或多种处理方式。

      如果当前的inputs配置无法满足日志解析需求,您可以在插件配置中添加processors配置,即添加Logtail插件处理数据。例如提取字段、提取日志时间、脱敏数据、过滤日志等。更多信息,请参见使用Logtail插件处理数据

    {
     "inputs": [
         {
             "type": "metric_http",
             "detail": {
                 "IntervalMs": 1000,
                 "Addresses": [
                     "http://127.0.0.1/ngx_status"
                 ],
                 "Headers": {"key":"value"},
                 "IncludeBody": true
             }
         }
     ],
     "processors" : [
         {
             "type": "processor_regex",
             "detail" : {
                 "SourceKey": "content",
                 "Regex": "Active connections: (\\d+)\\s+server accepts handled requests\\s+(\\d+)\\s+(\\d+)\\s+(\\d+)\\s+Reading: (\\d+) Writing: (\\d+) Waiting: (\\d+).*",
                 "Keys": [
                     "connection",
                     "accepts",
                     "handled",
                     "requests",
                     "reading",
                     "writing",
                     "waiting"
                 ],
                 "FullMatch": true,
                 "NoKeyError": true,
                 "NoMatchError": true,
                 "KeepSource": false
             }
         }
     ]
    }

    参数

    类型

    是否必选

    参数说明

    type

    string

    数据源类型,固定为metric_http。

    Addresses

    string 数组

    URL列表。

    重要

    必须以httphttps开头。

    IntervalMs

    int

    每次请求的间隔,单位:ms。

    Method

    string

    请求的方法名。必须大写,默认为GET

    Body

    string

    HTTP Body字段内容,默认为空。

    Headers

    key:string, value:string map

    HTTP Header的内容,默认为空。例如{"key":"value"},请根据实际值替换。

    PerAddressSleepMs

    int

    Addresses列表中,每个URL请求的间隔时间,单位:ms,默认值:100 ms。

    ResponseTimeoutMs

    int

    请求超时的时间,单位:ms,默认值:5000 ms。

    IncludeBody

    boolean

    是否采集请求的Body,默认值:false。如果为true,则将请求Body内容存放在名为content的key中。

    FollowRedirects

    boolean

    是否自动处理重定向,默认值:false。

    InsecureSkipVerify

    boolean

    是否跳过HTTPS安全检查,默认值:false。

    ResponseStringMatch

    string

    对返回的Body内容进行正则表达式检查,检查结果被存放在名为_response_match_的key中,如果匹配,value为yes;如果不匹配,value为no

  7. 预览数据及创建索引,然后单击下一步

    日志服务默认开启全文索引。您也可以根据采集到的日志,手动创建字段索引,或者单击自动生成索引,日志服务将自动生成字段索引。更多信息,请参见创建索引

    重要

    如果您要查询和分析日志,那么全文索引和字段索引必须至少启用一种。同时启用时,以字段索引为准。

问题排查

使用Logtail采集日志后,如果预览页面或查询页面无数据,您可以参见Logtail采集日志失败的排查思路进行排查。

执行结果

采集完成后,您可以在日志服务控制台查看数据,除通过正则表达式解析过的数据外,还包括HTTP请求附加的method、address、time、code、result信息。

"Index" : "7"  
"connection" : "1"  
"accepts" : "6079"  
"handled" : "6079"  
"requests" : "11596"  
"reading" : "0"  
"writing" : "1"  
"waiting" : "0"
"_method_" : "GET"  
"_address_" : "http://127.0.0.1/ngx_status"  
"_response_time_ms_" : "1.320"  
"_http_response_code_" : "200"  
"_result_" : "success"

每次请求,默认上传以下字段。

字段

说明

_address_

请求地址。

_method_

请求方法。

_response_time_ms_

响应延迟时间,单位:ms。

_http_response_code_

状态码。

_result_

请求的结果,取值为success、invalid_body、match_regex_invalid、mismatch、timeout。

_response_match_

返回的body内容是否匹配ResponseStringMatch字段。如果不存在ResponseStringMatch字段,值为null,如果指定了ResponseStringMatch字段,值为yes或no。