云日志服务Go SDK
云日志服务SDK提供了Go语言上报日志的一系列方法,方便用户直接使用编码方式上报日志到云日志服务后台。
传输协议
HTTPS
使用前提
- 参考注册华为云账号中操作,完成注册。
- 确认云日志服务的区域,请用户根据所在区域,选择RegionName。
- 获取华为账号的AK/SK。
- 获取华为云账号的项目ID(project id),详细步骤请参见API凭证。
- 获取需要上报到LTS的日志组ID和日志流ID。
使用说明
- 当用户修改权限后,权限信息在一天后生效。
- 通过Go SDK上报日志到LTS的时间相距当前时间不超过2天,否则上报日志会被LTS删除。
- 当前仅华北-北京四、华东-上海一、华南-广州区域使用Go SDK时支持跨云/本地上报日志,Endpoint端口使用443。
注意事项
认证用的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)
示例代码:
import ( "fmt" "github.com/huaweicloud/huaweicloud-lts-sdk-go/producer" "sync" "time" ) func ProduceLog(endpoint, ak, sk, region, projectId, logGroup, logStream string) { producerConfig := producer.GetConfig() producerConfig.Endpoint = endpoint producerConfig.AccessKeyID = ak producerConfig.AccessKeySecret = sk producerConfig.RegionId = region producerConfig.ProjectId = projectId producerInstance := producer.InitProducer(producerConfig) 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" customLogs := producer.CustomLog{ LogTimeNs: time.Now().UnixNano(), Log: fmt.Sprintf("content for this test [%d]", j), } log := producer.GenerateLogWithCustomTime([]producer.CustomLog{customLogs}, labels) err := producerInstance.SendLog(logGroup, logStream, log) err = producerInstance.SendLog(logGroup, logStream, log) // send log with callback,user can deal error by self handle := ErrorHandle{} err = producerInstance.SendLogWithCallBack(logGroup, logStream, log, handle) err = producerInstance.SendLogWithCallBack(logGroup, logStream, log, handle) if err != nil { fmt.Println(err) } var sLog producer.StructLog logContent := make(map[string]string) logContent["keyA"] = "valueA" logContent["keyB"] = "valueB" logContent1 := make(map[string]string) logContent["keyA1"] = "valueA1" logContent["keyB1"] = "valueB1" sLog.Contents = append(sLog.Contents, logContent1) err = producerInstance.SendLogStruct(logGroup, logStream, &sLog) if nil != err { continue } time.Sleep(100 * time.Microsecond) } wg.Done() fmt.Printf("test func finished\n") }() } wg.Wait() fmt.Printf("send all complate ...") time.Sleep(10 * 60 * time.Second) } type ErrorHandle struct{} func (ErrorHandle) Success(result *producer.Result) { fmt.Printf("send log to lts success, success flag: %v\n", result.IsSuccessful()) } 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参数说明。
表1 producer config参数说明 参数名称
描述
类型
是否需要填写
默认值
ProjectId
华为云账号的项目ID(project id)。
String
必填
-
AccessKeyId
华为云账号的AK。
String
必填
-
AccessKeySecret
华为云账号的SK。
String
必填
-
RegionName
云日志服务的区域。
String
必填
-
Endpoint
上报的服务器域名或IP。
String
必填
-
TotalSizeInBytes
单个producer实例能缓存的日志大小上限。
int
选填
104857600(即100MB)
MaxBlockSec
如果producer可用空间不足,调用者在send方法上的最大阻塞时间,默认为60秒。建议为0秒。
- 当maxBlockMs值>=0时,则阻塞到设置的时间,如果到达阻塞时间,还是不能获取到内存,即报错且丢弃日志。
- 当maxBlockMs值=-1时,则一直阻塞到发送成功,且不会丢弃日志。
long
选填
60s
MaxIoWorkers
执行日志发送任务的任务池大小。
int
选填
默认10个
MaxBatchSize
当一个ProducerBatch中缓存的日志大小大于等于batchSizeThresholdInBytes时,该batch将被发送。
int
选填
524288(即0.5MB)
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方法类参数说明。
表2 GenerateLog方法类参数说明 参数名称
描述
类型
是否需要填写
contents
批量日志内容。
[]string
是
labels
日志标签,map格式。
map[string]string
是
- 日志上报SendLog方法类参数说明。
表3 SendLog方法类参数说明 参数名称
描述
类型
是否需要填写
groupId
日志组id
long
是
streamId
日志流id
String
是
log
日志结构
struct log
是
- 结构化日志上报StructLog方法类参数说明。
表4 StructLog方法类参数说明 参数名称
描述
类型
是否需要填写
Time
日志上报时间
int64
否
Contents
日志上报内容
[]map[string]string
是
- 结构化日志上报SendLogStruct方法类参数说明。
表5 SendLogStruct方法类参数说明 参数名称
描述
类型
是否需要填写
groupId
日志组id
String
是
streamId
日志流id
String
是
log
日志结构
Struct Logstruct
是
参数获取方式
- 上线区域表,使用华为云主机时参考以下信息:
表6 区域表 区域名称
区域
终端节点
华北-北京四
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。