
# 将LTS日志查询页面嵌入用户自建系统
LTS支持将日志查询界面嵌入到用户自建系统。通过统一身份认证服务IAM的联邦代理机制实现用户自定义身份代理，再将登录链接嵌入至用户自建系统实现无需在华为云官网登录就可在自建系统界面查询LTS日志。
#### 应用场景
- 该功能主要用于用户可以在自建系统免密登录LTS的场景，但是登录华为云LTS控制台还是需要账号密码。
- 用户在外部系统中（例如公司内部运维或运营系统）快速集成云日志服务的查询、分析能力。
- 无需管理众多华为子账户，方便将日志数据进行分享查看。
 
#### 将LTS日志查询页面嵌入用户自建系统
您需要先在IAM服务为用户自定义创建身份代理并创建委托，然后再将LTS日志查询页面嵌入用户自建系统。
1. 使用DomainA（该账号仅供参考，请以实际账号为准）登录统一身份认证服务控制台。
2. 在用户组页面创建IAM用户组（用户组名以GroupC为例）并授予全局服务中的Agent Operator权限，该权限仅能切换角色至委托方账号中，访问授权的服务，具体方法请参见：[创建用户组并授权](https://support.huaweicloud.com/usermanual-iam/iam_03_0001.html)。
3. 在用户页面创建IAM用户（用户名以UserB为例），并加入GroupC用户组中，具体方法请参见：[用户组添加用户](https://support.huaweicloud.com/usermanual-iam/iam_03_0002.html)。
   
   请确认该IAM用户支持**编程访问** 和**管理控制台访问** 云日志服务。如需修改IAM用户访问方式，请参考：[修改IAM用户信息](https://support.huaweicloud.com/usermanual-iam/iam_02_0002.html)。
   
   
4. 在左侧导航栏选择"委托"，单击右上方的"创建委托"。
5. 在创建委托页面，设置委托参数。 
   1. "委托名称"以"iam_for_lts"为例，"委托类型"必须选择"普通账号"，"委托的账号"填写"DomainA"，"持续时间"选择"永久"，单击"下一步"。
   
   
   
   2. 设置最小授权范围，选择"LTS ReadOnlyAccess"权限（该权限为LTS云日志服务的只读权限，只能查询LTS服务的数据，不能对LTS服务做设置修改），单击"下一步"。
      图1选择策略   
      ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001655864121.png "点击放大") 
   
   3. 选择授权范围方案，勾选"指定区域项目资源"，根据需要勾选对应区域，单击"确定"。
   
   
   
   
6. 使用postman等工具获取X-Subject-LoginToken参数。（以下示例截图仅供参考，请以实际获取的参数为准） 
   1. 通过账号密码获取UserB用户的X-Subject-Token。
      接口类型：POST
      接口url：https://Endpoint/v3/auth/tokens，参数选择自定义格式，并输入如下参数，其中name从上而下依次为租户名称、用户名称、租户名称，password为用户密码。
      终端节点（Endpoint）即调用API的**请求地址** ，您可以从[地区和终端节点](https://console.huaweicloud.com/apiexplorer/#/endpoint/IAM)中查询IAM服务的终端节点。
      
      ```
      {
               "auth" : {
                         "identity" : {
                                  "methods" : [
                                           "password"
                                  ],
                                  "password" : {
                                           "user" : {
                                                     "domain" : {
                                                              "name" : "xxxxxxx"
                                                     },
                                                     "name" : "xxxxxx",
                                                     "password" : "xxxxxx"
                                           }
                                  }
                         },
                         "scope" : {
                                  "domain" : {
                                           "name" : "xxxxxx"
                                  }
                         }
               }
      }
      ```
      在返回结果中获取响应头中X-Subject-Token字段。
      图2返回结果   
      ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001669187448.png "点击放大") 
   
   2. 根据[1]获取的用户X-Subject-Token获取临时访问密钥。
      在请求header添加X-Auth-Token字段，value为[1]中获取到的X-Subject-Token。
      图3获取临时访问密钥   
      ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001717308901.png "点击放大")
      接口类型：POST
      接口url：https://Endpoint/v3.0/OS-CREDENTIAL/securitytokens，参数选择自定义格式，并输入如下参数，其中具体参数含义分别为：agency_name为委托名称、domain_name为租户名称、duration_seconds为token过期时间（单位秒）、name为用户名。
      ```
      {
               "auth" : {
                         "identity" : {
                                  "methods" : [
                                           "assume_role"
                                  ],
                                  "assume_role" : {
                                           "agency_name" : "iam_for_lts",
                                           "domain_name" : "xxxxxx",
                                           "duration_seconds" : 86400,
                                           "session_user" : {
                                                     "name" : "xxxxxx"
                                           }
                                  }
                         }
               }
      }
      ```
      在返回结果中获取响应体中获取临时访问密钥。
      图4获取临时访问密钥   
      ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001717309249.png "点击放大") 
   
   3. 根据[2]获取的临时访问密钥获取登录X-Subject-LoginToken。
      接口类型：POST
      接口url：https://Endpoint/v3.0/OS-AUTH/securitytoken/logintokens，参数选择自定义格式，并输入如下参数，其中access、secret、id对应的值分别为[2]返回的access、secret、securitytoken，duration_seconds为token过期时间，单位为秒。
      ```
      {
               "auth" : {
                         "securitytoken" : {
                                  "access" : "xxxxxx",
                                  "secret" : "xxxxxx",
                                  "id" : "xxxxxx",
                                  "duration_seconds" : 43200
                         }
               }
      }
      ```
      在返回结果中获取响应头中的X-Subject-LoginToken字段。
      图5获取X-Subject-LoginToken   
      ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001669190108.png "点击放大") 
   
   
   
   
