使用go get 安装
go get github.com/kingsoftcloud/klog-go-sdkKLog客户端是线程安全的。在整个进程内您可以只创建一个KLog客户端,并重复使用。
import (
"github.com/kingsoftcloud/klog-go-sdk/klog"
"time"
)
func main() {
// 您在金山云的主账户或子账户的 ACCESS KEY ID
accessKey = "your secret_key"
// 您在金山云的主账户或子账户的 SECRET KEY ID
secretKey = "your secret_key"
// 您的日志项目所在地区的入口地址,该地址可以在金山云控制台日志服务的项目概览中查到。
// 支持 http 和 https
endpoint = "https://klog-cn-beijing.ksyun.com"
// 创建KLog客户端
client := klog.NewClient(&klog.ClientOptions{
AccessKey: accessKey,
SecretKey: secretKey,
Endpoint: endpoint,
})
}// 异步发送一条文本日志
err := client.PushString("your_project_name", "your_pool_name", "log_source_name", "log_file_path", "hahaha1", time.Now().UnixMilli())KLog支持protobuf类型的日志。注意:同一日志池各条日志的数据结构应该保持一致。
// 异步发送一条protobuf日志
pbLog := &klog.Log{Time: time.Now().UnixMilli()}
pbLog.Contents = append(pbLog.Contents, &klog.Log_Content{
Key: "key1",
Value: "hahaha4",
})
pbLog.Contents = append(pbLog.Contents, &klog.Log_Content{
Key: "key2",
Value: "hahaha5",
})
err := client.Push("your_project_name", "your_pool_name", "log_source_name", "log_file_path", pbLog)KLog客户端默认是异步发送数据的,客户端内部的发送间隔为每2秒,或每批达到3MB,或每批达到4096条。 这样的好处有:
- 客户端内部自动将最近的多条日志一起压缩并批量发送。
- 不会阻塞其它逻辑(除非发送缓冲队列满了)
- 可以配置各种发送策略
注意:
- 程序退出时,需调用一次
Client.Flush()。
// 立即发送客户端缓冲队列中还未发送的日志。
client.Flush(true)- 在调用
Client.Push()之后调用Client.Flush(),可实现同步发送。但通常不建议这么做。
创建一个KLog客户端初始化选项,其参数如下:
Endpoint必填。您的日志项目所在地区的入口地址,该地址可以在金山云控制台日志服务的项目概览中查到。支持http和https。Credentials选填。此项为空时,AccessKey和SecretKey不可为空。AccessKey选填。您在金山云的主账户或子账户的ACCESS KEY ID。SecretKey选填。您在金山云的主账户或子账户的SECRET KEY ID。RateLimit限制发送速率为每秒多少条。此项配置可降低CPU使用率,但会降低发送速率,在日志较多时,缓冲队列可能会满。默认为0,即不限制。DownSampleRate降采样率。例如设置为0.15时,将只发送15%的日志,其余丢弃。此项配置可降低CPU使用率。默认为1,即发送所有日志。MaxRetries发送失败后的重试次数,达到次数后如果仍然失败则丢弃日志。Logger设置客户端输出自身运行状态的日志对象。默认为打印到stdout。LogLevel客户端内部日志打印level。默认为service.LevelInfo。HTTPClient客户端所使用的http客户端。DropIfPoolNotExists如果服务器返回日志池不存在,是否丢弃日志。默认为false,即不丢弃。
上传一条日志。参数如下:
projectName必填。项目名称logPoolName必填。日志池名称source日志来源,如主机名、ip等,用于进行日志上下文查询filename日志文件路径,用于进行日志上下文查询log必填。日志数据,protobuf类型。
Client.PushString(projectName, logPoolName, message, source, filename string, timestamp int64) error
上传一条文本日志。参数如下:
projectName必填。项目名称logPoolName必填。日志池名称message必填。日志数据,字符串类型。source日志来源,如主机名、ip等,用于进行日志上下文查询filename日志文件路径,用于进行日志上下文查询timestamp日志时间戳,UNIX毫秒值。
立即发送客户端缓冲队列中还未发送的日志。
wait必填。是否等待发送结束
获取发送统计
获取发送统计距离上次调用GetStatDelta()的增量,