本文中含有需要您注意的重要提示信息,忽略该信息可能对您的业务造成影响,请务必仔细阅读。
如需收集和分析用户在浏览器、小程序上的信息,例如用户的浏览行为记录、购买行为记录、停留时间,可以使用WebTracking功能。只需对业务代码进行较少的改动,就可以将用户行为信息上传到日志服务的Logstore中。
什么是WebTracking
WebTracking是一种通过向前端页面添加特定代码段,来跟踪用户行为的技术。日志服务的WebTracking能够在浏览器、小程序和移动端中采集用户行为数据,并将其上传至Logstore。例如:
用户使用的浏览器、操作系统、分辨率等信息。
用户浏览行为记录(例如:用户在网站上的单击行为、购买行为等信息)。
用户在App中的停留时间、是否活跃等信息。
WebTracking提供安全接入和匿名写入两种数据上传方案:
方案 | 安全性 | 方案说明 | 适用环境 | 场景导航 |
高 | 通过在前端应用中集成WebTracking SDK,并结合STS生成安全令牌,实现日志的安全上传。 | 生产环境 | ||
低 | 允许客户端在无需身份验证的情况下直接写入数据。支持以下四种方式:
| 测试环境 |
前提条件
创建Project
创建Logstore
若无可用Logstore,可参考此处步骤创建一个基础Logstore,详细配置信息参见管理Logstore。
|
权限准备(仅安全接入需要)
创建用于扮演角色的RAM用户:创建时访问方式选择使用永久 AccessKey 访问,并保存AccessKey信息。
重要RAM用户的AccessKey Secret只在创建时显示,不支持查询。请妥善保管,谨防泄露。
为RAM用户授予扮演角色的权限:为RAM用户添加AliyunSTSAssumeRoleAccess权限,使其可以通过扮演RAM角色获取临时身份凭证。
创建用于前端写入日志的RAM角色:创建RAM用户要扮演的RAM角色,例如命名为:
sls-web-tracking
。创建写入日志的自定义权限策略:该策略命名为
post-logs-policy
,在脚本编辑页签,使用以下脚本替换配置框中的原有内容,并将<Project名称>
、<Logstore名称>
替换为实际的Project、Logstore名称。重要该策略只能向指定的SLS Logstore上传日志。可以根据实际需求配置更细粒度的授权策略,防止出现权限过大的风险。更多信息,请参见RAM自定义授权示例。
{ "Version":"1", "Statement":[ { "Effect":"Allow", "Action":[ "log:PostLogStoreLogs", "log:PutLogs" ], "Resource":[ "acs:log:*:*:project/<Project名称>/logstore/<Logstore名称>" ] } ] }
为RAM角色授予写入日志的权限:为RAM角色
sls-web-tracking
授予创建的自定义权限post-logs-policy
,以便被RAM用户扮演时能获取所需的权限。配置环境变量:在业务服务器的环境变量中配置RAM用户的访问密钥,具体操作参见在Linux、macOS和Windows系统配置环境变量。
安全接入:集成STS与WebTracking SDK
该方案通过在业务服务器部署STS临时凭证服务,并与客户端集成的WebTracking SDK相结合,将前端日志安全、直接地上传至日志服务的Logstore。流程如下:
客户端请求凭证:前端应用(浏览器、小程序、移动端)向业务服务器发起请求,申请获取用于上传日志的临时访问凭证。
业务服务器获取临时STS Token:业务服务器在验证客户端请求的合法性后,使用提前创建的RAM用户的AK作为访问凭证,调用STS服务的AssumeRole接口 - 获取RAM角色的临时身份凭证。
阿里云STS(Security Token Service)是阿里云提供的一种临时访问权限管理服务,通过STS可以获取自定义时效和访问权限的临时身份凭证。
返回临时凭证:STS服务检测AK的合法性,并验证RAM用户具备扮演目标RAM角色的权限后,向业务服务器返回STS Token。
客户端获取临时凭证:业务服务器将获取到的STS Token返回给客户端。
客户端上传日志:客户端使用获取到的STS Token将采集到的日志上传到指定的Logstore。
SLS鉴权与存储:日志服务验证STS Token的有效性以及是否具备访问目标日志库的权限后,处理客户端上传日志请求,并返回上传结果。
浏览器端日志直传
一键部署:通过资源编排服务(ROS)自动创建并配置所需资源,快速体验方案效果。
手动部署:手动完成后端服务和前端应用的配置,可与现有业务集成。示例工程请参见:simple-web-tracking-sts.zip。
手动部署
1. 搭建STS临时凭证下发服务
在业务服务器上集成STS SDK,实现一个获取临时STS身份凭证的接口。前端应用后续将通过访问此接口,动态获取用于向日志服务上传日志的临时身份凭证。
创建项目目录:登录服务器,执行以下命令,创建并进入项目的工作目录。
mkdir my_web_sample cd my_web_sample
安装依赖:执行以下命令,安装 Flask Web 框架及阿里云 SDK 相关的依赖库。
pip3 install Flask==3.1.2 pip3 install aiohttp==3.8.4 pip3 install alibabacloud-credentials==0.3.2 pip3 install alibabacloud-sts20150401==1.1.3 pip3 install alibabacloud-tea==0.3.2 pip3 install alibabacloud-tea-openapi==0.3.7 pip3 install alibabacloud-tea-util==0.3.8 pip3 install alibabacloud-tea-xml==0.0.2
编写后端代码:创建
main.py
文件,并添加以下Python代码。import json from flask import Flask, render_template from alibabacloud_tea_openapi.models import Config from alibabacloud_sts20150401.client import Client as Sts20150401Client from alibabacloud_sts20150401 import models as sts_20150401_models from alibabacloud_credentials.client import Client as CredentialClient app = Flask(__name__) # 将<YOUR_ROLE_ARN>替换为RAM角色的ARN。 role_arn_for_oss_upload = '<YOUR_ROLE_ARN>' # 设置为STS服务的地域,例如cn-hangzhou。 region_id = 'cn-hangzhou' @app.route("/") def hello_world(): return render_template('index.html') @app.route('/get_sts_token', methods=['GET']) def get_sts_token(): # 初始化 CredentialClient 时不指定参数,代表使用默认凭据链。 # 在本地运行程序时,可以通过环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET 指定 AK; # 在 ECS\ECI\容器服务上运行时,可以通过环境变量 ALIBABA_CLOUD_ECS_METADATA 来指定绑定的实例节点角色,SDK 会自动换取 STS 临时凭证。 config = Config(region_id=region_id, credential=CredentialClient()) sts_client = Sts20150401Client(config=config) assume_role_request = sts_20150401_models.AssumeRoleRequest( role_arn=role_arn_for_oss_upload, # 将<YOUR_ROLE_SESSION_NAME>设置为自定义的会话名称。 role_session_name='<YOUR_ROLE_SESSION_NAME>' ) response = sts_client.assume_role(assume_role_request) token = json.dumps(response.body.credentials.to_map()) return token app.run(host="0.0.0.0", port=80)
启动后端应用:使用在前提条件中创建的RAM用户的访问密钥启动应用程序。
ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
验证接口:在浏览器中访问
http://<服务器公网IP地址>/get_sts_token
,成功返回示例如下:
2. 配置前端应用以采集和上传日志
本步骤的目标是在 Web 前端项目中集成 WebTracking SDK。该 SDK 会自动调用后端的 /get_sts_token
接口获取凭证,并将用户行为日志安全地发送到指定的 Logstore。
准备前端开发环境:按
Ctrl + C
停止应用程序,在项目根目录 (my_web_sample) 下,执行以下命令安装 npm、Parcel 打包工具,并创建前端所需目录:# 安装npm yum install npm # 安装Parcel npm install -g parcel-bundler # 创建前端项目文件 mkdir templates static src
安装前端依赖:执行以下命令,安装 SLS 的 Web Tracking SDK 及其 STS 插件。
# 安装项目依赖 npm install --save @aliyun-sls/web-track-browser npm install --save @aliyun-sls/web-sts-plugin
编写前端代码:在
src
目录下创建index.js
文件,并添加如下代码:请将代码中的
${project}
和${logstore}
替换为前提条件中创建的Project名称和Logstore名称。请将代码中的
<ECS实例公网IP地址>
替换为STS服务所在的服务器地址。
import SlsTracker from "@aliyun-sls/web-track-browser"; import createStsPlugin from "@aliyun-sls/web-sts-plugin"; const opts = { host: "cn-hangzhou.log.aliyuncs.com", // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com project: "${project}", // Project 名称 logstore: "${logstore}", // Logstore 名称 time: 10, // 发送日志的时间间隔,默认是10秒 count: 10, // 发送日志的数量大小,默认是10条 topic: "topic", // 自定义日志主题 source: "source", tags: { tags: "tags", }, }; const stsOpt = { accessKeyId: "", accessKeySecret: "", securityToken: "", // 以下是一个 stsToken 刷新函数的简单示例 refreshSTSToken: () => new Promise((resolve, reject) => { const xhr = new window.XMLHttpRequest(); xhr.open("GET", "http://<ECS实例公网IP地址>/get_sts_token", true); xhr.send(); xhr.onreadystatechange = () => { if (xhr.readyState === 4) { if (xhr.status === 200) { let credential = JSON.parse(xhr.response); // 函数的本质目的:设置 stsOpt 的临时密钥和令牌 stsOpt.accessKeyId = credential.AccessKeyId; stsOpt.accessKeySecret = credential.AccessKeySecret; stsOpt.securityToken = credential.SecurityToken; resolve(); } else { reject("Wrong status code."); } } }; }), // refreshSTSTokenInterval: 300000, // stsTokenFreshTime: undefined, }; const tracker = new SlsTracker(opts); // 创建 sts 插件 const stsPlugin = createStsPlugin(stsOpt); // 使用 sts 插件 tracker.useStsPlugin(stsPlugin); // 用户登录跟踪 document.getElementById("loginButton").addEventListener("click", () => { const username = document.getElementById("username").value; tracker.send({ eventType: "login", username: username, }); console.log("Login event tracked for:", username); }); // 商品浏览跟踪 document.querySelectorAll(".product").forEach((productButton) => { productButton.addEventListener("click", (event) => { const productName = event.target.getAttribute("data-product-name"); const productPrice = event.target.getAttribute("data-price"); tracker.send({ eventType: "view_product", productName: productName, price: productPrice, }); console.log("Product view tracked for:", productName); }); }); // 订单提交跟踪 document.getElementById("orderButton").addEventListener("click", () => { tracker.send({ eventType: "place_order", orderDetails: "Order placed for example items", }); console.log("Order placed event tracked"); });
创建HTML模板文件:在
templates
目录中创建一个index.html
文件,在这个文件中,添加以下HTML代码。<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>WebTracking Static Example</title> </head> <body> <h1>Welcome to Simple Web Store</h1> <!-- 用户登录 --> <div> <label for="username">Username:</label> <input type="text" id="username" name="username"> <button id="loginButton">Login</button> </div> <!-- 商品列表 --> <div> <h2>Products</h2> <button class="product" data-product-name="Laptop" data-price="1200">Laptop - $1200</button> <button class="product" data-product-name="Smartphone" data-price="800">Smartphone - $800</button> <button class="product" data-product-name="Tablet" data-price="500">Tablet - $500</button> </div> <!-- 提交订单 --> <div> <h2>Your Order</h2> <button id="orderButton">Place Order</button> </div> <script type="module" src="{{ url_for('static', filename='js/index.js') }}"></script> </body> </html>
打包并运行应用:
在项目根目录
my_web_sample
下,执行如下命令打包静态资源。parcel build src/index.js --out-dir static/js --public-url ./js
使用前提条件获取的访问密钥启动后端应用程序。
ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
在浏览器中访问
http://<服务器公网IP地址>
,模拟用户操作(输入用户名、点击商品、下单等)以触发日志上报。
3. 在日志服务控制台查看日志
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。
一键部署
执行以下操作使用资源编排一键部署示例工程。
单击一键部署,在ROS控制台页面完成如下配置后单击下一步:检查并确认:
地域:选择资源所在的地域。
日志服务SLS配置:设置用于接收日志的Project和Logstore名称。
云服务器ECS配置:选择交换机可用区,ECS实例类型,配置实例密码。
进行安全确认。
单击创建,等待资源栈创建完成后,单击输出页签,单击WebTrackingUrl。
在打开的页面中输入用户名、选择商品、并点击下单,模拟真实用户在浏览器的行为。
查看日志。
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。
清理资源。
登录资源编排控制台。在左侧导航栏,单击资源栈。
在资源栈列表页面,找到创建的资源栈,然后在其操作列单击删除。
小程序端日志直传
1. 搭建STS临时凭证下发服务
本步骤的目标是在业务服务器上集成STS SDK,实现一个获取临时STS身份凭证的接口。小程序客户端后续将通过访问此接口(/get_sts_token
),动态获取用于向日志服务上传数据的临时身份凭证。
创建项目目录:登录服务器,执行以下命令,创建并进入项目的工作目录。
mkdir my_web_sample cd my_web_sample
安装依赖:执行以下命令,安装 Flask Web 框架及阿里云 SDK 相关的依赖库。
pip3 install Flask pip3 install attr pip3 install yarl pip3 install async_timeout pip3 install idna_ssl pip3 install attrs pip3 install aiosignal pip3 install charset_normalizer pip3 install alibabacloud_tea_openapi pip3 install alibabacloud_sts20150401 pip3 install alibabacloud_credentials
编写后端代码:创建
main.py
文件,并添加以下Python代码。import json from flask import Flask, render_template from alibabacloud_tea_openapi.models import Config from alibabacloud_sts20150401.client import Client as Sts20150401Client from alibabacloud_sts20150401 import models as sts_20150401_models from alibabacloud_credentials.client import Client as CredentialClient app = Flask(__name__) # 将<YOUR_ROLE_ARN>替换为RAM角色的ARN。 role_arn_for_oss_upload = '<YOUR_ROLE_ARN>' # 设置为STS服务的地域,例如cn-shanghai。 region_id = 'cn-shanghai' @app.route('/get_sts_token', methods=['GET']) def get_sts_token(): # 初始化 CredentialClient 时不指定参数,代表使用默认凭据链。 # 在本地运行程序时,可以通过环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID、ALIBABA_CLOUD_ACCESS_KEY_SECRET 指定 AK; # 在 ECS\ECI\容器服务上运行时,可以通过环境变量 ALIBABA_CLOUD_ECS_METADATA 来指定绑定的实例节点角色,SDK 会自动换取 STS 临时凭证。 config = Config(region_id=region_id, credential=CredentialClient()) sts_client = Sts20150401Client(config=config) assume_role_request = sts_20150401_models.AssumeRoleRequest( role_arn=role_arn_for_oss_upload, # 将<YOUR_ROLE_SESSION_NAME>设置为自定义的会话名称。 role_session_name='<YOUR_ROLE_SESSION_NAME>' ) response = sts_client.assume_role(assume_role_request) token = json.dumps(response.body.credentials.to_map()) return token app.run(host="0.0.0.0", port=80)
启动后端应用:使用前提条件中创建的RAM用户的访问密钥启动应用程序。
ALIBABA_CLOUD_ACCESS_KEY_ID=<YOUR_AK_ID> ALIBABA_CLOUD_ACCESS_KEY_SECRET=<YOUR_AK_SECRET> python3 main.py
验证接口:在浏览器中访问
http://<服务器公网IP地址>/get_sts_token
,成功返回示例如下:
2. 配置小程序客户端以采集和上传日志
本步骤的目标是在小程序客户端中集成WebTracking SDK。SDK 将自动调用后端接口获取凭证,并将用户行为日志安全地发送到指定的 Logstore。示例工程请参见:sls-mini-tracking-sts.zip。
小程序的开发流程和代码构成,请参见支付宝文档中心。
小程序开发环境准备:
下载并安装小程序开发者工具。
创建和体验Todo App 小程序。
安装npm。
yum install npm
安装项目依赖。
npm install --save @aliyun-sls/web-track-mini npm install --save @aliyun-sls/web-sts-plugin
配置
app.js
文件:请将代码中的
${project}
和${logstore}
替换为准备工作中创建的Project名称和Logstore名称。请将代码中的
<ECS实例公网IP地址>
替换为STS服务所在的服务器地址。// app.js import SlsTracker from '@aliyun-sls/web-track-mini'; import createStsPlugin from '@aliyun-sls/web-sts-plugin'; App({ todos: [ { text: 'Learning Javascript', completed: true }, { text: 'Learning ES2016', completed: true }, { text: 'Learning 支付宝小程序', completed: false }, ], userInfo: null, tracker: null, onLaunch: function() { // 在应用启动时进行初始化 this.initSlsTracker(); }, initSlsTracker: function() { const opts = { host: 'cn-shanghai.log.aliyuncs.com', // 替换为你的服务入口 project: '${project}', // 替换为你的 Project 名称 logstore: '${Logstore}', // 替换为你的 Logstore 名称 time: 10, count: 10, topic: 'topic', source: 'source', tags: { tags: 'tags', }, }; const stsOpt = { accessKeyId: '', accessKeySecret: '', securityToken: '', refreshSTSToken: () => new Promise((resolve, reject) => { my.request({ url: 'http://${ECS实例的公网IP}}/get_sts_token', // 替换为后端 STS Token 提供服务的真实地址 method: 'GET', success: (res) => { if (res.statusCode === 200) { let credential; // 检查返回的数据类型确保是字符串,若不是字符串则可能已是对象 if (typeof res.data === "string") { //解析为JSON对象 credential = JSON.parse(res.data); } else { // 直接使用对象 credential = res.data; } stsOpt.accessKeyId = credential.AccessKeyId; stsOpt.accessKeySecret = credential.AccessKeySecret; stsOpt.securityToken = credential.SecurityToken; resolve(credential); } else { reject(new Error('Failed to refresh STS token with status code: ' + res.statusCode)); } }, fail: (err) => { reject(new Error('Failed to refresh STS token', err)); }, }); }), }; const tracker = new SlsTracker(opts); const stsPlugin = createStsPlugin(stsOpt); tracker.useStsPlugin(stsPlugin); // 以单条日志上传为例,只要启动小程序,就会发送一条日志。 // tracker.send({ // eventType:'view_product', // productName: 'Tablet', // price: 500 // }); this.tracker = tracker; }, });
运行与验证:在开发者工具,单击页面右上角的编译
。在右侧小程序预览页面,单击小程序的Todo页面的Add Todo按钮或输入Todo项时,小程序会直接向日志服务的Logstore上传日志,无需经过服务器。
3. 在日志服务控制台查看日志
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。
4. 小程序上线前置条件
本文在开发者工具中对示例程序进行本地调试,如需正式上线小程序,必须完成以下步骤:
创建开发者账号,创建小程序,将小程序提交审核等,具体参见开发者账号注册。
在开发者工具中忽略域名合法性,检查便于调试,步骤请参见接入准备。
在支付宝控制台中配置以下域名白名单。
添加日志服务的服务器域名(request合法域名)。格式为
https://${project}.${host}
:project
:日志服务的Project名称host
:Project的域名,本文示例为sls-webtracking-mini.cn-shanghai.log.aliyuncs.com
,操作步骤参见服务器域名白名单。
添加小程序后端服务器的域名,本文示例只有小程序客户端代码,正式上线小程序还需要开发服务端代码。服务器域名白名单只支持HTTPS协议,配置HTTPS协议需要在服务器部署SSL证书。
重要本文示例仅用于功能演示,在开发者工具中忽略域名合法性。小程序正式上线前,必须配置域名检查。
移动端日志直传
1. 搭建STS临时凭证下发服务
本步骤的目标是在业务服务器上集成STS SDK,实现一个获取临时STS身份凭证的接口。移动端App将通过访问此接口(/get_sts_token
),动态获取用于向日志服务上传数据的临时身份凭证(STS Token)。
下载并配置示例程序:
根据技术栈选择并下载对应语言的示例程序,下载地址请参见PHP、Java、Ruby、Node.js。
修改语言包内的 config.json 配置文件。
关键字段详解
示例
{ "AccessKeyID" : "", "AccessKeySecret" : "", "RoleArn" : "", "TokenExpireTime" : "900", "PolicyFile": "policy/write_policy.txt" }
AccessKeyID
String
RAM用户的访问密钥ID。请勿使用主账号的AccessKey ID。
AccessKeySecret
String
RAM用户的访问密钥Secret。请勿使用主账号的AccessKeySecret。
RoleArn
String
RAM角色的RoleArn。ARN获取方式请参见查看RAM角色。
TokenExpireTime
String
移动端应用获取到的Token的失效时间。
最少是默认值900s。
PolicyFile
String
Token所要拥有的权限列表的文件,可以不修改默认值。
此处提供两种最常用的Token权限文件,位于policy目录下面。 可以根据业务需求设计policy文件。
write_policy.txt:指定了该Token拥有该账号下Project的写入权限。使用write_policy.txt权限文件时,请根据实际替换该文件中的Project名称。
readonly_policy.txt:指定了该Token拥有该账号下Project的读取权限。
Token的最终权限为RAM角色权限与权限文件的权限交集。如果未设置权限文件,则Token的最终权限为RAM角色权限。
运行示例代码:根据对应语言的说明启动服务。以 Java 版本(需 JDK 1.7+)为例,将示例代码导入 Java 工程后运行 main 函数即可。程序默认会监听 7080 端口,等待来自移动端的 HTTP 请求。
2. 在移动端集成SDK并实现日志直传
1. 获取STS临时凭证:以HTTP请求形式访问服务的7080端口,获取临时安全令牌。返回结果示例如下:
{
"StatusCode":"200",
"AccessKeyId":"STS.3pdgagd****",
"AccessKeySecret":"rpnwO9wr34tGdrddgsR2Y****",
"SecurityToken":"CAES+wMIARKAAZhjH0EUOIhJMQBMjR****tZGVtbzI=",
"Expiration":"2021-11-20T08:23:15Z"
}
2. 使用临时凭证上传日志:示例代码演示通过移动客户端使用临时安全令牌直接将日志写入到日志库中。
const ALY = require("aliyun-sdk");
const sls = new ALY.SLS({
accessKeyId: "Your temporary accesKeyId",
secretAccessKey: "Your temporary accessKeySecret",
securityToken: "Your sts token",
endpoint: "http://cn-hangzhou.log.aliyuncs.com",
});
// -------------------------------
// put logs
// -------------------------------
const projectName = "your_project_name";
const logStoreName = "your_logstore";
const logGroup = {
logs: [
{
time: Math.floor(new Date().getTime() / 1000),
contents: [
{
key: "a",
value: "1",
},
{
key: "a",
value: "2",
},
{
key: "a",
value: "3",
},
],
},
],
topic: "vv",
source: "127.0.0.1",
};
sls.putLogs(
{
//必选字段
projectName: projectName,
logStoreName: logStoreName,
logGroup: logGroup,
},
function (err, data) {
if (err) {
console.log("error:", err);
return;
}
console.log("success:", data);
}
);
3. 在日志服务控制台查看日志
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。
快速验证:匿名写入
本方案通过开启WebTracking开关,开放Logstore的公网写入权限,允许客户端使用WebTracking SDK、HTTP请求等多种方式直接上报日志数据。开启步骤如下:
控制台
登录日志服务控制台。在Project列表区域,单击目标Project。
在日志存储 > 日志库页签中,选择目标Logstore右侧的
> 修改。在Logstore属性页面,单击页面右上方的修改。
打开WebTracking开关,然后单击保存。
API
调用UpdateLogStore接口,设置enable_tracking
参数为true。
严禁用于生产环境。
开启Web Tracking开关,意味着将Logstore的写入权限向公网开放,任何持有接入点信息的用户均可写入数据。
适用场景:仅限于无数据安全要求的开发、测试环境,用于快速验证日志上报链路。
流程如下:
浏览器端日志匿名上传
选择接入方式
WebTracking SDK:在前端代码中集成日志服务提供的WebTracking SDK,将自定义类型的日志上传到Logstore。
HTTP GET请求:通过构造URL直接发送GET请求上报数据,适合简单、少量日志的收集。
HTML标签:在HTML页面中嵌入一个<img>标签,将日志内容编码在src属性的URL中。这种方式无需JavaScript环境,也不需要设置跨域访问。
OpenAPI:如果请求的数据量较大,可以通过调用API接口,以POST方式批量上报日志。
WebTracking SDK
使用WebTracking SDK上传日志,每次写入的日志数量上限为3MB或者4096条。关于WebTracking SDK的更多信息,请参见SLS WebTracking SDK。
安装和配置SDK
npm方式
已安装Node.js。在服务器上运行以下代码,安装依赖:
npm install --save @aliyun-sls/web-track-browser
在应用程序中添加以下代码,配置SDK。
关键字段详解
示例
import SlsTracker from '@aliyun-sls/web-track-browser' const opts = { host: '${host}', // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com project: '${project}', // Project名称。 logstore: '${logstore}', // Logstore名称。 time: 10, // 发送日志的时间间隔,默认是10秒。 count: 10, // 发送日志的数量大小,默认是10条。 topic: 'topic',// 自定义日志主题。 source: 'source', tags: { tags: 'tags', }, } const tracker = new SlsTracker(opts) // 创建SlsTracker对象
host
String
必填日志服务所在地域的Endpoint。此处以杭州为例,其它地域请根据实际情况参考服务入口填写。
project
String
必填日志服务Project名称。
logstore
String
必填用于存储日志的Logstore名称。
time
String
可选发送日志的时间间隔,默认值为10秒。
count
String
可选发送日志的数量大小,默认值为10。
topic
String
可选日志主题。
source
String
可选日志来源。
tags
String
可选日志标签信息。
CDN方式
在HTML文件的
<body>
中添加以下代码,从CDN引入WebTracking SDK的资源文件。如果使用CDN方式,SDK版本最高为0.3.5,更多版本请参见SLS WebTracking SDK。<script src="https://g.alicdn.com/sls/sls-js-sdk/0.3.5/web-track-browser.js"></script>
在网站的JavaScript文件中添加以下代码。
关键字段详解
示例
if (window.SLS_Tracker) { const tracker = new SLS_Tracker({ host: '${host}', // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com project: '${project}', // Project名称。 logstore: '${logstore}', // Logstore名称。 time: 10, // 发送日志的时间间隔,默认是10秒。 count: 10, // 发送日志的数量大小,默认是10条。 topic: 'topic',// 自定义日志主题。 source: 'source', tags: { tags: 'tags', }, }) }
host
String
必填日志服务所在地域的Endpoint。此处以杭州为例,其它地域请根据实际情况参见服务入口填写。
project
String
必填日志服务Project名称。
logstore
String
必填用于存储日志的Logstore名称。
time
String
可选发送日志的时间间隔,默认值为10秒。
count
String
可选发送日志的数量大小,默认值为10。
topic
String
可选日志主题。
source
String
可选日志来源。
tags
String
可选日志标签信息。
上传日志:上传单条日志时,每条日志单独作为一个对象
Object
。上传多条日志时,数据结构是包含多个对象Object
的数组Array
。单条日志上传
tracker.send({ eventType:'view_product', productName: 'Tablet', price: 500 })
单条日志立即上传(time和count参数不生效):
tracker.sendImmediate({ eventType:'view_product', productName: 'Tablet', price: 500 })
批量日志上传
tracker.sendBatchLogs([ { eventType: 'view_product', productName: 'Tablet', price: 500 }, { eventType: 'view_product', productName: 'Laptop', price: 1200 } ])
批量日志立即上传(time和count参数不生效):
tracker.sendBatchLogsImmediate([ { eventType:'view_product', productName: 'Tablet', price: 500 }, { eventType:'view_product', productName: 'Laptop', price: 1200 } ])
在日志服务控制台查看日志
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。
HTTP GET 请求
将日志字段作为URL的参数,通过HTTP请求上传日志,请根据实际值替换参数。
curl --request GET 'https://${project}.${host}/logstores/${logstore}/track?APIVersion=0.6.0&key1=val1&key2=val2'
host
:日志服务所在地域的Endpoint。更多信息,请参见服务入口。key1=val1&key2=val2
:上传到日志服务的字段名称和字段值(Key-Value),支持设置多个字段,长度必须小于16 KB。
HTML标签
在前端页面中添加以下<img>标签,浏览器加载图片时会自动将URL中的参数作为日志内容上传。
<!-- 采集自定义字段 -->
<img src='https://${project}.${host}/logstores/${logstore}/track.gif?APIVersion=0.6.0&key1=val1&key2=val2'/>
<!-- 额外采集User-Agent和Referer -->
<img src='https://${project}.${host}/logstores/${logstore}/track_ua.gif?APIVersion=0.6.0&key1=val1&key2=val2'/>
使用track_ua.gif
会自动采集User-Agent和Referer信息。为避免浏览器缓存,建议加入时间戳参数。
OpenAPI
调用PutWebtracking - 通过WebTracking批量写入日志接口上传多条日志。
小程序端日志匿名上传
WebTracking支持的小程序包括微信小程序、微信小游戏、支付宝小程序、字节跳动小程序、钉钉小程序、QQ小程序、QQ小游戏、百度小程序。
根据小程序平台的安全要求,为确保日志数据能从线上小程序正常上报,需要将其数据接收域名添加至小程序管理后台的request合法域名白名单。格式为
https://${project}.${host}
,project
和host
的含义参见下文。使用小程序端WebTracking SDK上传日志,每次写入的日志数量上限为10 MB。
安装和配置SDK:安装Node.js,在服务器上运行以下代码,安装依赖。
npm install --save @aliyun-sls/web-track-mini
在业务程序中添加以下代码,配置SDK。
重要开发快应用(quickApp小程序)时,创建SlsTracker对象前需要根据使用的请求模块额外添加配置项。以使用requesttask模块为例:
//定义quickappSDK对象,将请求API封装成对象 const quickappSDK = { request: requesttask.request } const tracker = new SlsTracker({ ...opts, platformSDK: quickappSDK, platformRequestName: 'request', })
关键字段详解
示例
import SlsTracker from '@aliyun-sls/web-track-mini' const opts = { host: '${host}', // 所在地域的服务入口。例如cn-hangzhou.log.aliyuncs.com project: '${project}', // Project名称。 logstore: '${logstore}', // Logstore名称。 time: 10, // 发送日志的时间间隔,默认是10秒。 count: 10, // 发送日志的数量大小,默认是10条。 topic: 'topic',// 自定义日志主题。 source: 'source', tags: { tags: 'tags', }, } const tracker = new SlsTracker(opts) // 创建SlsTracker对象
host
String
必填日志服务所在地域的Endpoint。此处以杭州为例,其它地域请根据实际情况填写。更多信息,请参见服务入口。
project
String
必填日志服务Project名称。
logstore
String
必填用于存储日志的Logstore名称。
time
String
可选发送日志的时间间隔,默认值为10秒。
count
String
可选发送日志的数量大小,默认值为10。
topic
String
可选日志主题。
source
String
可选日志来源。
tags
String
可选日志标签信息。
上传日志:上传单条日志时,每条日志单独作为一个对象
Object
。上传多条日志时,数据结构是包含多个对象Object
的数组Array
。单条日志上传
tracker.send({ eventType:'view_product', productName: 'Tablet', price: 500 })
单条日志立即上传(time和count参数不生效):
tracker.sendImmediate({ eventType:'view_product', productName: 'Tablet', price: 500 })
批量日志上传
tracker.sendBatchLogs([ { eventType: 'view_product', productName: 'Tablet', price: 500 }, { eventType: 'view_product', productName: 'Laptop', price: 1200 } ])
批量日志立即上传(time和count参数不生效):
tracker.sendBatchLogsImmediate([ { eventType:'view_product', productName: 'Tablet', price: 500 }, { eventType:'view_product', productName: 'Laptop', price: 1200 } ])
在日志服务控制台查看日志
登录日志服务控制台,在Project列表区域,单击目标Project。
在日志库中,选择目标Logstore右侧的
> 消费预览。在消费预览面板,查看成功上传的日志。