日志服务支持通过Web Tracking采集HTML、H5、iOS和Android平台的日志,并支持自定义维度和指标。本文介绍如何使用Web Tracking采集日志。

背景信息

您可以通过Web Tracking采集各种浏览器、iOS APP或Android APP的用户信息,例如:
  • 用户使用的浏览器、操作系统、分辨率等信息。
  • 用户浏览行为记录(例如:用户在网站上的单击行为、购买行为等)。
  • 用户在APP中的停留时间、是否活跃等。
Web Tracking

注意事项

  • 使用Web Tracking则表示该Logstore打开互联网匿名写入权限,没有经过有效鉴权,可能产生脏数据。
  • GET请求不支持上传16KB以上的body内容。
  • POST请求每次写入的日志数量上限为3MB或者4096条,详情请参见PutLogs

步骤1:开通Web Tracking

  • 控制台方式
    1. 登录日志服务控制台
    2. 单击目标Project。
    3. 找到目标Logstore,单击下的修改
    4. Logstore属性页面,单击右上方的修改
    5. 打开WebTracking开关,并单击保存
  • SDK方式
    通过Log Service Java SDK开通Web Tracking。
    import com.aliyun.openservices.log.Client;
    import com.aliyun.openservices.log.common.LogStore;
    import com.aliyun.openservices.log.exception.LogException;
    public class WebTracking {
      static private String accessId = "your accesskey id";
      static private String accessKey = "your accesskey";
      static private String project = "your project";
      static private String host = "log service data address";
      static private String logStore = "your logstore";
      static private Client client = new Client(host, accessId, accessKey);
      public static void main(String[] args) {
          try {
              //在已经创建的Logstore上开通Web Tracking功能。
              LogStore logSt = client.GetLogStore(project, logStore).GetLogStore();
              client.UpdateLogStore(project, new LogStore(logStore, logSt.GetTtl(), logSt.GetShardCount(), true));
              //关闭Web Tracking功能。
              //client.UpdateLogStore(project, new LogStore(logStore, logSt.GetTtl(), logSt.GetShardCount(), false));
              //新建支持Web Tracking功能的Logstore。
              //client.UpdateLogStore(project, new LogStore(logStore, 1, 1, true));
          }
          catch (LogException e){
              e.printStackTrace();
          }
      }
    }

步骤2:采集日志

开通Web Tracking后,您可以通过以下四种方法上传日志到Logstore中。
  • 使用JavaScript SDK
    1. 脚本复制到loghub-tracking.js文件中,并将该文件复制到本地存放网页的目录
    2. 在网页中引入loghub-tracking.js文件,如下所示。
      <script type="text/javascript" src="loghub-tracking.js" async></script>
      说明 为了不阻塞页面加载,脚本会异步发送HTTP请求,如果页面加载过程中需要多次发送数据,后面的请求会覆盖前面的HTTP请求,看到的现象是浏览器中会显示Web Tracking请求退出。使用同步发送可以避免该问题,将脚本中的内容进行如下替换,可实现同步发送。
      • 原始语句
        this.httpRequest_.open("GET",url,true)
      • 替换后的语句
        this.httpRequest_.open("GET",url,false)
    3. 创建Tracker对象。
      var logger = new window.Tracker('${host}','${project}','${logstore}');
      logger.push('customer', 'zhangsan');
      logger.push('product', 'iphone 6s');
      logger.push('price', 5500);
      logger.logger();
      logger.push('customer', 'lisi');
      logger.push('product', 'ipod');
      logger.push('price', 3000);
      logger.logger();
      参数 说明
      ${host} 您的日志服务所在地域的Endpoint,详情请参见服务入口
      ${project} Project名称。
      ${logstore} Logstore名称。
      执行以上代码后,可以在日志服务中看到如下两条日志。
      customer:zhangsan
      product:iphone 6s
      price:5500
      customer:lisi
      product:ipod
      price:3000
  • 使用HTTP GET请求
    参见如下命令上传日志,请根据实际值替换参数。
    curl --request GET 'http://${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1&key2=val2'
    参数 说明
    ${project} Project名称。
    ${host} 日志服务所在地域的Endpoint,详情请参见服务入口
    ${logstore} Logstore名称。
    APIVersion=0.6.0 保留字段,必选。
    __topic__=yourtopic 指定日志主题,可选。
    key1=val1&key2=val2 您要上传到日志服务的键值对(Key-Value),可以有多个,请确保长度小于16KB。
  • 使用HTML img标签
    <img src='http://${project}.${host}/logstores/${logstore}/track.gif?APIVersion=0.6.0&key1=val1&key2=val2'/>
    <img src='http://${project}.${host}/logstores/${logstore}/track_ua.gif?APIVersion=0.6.0&key1=val1&key2=val2'/>
    track_ua.gif除了上传自定义的参数外,还会将http头中的UserAgent、referer也作为日志中的字段。
    说明 如果您需要采集HTTPS页面的referer, 那么上述Web Tracking的链接也必须为HTTPS。
  • 使用HTTP POST请求

    如果请求的数据量比较大,可以使用POST方法上传数据,详情请参见PutWebtracking