This project provides the Pydantic models AlertGroup
and Alert
that
represent a payload from Prometheus Alertmanager. In addition, it also includes
a number of useful utility methods that perform actions on alert data. It can
be used as a drop-in wherever you want to work with Prometheus Alertmanager
alert payload data.
A prominent example for using it is a FastAPI route that receives alert payloads.
Simply add AlertGroup
as a parameter to the handler.
- Pydantic models that matches the official Alertmanager payload schema.
- Fields
specific_annotations
andspecific_labels
in every alert that contain elements that are specific to the respective alert. - Methods to update common annotations and labels.
- Methods to remove, add, update, override and prefix annotations and labels.
- Every single method is well covered by tests.
Using the model is pretty straight-forward. Take a look at the automatically generated docs or the source code itself.
Here is a very short example how you could use the model. It removes all annotations and labels starting with two underscores and adds a prefix that contains namespace info to the summary label. Finally it prints specific elements for all alerts in the group.
from prometheus_alert_model import AlertGroup
from fastapi import FastAPI
from re import compile
app = FastAPI()
@app.post("/alert")
def post_alert(alert_group: AlertGroup):
alert_group.remove_re(
annotations=r"^(__.*)$",
labels=compile(r"^(__.*)$")
)
alert_group.add_prefix(labels={"summary": "Prototyping system: "})
for alert in alert_group.alerts:
print(alert.specific_annotations
print(alert.specific_labels)
In the following all attributes you can find within a Alert
. Notice
the custom attributes specific_annotations
and specific_labels
that
include elements that are specific to the respective alert in context of the
complete AlertGroup
/ payload.
fingerprint: str
status: str
starts_at: datetime
ends_at: datetime
generator_url: str
annotations: Dict[str, str]
labels: Dict[str, str]
specific_annotations: Dict[str, str]
specific_labels: Dict[str, str]
In the following all attributes you can find within a AlertGroup
. It
represents a single payload from Alertmanager.
receiver: str
status: str
external_url: str
version: str
group_key: str
truncated_alerts: int = =0
group_labels: Dict[str, str]
common_annotations: Dict[str, str]
common_labels: Dict[str, str]
alerts: List[Alert]
Here is a short summary over the included utility methods (for full documentation please refer to type hints or the automatically generated docs):
update_specific_elements
: Updates specific labels and annotations.update_specific_annotations
: Updates specific annotations.update_specific_labels
: Updates specific labels.update_common_elements
: Updates common annotations and labels.update_common_annotations
: Updates common annotations.update_common_labels
: Updates common labels.remove
: Removes annotations and labels by name.remove_re
: Removes annotations and labels by matching names with regex.add
: Adds annotations and labels but skips existing elements.override
: Adds annotations and labels and overrides existing elements.add_prefix
: Adds prefix to annotations and labels.
I have a bunch of Python scripts that work in some shape or form with Prometheus Alertmanager data. Instead of duplicating the model across all of them I prefer to have a single small package that is well tested and reuse it again and again. This way I don't have to reimplement utility functions / methods.
Please refer to "DEVELOPMENT.md".