活动

天翼云最新优惠活动,涵盖免费试用,产品折扣等,助您降本增效!
热门活动
  • 12.12年度钜惠 NEW 爆款云主机2核2G仅需28.8元/年,X实例35.1元/半年起! 8代机+XSSD新客专享2.5折!
  • 免费体验DeepSeek,上天翼云息壤 NEW 新老用户均可免费体验2500万Tokens,限时两周
  • 云上钜惠 HOT 爆款云主机全场特惠,更有万元锦鲤券等你来领!
  • 算力套餐 HOT 让算力触手可及
  • 天翼云AI产品特惠 NEW 人脸识别+文字识别焕新,新用户免费试用
  • 中小企业服务商合作专区 国家云助力中小企业腾飞,高额上云补贴重磅上线
  • 出海产品促销专区 NEW 爆款云主机低至2折,高性价比,不限新老速来抢购!
  • 天翼云电脑专场 HOT 移动办公新选择,爆款4核8G畅享1年3.5折起,快来抢购!
  • 天翼云奖励推广计划 加入成为云推官,推荐新用户注册下单得现金奖励
免费活动
  • 免费试用中心 HOT 多款云产品免费试用,快来开启云上之旅
  • 天翼云用户体验官 NEW 您的洞察,重塑科技边界

息壤智算

领先开放的智算服务平台,提供算力、平台、数据、模型、应用“五位一体”智算服务体系,构建全流程的AI基础设施能力
智算云(DeepSeek专区)
AI Store
  • 算力市场
  • 模型市场
  • 应用市场
  • MCP市场
算力互联调度平台
  • 裸金属
  • 定制裸金属
训推服务
  • 模型开发
  • 训练任务
  • 服务部署
模型推理服务
  • 模型广场
  • 体验中心
  • 服务接入
应用托管
  • 应用实例
科研助手
  • 科研智能体
  • 科研服务
  • 开发机
  • 并行计算
大模型
  • DeepSeek-V3.1
  • DeepSeek-R1-0528
  • DeepSeek-V3-0324
  • Qwen3-235B-A22B
  • Qwen3-32B
智算一体机
  • 智算一体机
模型适配专家服务
  • 模型适配专家服务
算力服务商
  • 入驻算力服务商

应用商城

天翼云精选行业优秀合作伙伴及千余款商品,提供一站式云上应用服务
进入甄选商城进入云市场进入AI Store创新解决方案智云上海应用生态专区
AI应用
  • 泛微合同管理解决方案
  • 泛微数智大脑Xiaoe.AI解决方案
  • MaxKB知识库解决方案
  • 天翼AI文创
AI服务
  • 昆仑AI训推服务解决方案
  • 国信模型服务解决方案
企业应用
  • 翼电子签约解决方案
  • 翼协同解决方案
  • 翼电签-契约锁解决方案
  • 翼视频云归档解决方案
教育应用
  • 翼电子教室
  • 潜在AI教育解决方案
建站工具
  • SSL证书
  • 翼定制建站解决方案
  • 翼多端小程序解决方案
办公协同
  • 天翼云企业云盘
  • 安全邮箱
灾备迁移
  • 云管家2.0
资源管理
  • 全栈混合云敏捷版(软件)
  • 全栈混合云敏捷版(一体机)

定价

协助您快速了解云产品计费模式、价格详情,轻松预估上云成本
价格计算器
  • 动态测算产品价格
定价策略
  • 快速了解计费模式

合作伙伴

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

开发者

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

支持与服务

