Skip to content

Commit 4945898

Browse files
chore(deployment): add alert rule group evaluation interval (#5835)
1 parent 648f601 commit 4945898

2 files changed

Lines changed: 45 additions & 4 deletions

File tree

deployments/monitoring/src/alert_builder.py

Lines changed: 45 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ def setup_logger(debug: bool):
2020
handler = colorlog.StreamHandler()
2121
handler.setFormatter(
2222
colorlog.ColoredFormatter(
23-
'%(asctime)s %(log_color)s%(levelname)s%(reset)s %(message)s',
23+
"%(asctime)s %(log_color)s%(levelname)s%(reset)s %(message)s",
2424
log_colors={
2525
"DEBUG": "blue",
2626
"INFO": "green",
@@ -118,6 +118,7 @@ def create_alert_rule(
118118
title: str,
119119
folder_uid: str,
120120
rule_group: str,
121+
interval_sec: int,
121122
_for: str,
122123
expr: str,
123124
conditions: list[dict[str, any]],
@@ -128,6 +129,7 @@ def create_alert_rule(
128129
alert_rule["title"] = title
129130
alert_rule["folderUID"] = folder_uid
130131
alert_rule["ruleGroup"] = rule_group
132+
alert_rule["intervalSec"] = interval_sec
131133
alert_rule["for"] = _for
132134
alert_rule["data"] = [
133135
create_alert_query(model=create_alert_query_model(expr=expr)),
@@ -169,14 +171,36 @@ def dump_alert(output_dir: str, alert: dict[str, any]) -> None:
169171
json.dump(alert, f, indent=2)
170172
logging.info(f'Alert "{alert["name"]}" saved to {alert_full_path}')
171173

174+
175+
def get_alert_rule_group(client: GrafanaApi, folder_uid: str, group_uid: str) -> str:
176+
logging.debug(f"Getting alert rule group {group_uid}")
177+
return client.alertingprovisioning.get_rule_group(folder_uid=folder_uid, group_uid=group_uid)
178+
179+
180+
def update_alert_rule_group(
181+
client: GrafanaApi,
182+
folder_uid: str,
183+
group_uid: str,
184+
alertrule_group: dict[any, any],
185+
disable_provenance=True,
186+
) -> None:
187+
logging.debug(f"Updating alert rule group {group_uid}")
188+
client.alertingprovisioning.update_rule_group(
189+
folder_uid=folder_uid,
190+
group_uid=group_uid,
191+
alertrule_group=alertrule_group,
192+
disable_provenance=disable_provenance,
193+
)
194+
195+
172196
def main():
173197
args = parser.parse_args()
174198
logger = setup_logger(debug=args.debug)
175199
start_time = datetime.datetime.now()
176200
logger.info(
177201
f'Starting to build grafana dashboard, time is {start_time.strftime("%Y-%m-%d %H:%M:%S")}'
178202
)
179-
203+
180204
with open(args.dev_alerts_file, "r") as f:
181205
dev_alerts = json.load(f)
182206

@@ -194,6 +218,7 @@ def main():
194218
name=dev_alert["name"],
195219
title=dev_alert["title"],
196220
folder_uid=folder_uid,
221+
interval_sec=dev_alert["intervalSec"],
197222
rule_group=dev_alert["ruleGroup"],
198223
_for=dev_alert["for"],
199224
expr=dev_alert["expr"],
@@ -209,10 +234,27 @@ def main():
209234
client.alertingprovisioning.create_alertrule(
210235
alertrule=alert, disable_provenance=True
211236
)
212-
logging.info(f'Alert "{alert["name"]}" was uploaded to Grafana successfully')
237+
logging.info(f'Alert "{alert["name"]}" uploaded to Grafana successfully')
213238
except Exception as e:
214239
logging.error(f'Failed to create alert "{alert["name"]}". {e}')
215240

241+
try:
242+
group_uid = alert["ruleGroup"]
243+
rule_group = get_alert_rule_group(
244+
client=client, folder_uid=folder_uid, group_uid=group_uid
245+
)
246+
if rule_group["interval"] != alert["intervalSec"]:
247+
rule_group["interval"] = alert["intervalSec"]
248+
update_alert_rule_group(
249+
client=client,
250+
folder_uid=folder_uid,
251+
group_uid=group_uid,
252+
alertrule_group=rule_group,
253+
)
254+
logging.info(f"Alert rule group {group_uid} updated successfully")
255+
except Exception as e:
256+
logging.error(f'Failed to update alert rule group "{alert["ruleGroup"]}". {e}')
257+
216258
dump_alert(output_dir=args.out_dir, alert=alert)
217259

218260
logging.info(

deployments/monitoring/src/grafana10_objects.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,6 @@
8484
"title": "",
8585
"orgId": 1,
8686
"condition": "B",
87-
"interval": "1m",
8887
"data": [],
8988
"for": "5m",
9089
"execErrState": "Error",

0 commit comments

Comments
 (0)