dns clickhouse改造

This commit is contained in:
robin
2026-02-10 19:30:44 +08:00
parent 4812ad5aaf
commit 1bb8140a41
47 changed files with 2815 additions and 174 deletions

View File

@@ -18,7 +18,7 @@ echo "build all edge-admin"
echo "=============================="
./build.sh linux amd64 plus
#./build.sh linux 386 plus
./build.sh linux arm64 plus
#./build.sh linux arm64 plus
#./build.sh linux mips64 plus
#./build.sh linux mips64le plus
#./build.sh darwin amd64 plus
@@ -26,4 +26,3 @@ echo "=============================="

View File

@@ -14,8 +14,8 @@ fi
./build.sh linux amd64
./build.sh linux 386
./build.sh linux arm64
#./build.sh linux arm64
./build.sh linux mips64
./build.sh linux mips64le
./build.sh darwin amd64
./build.sh darwin arm64
#./build.sh darwin arm64

View File

@@ -87,17 +87,20 @@ func (this *CreatePopupAction) RunPost(params struct {
Field("type", params.Type).
Require("请选择存储类型")
baseType, writeTargets := serverconfigs.ParseStorageTypeAndWriteTargets(params.Type)
if writeTargets == nil {
writeTargets = &serverconfigs.AccessLogWriteTargets{File: true, MySQL: true}
baseType, _ := serverconfigs.ParseStorageTypeAndWriteTargets(params.Type)
storedType := baseType
if serverconfigs.IsFileBasedStorageType(params.Type) {
storedType = params.Type
}
var options any = nil
switch baseType {
case serverconfigs.AccessLogStorageTypeFile:
params.Must.
Field("filePath", params.FilePath).
Require("请输入日志文件路径")
if !serverconfigs.IsFileBasedStorageType(params.Type) || (params.Type != serverconfigs.AccessLogStorageTypeFileClickhouse && params.Type != serverconfigs.AccessLogStorageTypeFileMySQLClickhouse) {
params.Must.
Field("filePath", params.FilePath).
Require("请输入日志文件路径")
}
var storage = new(serverconfigs.AccessLogFileStorageConfig)
storage.Path = params.FilePath
@@ -175,21 +178,15 @@ func (this *CreatePopupAction) RunPost(params struct {
this.ErrorPage(err)
return
}
writeTargetsMap := map[string]bool{
"file": writeTargets.File,
"mysql": writeTargets.MySQL,
"clickhouse": writeTargets.ClickHouse,
}
writeTargetsJSON, _ := json.Marshal(writeTargetsMap)
createResp, err := this.RPC().HTTPAccessLogPolicyRPC().CreateHTTPAccessLogPolicy(this.AdminContext(), &pb.CreateHTTPAccessLogPolicyRequest{
Name: params.Name,
Type: baseType,
Type: storedType,
OptionsJSON: optionsJSON,
CondsJSON: nil, // TODO
IsPublic: params.IsPublic,
FirewallOnly: params.FirewallOnly,
DisableDefaultDB: params.DisableDefaultDB,
WriteTargetsJSON: writeTargetsJSON,
WriteTargetsJSON: nil,
})
if err != nil {
this.ErrorPage(err)

View File

@@ -46,11 +46,7 @@ func (this *IndexAction) RunGet(params struct{}) {
return
}
}
writeTargets := serverconfigs.ParseWriteTargetsFromPolicy(policy.WriteTargetsJSON, policy.Type, policy.DisableDefaultDB)
typeDisplay := serverconfigs.ComposeStorageTypeDisplay(policy.Type, writeTargets)
if typeDisplay == "" {
typeDisplay = policy.Type
}
typeDisplay := policy.Type
policyMaps = append(policyMaps, maps.Map{
"id": policy.Id,
"name": policy.Name,

View File

@@ -36,11 +36,7 @@ func InitPolicy(parent *actionutils.ParentAction, policyId int64) error {
}
}
writeTargets := serverconfigs.ParseWriteTargetsFromPolicy(policy.WriteTargetsJSON, policy.Type, policy.DisableDefaultDB)
typeDisplay := serverconfigs.ComposeStorageTypeDisplay(policy.Type, writeTargets)
if typeDisplay == "" {
typeDisplay = policy.Type
}
typeDisplay := policy.Type
parent.Data["policy"] = maps.Map{
"id": policy.Id,

View File

@@ -106,21 +106,30 @@ func (this *UpdateAction) RunPost(params struct {
Field("type", params.Type).
Require("请选择存储类型")
baseType, writeTargets := serverconfigs.ParseStorageTypeAndWriteTargets(params.Type)
if writeTargets == nil {
writeTargets = &serverconfigs.AccessLogWriteTargets{File: true, MySQL: true}
baseType, _ := serverconfigs.ParseStorageTypeAndWriteTargets(params.Type)
storedType := baseType
if serverconfigs.IsFileBasedStorageType(params.Type) {
storedType = params.Type
}
var options interface{} = nil
switch baseType {
case serverconfigs.AccessLogStorageTypeFile:
params.Must.
Field("filePath", params.FilePath).
Require("请输入日志文件路径")
var storage = new(serverconfigs.AccessLogFileStorageConfig)
storage.Path = params.FilePath
storage.AutoCreate = params.FileAutoCreate
if params.Type == serverconfigs.AccessLogStorageTypeFileClickhouse || params.Type == serverconfigs.AccessLogStorageTypeFileMySQLClickhouse {
if len(policy.OptionsJSON) > 0 {
_ = json.Unmarshal(policy.OptionsJSON, storage)
}
if len(params.FilePath) > 0 {
storage.Path = params.FilePath
}
} else {
params.Must.
Field("filePath", params.FilePath).
Require("请输入日志文件路径")
storage.Path = params.FilePath
storage.AutoCreate = params.FileAutoCreate
}
options = storage
case serverconfigs.AccessLogStorageTypeES:
params.Must.
@@ -195,23 +204,17 @@ func (this *UpdateAction) RunPost(params struct {
this.ErrorPage(err)
return
}
writeTargetsMap := map[string]bool{
"file": writeTargets.File,
"mysql": writeTargets.MySQL,
"clickhouse": writeTargets.ClickHouse,
}
writeTargetsJSON, _ := json.Marshal(writeTargetsMap)
_, err = this.RPC().HTTPAccessLogPolicyRPC().UpdateHTTPAccessLogPolicy(this.AdminContext(), &pb.UpdateHTTPAccessLogPolicyRequest{
HttpAccessLogPolicyId: params.PolicyId,
Name: params.Name,
Type: baseType,
Type: storedType,
OptionsJSON: optionsJSON,
CondsJSON: nil, // TODO
IsOn: params.IsOn,
IsPublic: params.IsPublic,
FirewallOnly: params.FirewallOnly,
DisableDefaultDB: params.DisableDefaultDB,
WriteTargetsJSON: writeTargetsJSON,
WriteTargetsJSON: nil,
})
if err != nil {
this.ErrorPage(err)

View File

@@ -21,8 +21,8 @@
</td>
</tr>
<!-- 文件(文件 / 文件+MySQL / 文件+ClickHouse / 文件+MySQL+ClickHouse -->
<tbody v-show="type == 'file' || type == 'file_mysql' || type == 'file_clickhouse' || type == 'file_mysql_clickhouse'">
<!-- 文件(文件 / 文件+MySQL -->
<tbody v-show="type == 'file' || type == 'file_mysql'">
<tr>
<td>日志文件路径 *</td>
<td>
@@ -36,7 +36,9 @@
<span class="ui label tiny basic">时:${hour}</span>
<span class="ui label tiny basic">分:${minute}</span>
<span class="ui label tiny basic">秒:${second}</span>
<span class="ui label tiny basic">年月日:${date}</span>,比如<span class="ui label tiny basic">/var/log/web-access-${date}.log</span>此文件会在API节点上写入
<span class="ui label tiny basic">年月日:${date}</span>,比如<span class="ui label tiny basic">/var/log/web-access-${date}.log</span>
<span v-if="type == 'file_clickhouse' || type == 'file_mysql_clickhouse'">当存储类型包含 ClickHouse 时,此文件会在节点侧写入,并由 Fluent Bit 采集后写入 ClickHouse。</span>
<span v-else>此文件会在API节点上写入。</span>
</p>
</td>
</tr>
@@ -51,6 +53,15 @@
</td>
</tr>
</tbody>
<!-- 文件+ClickHouse / 文件+MySQL+ClickHouse -->
<tbody v-show="type == 'file_clickhouse' || type == 'file_mysql_clickhouse'">
<tr>
<td>日志文件路径</td>
<td>
<p class="comment">当前类型包含 ClickHouse日志文件路径将由节点侧按公用策略自动复用或回退到默认日志目录无需手动输入。</p>
</td>
</tr>
</tbody>
<!-- Elastic Search -->
<tbody v-show="type == 'es'">
@@ -242,4 +253,4 @@
</tbody>
</table>
<submit-btn></submit-btn>
</form>
</form>

View File

@@ -22,8 +22,8 @@
</td>
</tr>
<!-- 文件 -->
<tbody v-show="policy.typeDisplay == 'file' || policy.typeDisplay == 'file_mysql' || policy.typeDisplay == 'file_clickhouse' || policy.typeDisplay == 'file_mysql_clickhouse'">
<!-- 文件(文件 / 文件+MySQL -->
<tbody v-show="policy.typeDisplay == 'file' || policy.typeDisplay == 'file_mysql'">
<tr>
<td>日志文件路径 *</td>
<td>
@@ -37,7 +37,9 @@
<span class="ui label tiny basic">时:${hour}</span>
<span class="ui label tiny basic">分:${minute}</span>
<span class="ui label tiny basic">秒:${second}</span>
<span class="ui label tiny basic">年月日:${date}</span>,比如<span class="ui label tin basic">/var/log/web-access-${date}.log</span>此文件会在API节点上写入
<span class="ui label tiny basic">年月日:${date}</span>,比如<span class="ui label tiny basic">/var/log/web-access-${date}.log</span>
<span v-if="policy.typeDisplay == 'file_clickhouse' || policy.typeDisplay == 'file_mysql_clickhouse'">当存储类型包含 ClickHouse 时,此文件会在节点侧写入,并由 Fluent Bit 采集后写入 ClickHouse。</span>
<span v-else>此文件会在API节点上写入。</span>
</p>
</td>
</tr>
@@ -52,6 +54,15 @@
</td>
</tr>
</tbody>
<!-- 文件+ClickHouse / 文件+MySQL+ClickHouse -->
<tbody v-show="policy.typeDisplay == 'file_clickhouse' || policy.typeDisplay == 'file_mysql_clickhouse'">
<tr>
<td>日志文件路径</td>
<td>
<p class="comment">当前类型包含 ClickHouse日志文件路径将由节点侧按公用策略自动复用或回退到默认日志目录无需手动输入。</p>
</td>
</tr>
</tbody>
<!-- Elastic Search -->
<tbody v-show="policy.typeDisplay == 'es'">
@@ -247,4 +258,4 @@
</tr>
</table>
<submit-btn></submit-btn>
</form>
</form>