专栏首页日志服务CLS【日志服务CLS】应用工作流ASW接入CLS实践分享
原创

【日志服务CLS】应用工作流ASW接入CLS实践分享

本文介绍了通过HTTP请求CLS API的一个具体业务场景的接入实践,由于CLS体量过大,无法接入腾讯云SDK,也在接入过程中遇到了一些问题,特此将流程总结分享,以免重蹈覆辙~

涉及的代码示例为Go语言。

业务场景

附业务场景需求分析WIKI:https://iwiki.woa.com/pages/viewpage.action?pageId=572745651

ASW执行编排好的工作流时,需要逐个任务节点执行,过程将产生大量日志,不宜自设数据库来存,需要借助专门存储日志的系统,也就是本次文章所介绍使用的CLS了。

日志服务(Cloud Log Service)提供一站式的日志数据解决方案。您无需关注扩缩容等资源问题,五分钟快速便捷接入,即可享受从日志采集、日志存储到日志内容搜索、统计分析等全方位稳定可靠的日志服务。帮助您轻松解决业务问题定位,指标监控、安全审计等日志问题。大大降低日志运维门槛。

日志服务主要提供以下功能:

  • 日志采集:通过 LogListener、API 等方式从不同日志采集端采集日志至日志服务。
  • 日志存储:使用日志服务存储日志数据。
  • 日志索引:开启日志索引对日志进行查询,可帮助用户快速定位日志问题。
  • 日志投递:用户可以将指定日志投递至其他云产品中,满足存储或其他计算需求。如指定的 COS 存储桶中,对日志进行生命周期管理等,满足日志审计需求。

根据官网介绍,CLS很好地切合了需求。API采集、无感知扩缩容、稳定可靠、索引搜索等即是ASW目前所极需的,因此决定接入CLS


Go API接入最佳实践

本次业务场景的接入需要完成如下事情:

  1. CAM换票,得到SecretId、SecretKey
  2. CLS签名构造
  3. 调用CLS API:创建日志集、创建日志主题、创建索引、写入日志
  4. 获取结果

CAM换票,得到SecretId、SecretKey

通过RoleQRN,调用Cam服务的DescribeToken接口校验并换取有权限操作CLS日志服务的SID、SKey,这里通过预设服务相关角色来帮助用户跳转到Cam一键开通,确保用户具有操作权限。

具体来说,在野鹤平台创建一个服务相关角色ASW_QCSLinkedRoleInAswLog

用户授权链接就是形如

https://console.cloud.tencent.com/cam/role/grant?roleName=ASW_QCSLinkedRoleInAswLog&serviceLinkedRole=1&s_url={call_back_url}

这样的跳转链接,在授权后,就可以根据这个相关角色的QRN来换票得到SID、SKey了,此步骤完成。

CLS签名构造

可以从https://cloud.tencent.com/document/product/614/12445获取签名计算方法demo。

拿来就能直接用了,请求所有API都需要加入这个签名头部,因此也可以根据实际业务需要,加一层封装。

签名封装

//获取cls要求的签名
func Authorization(credential *sdkCommon.Credential, headers url.Values, params url.Values, interfaceName, method string) string {

   return signature(credential.SecretId, credential.SecretKey, method, interfaceName, params, headers, 300)
}

获取签名

// 构建请求
request, err := http.NewRequest("GET", fmt.Sprintf(aswCommon.Conf.Cls.Url, region), nil)
if err != nil {
   return false, err
}

//获取cls需要的签名
headers := url.Values {
   "Content-Type": {"application/json"},
   "x-cls-token": {credential.Token},
}
params := url.Values{}

// 调用封装后的签名函数
authorization := clsutils.Authorization(credential, headers, params, "/logsets", "GET")

// 添加签名字段Header
request.Header.Add("Content-Type", "application/json")
request.Header.Add("x-cls-token", credential.Token)
request.Header.Add("Authorization", authorization)

