云日志服务Go SDK
云日志服务SDK提供了Go语言上报日志的一系列方法,方便用户直接使用编码方式上报日志到云日志服务后台。
传输协议
HTTPS
使用前提
- 参考注册华为账号并开通华为云中操作,完成注册。
- 确认云日志服务的区域,请用户根据所在区域,选择RegionName。
- 获取华为账号的AK/SK。
- 获取华为云账号的项目ID(project id),详细步骤请参见“我的凭证 > API凭证”。
- 获取需要上报到LTS的日志组ID和日志流ID。
使用说明
当用户修改权限后,权限信息在一天后生效。通过SDK上报日志到LTS的时间相距当前时间不超过2天,否则上报日志会被LTS删除。
注意事项
认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。
安装Go SDK
- 获取LTS Go SDK包。
go get github.com/huaweicloud/huaweicloud-lts-sdk-go
- 引用日志LTS Go SDK包。
import github.com/huaweicloud/huaweicloud-lts-sdk-go
- 编写上报日志代码,示例如下:
可以自定义发送成功与失败时的回调方法,实现方式请参考如下命令:自定义ErrorHandler的结构体,实现Success和Fail方法,并且在发送日志时直接使用。
SendLogWithCallBack(groupId, streamId string, log *Log, callback CallBack)
package main import ( "github.com/huaweicloud/huaweicloud-lts-sdk-go" "fmt" "sync" "time" ) var ( ak = "" sk = "" pid = "" groupId = "" streamId1 = "" streamId2 = "" region = "" endpoint = "" ) func main() { // 获取默认配置 producerConfig := producer.GetConfig() // 上报地址 producerConfig.Endpoint = endpoint // accessKeyId:华为云账号的AK, 认证用的AK硬编码到代码中或者明文存储都有很大的安全风险, 建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全 producerConfig.AccessKeyID = os.Getenv("accessKeyId") // accessKeySecret:华为云账号的SK, 认证用的SK硬编码到代码中或者明文存储都有很大的安全风险, 建议在配置文件或者环境变量中密文存放, 使用时解密, 确保安全 producerConfig.AccessKeySecret = os.Getenv("accessKeySecret") // 区域名称 producerConfig.RegionId = region // 账户projectid producerConfig.ProjectId = pid // 初始化producer实例 producerInstance := producer.InitProducer(producerConfig) // 启动producer producerInstance.Start() wg := sync.WaitGroup{} for i := 0; i < 10; i++ { wg.Add(1) go func() { for j := 0; j < 1000; j++ { labels := make(map[string]string) labels["keyA"] = "valueA" labels["keyB"] = "valueB" labels["keyC"] = "valueC" logContent := fmt.Sprintf("content for this test %d", j) // 生成日志 填入日志内容及labels log := producer.GenerateLog([]string{logContent}, labels) // 发送日志到日志组,日志流 err := producerInstance.SendLog(groupId, streamId1, log) err = producerInstance.SendLog(groupId, streamId2, log) if err != nil { fmt.Println(err) } handle := ErrorHandle{} // 带CallBack的发送日志方法,发送失败时会调用ErrorHandler的Fail方法 err = producerInstance.SendLogWithCallBack("groupId", "streamId1", log, handle) err = producerInstance.SendLogWithCallBack("groupId", "streamId1", log, handle) if err != nil { fmt.Println(err) } time.Sleep(1 * time.Microsecond) } wg.Done() fmt.Printf("test func finished\n") }() } wg.Wait() fmt.Printf("send all complate ...") // 关闭发送实例 producerInstance.Close(60 * 1000) time.Sleep(10 * 60 * time.Second) } // errorHandle,可以针对发送成功和失败进行相关的callback调用,方便失败时打印错误日志,进行问题定位 type ErrorHandle struct{} // 发送成功时的callback方法 func (ErrorHandle) Success(result *producer.Result) { fmt.Printf("send log to lts success, success flag: %v\n", result.IsSuccessful()) } // 发送失败时的callback方法,可以打印result中的错误信息,方便问题定位 func (ErrorHandle) Fail(result *producer.Result) { fmt.Printf("send log to lts error, success flag: %v requestId: %s, httpcode: %d, errorCode: %s, errorMsg: %s\n", result.IsSuccessful(), result.GetRequestId(), result.GetHttpCode(), result.GetErrorCode(), result.GetErrorMessage()) }
配置参数说明
- producer config参数说明。
参数名称
描述
类型
是否需要填写
默认值
ProjectId
华为云账号的项目ID(project id)。
String
必填
-
AccessKeyId
华为云账号的AK。
String
必填
-
AccessKeySecret
华为云账号的SK。
String
必填
-
RegionName
云日志服务的区域。
String
必填
-
Endpoint
上报目的。
String
必填
-
TotalSizeInBytes
单个producer实例能缓存的日志大小上限。
int
选填
100M(100 * 1024 * 1024)
MaxBlockSec
如果 producer 可用空间不足,调用者在 send 方法上的最大阻塞时间,默认为 60 秒。建议为0秒。
- 当maxBlockMs值>=0时,则阻塞到设置的时间,如果到达阻塞时间,还是不能获取到内存,即报错且丢弃日志。
- 当maxBlockMs值=-1时,则一直阻塞到发送成功,且不会丢弃日志。
long
选填
60S
MaxIoWorkers
执行日志发送任务的任务池大小。
int
选填
默认10个
MaxBatchSize
当一个 ProducerBatch 中缓存的日志大小大于等于 batchSizeThresholdInBytes 时,该 batch 将被发送。
int
选填
0.5M(512 * 1024)
MaxBatchCount
当一个 ProducerBatch 中缓存的日志条数大于等于 batchCountThreshold 时,该 batch 将被发送。
int
选填
4096
LingerMs
一个 ProducerBatch 从创建到可发送的逗留时间。
int
选填
2S
Retries
如果某个 ProducerBatch 首次发送失败,能够对其重试的次数,建议为 3 次。如果 retries 小于等于 0,该 ProducerBatch 首次发送失败后将直接进入失败队列。
int
选填
10
BaseRetryBackoffMs
首次重试的退避时间。
long
选填
0.1S
MaxRetryBackoffMs
重试的最大退避时间。
long
选填
50S
- 日志生成GenerateLog方法类参数说明。
参数名称
描述
类型
是否需要填写
contents
批量日志内容。
[]string
是
labels
日志标签,map格式。
map[string]string
是
单次上报条数小于4096条,且小于512K。
- 日志上报SendLog方法类参数说明。
表1 SendLog方法类参数说明 参数名称
描述
类型
是否需要填写
groupId
日志组id
long
是
streamId
日志流id
String
是
log
日志结构
struct log
是
参数获取方式
- 上线区域表,使用华为云主机时参考以下信息:
表2 区域表 区域名称
RegionName
Endpoint
华北-北京四
cn-north-4
https://lts-access.cn-north-4.myhuaweicloud.com:8102
华东-上海一
cn-east-3
https://lts-access.cn-east-3.myhuaweicloud.com:8102
华南-广州
cn-south-1
https://lts-access.cn-south-1.myhuaweicloud.com:8102
亚太-新加坡
ap-southeast-3
https://lts-access.ap-southeast-3.myhuaweicloud.com:8102
当前仅华北-北京四、华东-上海一、华南-广州区域使用SDK时支持跨云/本地上报日志,Endpoint端口使用443。
- 日志组ID:在云日志服务控制台,选择“日志管理”,鼠标悬浮在日志组名称上,可查看日志组名称和日志组ID。
- 日志流ID:单击日志组名称对应的按钮,鼠标悬浮在日志流名称上,可查看日志流名称和日志流ID。