Jesús Pérez 44648e3206
chore: complete nickel migration and consolidate legacy configs
- Remove KCL ecosystem (~220 files deleted)
- Migrate all infrastructure to Nickel schema system
- Consolidate documentation: legacy docs → provisioning/docs/src/
- Add CI/CD workflows (.github/) and Rust build config (.cargo/)
- Update core system for Nickel schema parsing
- Update README.md and CHANGES.md for v5.0.0 release
- Fix pre-commit hooks: end-of-file, trailing-whitespace
- Breaking changes: KCL workspaces require migration
- Migration bridge available in docs/src/development/
2026-01-08 09:55:37 +00:00

281 lines
7.2 KiB
Plaintext

# Infrastructure - Prometheus Schema
# Defines type-safe Prometheus configuration generation
# Validates scrape configs, alert rules, and recording rules
{
# Scrape target configuration
ScrapeTarget = {
address | String,
labels | {_ | String} | default = {},
},
# Scrape job configuration
ScrapeConfig = {
job_name | String,
scrape_interval | String | default = "15s",
scrape_timeout | String | default = "10s",
metrics_path | String | default = "/metrics",
static_configs | Array {
targets | Array String,
labels | {_ | String} | default = {},
},
honor_labels | Bool | default = false,
honor_timestamps | Bool | default = true,
scheme | [| 'http, 'https |] | default = 'http,
},
# Alert manager configuration
AlertManagerConfig = {
static_configs | Array {
targets | Array String,
labels | {_ | String} | default = {},
} | default = [],
},
# Global Prometheus configuration
GlobalConfig = {
scrape_interval | String | default = "15s",
evaluation_interval | String | default = "15s",
external_labels | {_ | String} | default = {
environment = "development",
},
},
# Remote write configuration
RemoteWrite = {
url | String,
write_relabel_configs | Array {
source_labels | Array String | optional,
target_label | String | optional,
action | [| 'replace, 'keep, 'drop |] | default = 'replace,
} | default = [],
},
# Complete Prometheus configuration
PrometheusConfig = {
global | GlobalConfig | default = {
scrape_interval = "15s",
evaluation_interval = "15s",
external_labels = {
environment = "development",
},
},
alerting | {
alertmanagers | Array AlertManagerConfig | default = [],
} | default = {
alertmanagers = [],
},
rule_files | Array String | default = [],
scrape_configs | Array ScrapeConfig,
remote_write | Array RemoteWrite | default = [],
},
# Service scrape preset (used to generate job for specific service)
servicePreset = fun service_name port metrics_path interval =>
{
job_name = service_name,
scrape_interval = interval,
scrape_timeout = "5s",
metrics_path = metrics_path,
static_configs = [
{
targets = ["%{service_name}:%{port}"],
labels = {
service = service_name,
},
},
],
},
# Solo mode preset
soloPrometheusPreset = {
global = {
scrape_interval = "15s",
evaluation_interval = "15s",
external_labels = {
cluster = "provisioning-platform",
environment = "development",
},
},
alerting = {
alertmanagers = [],
},
rule_files = ["/etc/prometheus/rules/*.yml"],
scrape_configs = [
{
job_name = "prometheus",
static_configs = [{targets = ["localhost:9090"]}],
},
{
job_name = "orchestrator",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [{targets = ["orchestrator:8080"]}],
},
{
job_name = "control-center",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [{targets = ["control-center:8081"]}],
},
{
job_name = "oci-registry",
scrape_interval = "30s",
metrics_path = "/metrics",
static_configs = [{targets = ["oci-registry:5001"]}],
},
],
},
# Multiuser mode preset
multiuserPrometheusPreset = {
global = {
scrape_interval = "15s",
evaluation_interval = "15s",
external_labels = {
cluster = "provisioning-platform",
environment = "staging",
},
},
alerting = {
alertmanagers = [
{
static_configs = [
{
targets = ["alertmanager:9093"],
}
],
}
],
},
rule_files = ["/etc/prometheus/rules/*.yml"],
scrape_configs = [
{
job_name = "prometheus",
static_configs = [{targets = ["localhost:9090"]}],
},
{
job_name = "orchestrator",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [
{
targets = ["orchestrator-1:8080", "orchestrator-2:8080"],
labels = {service = "orchestrator"},
}
],
},
{
job_name = "control-center",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [
{
targets = ["control-center-1:8081", "control-center-2:8081"],
labels = {service = "control-center"},
}
],
},
{
job_name = "postgres",
scrape_interval = "30s",
static_configs = [{targets = ["postgres-exporter:9187"]}],
},
{
job_name = "node",
scrape_interval = "30s",
static_configs = [{targets = ["node-exporter:9100"]}],
},
],
},
# Enterprise mode preset
enterprisePrometheusPreset = {
global = {
scrape_interval = "15s",
evaluation_interval = "15s",
external_labels = {
cluster = "provisioning-platform",
environment = "production",
},
},
alerting = {
alertmanagers = [
{
static_configs = [
{
targets = ["alertmanager-1:9093", "alertmanager-2:9093", "alertmanager-3:9093"],
}
],
}
],
},
rule_files = [
"/etc/prometheus/rules/*.yml",
"/etc/prometheus/rules/alerts.yml",
],
remote_write = [
{
url = "http://remote-storage:9009/api/v1/push",
}
],
scrape_configs = [
{
job_name = "prometheus",
static_configs = [{targets = ["localhost:9090"]}],
},
{
job_name = "orchestrator",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [
{
targets = ["orchestrator-1:8080", "orchestrator-2:8080", "orchestrator-3:8080"],
labels = {service = "orchestrator", tier = "core"},
}
],
},
{
job_name = "control-center",
scrape_interval = "10s",
metrics_path = "/metrics",
static_configs = [
{
targets = ["control-center-1:8081", "control-center-2:8081", "control-center-3:8081"],
labels = {service = "control-center", tier = "core"},
}
],
},
{
job_name = "prometheus-fed",
scrape_interval = "15s",
static_configs = [
{
targets = ["prometheus-secondary-1:9090", "prometheus-secondary-2:9090"],
labels = {replica = "secondary"},
}
],
},
{
job_name = "postgres",
scrape_interval = "30s",
static_configs = [{targets = ["postgres-exporter:9187"]}],
},
{
job_name = "node",
scrape_interval = "30s",
static_configs = [
{
targets = ["node-exporter-1:9100", "node-exporter-2:9100", "node-exporter-3:9100"],
}
],
},
{
job_name = "cadvisor",
scrape_interval = "30s",
static_configs = [{targets = ["cadvisor:8080"]}],
},
],
},
}