pet_home_server/src/server/galog
2025-11-21 17:25:57 +08:00
..
examples 途游GA打点 2025-11-21 17:25:57 +08:00
img 途游GA打点 2025-11-21 17:25:57 +08:00
.gitignore 途游GA打点 2025-11-21 17:25:57 +08:00
buffer.go 途游GA打点 2025-11-21 17:25:57 +08:00
entry.go 途游GA打点 2025-11-21 17:25:57 +08:00
file.go 途游GA打点 2025-11-21 17:25:57 +08:00
galog_test.go 途游GA打点 2025-11-21 17:25:57 +08:00
galog.go 途游GA打点 2025-11-21 17:25:57 +08:00
go.mod 途游GA打点 2025-11-21 17:25:57 +08:00
log.go 途游GA打点 2025-11-21 17:25:57 +08:00
README.md 途游GA打点 2025-11-21 17:25:57 +08:00
suger_test.go 途游GA打点 2025-11-21 17:25:57 +08:00
suger.go 途游GA打点 2025-11-21 17:25:57 +08:00

galog

galog是一个无三方依赖、支持单CPU最高5wQPS写入的ga-sdk组件可直接用于GA事实日志和资产日志打点。

说明:默认是异步写入模式,异步队列长度=100较大QPS时可自行调整详见参数

  • enableAsync
  • defaultAsyncMsgLen

Usage

// ga日志初始化
projectID := "20433"
clientID := "Android_5.0_tyGuest,weixinPay,tyAccount.alipay.0-hall20433.tuyoo.sdktest"
glogger, err := galog.NewGALogger("logs", projectID, clientID, galog.LogTypeTrack)
if err != nil {
    panic(err)
}

// ga日志打点调用
props := map[string]interface{}{
    "ip_address":  "127.0.0.1",
    "proj_app_id": "10010",
    "uuid":        "4951d472-2c46-4fe5-9c4f-c35b6fb53f67",
    "ts":          tt.UnixNano(),
}
glogger.
    GetEntry("sdk_s_login_succ").
    SetDeviceID("device001").
    SetUserID("10086").
    SetProperties(props).
    Flush()
// asset日志初始化
projectID := "28"
clientID := "Android_4.827_tyGuest,nearme.nearme.0-hall28.oppo.bydzz"
glogger, err := galog.NewGALogger("logs", projectID, clientID, galog.LogTypeAsset)
if err != nil {
    panic(err)
}

// asset日志打点调用
asset := galog.AssetProperties{}
asset.
    SetAssetID("13101").
    SetAssetName("\u9501\u5b9a").
    SetAssetType("6").
    SetAssetFinal("2").
    SetAssetAssociated("3").
    SetAssetStartTime("0").
    SetAssetTimeLimit("0").
    SetAssetSource("").
    SetKV("uuid", "uuid-v4")

glogger.
    GetEntry("asset_increase").
    SetDeviceID("").
    SetUserID("10086").
    SetProperties(asset).
    Flush()

suger usage

package chat_log

import (
	"log"
	"strconv"

	"tygit.tuyoo.com/gocomponents/galog"
)

var (
	slogger  *galog.Logger
	galogger *galog.GALogger

	lerr error
)

// MustInitLoggerOnce 服务启动后初始化一次
func MustInitLoggerOnce() {
	slogger, lerr = galog.NewServerLogger(&galog.ServerLogOptions{
		LogDir:         "run/logs",
		EnableAsync:    true,
		AsyncQueueSize: 1000,
	})
	if lerr != nil {
		log.Printf("MustInitLoggerOnce err: %s\n", lerr.Error())
		panic("MustInitLoggerOnce err")
	}
}

// MustInitGALoggerOnce 服务启动后初始化一次
func MustInitGALoggerOnce() {
	galogger, lerr = galog.NewServerGALogger(&galog.ServerGALogOptions{
		LogDir:         "run/bi",
		EnableAsync:    true,
		AsyncQueueSize: 1000,
		ProjectID:      ProjectId,
		ClientID:       ClientId,
		LogType:        galog.LogTypeTrack,
	})
	if lerr != nil {
		log.Printf("MustInitGALoggerOnce err: %s\n", lerr.Error())
		panic("MustInitGALoggerOnce err")
	}
}

func LogToGANew(eventName, deviceId string, userId int64, prop map[string]interface{}, version string) {
	lib := map[string]string{
        "lib_type":    "golang",
        "lib_version": version,
    }

    galogger.
        GetEntry(eventName).
        SetDeviceID(deviceId).
        SetUserID(strconv.FormatInt(userId, 10)).
        SetLib(lib).
        SetProperties(prop).
        Flush()
}

日志目录结构

{logDir}/ga_log/{日志类型}_{hostname}_{年月日}_{小时}.log
{logDir}/asset_log/{日志类型}_{hostname}_{年月日}_{小时}.log

Benchmark

  • 测试机Mac-M1 8c 16G

  • 同步写入模式

goos: darwin
goarch: arm64
pkg: tygit.tuyoo.com/gocomponents/galog
BenchmarkGaLog-8           87565             12831 ns/op            7590 B/op         90 allocs/op
BenchmarkAssetLog-8       234127              5832 ns/op            3028 B/op         44 allocs/op
PASS
ok      tygit.tuyoo.com/gocomponents/galog      3.190s

# 100w行日志文件写入性能未见明显衰减
BenchmarkGaLog-8           89175             12481 ns/op            7590 B/op         90 allocs/op
BenchmarkAssetLog-8       195075              5933 ns/op            3028 B/op         44 allocs/op
  • 异步写入模式(默认)
