一、简介
日志服务提供 日志服务控制台 内嵌到其他系统的能力,满足不需要登录腾讯云控制台即可查询分析日志的诉求。通过内嵌日志服务控制台页面,可以给用户带来以下方便:
- 在外部系统服务中(例如公司内部运维或运营系统)快速集成日志服务的查询分析能力。
- 无需管理众多腾讯云子账号,方便将日志数据分享给他人进行查看。
内嵌页面示例代码:cls-iframe-demo。
以下为内嵌日志服务控制台流程图:
前提条件
- 用户根据业务情况,登录 访问管理 CAM 控制台,创建 CAM 角色且允许登录控制台(角色载体为用户主账号,例如 CompanyOpsRole),并为 CAM 角色配置相应的访问权限,例如只读策略权限 QcloudCLSReadOnlyAccess。您可以 通过控制台 或 通过 API 创建 CAM 角色:
- 通过控制台创建 CAM 角色:
- 登录 访问管理 CAM 控制台。
- 单击左侧菜单栏中的【角色】,进入角色页面。
- 选择【新建角色】>【腾讯云账户】,开始新建自定义角色。
- 选择【当前主账号】并勾选【允许当前角色服务控制台】,单击【下一步】。
- 通过控制台创建 CAM 角色:
注意: 若无 “允许角色登录控制台” 选项,请 提交工单 联系我们开通白名单。
e.为角色设置访问策略,例如只读策略权限 QcloudCLSReadOnlyAccess,单击【下一步】。
f. 输入角色名,完成创建。
通过 API 创建 CAM 角色: 创建角色请参见 创建角色 API 文档,其中,ConsoleLogin 需要填入1,允许角色登录控制台。 例如请求示例:
代码语言:javascript复制https://cam.tencentcloudapi.com/?Action=CreateRole&RoleName=CompanyOpsRole&ConsoleLogin=1&PolicyDocument={"version":"2.0","statement":[{"action":["cls:get*","cls:list*","cls:GetHistogram","cls:GetFastAnalysis","cls:GetChart","cls:ListChart","cls:ListDashboard","cls:GetDashboard","cls:searchLog","cls:downloadLog","cls:pullLogs"],"effect":"allow","principal":{"qcs":["qcs::cam::uin/100001234567:root"]}}]}
2. 获取当前用户的访问密钥。如何获取持久密钥,可参见主账号访问密钥管理文档。
操作步骤
- 用户登录访问腾讯云外部的 Web 服务。
- Web 服务端根据登录用户身份分配对应的角色名,例如 CompanyOpsRole(需预先创建好,此为前提条件1)。
- Web 服务端系统根据角色名访问腾讯云 STS 服务,使用前提条件2中获取到的访问密钥调用 AssumeRole 接口,申请角色 CompanyOpsRole 的临时密钥。
- 用户调用 AssumeRole 接口成功后,获取到角色 CompanyOpsRole 的临时密钥。
- 用户通过该角色的临时密钥生成登录签名信息。详细可参考以下步骤: - 参数排序 对要求签名的参数按照字母表或数字表递增顺序的排序,先考虑第一个字母,在相同的情况下考虑第二个字母,依此类推。您可以借助编程语言中的相关排序函数来实现这一功能,例如 PHP中 的 ksort 函数。其中签名参数包含以下内容:
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
action | 是 | String | 操作动作,固定为roleLogin |
timestamp | 是 | Int | 当前时间戳 |
nonce | 是 | Int | 随机整数,取值1000-100000000 |
secretId | 是 | String | STS 返回的临时 AK |
- 拼接参数 将上一步排序好的请求参数,按“参数名称=参数值”拼接,例如
代码语言:javascript复制action=roleLogin&nonce=67439&secretId=AKI***PLE×tamp=1484793352
- 拼接签名串
按请求方法 请求主机 请求路径 ? 请求字符串的规则拼接签名串。
参数必选描述请求主机和路径是固定为cloud.tencent.com/login/roleAccessCallback
请求方法是支持 GET 或 POST
签名串示例
GETcloud.tencent.com/login/roleAccessCallback?action=roleLogin&nonce=67439&secretId=AKI***PLE×tamp=1484793352
- 生成签名串 使用 HMAC-SHA1 算法对字符串签名,目前支持 HMAC-SHA1 和 HMAC-SHA256。具体代码如下,以 PHP 语言为例:
代码语言:javascript复制$secretKey = 'Gu5***1qA';
$srcStr = 'GETcloud.tencent.com/login/roleAccessCallback?action=roleLogin&nonce=67439&secretId=×tamp=1484793352';
$signStr = base64_encode(hash_hmac('sha1', $srcStr, $secretKey, true));
echo $signStr;
PHP 版本示例代码
代码语言:javascript复制<?php
$secretId = "AKI***"; //STS 返回的临时 AK
$secretKey = "Gu5***PLE"; //STS 返回的临时
Secret $token = "ADE***fds"; //STS 返回的安全 TOKEN
$param["nonce"] = 11886; //rand();
$param["timestamp"] = 1465185768; //time();
$param["secretId"] = $secretId;
$param["action"] = "roleLogin";
ksort($param);
$signStr = "GETcloud.tencent.com/login/roleAccessCallback?";
foreach ( $param as $key => $value ) { $signStr = $signStr . $key . "=" . $value . "&";
}
$signStr = substr($signStr, 0, -1);
$signature = base64_encode(hash_hmac("sha1", $signStr, $secretKey, true));
echo $signature.PHP_EOL;
6. 拼接完整登录信息以及目的页面地址进行登录。
a. 获取日志服务控制台检索分析页面。
代码语言:javascript复制https://console.cloud.tencent.com/cls/search?region=<region>&logset_id=<logset_id>&topic_id=<topic_id>
b. 拼接完整登录信息以及目的页地址进行登录,**参数值需要 urlencode 编码**。
代码语言:javascript复制https://cloud.tencent.com/login/roleAccessCallback
?algorithm=<签名时加密算法,目前只支持 sha1 和 sha256 ,不填默认 sha1
&secretId=<签名时 secretId>
&token=<临时密钥 token>
&nonce=<签名时 nonce>
×tamp=<签名时 timestamp>
&signature=<签名串>
&s_url=<登录后目的 URL>
7. 使用生成的最终链接,访问腾讯云日志服务控制台页面。例如检索分析页面的内嵌访问链接如下:
代码语言:javascript复制https://cloud.tencent.com/login/roleAccessCallback?nonce=52055817&s_url=https://console.cloud.tencent.com/cls/search?region=ap-guangzhou&start_time=2020-05-26%252014%253A01%253A18&end_time=2020-05-26%252014%253A16%253A18&secretId=AKID-vHJ7WPHcy_RVIOm-QTIktXOf9S9z_k_JackOp3dyQPJwmDrNLQJuiNuw9******&signature=eXeWaDn6iJlcPp1sqqGd6m9/Qk****×tamp=1592455018&token=5e4vuBHL7fBQPi1V9fvSINw4Vu7PSr9Ic3de78b86109c171eb4e3ea27c137c1fIWKU8JC-LO01L87sIYlfTSaHHXeHcqim7Jg9hBuN2nbdfgeBUPXhmpyAk4G6e9bHFZ-7yNRig7Y33CQHxh6jOesP4VfhRzQprWGRtC5No1ty******-aoj_WJhA55oyvqaqxw2jtTdh8nx9OjJr3tlbIa9oJe7aZYoPbdpFqrF6ZjlCPPap2yQB_SkUsWwDl_9BrK2Km3U2IocdvQ7QxrW0ts1aiBi7xtTSJRcfkBYPYEV_YoJrtkhYW3E4L47imA1bfVAjM9F5uKWzVzsDGDT0aCUU9mqdb4vjJrY8tm-wJKKEe8eiyY9EbkH3VWnFV2YocYNDJqFyjKOWR******
日志服务控制台检索分析页面 URL 参数说明:
参数名称 | 必选 | 类型 | 描述 |
---|---|---|---|
region | 是 | String | 地域简称,例如:ap-shanghai 表示上海地域,其他可用地域简称,请参见 可用地域 |
logset_id | 是 | String | 日志集 ID |
topic_id | 是 | String | 日志主题 ID |
start_time | 否 | String | 要检索日志的起始时间,格式样例:2019-11-13 10:00:00 |
end_time | 否 | String | 要检索日志的结束时间,格式样例:2019-11-13 20:00:00 |
query | 否 | String | 关键字检索语法,若关键字中有 URL 保留字符,需要进行 UrlEncode 编码 |
hideWidget | 否 | Boolean | 是否隐藏智能客服图标:true 表示隐藏,false 表示不隐藏 |
hideTopNav | 否 | Boolean | 是否隐藏腾讯云控制台顶部导航栏:true 表示隐藏,false 表示不隐藏 |
hideLeftNav | 否 | Boolean | 是否隐藏腾讯云控制台左侧导航栏:true 表示隐藏,false 表示不隐藏 |
hideHeader | 否 | Boolean | 是否隐藏日志服务顶部导航栏(标题及地域选择):true 表示隐藏,false 表示不隐藏 |
hideTopTips | 否 | Boolean | 是否隐藏日志服务顶部提示语框:true 表示隐藏,false 表示不隐藏 |
hideRegion | 否 | Boolean | 是否隐藏日志服务顶部的地域选择按钮:true 表示隐藏,false 表示不隐藏 |
hideLogsetSelect | 否 | Boolean | 是否隐藏日志服务日志集选择按钮:true 表示隐藏,false 表示不隐藏 |
hideTopicSelect | 否 | Boolean | 是否隐藏日志服务日志主题选择按钮:true 表示隐藏,false 表示不隐藏 |
有任何问题欢迎大家加入企业微信群咨询:【云原生日志服务CLS】技术社区群(或者联系:v_ltvli加入)