Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

feat:增加log策略规则 #210

Merged
merged 2 commits into from
Mar 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions api/admin/model.proto
Original file line number Diff line number Diff line change
Expand Up @@ -391,6 +391,19 @@ message StrategyDomainLevelItem {
Condition condition = 9;
}

message StrategyLogLevelItem {
// 告警等级明细
SelectItem level = 2;
// 告警页面
repeated SelectItem alarmPages = 4;
// 告警组
repeated AlarmNoticeGroupItem alarmGroups = 5;
// 策略Labels
repeated LabelNoticeItem labelNotices = 6;
// 总数
uint32 count = 7;
}

message StrategyItem {
// 策略名称
string name = 1;
Expand Down Expand Up @@ -439,6 +452,8 @@ message StrategyItem {
repeated StrategyHTTPLevelItem httpLevels = 24;
// 域名监控策略
repeated StrategyDomainLevelItem domainLevels = 25;
// log监控策略
repeated StrategyLogLevelItem logLevels = 26;
}

message SubscriberStrategyItem {
Expand Down
57 changes: 47 additions & 10 deletions api/admin/strategy/strategy.proto
Original file line number Diff line number Diff line change
Expand Up @@ -257,30 +257,32 @@ message CreateStrategyRequest {
repeated CreateStrategyPortLevelRequest strategyPortLevels = 18;
// HTTP监控策略定义
repeated CreateStrategyHTTPLevelRequest strategyHTTPLevels = 19;
// Log监控策略定义
repeated CreateStrategyLogLevelRequest strategyLogLevels = 20;

option (buf.validate.message).cel = {
id: "StrategyMetricLevelRequired",
expression: "this.strategyType != 1 || (this.strategyMetricLevels.size() > 0)",
message: "strategyMetricLevels 不能为空"
};

// option (buf.validate.message).cel = {
// id: "StrategyMetricLevelRequired",
// expression: "this.strategyType != 1 || (this.datasourceIds.size() > 0)",
// message: "请选择至少一个数据源"
// };
// option (buf.validate.message).cel = {
// id: "StrategyMetricLevelRequired",
// expression: "this.strategyType != 1 || (this.datasourceIds.size() > 0)",
// message: "请选择至少一个数据源"
// };

option (buf.validate.message).cel = {
id: "StrategyEventLevelRequired",
expression: "this.strategyType != 2 || (this.strategyDomainLevels.size() > 0)",
message: "StrategyDomainLevels 不能为空"
};

// option (buf.validate.message).cel = {
// id: "StrategyMetricLevelRequired",
// expression: "this.strategyType != 2 || (this.datasourceIds.size() > 0)",
// message: "请选择至少一个数据源"
// };
// option (buf.validate.message).cel = {
// id: "StrategyMetricLevelRequired",
// expression: "this.strategyType != 2 || (this.datasourceIds.size() > 0)",
// message: "请选择至少一个数据源"
// };

option (buf.validate.message).cel = {
id: "StrategyPortLevelRequired",
Expand All @@ -299,6 +301,12 @@ message CreateStrategyRequest {
expression: "this.strategyType != 6 || (this.strategyEventLevels.size() > 0)",
message: "strategyEventLevels 不能为空"
};

option (buf.validate.message).cel = {
id: "StrategyLogLevelRequired",
expression: "this.strategyType != 7 || (this.strategyLogLevels.size() > 0)",
message: "strategyLogLevels 不能为空"
};
}
message CreateStrategyReply {}

Expand Down Expand Up @@ -524,6 +532,35 @@ message CreateStrategyHTTPLevelRequest {
Condition responseTimeCondition = 14;
}


// 端口监控策略定义
message CreateStrategyLogLevelRequest {
// 策略等级ID
uint32 levelId = 1 [(buf.validate.field).cel = {
id: "PortStrategyItem_levelID"
expression: 'this > 0'
message: "策略等级ID必须大于0"
}];
// 告警页面ID
repeated uint32 alarmPageIds = 3 [(buf.validate.field).cel = {
message: "请选择告警页面",
expression: "this.size() > 0"
}, (buf.validate.field).cel = {
message: "告警页面重复",
expression: "this.unique()"
}];
// 告警组ID列表
repeated uint32 alarmGroupIds = 4 [(buf.validate.field).cel = {
message: "告警组重复",
expression: "this.unique()"
}];
// 策略Labels
repeated CreateStrategyLabelNoticeRequest labelNotices = 5;
// 端口
uint32 count = 6;
int64 duration = 7;
}

message HeaderItem {
string key = 1 [(buf.validate.field).cel = {
message: "标签名称长度限制在1-200个字符",
Expand Down
10 changes: 10 additions & 0 deletions api/enum.proto
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,16 @@ enum StorageType {
// VictoriaMetrics
StorageTypeVictoriaMetrics = 2;

// StorageTypeElasticsearch
StorageTypeElasticsearch = 3;

// StorageTypeLoki
StorageTypeLoki = 4;

// StorageAliYunSLS
StorageAliYunSLS = 5;


//...

// Kafka
Expand Down
6 changes: 6 additions & 0 deletions api/houyi/strategy/strategy.proto
Original file line number Diff line number Diff line change
Expand Up @@ -50,5 +50,11 @@ message PushStrategyRequest {
expression: "this.size() <= 10"
message: "MQ策略列表不能超过10个"
}];
// log 策略
repeated LogsStrategyItem logStrategies = 6 [(buf.validate.field).cel = {
id: "PushStrategyRequest_log_strategies_lte10",
expression: "this.size() <= 10"
message: "LOG策略列表不能超过10个"
}];
}
message PushStrategyReply {}
73 changes: 72 additions & 1 deletion api/strategy.proto
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ message MetricStrategyItem {
uint32 count = 4;
// 持续的类型
SustainType sustainType = 5 [(buf.validate.field).enum.defined_only = true];
// 策略标签
// 策略标签
map<string, string> labels = 7 [(buf.validate.field).cel = {
id: "Strategy_labels"
expression: 'this.size() > 0'
Expand Down Expand Up @@ -344,6 +344,77 @@ message EventStrategyItem {
};
}

// LogsStrategyItem 日志策略定义, 用于监控指定日志
message LogsStrategyItem {
// 策略名称
string alert = 1 [(buf.validate.field).cel = {
id: "LogsStrategy_alert"
expression: 'this.size() > 0'
message: "策略名称不允许为空"
}];
// 策略语句
string expr = 2 [(buf.validate.field).cel = {
id: "LogsStrategy_expr"
expression: 'this.size() > 0'
message: "策略语句不允许为空"
}];
// 策略持续时间
google.protobuf.Duration for = 3;

// 持续的类型
SustainType sustainType = 4 [(buf.validate.field).enum.defined_only = true];
// 策略标签
map<string, string> labels = 5 [(buf.validate.field).cel = {
id: "LogsStrategy_labels"
expression: 'this.size() > 0'
message: "策略标签不允许为空"
}];
// 策略注解
map<string, string> annotations = 6 [(buf.validate.field).cel = {
id: "LogsStrategy_annotations"
expression: 'this.size() > 0'
message: "策略注解不允许为空"
}];
Status status = 7 [(buf.validate.field).enum.defined_only = true];
// 数据源
repeated DatasourceItem datasource = 8 [(buf.validate.field).cel = {
id: "LogsStrategy_datasource"
expression: 'this.size() > 0'
message: "数据源不允许为空"
}];
// 判断条件
Condition condition = 9;
// 团队ID
uint32 teamID = 10 [(buf.validate.field).cel = {
id: "LogsStrategy_team"
expression: 'this > 0'
message: "团队ID必须大于0"
}];
// 接收对象列表(告警组ID列表)
repeated uint32 receiverGroupIDs = 11;
repeated LabelNotices labelNotices = 12;
StrategyType strategyType = 13;
// 策略ID
uint32 strategyID = 14 [(buf.validate.field).cel = {
id: "LogsStrategy_strategyID"
expression: 'this > 0'
message: "策略ID必须大于0"
}];

// 策略等级ID
uint32 levelId = 15 [(buf.validate.field).cel = {
id: "LogsStrategy_levelID"
expression: 'this > 0'
message: "策略等级ID必须大于0"
}];
// 日志总数
uint32 count = 16 [(buf.validate.field).cel = {
id: "LogsStrategy_count"
expression: 'this > 0'
message: "日志总数必须大于0"
}];
}

message LabelNotices {
string key = 1;
string value = 2;
Expand Down
Loading