7. 根据[3]获取的X-Subject-LoginToken构建代理URL，完成免密登录。
   
   代理登录地址的构建规则为：
   https://auth.huaweicloud.com/authui/federation/login?service={target_console_url}\&logintoken={logintoken}\&idp_login_url={enterprise_system_loginURL}
   表1URL参数说明 
   | 参数名称                         | 说明                                                                                                       |
   |:---|:---|
   | {target_console_url}         | 云日志服务地址说明的urlencode编码结果。详细请参考[云日志服务地址说明]。 |
   | {logintoken}                 | 为[3]获取的X-Subject-LoginToken的urlencode编码结果。  |
   | {enterprise_system_loginURL} | 选填参数。用户页面地址的urlencode编码结果，当loginToken验证失效时会跳转到该页面。                                                       |
      
   - 以上三个参数都需要进行urlencode编码，否则可能导致免密登录失败。
   
   - urlencode编码操作方式：打开浏览器按F12进入开发者模式，选择console（控制台），输入"encodeURIComponent("\*")"，\*为需要编码的信息，单击"Enter",查看返回的urlencode编码值。
   
   
   {target_console_url}的值为LTS前台服务URL地址的urlencode编码，编码前URL如下，具体参考[表2]。
   https://console.huaweicloud.com/lts/?region={regionId}\&cfModuleHide=header_sidebar_floatlayer#/lts/logEventsLeftMenu/events?groupId={groupId}\&topicId={topicId}\&epsId={epsId}\&condition={condition}
    表2参数说明 
   | 参数名称        | 说明                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   |:---|:---|
   | {regionId}  | 区域ID，登录console页面后，在浏览器地址栏中获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | {groupId}   | 日志组ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | {topicId}   | 日志流ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | {epsId}     | 日志流所属的企业项目ID，若无企业项目，值为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | {condition} | 日志查询条件，如name:a and age:12 and addr:xx。 - 非必填  - 单个关键词形式为key:value  - 多个关键词用 and 隔开  - 关键词中不能包含英文分号（;）、英文冒号（:）  - 关键词中含有其他特殊字符如（+、=、？、#、%、\&）需转换为十六进制，即%加字符的ASCII码（%2B、%3D、%3F、%23、%25、%26）   |
      
   
   
8. 完成以上步骤，即可实现在自建系统免密登录云日志服务LTS。 
   使用如下iframe嵌套，其中src的值为[7]中获得的代理URL。
   iframe内嵌功能依赖浏览器允许第三方Cookie，具体设置方法请以实际使用的浏览器为准，例如chrome浏览器参考如下方法：设置-\>隐私和安全-\>第三方Cookie-\>允许第三方Cookie。
   ```
   <body>   
       <iframe src="target_url" width="100%" height="96%" id="ltsIframePage"></iframe>       
   </body>
   ```
   
   
 
 #### 云日志服务地址说明
1. 云日志服务首页，基础URL为：
   ```
   https://console.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer_rightsidebar#/cts/manager/groups
   ```
   表3参数说明表 
   | 参数名称     | 必填 | 类型     | 描述                            |
   |:---|:---|:---|:---|
   | regionId | 是  | String | 区域ID，登录console页面后在浏览器的地址栏中获取。 |
      
   
