实现基本的访问日志策略
This commit is contained in:
10
pkg/serverconfigs/access_log_storage_command.go
Normal file
10
pkg/serverconfigs/access_log_storage_command.go
Normal file
@@ -0,0 +1,10 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package serverconfigs
|
||||
|
||||
// AccessLogCommandStorageConfig 通过命令行存储
|
||||
type AccessLogCommandStorageConfig struct {
|
||||
Command string `yaml:"command" json:"command"`
|
||||
Args []string `yaml:"args" json:"args"`
|
||||
Dir string `yaml:"dir" json:"dir"`
|
||||
}
|
||||
12
pkg/serverconfigs/access_log_storage_es.go
Normal file
12
pkg/serverconfigs/access_log_storage_es.go
Normal file
@@ -0,0 +1,12 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package serverconfigs
|
||||
|
||||
// AccessLogESStorageConfig ElasticSearch存储策略
|
||||
type AccessLogESStorageConfig struct {
|
||||
Endpoint string `yaml:"endpoint" json:"endpoint"`
|
||||
Index string `yaml:"index" json:"index"`
|
||||
MappingType string `yaml:"mappingType" json:"mappingType"`
|
||||
Username string `yaml:"username" json:"username"`
|
||||
Password string `yaml:"password" json:"password"`
|
||||
}
|
||||
9
pkg/serverconfigs/access_log_storage_file.go
Normal file
9
pkg/serverconfigs/access_log_storage_file.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package serverconfigs
|
||||
|
||||
// AccessLogFileStorageConfig 文件存储配置
|
||||
type AccessLogFileStorageConfig struct {
|
||||
Path string `yaml:"path" json:"path"` // 文件路径,支持变量:${year|month|week|day|hour|minute|second}
|
||||
AutoCreate bool `yaml:"autoCreate" json:"autoCreate"` // 是否自动创建目录
|
||||
}
|
||||
85
pkg/serverconfigs/access_log_storage_syslog.go
Normal file
85
pkg/serverconfigs/access_log_storage_syslog.go
Normal file
@@ -0,0 +1,85 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package serverconfigs
|
||||
|
||||
import "github.com/iwind/TeaGo/maps"
|
||||
|
||||
type AccessLogSyslogStorageProtocol = string
|
||||
|
||||
const (
|
||||
AccessLogSyslogStorageProtocolTCP AccessLogSyslogStorageProtocol = "tcp"
|
||||
AccessLogSyslogStorageProtocolUDP AccessLogSyslogStorageProtocol = "udp"
|
||||
AccessLogSyslogStorageProtocolNone AccessLogSyslogStorageProtocol = "none"
|
||||
AccessLogSyslogStorageProtocolSocket AccessLogSyslogStorageProtocol = "socket"
|
||||
)
|
||||
|
||||
type AccessLogSyslogStoragePriority = int
|
||||
|
||||
const (
|
||||
AccessLogSyslogStoragePriorityEmerg AccessLogSyslogStoragePriority = iota
|
||||
AccessLogSyslogStoragePriorityAlert
|
||||
AccessLogSyslogStoragePriorityCrit
|
||||
AccessLogSyslogStoragePriorityErr
|
||||
AccessLogSyslogStoragePriorityWarning
|
||||
AccessLogSyslogStoragePriorityNotice
|
||||
AccessLogSyslogStoragePriorityInfo
|
||||
AccessLogSyslogStoragePriorityDebug
|
||||
)
|
||||
|
||||
var AccessLogSyslogStoragePriorities = []maps.Map{
|
||||
{
|
||||
"name": "[无]",
|
||||
"value": -1,
|
||||
},
|
||||
{
|
||||
"name": "EMERG",
|
||||
"value": AccessLogSyslogStoragePriorityEmerg,
|
||||
},
|
||||
{
|
||||
"name": "ALERT",
|
||||
"value": AccessLogSyslogStoragePriorityAlert,
|
||||
},
|
||||
{
|
||||
"name": "CRIT",
|
||||
"value": AccessLogSyslogStoragePriorityCrit,
|
||||
},
|
||||
{
|
||||
"name": "ERR",
|
||||
"value": AccessLogSyslogStoragePriorityErr,
|
||||
},
|
||||
{
|
||||
"name": "WARNING",
|
||||
"value": AccessLogSyslogStoragePriorityWarning,
|
||||
},
|
||||
{
|
||||
"name": "NOTICE",
|
||||
"value": AccessLogSyslogStoragePriorityNotice,
|
||||
},
|
||||
{
|
||||
"name": "INFO",
|
||||
"value": AccessLogSyslogStoragePriorityInfo,
|
||||
},
|
||||
{
|
||||
"name": "DEBUG",
|
||||
"value": AccessLogSyslogStoragePriorityDebug,
|
||||
},
|
||||
}
|
||||
|
||||
// AccessLogSyslogStorageConfig syslog存储策略
|
||||
type AccessLogSyslogStorageConfig struct {
|
||||
Protocol string `yaml:"protocol" json:"protocol"` // SysLogStorageProtocol*
|
||||
ServerAddr string `yaml:"serverAddr" json:"serverAddr"`
|
||||
ServerPort int `yaml:"serverPort" json:"serverPort"`
|
||||
Socket string `yaml:"socket" json:"socket"` // sock file
|
||||
Tag string `yaml:"tag" json:"tag"`
|
||||
Priority AccessLogSyslogStoragePriority `yaml:"priority" json:"priority"`
|
||||
}
|
||||
|
||||
func FindAccessLogSyslogStoragePriorityName(priority AccessLogSyslogStoragePriority) string {
|
||||
for _, p := range AccessLogSyslogStoragePriorities {
|
||||
if p.GetInt("value") == priority {
|
||||
return p.GetString("name")
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
9
pkg/serverconfigs/access_log_storage_tcp.go
Normal file
9
pkg/serverconfigs/access_log_storage_tcp.go
Normal file
@@ -0,0 +1,9 @@
|
||||
// Copyright 2021 Liuxiangchao iwind.liu@gmail.com. All rights reserved.
|
||||
|
||||
package serverconfigs
|
||||
|
||||
// AccessLogTCPStorageConfig TCP存储策略
|
||||
type AccessLogTCPStorageConfig struct {
|
||||
Network string `yaml:"network" json:"network"` // tcp, unix
|
||||
Addr string `yaml:"addr" json:"addr"`
|
||||
}
|
||||
57
pkg/serverconfigs/access_log_storages.go
Normal file
57
pkg/serverconfigs/access_log_storages.go
Normal file
@@ -0,0 +1,57 @@
|
||||
package serverconfigs
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
)
|
||||
|
||||
// AccessLogStorageType 访问日志存储类型
|
||||
type AccessLogStorageType = string
|
||||
|
||||
const (
|
||||
AccessLogStorageTypeFile AccessLogStorageType = "file"
|
||||
AccessLogStorageTypeES AccessLogStorageType = "es"
|
||||
AccessLogStorageTypeTCP AccessLogStorageType = "tcp"
|
||||
AccessLogStorageTypeSyslog AccessLogStorageType = "syslog"
|
||||
AccessLogStorageTypeCommand AccessLogStorageType = "command"
|
||||
)
|
||||
|
||||
// FindAllAccessLogStorageTypes 所有存储引擎列表
|
||||
func FindAllAccessLogStorageTypes() []*shared.Definition {
|
||||
return []*shared.Definition{
|
||||
{
|
||||
Name: "文件",
|
||||
Code: AccessLogStorageTypeFile,
|
||||
Description: "将日志存储在磁盘文件中",
|
||||
},
|
||||
{
|
||||
Name: "ElasticSearch",
|
||||
Code: AccessLogStorageTypeES,
|
||||
Description: "将日志存储在ElasticSearch中",
|
||||
},
|
||||
{
|
||||
Name: "TCP Socket",
|
||||
Code: AccessLogStorageTypeTCP,
|
||||
Description: "将日志通过TCP套接字输出",
|
||||
},
|
||||
{
|
||||
Name: "Syslog",
|
||||
Code: AccessLogStorageTypeSyslog,
|
||||
Description: "将日志通过syslog输出,仅支持Linux",
|
||||
},
|
||||
{
|
||||
Name: "命令行输入流",
|
||||
Code: AccessLogStorageTypeCommand,
|
||||
Description: "启动一个命令通过读取stdin接收日志信息",
|
||||
},
|
||||
}
|
||||
}
|
||||
|
||||
// FindAccessLogStorageTypeName 根据类型查找名称
|
||||
func FindAccessLogStorageTypeName(storageType string) string {
|
||||
for _, m := range FindAllAccessLogStorageTypes() {
|
||||
if m.Code == storageType {
|
||||
return m.Name
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
@@ -1,42 +0,0 @@
|
||||
package serverconfigs
|
||||
|
||||
import (
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/configutils"
|
||||
"github.com/TeaOSLab/EdgeCommon/pkg/serverconfigs/shared"
|
||||
"github.com/iwind/TeaGo/maps"
|
||||
)
|
||||
|
||||
// 日志存储策略
|
||||
type HTTPAccessLogStoragePolicy struct {
|
||||
Id int64 `yaml:"id" json:"id"`
|
||||
Name string `yaml:"name" json:"name"`
|
||||
IsOn bool `yaml:"isOn" json:"isOn"`
|
||||
Type string `yaml:"type" json:"type"` // 存储类型
|
||||
Options maps.Map `yaml:"options" json:"options"` // 存储选项
|
||||
Conds *shared.HTTPRequestCondsConfig `yaml:"conds" json:"conds"` // 请求条件
|
||||
}
|
||||
|
||||
// 校验
|
||||
func (this *HTTPAccessLogStoragePolicy) Init() error {
|
||||
// cond
|
||||
if this.Conds != nil {
|
||||
err := this.Conds.Init()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// 匹配关键词
|
||||
func (this *HTTPAccessLogStoragePolicy) MatchKeyword(keyword string) (matched bool, name string, tags []string) {
|
||||
if configutils.MatchKeyword(this.Name, keyword) || configutils.MatchKeyword(this.Type, keyword) {
|
||||
matched = true
|
||||
name = this.Name
|
||||
if len(this.Type) > 0 {
|
||||
tags = []string{"类型:" + this.Type}
|
||||
}
|
||||
}
|
||||
return
|
||||
}
|
||||
Reference in New Issue
Block a user