// 发起请求
response, err := client.Do(request)
if err != nil {
 return false, err
}

调用CLS API:创建日志集、创建日志主题、创建索引、写入日志

复用前面介绍的方式,一个一个接口调就好了~

其中,创建索引、构造日志两步需要创建比较复杂的数据结构,这部分可以参考文档完成,

建议将创建索引作为必选步骤,防止检索不到日志的情况出现。

创建索引 官方参考文档:https://cloud.tencent.com/document/product/614/16905

构造日志pb结构、写入日志 官方参考文档:https://cloud.tencent.com/document/product/614/16873

获取结果

以上步骤,前两步会返回创建成功的logset id 和topic id。

而后两步索引创建、写入日志返回200即代表成功,可以利用这一点,判断cls服务是否开通,可以调用cls的logsets接口(获取日志集列表),无需传入参数,返回200代表查询成功,即服务已开通,返回403等状态码则代表服务未开通。


遇到的问题总结

1. 使用签名函数时需注意,一些接口需要通过body传递参数,而签名仅需要计算header和query,不需要传入body。

示例:

// body参数构造
reqJson := "{\"logset_name\": \"" + tomlconfig.Conf.ClsClient.ClsLogSetName + "\",\"period\": " +
        strconv.Itoa(tomlconfig.Conf.ClsClient.ClsLogSetPeriod) + "}"

// 构建请求
request, err := http.NewRequest("POST",  tomlconfig.Conf.ClsClient.ClsLogSetUrl,  strings.NewReader(reqJson))

// 无需传入reqJson
authorization := Authorization(credential, headers, params, "/logsets", "GET")

2. 创建完日志集和日志主题后,一定确保创建索引成功后再写入日志,否则之前写入的日志无法检索到

3. 要获取本次调用的RequestId,根据CLS文档可从响应头部获取,这里文档给出的名称实际调用时获取不到,实际返回字段为x-Cls-Requestid

4. 构造日志时,用proto pb3语法定义日志结构,调用接口报400 bad request

改用pb2即可,经查证是CLS还未支持pb3

5. 测试环境问题

