mirror of
				https://github.com/TeaOSLab/EdgeNode.git
				synced 2025-11-04 07:40:56 +08:00 
			
		
		
		
	优化服务日志
This commit is contained in:
		@@ -40,7 +40,7 @@ func (this *HTTPRequest) doReverseProxy() {
 | 
			
		||||
	requestCall.CallResponseCallbacks(this.writer)
 | 
			
		||||
	if origin == nil {
 | 
			
		||||
		err := errors.New(this.requestFullURL() + ": no available origin sites for reverse proxy")
 | 
			
		||||
		remotelogs.ServerError(this.Server.Id, "HTTP_REQUEST_REVERSE_PROXY", err.Error())
 | 
			
		||||
		remotelogs.ServerError(this.Server.Id, "HTTP_REQUEST_REVERSE_PROXY", err.Error(), "", nil)
 | 
			
		||||
		this.write50x(err, http.StatusBadGateway)
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 
 | 
			
		||||
@@ -137,7 +137,7 @@ func (this *BaseListener) matchSSL(domain string) (*sslconfigs.SSLPolicy, *tls.C
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if len(sslConfig.Certs) == 0 {
 | 
			
		||||
		remotelogs.ServerError(server.Id, "BASE_LISTENER", "no ssl certs found for '"+domain+"', server id: "+types.String(server.Id))
 | 
			
		||||
		remotelogs.ServerError(server.Id, "BASE_LISTENER", "no ssl certs found for '"+domain+"', server id: "+types.String(server.Id), "", nil)
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	return sslConfig, sslConfig.FirstCert(), nil
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,7 @@ import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/remotelogs"
 | 
			
		||||
	"github.com/iwind/TeaGo/Tea"
 | 
			
		||||
	"github.com/iwind/TeaGo/lists"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
	"net/url"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"regexp"
 | 
			
		||||
@@ -123,20 +124,19 @@ func (this *ListenerManager) Start(node *nodeconfigs.NodeConfig) error {
 | 
			
		||||
						portIndex := strings.LastIndex(addr, ":")
 | 
			
		||||
						if portIndex > 0 {
 | 
			
		||||
							var port = addr[portIndex+1:]
 | 
			
		||||
							var processName = this.findProcessNameWithPort(port)
 | 
			
		||||
							var processName = this.findProcessNameWithPort(group.IsUDP(), port)
 | 
			
		||||
							if len(processName) > 0 {
 | 
			
		||||
								err = errors.New(err.Error() + " (the process using port: '" + processName + "')")
 | 
			
		||||
							}
 | 
			
		||||
						}
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
					remotelogs.ServerError(firstServer.Id, "LISTENER_MANAGER", err.Error())
 | 
			
		||||
					remotelogs.ServerError(firstServer.Id, "LISTENER_MANAGER", "listen '"+addr+"' failed: "+err.Error(), nodeconfigs.NodeLogTypeListenAddressFailed, maps.Map{"address": addr})
 | 
			
		||||
				}
 | 
			
		||||
 | 
			
		||||
				continue
 | 
			
		||||
			} else {
 | 
			
		||||
				// TODO 是否是从错误中恢复
 | 
			
		||||
 | 
			
		||||
			}
 | 
			
		||||
			this.listenersMap[addr] = listener
 | 
			
		||||
		}
 | 
			
		||||
@@ -179,14 +179,12 @@ func (this *ListenerManager) retryListeners() {
 | 
			
		||||
		if err == nil {
 | 
			
		||||
			delete(this.retryListenerMap, addr)
 | 
			
		||||
			this.listenersMap[addr] = listener
 | 
			
		||||
			remotelogs.ServerSuccess(listener.group.FirstServer().Id, "LISTENER_MANAGER", "retry to listen '"+addr+"' successfully")
 | 
			
		||||
 | 
			
		||||
			// TODO 删除失败记录
 | 
			
		||||
			remotelogs.ServerSuccess(listener.group.FirstServer().Id, "LISTENER_MANAGER", "retry to listen '"+addr+"' successfully", nodeconfigs.NodeLogTypeListenAddressFailed, maps.Map{"address": addr})
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
func (this *ListenerManager) findProcessNameWithPort(port string) string {
 | 
			
		||||
func (this *ListenerManager) findProcessNameWithPort(isUdp bool, port string) string {
 | 
			
		||||
	if runtime.GOOS != "linux" {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
@@ -196,7 +194,12 @@ func (this *ListenerManager) findProcessNameWithPort(port string) string {
 | 
			
		||||
		return ""
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var cmd = exec.Command(path, "-tlpn", "sport = :"+port)
 | 
			
		||||
	var option = "t"
 | 
			
		||||
	if isUdp {
 | 
			
		||||
		option = "u"
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	var cmd = exec.Command(path, "-"+option+"lpn", "sport = :"+port)
 | 
			
		||||
	var output = &bytes.Buffer{}
 | 
			
		||||
	cmd.Stdout = output
 | 
			
		||||
	err = cmd.Run()
 | 
			
		||||
 
 | 
			
		||||
@@ -177,7 +177,7 @@ func (this *TCPListener) connectOrigin(serverId int64, reverseProxy *serverconfi
 | 
			
		||||
		}
 | 
			
		||||
		conn, err = OriginConnect(origin, remoteAddr)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			remotelogs.ServerError(serverId, "TCP_LISTENER", "unable to connect origin: "+origin.Addr.Host+":"+origin.Addr.PortRange+": "+err.Error())
 | 
			
		||||
			remotelogs.ServerError(serverId, "TCP_LISTENER", "unable to connect origin: "+origin.Addr.Host+":"+origin.Addr.PortRange+": "+err.Error(), "", nil)
 | 
			
		||||
			continue
 | 
			
		||||
		} else {
 | 
			
		||||
			return
 | 
			
		||||
 
 | 
			
		||||
@@ -114,7 +114,7 @@ func (this *UDPListener) connectOrigin(serverId int64, reverseProxy *serverconfi
 | 
			
		||||
		}
 | 
			
		||||
		conn, err = OriginConnect(origin, remoteAddr.String())
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			remotelogs.ServerError(serverId, "UDP_LISTENER", "unable to connect origin: "+origin.Addr.Host+":"+origin.Addr.PortRange+": "+err.Error())
 | 
			
		||||
			remotelogs.ServerError(serverId, "UDP_LISTENER", "unable to connect origin: "+origin.Addr.Host+":"+origin.Addr.PortRange+": "+err.Error(), "", nil)
 | 
			
		||||
			continue
 | 
			
		||||
		} else {
 | 
			
		||||
			// PROXY Protocol
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,7 @@
 | 
			
		||||
package remotelogs
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"encoding/json"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/nodeconfigs"
 | 
			
		||||
	"github.com/TeaOSLab/EdgeCommon/pkg/rpc/pb"
 | 
			
		||||
	teaconst "github.com/TeaOSLab/EdgeNode/internal/const"
 | 
			
		||||
@@ -8,6 +9,7 @@ import (
 | 
			
		||||
	"github.com/TeaOSLab/EdgeNode/internal/trackers"
 | 
			
		||||
	"github.com/cespare/xxhash"
 | 
			
		||||
	"github.com/iwind/TeaGo/logs"
 | 
			
		||||
	"github.com/iwind/TeaGo/maps"
 | 
			
		||||
	"github.com/iwind/TeaGo/types"
 | 
			
		||||
	"time"
 | 
			
		||||
)
 | 
			
		||||
@@ -33,18 +35,13 @@ func init() {
 | 
			
		||||
func Println(tag string, description string) {
 | 
			
		||||
	logs.Println("[" + tag + "]" + description)
 | 
			
		||||
 | 
			
		||||
	nodeConfig, _ := nodeconfigs.SharedNodeConfig()
 | 
			
		||||
	if nodeConfig == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
	case logChan <- &pb.NodeLog{
 | 
			
		||||
		Role:        teaconst.Role,
 | 
			
		||||
		Tag:         tag,
 | 
			
		||||
		Description: description,
 | 
			
		||||
		Level:       "info",
 | 
			
		||||
		NodeId:      nodeConfig.Id,
 | 
			
		||||
		NodeId:      teaconst.NodeId,
 | 
			
		||||
		CreatedAt:   time.Now().Unix(),
 | 
			
		||||
	}:
 | 
			
		||||
	default:
 | 
			
		||||
@@ -56,18 +53,13 @@ func Println(tag string, description string) {
 | 
			
		||||
func Warn(tag string, description string) {
 | 
			
		||||
	logs.Println("[" + tag + "]" + description)
 | 
			
		||||
 | 
			
		||||
	nodeConfig, _ := nodeconfigs.SharedNodeConfig()
 | 
			
		||||
	if nodeConfig == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
	case logChan <- &pb.NodeLog{
 | 
			
		||||
		Role:        teaconst.Role,
 | 
			
		||||
		Tag:         tag,
 | 
			
		||||
		Description: description,
 | 
			
		||||
		Level:       "warning",
 | 
			
		||||
		NodeId:      nodeConfig.Id,
 | 
			
		||||
		NodeId:      teaconst.NodeId,
 | 
			
		||||
		CreatedAt:   time.Now().Unix(),
 | 
			
		||||
	}:
 | 
			
		||||
	default:
 | 
			
		||||
@@ -79,18 +71,13 @@ func Warn(tag string, description string) {
 | 
			
		||||
func Error(tag string, description string) {
 | 
			
		||||
	logs.Println("[" + tag + "]" + description)
 | 
			
		||||
 | 
			
		||||
	nodeConfig, _ := nodeconfigs.SharedNodeConfig()
 | 
			
		||||
	if nodeConfig == nil {
 | 
			
		||||
		return
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
	case logChan <- &pb.NodeLog{
 | 
			
		||||
		Role:        teaconst.Role,
 | 
			
		||||
		Tag:         tag,
 | 
			
		||||
		Description: description,
 | 
			
		||||
		Level:       "error",
 | 
			
		||||
		NodeId:      nodeConfig.Id,
 | 
			
		||||
		NodeId:      teaconst.NodeId,
 | 
			
		||||
		CreatedAt:   time.Now().Unix(),
 | 
			
		||||
	}:
 | 
			
		||||
	default:
 | 
			
		||||
@@ -111,12 +98,18 @@ func ErrorObject(tag string, err error) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ServerError 打印服务相关错误信息
 | 
			
		||||
func ServerError(serverId int64, tag string, description string) {
 | 
			
		||||
func ServerError(serverId int64, tag string, description string, logType nodeconfigs.NodeLogType, params maps.Map) {
 | 
			
		||||
	logs.Println("[" + tag + "]" + description)
 | 
			
		||||
 | 
			
		||||
	nodeConfig, _ := nodeconfigs.SharedNodeConfig()
 | 
			
		||||
	if nodeConfig == nil {
 | 
			
		||||
		return
 | 
			
		||||
	// 参数
 | 
			
		||||
	var paramsJSON []byte
 | 
			
		||||
	if len(params) > 0 {
 | 
			
		||||
		p, err := json.Marshal(params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logs.Println("[LOG]" + err.Error())
 | 
			
		||||
		} else {
 | 
			
		||||
			paramsJSON = p
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
@@ -125,9 +118,11 @@ func ServerError(serverId int64, tag string, description string) {
 | 
			
		||||
		Tag:         tag,
 | 
			
		||||
		Description: description,
 | 
			
		||||
		Level:       "error",
 | 
			
		||||
		NodeId:      nodeConfig.Id,
 | 
			
		||||
		NodeId:      teaconst.NodeId,
 | 
			
		||||
		ServerId:    serverId,
 | 
			
		||||
		CreatedAt:   time.Now().Unix(),
 | 
			
		||||
		Type:        logType,
 | 
			
		||||
		ParamsJSON:  paramsJSON,
 | 
			
		||||
	}:
 | 
			
		||||
	default:
 | 
			
		||||
 | 
			
		||||
@@ -135,12 +130,18 @@ func ServerError(serverId int64, tag string, description string) {
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
// ServerSuccess 打印服务相关成功信息
 | 
			
		||||
func ServerSuccess(serverId int64, tag string, description string) {
 | 
			
		||||
func ServerSuccess(serverId int64, tag string, description string, logType nodeconfigs.NodeLogType, params maps.Map) {
 | 
			
		||||
	logs.Println("[" + tag + "]" + description)
 | 
			
		||||
 | 
			
		||||
	nodeConfig, _ := nodeconfigs.SharedNodeConfig()
 | 
			
		||||
	if nodeConfig == nil {
 | 
			
		||||
		return
 | 
			
		||||
	// 参数
 | 
			
		||||
	var paramsJSON []byte
 | 
			
		||||
	if len(params) > 0 {
 | 
			
		||||
		p, err := json.Marshal(params)
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			logs.Println("[LOG]" + err.Error())
 | 
			
		||||
		} else {
 | 
			
		||||
			paramsJSON = p
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	select {
 | 
			
		||||
@@ -149,9 +150,11 @@ func ServerSuccess(serverId int64, tag string, description string) {
 | 
			
		||||
		Tag:         tag,
 | 
			
		||||
		Description: description,
 | 
			
		||||
		Level:       "success",
 | 
			
		||||
		NodeId:      nodeConfig.Id,
 | 
			
		||||
		NodeId:      teaconst.NodeId,
 | 
			
		||||
		ServerId:    serverId,
 | 
			
		||||
		CreatedAt:   time.Now().Unix(),
 | 
			
		||||
		Type:        logType,
 | 
			
		||||
		ParamsJSON:  paramsJSON,
 | 
			
		||||
	}:
 | 
			
		||||
	default:
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user