为您提供全方位支持与服务,全流程技术保障,助您轻松上云,安全无忧
文档与工具
  • 文档中心
  • 新手上云
  • 自助服务
  • 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日志采集
        • 日志模拟接入
        • 云服务日志接入
        • 应用服务网格
        • 关系数据库PostgreSQL版
        • 微服务引擎-云原生网关
        • NAT网关
        • 关系数据库MySQL
        • 云搜索
        • 翼MR
        • 分布式缓存服务Redis
        • 关系数据库SQL Server版
        • 分布式消息服务Kafka
        • 云服务操作日志
        • 文档数据库服务
        • 对象存储访问日志
        • 弹性负载均衡访问日志
        • 查询与分析
        • 日志查询
        • 日志查询
        • 上下文查询
        • 快速分析
        • 保存快速查询日志条件
        • 查询语法
        • SQL统计分析
        • 概述
        • SQL语法
        • SQL函数
        • 函数概览
        • 聚合函数
        • 字符串函数
        • 日期和时间函数
        • JSON函数
        • 正则式函数
        • 数组函数
        • Map映射函数
        • 数学计算
        • 数学统计
        • 估算函数
        • 二进制函数
        • 位运算函数
        • 地理函数
        • HyperLogLog函数
        • 比较运算符
        • 窗口函数
        • 条件表达式
        • IP地址转换函数
        • URL函数
        • 手机号码函数
        • 机器学习函数
        • 单位转换函数
        • 类型转换函数
        • 经典分析样例
        • 索引配置
        • 内置保留字段
        • 日志聚类
        • 日志可视化
        • 可视化概述
        • 统计图表
        • 概述
        • 表格
        • 柱状图
        • 时序图
        • 饼图
        • 流图
        • 数值图
        • 散点图
        • 词云图
        • 漏斗图
        • 雷达图
        • 拓扑图
        • 仪表盘
        • 创建仪表盘
        • 添加过滤器
        • 添加可视化图表
        • 权限管理
        • 数据加工
        • 数据加工概述
        • 基本概念
        • 创建数据加工任务
        • 管理数据加工任务
        • 观测与监控数据加工任务
        • 数据加工语法
        • 概述
        • 流程控制函数
        • 事件操作函数
        • 字段操作函数
        • 事件操作函数
        • 操作符函数
        • 事件检查函数
        • 转换函数
        • 算术函数
        • 字符串函数
        • 日期时间函数
        • 正则表达式函数
        • 特定结构化数据函数
        • 编码解码函数
        • URL函数
        • 日志转储
        • 概述
        • 转储至分布式消息服务Kafka
        • 转储至对象存储ZOS
        • 日志告警
        • 概述
        • 通知组管理
        • 通知策略管理
        • 告警规则
        • 告警历史
        • 告警事件历史
        • 告警发送历史
        • 静默策略
        • 云审计服务支持的关键操作
        • 最佳实践
        • 将本地日志迁移到云日志服务
        • 优化查询性能
        • 查询Log4j日志
        • 查询分析Nginx访问日志
        • 数据加工-日志过滤
        • 数据加工-为日志空缺字段赋值
        • 数据加工-为日志不存在的字段填充默认值
        • 告警-出现关键字即触发告警
        • 告警-根据关键字出现的次数设置告警
        • 基于业务日志的运维分析
        • API参考
        • API使用说明
        • API
        • 2024-04-25
        • 仪表盘
        • 列取仪表盘订阅
        • 采集配置
        • 采集规则分页列表
        • 获取采集配置详情
        • 采集规则列表
        • 日志单元
        • 日志单元列表
        • 日志单元分页列表
        • 日志服务CLI
        • CLI概述
        • 安装CLI
        • 全局配置
        • CLI使用
        • 常见问题
        • 售前常见问题
        • 日志管理
        • 云日志服务使用建议
        • 云日志服务LTS对比自建ELK,应该如何选择?
        • 如何从第三方云厂商将日志搬迁到天翼云?
        • 数据采集
        • 常见问题
        • 如何查看日志采集器的运行状态?
        • 云日志服务可以采集哪类日志?支持采集哪些文件类型?
        • 云主机采集器无法连通如何处理?
        • 采集器安装失败如何处理?
        • 如何创建云日志服务终端节点?
        • 主机接入配置完成后未采集到日志如何处理?
        • 如何查看与升级插件版本?
        • 主机组中新增云主机后,如何启动日志采集?
        • 如何获取访问密钥(AK/SK)?
        • 数据存储
        • 查询与分析
        • 常见问题
        • 为什么检索不到日志?
        • 查询语法相关问题
        • 数据加工
        • 日志转储
        • 日志告警
        • 常见问题
        • 为什么出现漏告警或者误告警?
        • 触发告警成功,但是通知失败,如何处理?
        • 相关协议
        • 产品服务协议
        • 产品服务等级协议
          无相关产品

          本页目录

          帮助中心云日志服务用户指南日志接入SDK接入云日志服务Go SDK
          云日志服务Go SDK
          更新时间 2025-11-11 11:14:33
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          最近更新时间: 2025-11-11 11:14:33
          分享文章
          • 新浪微博
          • 微信
            扫码分享
          • 复制链接
          本文主要介绍云日志服务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前,需要确保日志已按照特定格式组织。

          参数参数类型描述是否必须
          endpointstring域名是
          accessKeystringAccessKey,简称ak是
          secretKeystringSecretKey ,简称sk是
          logProjectstring日志项目编码是
          logUnitstring日志单元编码是

          目前通过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配置如下:

          参数参数类型描述是否必须
          Endpointstring域名是
          AccessKeystringAccessKey,简称ak是
          SecretKeystringSecretKey ,简称sk是
          LogProjectstringLogProject,日志项目编码是
          UserAgentstringlts-sdk-go/否
          RequestTimeOuttime.Duration请求超时时间,默认60s否
          RetryTimeOuttime.Duration重试超时时间,默认90s否
          CompressTypestring日志压缩方式,默认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信息如下:

          参数类型描述
          Tokenstringtoken 随机串
          ExpireTimeint64过期时间,默认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[]LogItemLogItem格式的数组,将多份日志组合起来发送是

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

          参数类型描述是否必须
          LogTimestampint时间戳,单位纳秒是
          OriginMsgstring原始日志内容是
          Contentsmap[string]any日志内容,分词后的内容否
          Labelsmap[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)
          
          //如果只需要日志原文,构造一条日志
          logItem := lts.GenerateLogItemWithM(originMsg)
          
          //如果只需要日志原文和分词,构造一条日志
          logItem := lts.GenerateLogItemWithMC(originMsg,contents)

          4.4. 关于日志上传的操作

          4.4.1. PutLogs()

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

          参数类型描述是否必须
          logProjectstring日志项目编码是
          logUnitstring日志单元编码是
          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格式的返回响应体,如下表格式:

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

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

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

          4.5. 关于日志消费的操作

          4.5.1. GetCursor()

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

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

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

          // 创建一个 CursorRequest 实例
          cursorRequest := <s.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格式的返回响应体,如下表格式:

          参数类型描述示例
          RequestIdstring请求Id, 
          StatusCodeint返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码 
          Messagestring状态描述 
          Errorstring参考错误编码列表 
          ReturnObjint游标结果362539770003324928

          4.5.2. PullLogs()

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

          参数类型描述是否必须
          logProjectstring日志项目编码是
          logUnitstring日志单元编码是
          startuint64起始游标是
          enduint64结束游标,填0表示空值入参是
          countuint32拉取的日志数量是

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

          pullLogRequest := <s.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格式的返回响应体,如下表格式:

          参数类型描述示例
          RequestIdstring请求Id, 
          StatusCodeint返回码,取值范围:0:-正常、-1:严重错误,其他自定义错误码 
          Messagestring状态描述 
          Errorstring参考错误编码列表 
          ReturnObjLogs日志数据 

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

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

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

          参数类型描述
          TotalSizeLnBytesInt64单个 producer 实例能缓存的日志大小上限,默认为 100MB。
          MaxIoWorkerCountInt64单个producer能并发的最多groutine的数量,默认为50,该参数用户可以根据自己实际服务器的性能去配置。
          MaxBlockSecInt如果 producer 可用空间不足, send 方法的最大阻塞时间,默认为60秒。如果超过这个时间后空间仍无法得到满足,send 方法会抛出TimeoutException。如果将s值设为0,当所需空间无法得到满足时,send 方法会立即抛出 TimeoutException。如果希望 send 方法一直阻塞直到所需空间得到满足,可设为负数。
          MaxBatchSizeInt64当一个 ProducerBatch 中缓存的日志大于等于batchSizeThresholdInBytes 时,该 batch 将被发送,默认为 512 KB,最大5MB。
          MaxBatchCountInt当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送,默认为 4096,最大40960。
          LingerMsInt64一个 ProducerBatch 从创建到可发送的逗留时间,默认为 2 秒,最小可设置成 100 ms。
          RetriesInt如果某个 ProducerBatch 首次发送失败,能够对其重试的次数,默认为 10 次。 如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列。
          MaxReservedAttemptsInt每个 ProducerBatch 每次被尝试发送都对应着一个 Attemp,此参数用来控制返回给用户的 attempt 个数,默认只保留最近的 11 次 attempt 信息。该参数越大能让您追溯更多的信息,但同时也会消耗更多的内存。
          BaseRetryBackoffMsInt64首次重试的退避时间,默认为 100 毫秒。 Producer 采样指数退避算法,第 N 次重试的计划等待时间为 baseRetryBackoffMs * 2^(N-1)。
          MaxRetryBackoffMsInt64重试的最大退避时间,默认为 50 秒。
          AllowLogLevelString设置日志输出级别分别为debug,info,warn和error,默认值是warn,
          LogFileNameString日志文件输出路径,默认输出到stdout。
          IsJsonTypeBool是否格式化文件输出格式,默认为false。
          LogMaxSizeInt单个日志存储数量,默认为10M。
          LogMaxBackupsInt日志轮转数量,默认为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
          用户协议 隐私政策 法律声明