活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 618智算钜惠季 爆款云主机2核4G限时秒杀,88元/年起!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云脑AOne NEW 连接、保护、办公,All-in-One!
  • 中小企业应用上云专场 产品组合下单即享折上9折起,助力企业快速上云
  • 息壤高校钜惠活动 NEW 天翼云息壤杯高校AI大赛,数款产品享受线上订购超值特惠
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

智算服务

打造统一的产品能力,实现算网调度、训练推理、技术架构、资源管理一体化智算服务
智算云(DeepSeek专区)
科研助手
  • 算力商城
  • 应用商城
  • 开发机
  • 并行计算
算力互联调度平台
  • 应用市场
  • 算力市场
  • 算力调度推荐
一站式智算服务平台
  • 模型广场
  • 体验中心
  • 服务接入
智算一体机
  • 智算一体机
大模型
  • DeepSeek-R1-昇腾版(671B)
  • DeepSeek-R1-英伟达版(671B)
  • DeepSeek-V3-昇腾版(671B)
  • DeepSeek-R1-Distill-Llama-70B
  • DeepSeek-R1-Distill-Qwen-32B
  • Qwen2-72B-Instruct
  • StableDiffusion-V2.1
  • TeleChat-12B

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场创新解决方案
办公协同
  • WPS云文档
  • 安全邮箱
  • EMM手机管家
  • 智能商业平台
财务管理
  • 工资条
  • 税务风控云
企业应用
  • 翼信息化运维服务
  • 翼视频云归档解决方案
工业能源
  • 智慧工厂_生产流程管理解决方案
  • 智慧工地
建站工具
  • SSL证书
  • 新域名服务
网络工具
  • 翼云加速
灾备迁移
  • 云管家2.0
  • 翼备份
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)
行业应用
  • 翼电子教室
  • 翼智慧显示一体化解决方案

合作伙伴

天翼云携手合作伙伴,共创云上生态,合作共赢
天翼云生态合作中心
  • 天翼云生态合作中心
天翼云渠道合作伙伴
  • 天翼云代理渠道合作伙伴
天翼云服务合作伙伴
  • 天翼云集成商交付能力认证
天翼云应用合作伙伴
  • 天翼云云市场合作伙伴
  • 天翼云甄选商城合作伙伴
天翼云技术合作伙伴
  • 天翼云OpenAPI中心
  • 天翼云EasyCoding平台
天翼云培训认证
  • 天翼云学堂
  • 天翼云市场商学院
天翼云合作计划
  • 云汇计划
天翼云东升计划
  • 适配中心
  • 东升计划
  • 适配互认证

开发者

开发者相关功能入口汇聚
技术社区
  • 专栏文章
  • 互动问答
  • 技术视频
资源与工具
  • OpenAPI中心
开放能力
  • EasyCoding敏捷开发平台
培训与认证
  • 天翼云学堂
  • 天翼云认证
魔乐社区
  • 魔乐社区

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • OpenAPI中心
定价
  • 价格计算器
  • 定价策略
基础服务
  • 售前咨询
  • 在线支持
  • 在线支持
  • 工单服务
  • 建议与反馈
  • 用户体验官
  • 服务保障
  • 客户公告
  • 会员中心
增值服务
  • 红心服务
  • 首保服务
  • 客户支持计划
  • 专家技术服务
  • 备案管家

了解天翼云

天翼云秉承央企使命,致力于成为数字经济主力军,投身科技强国伟大事业,为用户提供安全、普惠云服务
品牌介绍
  • 关于天翼云
  • 智算云
  • 天翼云4.0
  • 新闻资讯
  • 天翼云APP
基础设施
  • 全球基础设施
  • 信任中心
最佳实践
  • 精选案例
  • 超级探访
  • 云杂志
  • 分析师和白皮书
  • 天翼云·创新直播间
市场活动
  • 2025智能云生态大会
  • 2024智算云生态大会
  • 2023云生态大会
  • 2022云生态大会
  • 天翼云中国行
