日志转发

This commit is contained in:
gotoeasy 2022-09-22 08:58:45 +08:00
parent 5417e79bf9
commit 7382d7efce
2 changed files with 63 additions and 0 deletions

View File

@ -30,6 +30,8 @@ var saveDays int
var enableLogin bool
var username string
var password string
var slaveHosts []string
var enableSlaveTransfer bool
func init() {
UpdateConfigByEnv()
@ -62,6 +64,29 @@ func UpdateConfigByEnv() {
enableLogin = GetenvBool("GLC_ENABLE_LOGIN", false) // 是否开启用户密码登录默认“false”
username = Getenv("GLC_USERNAME", "glc") // 登录用户名默认“glc”
password = Getenv("GLC_PASSWORD", "glogcenter") // 登录密码默认“glogcenter”
splitHost(Getenv("GLC_SLAVE_HOSTS", "")) // 从服务器地址,多个时逗号分开,默认“”
enableSlaveTransfer = GetenvBool("GLC_SLAVE_TRANSFER", false) // 是否开启转发日志到其他GLC服务默认false
}
// 取配置: 是否开启转发日志到其他GLC服务可通过环境变量“GLC_SLAVE_TRANSFER”设定默认false
func IsEnableSlaveTransfer() bool {
return enableSlaveTransfer
}
// 取配置: 从服务器地址可通过环境变量“GLC_SLAVE_HOSTS”设定默认“”
func GetSlaveHosts() []string {
return slaveHosts
}
func splitHost(str string) {
hosts := strings.Split(str, ";")
for i := 0; i < len(hosts); i++ {
url := strings.TrimSpace(hosts[i])
if url != "" {
slaveHosts = append(slaveHosts, url)
}
}
}
// 取配置: 是否开启用户密码登录可通过环境变量“GLC_ENABLE_LOGIN”设定默认“false”

View File

@ -5,7 +5,10 @@ import (
"glc/gweb"
"glc/ldb"
"glc/ldb/storage/logdata"
"io"
"log"
"net/http"
"strings"
)
// 添加日志JSON提交方式
@ -26,7 +29,42 @@ func JsonLogAddController(req *gweb.HttpRequest) *gweb.HttpResult {
return gweb.Error500(err.Error())
}
if conf.IsEnableSlaveTransfer() {
transferGlc(md) // 转发其他GLC服务
}
engine := ldb.NewDefaultEngine()
engine.AddTextLog(md.Date, md.Text, md.System)
return gweb.Ok()
}
// 转发其他GLC服务
func transferGlc(md *logdata.LogDataModel) {
hosts := conf.GetSlaveHosts()
for i := 0; i < len(hosts); i++ {
go httpPostJson(hosts[i]+conf.GetContextPath()+"/v1/log/add", md.ToJson())
}
}
func httpPostJson(url string, jsondata string) ([]byte, error) {
// 请求
req, err := http.NewRequest("POST", url, strings.NewReader(jsondata))
if err != nil {
return nil, err
}
// 请求头
req.Header.Set("Content-Type", "application/json;charset=UTF-8")
req.Header.Set(conf.GetHeaderSecurityKey(), conf.GetSecurityKey())
// 读取响应内容
client := http.Client{}
res, err := client.Do(req)
if err != nil {
return nil, err
}
defer res.Body.Close()
return io.ReadAll(res.Body)
}