2. 日志搜索界面，基础URL为：
   ```
   https://console.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer_rightsidebar#/cts/logEventsLeftMenu/events?groupId={groupId}&topicId={topicId}&epsId={epsId}&hideHeader={hideHeader}&fastAnalysisCollapsed={fastAnalysisCollapsed}&hideDashboard={hideDashboard}&hideFeedback={hideFeedback}&isFoldLabel={isFoldLabel}&hideStreamName={hideStreamName}&showK8sFilter={showK8sFilter}&clusterId={clusterId}&hideBarChart={hideBarChart}&hideTabs={hideTabs}&condition={condition}
   ```
   表4参数说明表 
   | 参数名称                  | 必填 | 类型      | 默认值   | 描述                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   |:---|:---|:---|:---|:---|
   | regionId              | 是  | String  | 无     | 区域ID，登录console页面后在浏览器的地址栏中获取。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              |
   | groupId               | 是  | String  | 无     | 日志组ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | topicId               | 是  | String  | 无     | 日志流ID。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
   | epsId                 | 否  | String  | 无     | 日志流所属的企业项目ID，若无企业项目，值为0。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | hideHeader            | 否  | Boolean | false | 是否隐藏左侧列表及顶部横向日志流列表，如需隐藏，该参数值为true。 使用iframe内嵌场景才会生效，不使用iframe内嵌场景则不生效。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | fastAnalysisCollapsed | 否  | Boolean | false | 是否收起快速分析，如需默认收起，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                 |
   | hideDashboard         | 否  | Boolean | false | 是否隐藏创建仪表盘图标，如需隐藏，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                |
   | hideFeedback          | 否  | Boolean | false | 是否隐藏评价按钮，如需隐藏，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   |
   | isFoldLabel           | 否  | Boolean | true  | 控制日志表格中的label字段是否换行，如需换行展示，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      |
   | hideStreamName        | 否  | Boolean | false | 是否隐藏日志流名称，如需隐藏，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  |
   | showK8sFilter         | 否  | Boolean | false | 是否展示容器日志筛选，容器日志搜索场景下，可选择该参数为true，控制是否展示容器日志筛选条件。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | clusterId             | 否  | String  | 无     | 集群ID，showK8sFilter参数为true时，该参数必填。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          |
   | hideBarChart          | 否  | Boolean | false | 是否默认收起日志条数统计图，如需默认收起，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            |
   | hideTabs              | 否  | Boolean | false | 是否隐藏"日志搜索、日志分析、实时日志"标签tabs，默认不隐藏。如需隐藏，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | hideShare             | 否  | Boolean | false | 是否隐藏"分享"按钮，默认不隐藏。如需隐藏，该参数值为true。（当前仅华北-北京四局点支持该参数）                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | keepOnline            | 否  | Boolean | false | 是否保持登录状态。如需一直保持登录状态，不退出登录，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                       |
   | hideDocAndAccessLog   | 否  | Boolean | false | 是否隐藏日志表格无数据时的"前往查看日志接入"和"更多搜索语法"链接。如需隐藏，该参数值为true。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                         |
   | condition             | 否  | String  | 无     | 日志查询条件，如name:a and age:12 and addr:xx。 - 非必填  - 单个关键词形式为key:value  - 多个关键词用 and 隔开  - 关键词中不能包含英文分号（;）、英文冒号（:）  - 关键词中含有其他特殊字符如（+、=、？、#、%、\&）需转换为十六进   |
   | begin                 | 否  | Number  | 无     | 开始时间，与end配套使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
   | end                   | 否  | Number  | 无     | 结束时间，与begin配套使用。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                           |
   | origin                | 否  | String  | 无     | 浏览器域名，需要监听日志搜索界面参数变化时，需要加上该参数。                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                             |
      
   图6参数与界面对应关系图（仅供参考）   
   ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001669336060.png "点击放大") 
3. 监听日志搜索参数变化：
   LTS日志搜索参数变化时，例如搜索语句、时间、分享，会将参数信息通过postMessage发出，您可以监听message事件来获取LTS日志搜索参数信息。
   1. 在日志搜索界面url后面加上origin参数（您的浏览器域名，通过location.origin获取）。
   
   2. 复制如下代码，加入您的业务代码中，用于监听message事件。
      ```
      window.addEventListener('message', function(event) {
        if (event.origin !== '您的浏览器域名') {
          return;
        }
        const ltsSearchParams = JSON.parse(event.data); // 获取lts搜索参数，参数信息详见表5
        // 拿到参数信息后，执行业务逻辑
      })
      ```
      表5LTS日志搜索参数信息 
      | 参数名称     | 类型     | 描述                                                                           |
      |:---|:---|:---|
      | search   | String | url参数组成的字符串。                                                                 |
      | metadata | Object | 日志搜索参数元数据，参考[表6]。 |
         
       表6日志搜索参数元数据 
      | 参数名称      | 类型     | 描述          |
      |:---|:---|:---|
      | groupId   | String | 日志组ID。      |
      | streamId  | String | 日志流ID。      |
      | epsId     | String | 日志流的企业项目ID。 |
      | begin     | Number | 开始时间戳。      |
      | end       | Number | 结束时间戳。      |
      | condition | String | 搜索语句。       |
         
      
     
