更新时间:2024-08-06 GMT+08:00
分享

云日志服务Go SDK

云日志服务SDK提供了Go语言上报日志的一系列方法,方便用户直接使用编码方式上报日志到云日志服务后台。

传输协议

HTTPS

使用前提

使用说明

当用户修改权限后,权限信息在一天后生效。通过SDK上报日志到LTS的时间相距当前时间不超过2天,否则上报日志会被LTS删除。

注意事项

认证用的ak和sk硬编码到代码中或者明文存储都有很大的安全风险,建议在配置文件或者环境变量中密文存放,使用时解密,确保安全。

安装Go SDK

  1. 获取LTS Go SDK包。

    go get github.com/huaweicloud/huaweicloud-lts-sdk-go

  2. 引用日志LTS Go SDK

    import github.com/huaweicloud/huaweicloud-lts-sdk-go

  3. 编写上报日志代码,示例如下:

    可以自定义发送成功与失败时的回调方法,实现方式请参考如下命令:自定义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。

相关文档