goos: darwin
goarch: arm64
pkg: tygit.tuyoo.com/gocomponents/galog
BenchmarkGaLog-8           95530             11331 ns/op            7599 B/op         90 allocs/op
BenchmarkAssetLog-8       337963              3512 ns/op            3032 B/op         44 allocs/op
PASS
ok      tygit.tuyoo.com/gocomponents/galog      3.040s

# 120w行日志文件写入性能未见明显衰减
BenchmarkGaLog-8          116559             10450 ns/op            7598 B/op         90 allocs/op
BenchmarkAssetLog-8       335670              3512 ns/op            3032 B/op         44 allocs/op

Load Testing

CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o galog examples/hey.go

  • 测试机sa101-ecs-bj4-pt57-test-wxy
  • linux服务器配置2c4G
  • 测试时间2024-02-26 17:45 ~ 18:45
./galog -n 1000000 -c 2 -q 100
压测说明 CPU平台使用率 内存使用率 IO平均使用率 进程打开的文件句柄数
无任务 1% 52% 0.08% 0
并发=2qps=200 1% 52% 0.08% 7
并发=5qps=5000 4% 52% 1% 7
并发=5qps=50000(队列1000有阻塞) realqps=5000 40% 52% 30% 7
并发=5qps=50000(队列10000有阻塞) realqps=6500 6% 52% 1% 7
并发=20qps=50000(队列10000有阻塞) realqps=18000 10% 52% 3% 7
并发=50qps=50000(队列10000) realqps=50000 35% 52% 10% 7
并发=100qps=100000(队列10000) realqps=90000 75% 52% 16% 7
  • 压测结果:写入队列=10000单核支持最高写入QPS约5wCPU=75%。

  • 监控结果如下: img2.png img2.png

ga日志格式范式

{
	"project_id": "20437",
	"type": "track",
	"event": "sdk_sword_holder_succ",
	"event_time": 1708568434744,
    "device_id": "",
	"user_id": "908825698",
	"client_id": "Android_5.1_tyGuest,weixinPay,tyAccount.alipay.0-hall20437.tuyoo.sdkonline",
	"properties": {
		"sdk_track_id": "3:6060:636978360:1708568434",
		"sdk_sub_channel": "fish3d",
		"country": "中国",
		"proj_game_id": "",
		"sdk_error_code": "",
		"sdk_error_msg": "",
		"city": "宁德市",
		"sdk_sword_track_id": "807370ff-ceac-4ee3-b68f-50642ca4953c",
		"sub_platform_id": "2",
		"sdk_sword_holder_id": "320",
		"sdk_sword_version": "v1.1.7",
		"uuid": "56fdf0f9-9daa-4bf6-be69-88e15f05c36c",
		"province": "福建省",
		"sdk_login_channel_type": "",
		"app_id": "20437",
		"sdk_s_login_channel_type": "",
		"sdk_main_channel": "official",
		"game_id": "20437",
		"sdk_s_route": "/api/sworder-server/rule/v1/getUserRisk",
		"sdk_sword_holder_result": "999999",
		"proj_cloud_id": "3",
		"proj_app_id": "10010",
		"ip_address": "59.58.58.18",
		"sdk_sword_holder_type": "login",
		"sdk_sword_holder_name": "非信任设备禁止登录",
		"proj_client_id": "Android_5.505_tyGuest,tyAccount,yidunlogin.weixinPay,alipay,yinlian,jingdong,weixinShare.0-hall28.official.fish3d",
		"sdk_sword_holder_process": "{\"330\":[\"[330-0]未命中\"]}",
		"sdk_yidun_device_id": "UuCJztYTtxRETUVUAEaFoCQaw8H2qkWE",
		"platform_id": "1",
		"sub_channel_id": "sdkonline",
		"proj_package_name": "",
		"channel_id": "tuyoo"
	},
    "lib": {
        "lib_version": "v1.0.0",
		"lib_type": "go"
	},
}

asset日志格式范例

{
	"project_id": "28",
	"type": "asset",
	"event": "asset_increase",
	"event_time": 1706631881042,
	"device_id": "",
	"user_id": "928426614",
	"client_id": "Android_4.827_tyGuest,nearme.nearme.0-hall28.oppo.bydzz",
	"properties": {
		"proj_ga_eventId": "STARTUP_QUEST_REWARD_COIN",
		"proj_asset_value": "2",
		"proj_asset_final": "2",
		"proj_chip_type": "6",
		"proj_asset_id": "13101",
		"proj_asset_name": "\u9501\u5b9a",
		"proj_asset_type": "free",
		"proj_asset_time_limit": "0",
		"proj_asset_start_time": "0",
		"proj_asset_source": "",
		"proj_tuyoo_order_id": "",
		"game_id": "28",
		"app_id": "10063",
		"proj_project_id": "28",
		"proj_client_id": "Android_4.827_tyGuest,nearme.nearme.0-hall28.oppo.bydzz",
		"uuid": "77b907688c624076a84ca7b4b29668a5"
	},
    "lib": {
        "lib_version": "v1.0.0",
		"lib_type": "go"
	}
}

Changelog

版本 修订说明 提交人 发布时间
v1.0.0 galog 0依赖、支持异步写入、小时切割日志、ga和asset日志类型 田文 2024.02.22
v1.1.0 add suger 田文 2025.06.30