Add Prometheus and Alertmanager configurations: implement custom rules, alerting, and Telegram notifications
This commit is contained in:
@@ -1,17 +1,112 @@
|
||||
locals {
|
||||
app_version = var.tag
|
||||
data_folder = "${var.persistent_folder}/prometheus"
|
||||
app_version = var.tag
|
||||
prometheus_folder = "${var.persistent_folder}/prometheus"
|
||||
alertmanager_folder = "${var.persistent_folder}/alertmanager"
|
||||
|
||||
prometheus_config = coalesce(var.config, file("${path.module}/resources/default.yml"))
|
||||
prometheus_default_config = yamldecode(file("${path.module}/resources/prometheus.yml"))
|
||||
alertmanager_default_config = yamldecode(file("${path.module}/resources/alertmanager.yml"))
|
||||
|
||||
prometheus_user_config = try(
|
||||
yamldecode(var.config),
|
||||
{}
|
||||
)
|
||||
prometheus_config = yamlencode({
|
||||
global = merge(
|
||||
try(local.prometheus_default_config.global, {}),
|
||||
try(local.prometheus_user_config.global, {}),
|
||||
{
|
||||
scrape_interval = "15s"
|
||||
evaluation_interval = "15s"
|
||||
external_labels = {
|
||||
cluster = var.cluster_name
|
||||
}
|
||||
}
|
||||
),
|
||||
rule_files = concat(
|
||||
try(local.prometheus_default_config.rule_files, []),
|
||||
try(local.prometheus_user_config.rule_files, [])
|
||||
),
|
||||
scrape_configs = concat(
|
||||
try(local.prometheus_default_config.scrape_configs, []),
|
||||
try(local.prometheus_user_config.scrape_configs, [])
|
||||
),
|
||||
alerting = merge(
|
||||
try(local.prometheus_default_config.alerting, {}),
|
||||
try(local.prometheus_user_config.alerting, {}),
|
||||
{
|
||||
alertmanagers = [
|
||||
{
|
||||
static_configs = [
|
||||
{
|
||||
targets = ["alertmanager.prometheus.svc.cluster.local:9093"]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
)
|
||||
})
|
||||
prometheus_config_checksum = md5(local.prometheus_config)
|
||||
|
||||
prometheus_rules = yamlencode({
|
||||
groups = [
|
||||
{
|
||||
name = "custom-rules"
|
||||
rules = var.rules
|
||||
}
|
||||
]
|
||||
})
|
||||
prometheus_user_rules = try(
|
||||
yamldecode(var.rules),
|
||||
{}
|
||||
)
|
||||
prometheus_merged_rules = merge({ groups = [] }, local.prometheus_user_rules)
|
||||
prometheus_rules = yamlencode(local.prometheus_merged_rules)
|
||||
prometheus_rules_checksum = md5(local.prometheus_rules)
|
||||
|
||||
alertmanager_user_config = try(
|
||||
yamldecode(var.alertmanager_config),
|
||||
{}
|
||||
)
|
||||
alertmanager_config = yamlencode({
|
||||
global = merge(
|
||||
try(local.alertmanager_default_config.global, {}),
|
||||
try(local.alertmanager_user_config.global, {})
|
||||
),
|
||||
route = merge(
|
||||
try(local.alertmanager_default_config.route, {}),
|
||||
try(local.alertmanager_user_config.route, {
|
||||
receiver = "default"
|
||||
})
|
||||
),
|
||||
receivers = concat(
|
||||
try(local.alertmanager_default_config.receivers, []),
|
||||
try(local.alertmanager_user_config.receivers, []),
|
||||
[
|
||||
{
|
||||
name = "default"
|
||||
email_configs = [
|
||||
{
|
||||
to = var.email_config.to
|
||||
from = var.email_config.from
|
||||
smarthost = var.email_config.smarthost
|
||||
auth_username = var.email_config.auth_username
|
||||
auth_password = var.email_config.auth_password
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
try([
|
||||
{
|
||||
name = "telegram"
|
||||
telegram_configs = [
|
||||
{
|
||||
send_resolved = true
|
||||
parse_mode = var.telegram_config.parse_mode
|
||||
bot_token = var.telegram_config.bot_token
|
||||
chat_id = tonumber(var.telegram_config.chat_id)
|
||||
message = var.telegram_config.message != "" ? var.telegram_config.message : "{{ template \"telegram.default.message\" . }}"
|
||||
}
|
||||
]
|
||||
}
|
||||
], [])
|
||||
)
|
||||
templates = concat(
|
||||
try(local.prometheus_default_config.templates, []),
|
||||
try(local.prometheus_user_config.templates, [])
|
||||
)
|
||||
})
|
||||
alertmanager_config_checksum = md5(local.alertmanager_config)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user