业务涉及sts服务换票、cls签名校验等环节,因此在测试过程中,若使用测试环境,需要配置如下host才能正常访问到测试环境上,而且需要注意的是,cls的测试环境URL是现网的ap-guangzhou

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 腾讯云日志服务CLS征文活动名单公布!🔥

    腾讯云日志服务CLS举办的日志服务CLS体验征文活动发起后,吸引了许多云+社区作者和行业专业人士的关注与参与,发表了众多产品业务使用场景实践案例、日志服务产品初...

    日志服务CLS小助手
  • 发布更新|腾讯云 Serverless 产品动态 20210120

    一、ASW 工作流公测发布 公测时间: 2021-01-22 产品背景: 应用与服务编排工作流(Application Services Workflow,以...

    腾讯云serverless团队
  • CLB日志核心的玩法你Get到了吗?

    CLB日志还有类型?当然CLB维护着千亿QPS的网关产品,精细化运营管理还是很齐全的。

    tinkerli
  • 使用腾讯云 Serverless 云函数处理日志数据|在线分享第十二期

    随着 IT 数字化发展,日志分析在各行各业的应用越来越广泛,系统运维、研发诊断、安全审计、大数据运营分析等场景中均可以通过日志分析保障业务。 为了简化处理日志...

    腾讯云serverless团队
  • Serverless 音视频转码 —— 芒果 TV 落地实践(下)

    在《Serverless 音视频转码 —— 芒果 TV 落地实践(上)》中,我们回顾了芒果 TV 吴坚强老师在 techo 大会的精彩分享,芒果TV 音视频编...

    腾讯云serverless团队
  • 技术架构解密 - 应用与服务编排工作流 ASW

    ? 腾讯云应用与服务编排工作流 ASW(Application Service Workflow)是新一代计算架构体系下的服务编排解决方案,用来协调分布式任务...

    腾讯云serverless团队
  • 【日志服务CLS】腾讯云CLS日志服务初体验

    作为一个服务器小白来说,以入门的视角,简单的方式来看腾讯云的CLS日志服务。本文就来分享一下关于使用CLS日志服务的初体验。

    三掌柜
  • 【腾讯云日志服务CLS】体验征文活动正式开始啦!!Apple Watch只等你来拿!!🎁

    为活跃云原生日志服务CLS技术交流吧的技术氛围,鼓励广大产品运维技术开发同学们踊跃体验日志服务CLS产品,分享日志数据解决方案技术干货、系统平台接入日志服务CL...

    日志服务CLS小助手
  • 【腾讯云日志服务CLS】Linux服务器使用腾讯云CLS日志服务初体验

    hello,腾讯云的小伙伴们,我是不想赖床,一位拥有2年腾讯云服务使用体验的计算机大学生。我们在使用腾讯云服务器时,在各种业务开发部署过程中会产生各种日志,如果...

    乌龟哥哥
  • TKE集群日志解决方案之日志采集

    当前技术领域容器盛行,已然是一个云原生的时代, 在技术领域都或多或少跟云计算、容器、Kubernetes、云原生应用有着不同的渊源。云原生的技术变更带来了革命性...

    朱瑞卿
  • 1月容器技术产品月报 | 留言有奖

    ? 2021年1月 ? ? VOL:09 ? ? ? ? 腾小云告诉你最前线的产品新特性, 总有一款让你心动~ ? 云说新品 ? 容器产品新特性 12月上新 ...

    腾讯云原生
  • 【日志服务CLS】腾讯云日志服务CLS接入内容分发网络CDN

    上面描述的功能看起来很多,但初次体验可能还是一头雾水。不过跟着官方控制台和文档指引进行操作,上手起来还是很轻松的。

    喵喵侠
  • 【日志服务CLS】腾讯云日志服务CLS接入内容分发网络CDN

    上面描述的功能看起来很多,但初次体验可能还是一头雾水。不过跟着官方控制台和文档指引进行操作,上手起来还是很轻松的。

    喵喵侠
  • 【日志服务CLS】腾讯云日志服务CLS尝鲜

    腾讯云产品有很多的分类,一般有一级大类和二级分类,其中,日志服务CLS是作为大类“存储”中的“数据处理与分析”类别下。如果我们想体验CLS服务,可以从下图的这个...

    liuzhen007
  • 【腾讯云日志服务CLS】serverless应用中的CLS服务详解

    日志服务(Cloud Log Service)提供一站式的日志数据解决方案。您无需关注扩缩容等资源问题,五分钟快速便捷接入,即可享受从日志采集、日志存储到日志内...

    用户8390435
  • 【日志服务CLS】腾讯云Log4j/Logback日志采集最佳实践

    日志存储分析在应用系统中扮演着重要的角色,传统的ELK对于小型团队过于繁琐,维护麻烦,腾讯云提供了CLS日志采集分析系统,可以通过LogListener来实现业...

    马雪峰
  • 腾讯云CLS产品应用

    *LogListener: 是腾讯云日志服务提供的日志采集 Agent,通过在服务器上安装loglistener可以实时采集指定路径上的日志,并对日志原始数据进...

    来自青铜段位的咸鱼
  • 【日志服务CLS】腾讯云Log4j/Logback日志采集最佳实践

    日志存储分析在应用系统中扮演着重要的角色,传统的ELK对于小型团队过于繁琐,维护麻烦,腾讯云提供了CLS日志采集分析系统,可以通过LogListener来实现业...

    马雪峰
  • 腾讯云CLS日志服务应用

    *LogListener: 是腾讯云日志服务提供的日志采集 Agent,通过在服务器上安装loglistener可以实时采集指定路径上的日志,并对日志原始数据进...

    来自青铜段位的咸鱼

扫码关注云+社区

领取腾讯云代金券