天翼云
  • 活动
  • 智算服务
  • 产品
  • 解决方案
  • 应用商城
  • 合作伙伴
  • 开发者
  • 支持与服务
  • 了解天翼云
      • 文档
      • 控制中心
      • 备案
      • 管理中心
      文档中心

      云日志服务

      云日志服务

        • 产品动态
        • 产品介绍
        • 产品定义
        • 功能特性
        • 产品优势
        • 应用场景
        • 术语解释
        • 使用限制
        • 基础资源
        • 数据读写
        • 日志采集器
        • 查询与分析
        • 操作系统
        • 与其他服务关系
        • 计费说明
        • 计费概述
        • 计费模式
        • 按需计费
        • 资源包
        • 计费项
        • 计费样例
        • 欠费说明
        • 停止计费与退订
        • 计费FAQ
        • 快速入门
        • 入门概览
        • 开通云日志服务
        • 创建日志项目与日志单元
        • 日志接入
        • 查询与分析
        • 用户指南
        • 日志管理
        • 日志管理概述
        • 资源统计
        • 管理日志项目
        • 管理日志单元
        • 超额采集配置
        • 标签管理
        • 日志接入
        • 概述
        • 主机管理
        • 主机组管理
        • 采集器安装
        • 采集器管理
        • 接入云主机-文本日志
        • 接入云容器引擎-应用日志
        • 日志结构化解析
        • 单行全文模式
        • 多行全文模式
        • 单行分隔符模式
        • 单行正则模式
        • 多行正则模式
        • JSON模式
        • Nginx分词
        • 日志主题
        • 自定义日志时间
        • API接入
        • API接入概述
        • 访问地址(Endpoint)
        • 上报日志
        • SDK接入
        • SDK接入概述
        • 云日志服务Go SDK
        • 云日志服务Java SDK
        • 云日志服务Python SDK
        • 云日志服务C++ SDK
        • 云日志服务Log4j2 SDK
        • 云日志服务Logback SDK
        • 云日志服务Logging handler SDK
        • 云日志服务C SDK
        • 云日志服务.NET SDK
        • 云日志服务PHP SDK
        • 云日志服务 node.js SDK
        • 错误码
        • 其他接入方式
        • Systemd Journal日志采集
        • 使用Syslog协议(采集器)上传日志
        • 通过对象存储导入日志
        • 通过kafka导入日志
        • Windows事件日志采集
        • Nginx日志采集
        • 云服务日志接入
        • 云服务操作日志
        • 对象存储访问日志
        • 查询与分析
        • 日志查询
        • 日志查询
        • 上下文查询
        • 查询语法
        • SQL统计分析
        • 概述
        • SQL语法
        • 交互模式构造分析场景
        • 基础分析-字段筛选&过滤
        • 基础统计-指标统计
        • 基础统计-分组统计
        • 高级统计-日志占比
        • 高级统计-TopN
        • 高级统计-时间趋势
        • 经典分析样例
        • 内置保留字段
        • 索引配置
        • 日志聚类
        • 日志可视化
        • 可视化概述
        • 统计图表
        • 概述
        • 表格
        • 柱状图
        • 时序图
        • 饼图
        • 流图
        • 数值图
        • 散点图
        • 仪表盘
        • 创建仪表盘
        • 添加过滤器
        • 添加可视化图表
        • 权限管理
        • 数据加工
        • 数据加工概述
        • 基本概念
        • 创建数据加工任务
        • 管理数据加工任务
        • 数据加工语法
        • 概述
        • 流程控制函数
        • 事件操作函数
        • 字段操作函数
        • 事件操作函数
        • 操作符函数
        • 事件检查函数
        • 转换函数
        • 算术函数
        • 字符串函数
        • 日期时间函数
        • 正则表达式函数
        • 特定结构化数据函数
        • 编码解码函数
        • 日志转储
        • 概述
        • 转储至分布式消息服务Kafka
        • 转储至对象存储ZOS
        • 日志告警
        • 概述
        • 通知组管理
        • 通知策略管理
        • 告警规则
        • 告警历史
        • 告警事件历史
        • 告警发送历史
        • 静默策略
        • 最佳实践
        • 将本地日志迁移到云日志服务
        • 优化查询性能
        • 查询Log4j日志
        • 查询分析Nginx访问日志
        • 数据加工-日志过滤
        • 数据加工-为日志空缺字段赋值
        • 数据加工-为日志不存在的字段填充默认值
        • 告警-出现关键字即触发告警
        • 告警-根据关键字出现的次数设置告警
        • 基于业务日志的运维分析
        • API参考
        • API使用说明
        • 常见问题
        • 售前常见问题
        • 日志管理
        • 云日志服务使用建议
        • 云日志服务LTS对比自建ELK,应该如何选择?
        • 如何从第三方云厂商将日志搬迁到天翼云?
        • 数据采集
        • 常见问题
        • 如何查看日志采集器的运行状态?
        • 云日志服务可以采集哪类日志?支持采集哪些文件类型?
        • 云主机采集器无法连通如何处理?
        • 采集器安装失败如何处理?
        • 如何创建云日志服务终端节点?
        • 主机接入配置完成后未采集到日志如何处理?
        • 如何查看与升级插件版本?
        • 主机组中新增云主机后,如何启动日志采集?
        • 如何获取访问密钥(AK/SK)?
        • 数据存储
        • 查询与分析
        • 常见问题
        • 为什么检索不到日志?
        • 查询语法相关问题
        • 数据加工
        • 日志转储
        • 日志告警
        • 常见问题
        • 为什么出现漏告警或者误告警?
        • 触发告警成功,但是通知失败,如何处理?
        • 相关协议
        • 产品服务协议
        • 产品服务等级协议
          无相关产品

          本页目录

          帮助中心云日志服务用户指南日志接入SDK接入云日志服务Go SDK
          云日志服务Go SDK
          更新时间 2025-02-17 10:38:23
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2025-02-17 10:38:23
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本文主要介绍云日志服务Go SDK接入指南。

          1. 前言

          安装使用Go SDK可以帮助开发者快速接入使用天翼云的日志服务相关功能,目前支持同步上传,异步批量上传等功能。

          2. 使用条件

          2.1. 先决条件

          用户需要具备以下条件才能够使用云日志服务 SDK Go版本:

          1、已开通云日志服务,并创建了日志项目和日志单元,获取到相应编码(logProject、logUnit)。

          2、已获取AccessKey 和 SecretKey。

          3、已安装Go开发环境,推荐安装Go1.19或以上版本。

          2.2. 下载及安装

          下载ctyun_lts_go_sdk.zip压缩包,放到相应位置后并解压。“ctyun_lts_go_sdk”目录中“example”为SDK的使用示例代码。

          1、将解压后的代码包的"lts"目录整个复制到您的项目中。

          2、更新依赖项,在您的go项目中执行命令:

          go mod tidy 
          

          3、当您的代码中要使用SDK时,在代码的import中,添加lts包。假设您的项目为lts_sdk_go_demo,则进行如下操作。这样您就可以顺利使用SDK的功能:

          import(
              "lts_sdk_go_demo/lts"
          )
          

          如果您想直接使用SDK,则可以进行如下步骤处理:

          4、进入到ctyun_lts_go_sdk 目录下,删除go.mod 、go.sum文件。

          5、执行命令,初始化您的项目:

          go mod init ctyun_lts_go_sdk  
          

          6、接着执行命令:

          go mod tidy 
          

          7、进入example目录下,运行sample_putlogs.go示例

          go run sample_putlogs.go
          

          8、或者进入example目录下,构建您的go项目,执行命令,以生成二进制文件。

          go build -o sample_putlogs  sample_putlogs.go       (linux 环境)
          go build -o sample_putlogs.exe  sample_putlogs.go    (windows 环境)
          

          9、运行sample_putlogs示例:

          ./sample_putlogs         (linux 环境)
          sample_putlogs.exe       (windows 环境)
          

          3. SDK基本使用

          3.1. 基本使用

          使用 SDK访问云日志服务,需要设置正确的 AccessKey、SecretKey 和endpoint,所有的服务可以使用同一 key 凭证来进行访问,但不同的服务地区需要使用不同的 endpoint 进行访问,详情参考天翼云官网-SDK接入概述。在调用前SDK,需要已知以下参数:

          • 云日志服务访问地址。详情请查看访问地址(Endpoint)。
          • key凭证:accessKey和secretKey 。详情请查看如何获取访问密钥(AK/SK)。
          • 日志项目编码:logProject,在使用SDK前,需要确保您有至少一个已经存在的日志项目。
          • 日志单元编码:logUnit,在使用SDK前,需要确保日志项目中有至少一个已经存在的日志单元。
          • 待上传的日志:logItem,在使用SDK前,需要确保日志已按照特定格式组织。
          参数 参数类型 描述 是否必须
          endpoint string 域名 是
          accessKey string AccessKey,简称ak 是
          secretKey string SecretKey ,简称sk 是
          logProject string 日志项目编码 是
          logUnit string 日志单元编码 是

          目前通过SDK将日志上传有两种上传形式:同步上传和异步批量上传。

          1、同步上传:当调用日志上传接口时,sdk会立即进行http请求调用,并返回发送结果。这种方式结构简单,可用于发送频率不高的场景。

          2、异步批量上传:当调用日志上传接口时,后台线程会将日志进行累积,当达到发送条件时,会进行一次合并发送。对于需要频繁调用发送接口的场景,这种方式性能更卓越,更高效。

          示例代码:同步上传

          import (
          	"ctyun_lts_go_sdk/lts"
          	"fmt"
          	"time"
          )
          func main() {
          	ak := "your accessKey"
          	sk := "your secretKey"
          	logProject := "log project Code"
          	logUnit := "log unit Code"
          	endpoint := "https://guizhou-lts.ctyun.cn"
          	clientConfig := lts.GetDefaultClientConfig(endpoint, ak, sk, logProject)
          	client, err := lts.CreateClient(clientConfig)
          	if err != nil {
          		fmt.Println("client initialization failed, err:", err)
          		return
          	}
          	logTimestamp := time.Now().UnixNano()
          	originMsg := "go sdk test oriMessage"
          	contents := make(map[string]any)
          	contents["contentInt"] = logTimestamp
          	contents["contentString"] = "contents test string"
          	contents["contentDouble"] = 3.1415926
          	contents["contentBool"] = "true"
          	labels := make(map[string]any)
          	labels["user_tag"] = "string"
          	logItem := lts.GenerateLogItem(logTimestamp, originMsg, contents, labels)
          	logItems := lts.NewLogItems()
          	for i := 0; i < 10; i++ {
          		logItems.AddLogItem(logItem)
          	}
          	for j := 0; j < 100; j++ {
          		response, err := client.PutLogs(logProject, logUnit, logItems)
          		if err != nil {
          			fmt.Println("Put log failed: ", err)
          		} else {
          			fmt.Println("Response message: ", response.Message)
          		}
          	}}
          

          示例代码:异步批量上传

          func main() {
          	ak := "your accessKey"
          	sk := "your secretKey"
          	logProject := "log project Code"
          	logUnit := "log unit code"
          	endpoint := "your endpoint"
          
          	producerConfig := lts.GetDefaultProducerConfig()
          	producerConfig.AllowLogLevel = "warn"
          	producer := lts.InitProducer(producerConfig)
          
          	// 可以根据clientConfig 创建多个client,client间互不影响
          	clientConfig := lts.GetDefaultClientConfig(endpoint, ak, sk, logProject)
          	err := producer.BuildClient(clientConfig)
          	if err != nil {
          		fmt.Println("client initialization failed, err:", err)
          		return
          	}
          	producer.Start()
          
          	for i := 0; i < 1000; i++ { //直接发送,内部异步批量发送
          		err := producerInstance.SendLogs(logProject, logUnit, logItem)
          		if err != nil {
          			fmt.Println(err)
          		}
          	}
          	 
                  time.Sleep(10 * time.Second)
          	producer.SafeClose()
          }
          

          4. 服务代码示例-同步上传

          4.1. 关于Client的操作

          4.1.1. GetDefaultClientConfig()

          此操作是获取Client的默认配置。至少需要4个关键的参数,config配置如下:

          参数 参数类型 描述 是否必须
          Endpoint string 域名 是
          AccessKey string AccessKey,简称ak 是
          SecretKey string SecretKey ,简称sk 是
          LogProject string LogProject,日志项目编码 是
          UserAgent string lts-sdk-go/{go版本信息} 否
          RequestTimeOut time.Duration 请求超时时间,默认60s 否
          RetryTimeOut time.Duration 重试超时时间,默认90s 否
          CompressType string 日志压缩方式,默认lz4 否

          示例代码:获取ClinetConfig配置

          clientConfig := lts.GetDefaultClientConfig(endpoint, ak, sk, logProject)
          //也可以进行自定义参数值
          clientConfig.RequestTimeOut=30 * time.Second
          clientConfig.UserAgent=”log-sdk-go/1.6.0’
          

          4.1.2. CreateClient

          此操作是根据clientConfig创建一个Client。之后,可以进行Client初始化,其中有三个主要步骤:初始化client示例、初始化HTTPClient用于发送http请求、通过accessKey和secretKey获取临时凭证Token,关于HTTPClient中的参数,用户也可以根据项目的需要自行修改。

          示例代码:初始化生成Client

          //初始化 Client
          client, err := lts.CreateClient(clientConfig)
          
          
          //CreateClient()的实现
          func CreateClient(clientConfig *ClientConfig) (*Client, error) {
          
          	client := &Client{
          		Endpoint:       clientConfig.Endpoint,
          		AccessKey:      clientConfig.AccessKey,
          		SecretKey:      clientConfig.SecretKey,
          		CompressType:   clientConfig.CompressType,
          		RequestTimeOut: clientConfig.RequestTimeOut,
          		RetryTimeOut:   clientConfig.RetryTimeOut,
          		UserAgent:      clientConfig.UserAgent,
          		HTTPClient: &http.Client{
          			Timeout: 30 * time.Second,
          			Transport: &http.Transport{
          				DialContext: (&net.Dialer{
          					Timeout:    30 * time.Second,
          					KeepAlive:  90 * time.Second,
          				}).DialContext,
          				TLSClientConfig:     &tls.Config{InsecureSkipVerify: true},
          				MaxIdleConns:        100,
          				MaxIdleConnsPerHost: 100,
          				IdleConnTimeout:     90 * time.Second,
          				DisableKeepAlives:   false,
          			},
          		},
          	}
          	if err := CheckConfig(client); err != nil {
          		return nil, err
          	}
          	err := client.SetToken()
          	if err != nil {
          		return nil, err
          	}
          	return client, nil
          }
          

          4.2. 关于临时凭证Token的操作

          4.2.1. akskToToken()

          此操作是为client注入token信息,这一步需要使用ak和sk信息换取临时凭证TokenInfo,其中包含了token随机串和过期时间两个参数。这一步需要去访问CTIAM的api接口,调用api接口,传入ak/sk/endpoint信息,返回token信息。

          TokenInfo信息如下:

          参数 类型 描述
          Token string token 随机串
          ExpireTime int64 过期时间,默认30分钟

          获取TokenInfo这一步在Client 初始化时会自动调用akskToToken,用户默认可以不用进行这一步操作。

          示例代码:使用ak,sk去获取临时凭证token

          func (c *Client) SetToken() (err error) {
          tokenInfo, err := akskToToken(c.Config.AccessKey, c.Config.SecretKey, c.Config.Endpoint)
          if err != nil {
          return err
          }
          c.SecurityToken = tokenInfo
          return nil
          }
          

          4.3. 关于Log的操作

          4.3.1. logItems.AddLogItem(logItem)

          此操作用于生成待上传的日志,日志上传只能上传LogItem格式的日志,logItems是一个数组类型,里面包含若干条LogItem日志,格式如下:

          参数 类型 描述 是否必须
          logItems []LogItem LogItem格式的数组,将多份日志组合起来发送 是

          其中LogItem类型需要的参数如下:

          参数 类型 描述 是否必须
          LogTimestamp int 时间戳,单位纳秒 是
          OriginMsg string 原始日志内容 是
          Contents map[string]any 日志内容,分词后的内容 否
          Labels map[string]any 自定义标签 否

          注意:其中Contents和Labels的key的长度不超过64字符,仅支持数字、字母、下划线、连字符(-)、点(.),且必须以字母开头。value类型最好使用字符串(string)和数字类型(int,double),其他类型建议先转为字符串类型,并且value值不能为空或空字符串。

          示例代码:组装生成1条日志

          logTimestamp := time.Now().UnixNano()
          originMsg := "go sdk test oriMessage"
          contents := make(map[string]any)
          contents["contentInt"] = logTimestamp
          contents["contentString"] = "contents test string"
          contents["contentDouble"] = 3.1415926
          contents["contentBool"] = "true"
          labels := make(map[string]any)
          labels["user_tag"] = "string"
          logItem := lts.GenerateLogItem(logTimestamp, originMsg, contents, labels)
          logItems := lts.NewLogItems()
          logItems.AddLogItem(logItem)
          

          4.4. 关于日志上传的操作

          4.4.1. PutLogs()

          此操作用于日志上传服务,需要传入的参数有三个,分别是logProject(日志项目编码),logUnit(日志单元编码),logItems(要上传的日志)。

          参数 类型 描述 是否必须
          logProject string 日志项目编码 是
          logUnit string 日志单元编码 是
          logItems []LogItem 日志信息 是

          示例代码:上传日志,默认使用lz4压缩

          response, err := client.PutLogs(logProject, logUnit, logItems) 
          if err != nil {
               fmt.Println("Put log failed: ", err.Error())
          } else {
               fmt.Println("message: ", response.Message)
          }
          

          response 是Response格式的返回响应体,如下表格式:

          参数 类型 描述 示例
          statusCode int64 返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码
          message string 状态描述 SUCCESS
          error string 参考错误编码列表

          日志服务相关错误编码(部分):

          statusCode error message
          -1 LTS_8000 请求失败,请稍候重试,或提交工单反馈
          -1 LTS_8001 内容不合法,无法解析
          -1 LTS_8004 日志内容包含的日志必须小于[x] MB和[y]条
          -1 LTS_8006 日志内容解压失败
          -1 LTS_8007 Token失效,请重新获取
          -1 LTS_8009 无云日志服务产品实例,请先开通云日志服务
          -1 LTS_8010 日志项目不存在
          -1 LTS_8011 日志单元不存在
          -1 LTS_8013 在1个日志项目下,写入流量最大限制:200MB/s
          -1 LTS_8014 在1个日志项目下,写入次数最大限制:1000次/s
          -1 LTS_8015 在1个日志单元下,写入流量最大限制:100MB/s
          -1 LTS_8016 在1个日志单元下,写入次数最大限制:500次/s
          -1 LTS_18000 调用ITIAM的接口失败

          4.5. 关于日志消费的操作

          4.5.1. GetCursor()

          此操作是获取云日志服务上某个时间点的cursor游标,后面日志消费需要使用到这个游标。

          参数 类型 描述 是否必须
          logProject string 日志项目编码 是
          logUnit string 日志单元编码 是
          from string 起始时间,可为"begin"/ "and" / "2024-10-01 10:10:10" 是

          示例代码:获取from时间点的游标

          // 创建一个 CursorRequest 实例
          cursorRequest := &lts.CursorRequest{
          ProjectCode: logProject,
          UnitCode:    logUnit,
          From:        from,
          }
          
          response, err := client.GetCursor(cursorRequest)
          if err != nil {
          fmt.Println("Get Cursor failed: ", err)
          } else {
          fmt.Println("statusCode:", response.StatusCode, ", cursor:", response.ReturnObj, ",message:", response.Message, ",error:", response.Error)
          }
          

          response 是CursorResponse格式的返回响应体,如下表格式:

          参数 类型 描述 示例
          RequestId string 请求Id,
          StatusCode int 返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码
          Message string 状态描述
          Error string 参考错误编码列表
          ReturnObj int 游标结果 362539770003324928

          4.5.2. PullLogs()

          此操作是根据日志的游标拉取云日志服务日志。

          参数 类型 描述 是否必须
          logProject string 日志项目编码 是
          logUnit string 日志单元编码 是
          start uint64 起始游标 是
          end uint64 结束游标,填0表示空值入参 是
          count uint32 拉取的日志数量 是

          示例代码:拉取游标处的日志

          pullLogRequest := &lts.PullLogRequest{
          LogProject: logProject,
          LogUnit:    logUnit,
          Start:      start,
          End:        end,
          Count:      count,
          }
          
          response, err := client.PullLogs(pullLogRequest)
          if err != nil {
          fmt.Println("Pull log failed: ", err)
          } else {
          fmt.Println("statusCode:", response.StatusCode, ", rows:", response.ReturnObj.Rows, ",message:", response.Message, ",error:", response.Error)
          }
          

          response 是PullLogResponse格式的返回响应体,如下表格式:

          参数 类型 描述 示例
          RequestId string 请求Id,
          StatusCode int 返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码
          Message string 状态描述
          Error string 参考错误编码列表
          ReturnObj Logs 日志数据

          ReturnObj 是Log格式的返回响应体,如下表格式:

          参数 类型 描述 示例
          Rows []map[string]any 里面是类似kv类型的键值对,是云日志服务上的日志消息
          Next int64 返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码
          Status status 状态描述

          5. 服务代码-异步批量上传

          异步上传是为了解决同步上传无法高频异步发送等问题所增加的模块。原理是会开启多个协程,当调用日志发送接口后,会立刻返回,而内部的协程会将日志数据缓存合并,最后进行批量发送。异步上传特点如下:安全设计、高效异步传输、智能重试机制、详尽的行为跟踪 、优雅关闭流程等

          性能卓越,在面临海量数据和高资源压力的场景下,producer 凭借多协程、智能缓存和批量发送等高级功能,帮助用户轻松达到目标吞吐量,同时简化了程序设计和开发流程。

          异步处理优势,在内存资源充足的情况下,producer 的异步发送机制使得用户调用 sendLogs 方法时无需等待,实现了计算与 I/O 逻辑的有效分离。用户可以通过 callback 了解日志发送状态。

          5.1. 关于Producer操作

          5.1.1. GetDefaultProducerConfig()

          此操作是获取producer的默认的配置文件。producer可以看作是一个启动器,内部封装了异步协程的初始化、启动和关闭等功能,只需要对producer进行操作,即可安全便捷地控制这些异步的协程。使用这份producerConfig配置去初始化一个producer。

          producerConfig := lts.GetDefaultProducerConfig()
          producerConfig.AllowLogLevel = "warn"
          producerConfig.LingerMs = 2000
          ...
          producer := lts.InitProducer(producerConfig)
          

          producerConfig内的属性是异步操作中的线程所需要的参数,如果不设置参数,则初始化的时候会使用默认的参数,默认参数如下所示:

          参数 类型 描述
          TotalSizeLnBytes Int64 单个 producer 实例能缓存的日志大小上限,默认为 100MB。
          MaxIoWorkerCount Int64 单个producer能并发的最多groutine的数量,默认为50,该参数用户可以根据自己实际服务器的性能去配置。
          MaxBlockSec Int 如果 producer 可用空间不足, send 方法的最大阻塞时间,默认为60秒。如果超过这个时间后空间仍无法得到满足,send 方法会抛出TimeoutException。如果将s值设为0,当所需空间无法得到满足时,send 方法会立即抛出 TimeoutException。如果希望 send 方法一直阻塞直到所需空间得到满足,可设为负数。
          MaxBatchSize Int64 当一个 ProducerBatch 中缓存的日志大于等于batchSizeThresholdInBytes 时,该 batch 将被发送,默认为 512 KB,最大5MB。
          MaxBatchCount Int 当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送,默认为 4096,最大40960。
          LingerMs Int64 一个 ProducerBatch 从创建到可发送的逗留时间,默认为 2 秒,最小可设置成 100 ms。
          Retries Int 如果某个 ProducerBatch 首次发送失败,能够对其重试的次数,默认为 10 次。 如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列。
          MaxReservedAttempts Int 每个 ProducerBatch 每次被尝试发送都对应着一个 Attemp,此参数用来控制返回给用户的 attempt 个数,默认只保留最近的 11 次 attempt 信息。该参数越大能让您追溯更多的信息,但同时也会消耗更多的内存。
          BaseRetryBackoffMs Int64 首次重试的退避时间,默认为 100 毫秒。 Producer 采样指数退避算法,第 N 次重试的计划等待时间为 baseRetryBackoffMs * 2^(N-1)。
          MaxRetryBackoffMs Int64 重试的最大退避时间,默认为 50 秒。
          AllowLogLevel String 设置日志输出级别分别为debug,info,warn和error,默认值是warn,
          LogFileName String 日志文件输出路径,默认输出到stdout。
          IsJsonType Bool 是否格式化文件输出格式,默认为false。
          LogMaxSize Int 单个日志存储数量,默认为10M。
          LogMaxBackups Int 日志轮转数量,默认为10。
          NoRetryStatusCodeList []int 用户配置的不需要重试的错误码列表,当发送日志失败时返回的错误码在列表中,则不会重试。默认包含400,403,404。

          5.1.2. BuildClient()

          此操作是根据clientConfig配置初始化client,它会根据配置中的logProject属性去初始化一个client,不同的logProject会构建不同的client,使用不同的配置就可以构建多个client,每个client负责该project项目下的日志发送任务。

          clientConfig := lts.GetDefaultClientConfig(endpoint, ak, sk, logProject)
          clientConfig2 := lts.GetDefaultClientConfig(endpoint, ak2, sk2, logProject2)
          
          err := producerInstance.BuildClient(clientConfig)
          if err != nil {
          fmt.Println("client initialization failed, err:", err)
          return
          }
          err = producerInstance.BuildClient(clientConfig2)
          if err != nil {
          fmt.Println("client2 initialization failed, err:", err)
          return
          }
          

          5.1.3. Close()

          此操作是用于关闭producer。当不再需要发送数据或当前进程即将终止时,关闭producer是必要的步骤,以确保producer中缓存的所有数据都能得到妥善处理。当前,producer提供了两种关闭模式:安全关闭和有限关闭。

          安全关闭模式确保在关闭producer之前,所有缓存的数据都已完成处理,所有相关协程都已关闭,并且所有注册的回调函数都已执行完毕。一旦producer被安全关闭,缓存的批次数据会立即得到处理,并且不会被重试。如果回调函数没有被阻塞,close方法通常能够迅速返回。

          producer.SafeClose()
          

          有限关闭模式适用于那些可能存在阻塞回调函数的场景,但您又希望close方法能在指定的时间内返回。有限关闭会接收用户传递的一个参数值,时间单位为秒,当开始关闭producer的时候开始计时,超过传递的设定值还未能完全关闭producer的话会强制退出producer,此时可能会有部分数据未被成功发送而丢失。

          producer.close(60)
          

          5.2. 关于异步发送操作

          5.2.1. SendLogs()

          此操作是将日志发送到后台的日志累加器队列中,然后立刻返回。累加器的状态达到可发送条件时(日志量达到阈值或者等待时间达到阈值),后台任务的线程将里面的日志进行打包批量发送。

          producer.sendLogs(logProject, logUnit, logItem)
          

          sendLogs()方法有很多同类方法,可以满足多种类型的发送,既可以发送单条日志,也可以发送多条日志,同时也可以根据需求是否需要结果返回值。类型如下:

          sendLogs(logProject string, logUnit string, logItem *LogItem)
          sendLogList(logProject string, logUnit string, logList []*LogItem)
          sendLogsWithCallBack(logProject string, logUnit string, logItem *LogItem)
          sendLogsListWithCallBack(logProject string, logUnit string, logList []*LogItem)
          

          5.3. 关于获取发送结果的操作

          5.3.1. Callback

          在调用sendLogsWithCallBack方法时注册 callback 获取数据发送结果,代码片段如下。(可根据需求自行修改, io_worker.go)

          func (callback *Callback) Success(result *Result) {
          	attemptList := result.GetReservedAttempts()
          	for _, attempt := range attemptList {
          		fmt.Println("success ,statusCode:", attempt.StatusCode, ",message:", attempt.ErrorMessage, ",error:", attempt.ErrorCode)
          	}
          }
          
          func (callback *Callback) Fail(result *Result) {
          	attemptList := result.GetReservedAttempts()
          	for _, attempt := range attemptList {
          		fmt.Println("fail , statusCode:", attempt.StatusCode, ",message:", attempt.ErrorMessage, ",error:", attempt.ErrorCode)
          	}
          }
          
          文档反馈

          建议您登录后反馈,可在建议与反馈里查看问题处理进度

          鼠标选中文档,精准反馈问题

          选中存在疑惑的内容,即可快速反馈问题,我们会跟进处理

          知道了

          上一篇 :  SDK接入概述
          下一篇 :  云日志服务Java SDK
          搜索 关闭
          ©2025 天翼云科技有限公司版权所有 增值电信业务经营许可证A2.B1.B2-20090001
          公司地址:北京市东城区青龙胡同甲1号、3号2幢2层205-32室
          备案 京公网安备11010802043424号 京ICP备 2021034386号
          ©2025天翼云科技有限公司版权所有
          京ICP备 2021034386号
          备案 京公网安备11010802043424号
          增值电信业务经营许可证A2.B1.B2-20090001
          用户协议 隐私政策 法律声明