4. 可视化日志搜索界面，基础URL为： 
   ```
   https://console.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer_rightsidebar#/cts/logEventsLeftMenu/events?visualization=true&groupId={groupId}&topicId={topicId}&epsId={epsId}&sql={sql}
   ```
   表7参数说明表 
   | 参数名称       | 必填 | 类型      | 默认值   | 描述                                 |
   |:---|:---|:---|:---|:---|
   | regionId   | 是  | String  | 无     | 区域ID，登录console页面后在浏览器的地址栏中获取。      |
   | groupId    | 是  | String  | 无     | 日志组ID。                             |
   | topicId    | 是  | String  | 无     | 日志流ID。                             |
   | epsId      | 否  | String  | 无     | 日志流所属的企业项目ID，若无企业项目，值为0。           |
   | hideHeader | 否  | Boolean | false | 是否隐藏左侧列表及顶部横向日志流列表，如需隐藏，该参数值为true。 |
   | sql        | 否  | String  | 无     | SQL查询语句，如SELECT count (\*)。        |
      
   图7参数与界面对应关系图（仅供参考）   
   ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001591415305.png "点击放大") 
5. 仪表盘界面，基础URL为：
   ```
   https://console.huaweicloud.com/lts/?region={regionId}&cfModuleHide=header_sidebar_floatlayer_rightsidebar#/cts/manager/dashboard?dashboardId={dashboardId}&hideDashboardList={hideDashboardList}&showCurrentdashboardGroup={showCurrentdashboardGroup}&streamId={streamId}&streamDisabled={streamDisabled}&readonly={readonly}&filter=key1:value1,value2;key2:value3,value4&autoFresh={autoFresh}
   ```
   表8参数说明表 
   | 参数名称                      | 必填 | 类型      | 默认值   | 描述                                                                                                                                                                                                                                                                                              | 示例                                           |
   |:---|:---|:---|:---|:---|:---|
   | regionId                  | 是  | String  | 无     | 区域ID，登录console页面后在浏览器的地址栏中获取。                                                                                                                                                                                                                                                                   | region=xx-xx-xx                              |
   | dashboardId               | 否  | String  | 无     | 需要展示的仪表盘ID，默认值为""。 使用场景：当用户需要默认展示某仪表盘时，可添加此参数。                                                                                                                                                                                       | dashboardId=xxxxxxxx                         |
   | hideDashboardList         | 否  | Boolean | false | 是否隐藏仪表盘选择下拉列表：默认不隐藏，true表示隐藏。 **使用场景：**当用户需要隐藏仪表盘下拉列表时，可通过添加该参数且值为true来实现。                                                                                                                                                            | hideDashboardList=true                       |
   | showCurrentdashboardGroup | 否  | Boolean | false | 是否只展示当前仪表盘所在分组/模板：默认值为false。 **使用场景：**当用户只需要展示当前仪表盘分组/模板的仪表盘时，可通过添加该参数且值为true来实现。 注意：若hideDashboardList参数值为true时，当前参数无效。                                                  | showCurrentdashboardGroup=true               |
   | streamId                  | 否  | String  | 无     | 日志流ID：默认值为""。 **使用场景：**只适用于仪表盘模板。当用户需要默认选中某日志流时，可添加该参数。                                                                                                                                                                              | streamId=xxxxxx                              |
   | streamDisabled            | 否  | Boolean | false | 日志流下拉框：默认可选择，true标识不可选择 **使用场景：**只适用于仪表盘模板。当用户需要置灰日志流下拉框时，可添加该参数。                                                                                                                                                                     | streamDisabled=true                          |
   | filter                    | 否  | String  | 无     | 过滤器参数，值为要选中的过滤器的名称及选中项。 key1、key2为过滤器名称，value1、value2为过滤器key1需要选中的值，value3、value4为过滤器key2需要选中的值。多个过滤器按照;分隔，多个选中项按照,分隔。 **使用场景：**当用户内嵌仪表盘界面需要默认选中某些过滤器的key、value时，可添加该参数。 | filter=key1:value1,value2;key2:value3,value4 |
   | readonly                  | 否  | Boolean | false | 是否是只读场景，只读场景下，操作类按钮会被隐藏。例如：新建过滤器、添加/修改/删除仪表盘等。 **使用场景：**当用户只需要展示仪表盘，不需要操作权限时，可添加该参数。                                                                                                                                                | readonly=true                                |
   | autoFresh                 | 否  | String  | 无     | 定时刷新时长，默认值为""。 **使用场景：**当用户需要指定默认定时刷新时长时，可添加此参数，当前支持的定时刷新时长参数取值为：0m，1m，5m，15m之一，对应：不定时刷新、1分钟定时刷新、5分钟定时刷新、15分钟定时刷新。                                                                                                                   | autoFresh=1m                                 |
      
   图8参数与界面对应关系图（仅供参考）   
   ![](https://support.huaweicloud.com/bestpractice-lts/zh-cn_image_0000001602283417.png "点击放大") 
 
