All checks were successful
Deploy Fly.io Proxy / deploy (push) Successful in 1m53s
- Enable Forgejo /metrics endpoint (app.ini [metrics] section) - Add Alloy scrape target for Forgejo metrics on indri - Add upstream_response_time histogram to Fly proxy Alloy config - Replace single p95 panel with p50/p90/p99 + upstream breakdown filtered to forge.eblu.me host Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
143 lines
3.9 KiB
Django/Jinja
143 lines
3.9 KiB
Django/Jinja
// {{ ansible_managed }}
|
|
// Grafana Alloy configuration for {{ alloy_instance_label }}
|
|
// Collects system metrics (replacing node_exporter) and logs
|
|
|
|
// ============== METRICS COLLECTION ==============
|
|
|
|
// System metrics exporter (replaces node_exporter)
|
|
prometheus.exporter.unix "system" {
|
|
// Disable collectors that don't work on macOS
|
|
disable_collectors = ["thermal"]
|
|
|
|
textfile {
|
|
directory = "{{ alloy_textfile_dir }}"
|
|
}
|
|
}
|
|
|
|
// Scrape system metrics
|
|
prometheus.scrape "system" {
|
|
targets = prometheus.exporter.unix.system.targets
|
|
forward_to = [prometheus.relabel.instance.receiver]
|
|
scrape_interval = "{{ alloy_scrape_interval }}"
|
|
}
|
|
|
|
// Add instance label to match existing setup
|
|
prometheus.relabel "instance" {
|
|
forward_to = [prometheus.remote_write.prometheus.receiver]
|
|
|
|
rule {
|
|
target_label = "instance"
|
|
replacement = "{{ alloy_instance_label }}"
|
|
}
|
|
|
|
rule {
|
|
target_label = "cluster"
|
|
replacement = "indri"
|
|
}
|
|
}
|
|
|
|
// Push metrics to Prometheus via remote_write
|
|
prometheus.remote_write "prometheus" {
|
|
endpoint {
|
|
url = "{{ alloy_prometheus_url }}"
|
|
}
|
|
}
|
|
|
|
{% if alloy_collect_postgres | default(false) %}
|
|
// ============== POSTGRESQL METRICS ==============
|
|
|
|
// PostgreSQL exporter (read-only metrics via pg_monitor role)
|
|
prometheus.exporter.postgres "postgresql" {
|
|
data_source_names = ["postgresql://{{ alloy_postgres_user }}:{{ alloy_postgres_password | urlencode }}@{{ alloy_postgres_host }}:{{ alloy_postgres_port }}/{{ alloy_postgres_database }}?sslmode=disable"]
|
|
|
|
// Custom queries for vacuum and XID monitoring
|
|
custom_queries_config_path = "{{ alloy_config_dir }}/postgres_queries.yaml"
|
|
}
|
|
|
|
// Scrape PostgreSQL metrics
|
|
prometheus.scrape "postgresql" {
|
|
targets = prometheus.exporter.postgres.postgresql.targets
|
|
forward_to = [prometheus.relabel.instance.receiver]
|
|
scrape_interval = "{{ alloy_scrape_interval }}"
|
|
}
|
|
{% endif %}
|
|
|
|
{% if alloy_collect_zot | default(false) %}
|
|
// ============== ZOT REGISTRY METRICS ==============
|
|
|
|
// Scrape Zot's native metrics endpoint
|
|
prometheus.scrape "zot" {
|
|
targets = [{"__address__" = "localhost:5050"}]
|
|
metrics_path = "/metrics"
|
|
forward_to = [prometheus.relabel.instance.receiver]
|
|
scrape_interval = "{{ alloy_scrape_interval }}"
|
|
}
|
|
{% endif %}
|
|
|
|
{% if alloy_collect_forgejo | default(false) %}
|
|
// ============== FORGEJO METRICS ==============
|
|
|
|
// Scrape Forgejo's native metrics endpoint
|
|
prometheus.scrape "forgejo" {
|
|
targets = [{"__address__" = "localhost:{{ alloy_forgejo_port }}"}]
|
|
metrics_path = "/metrics"
|
|
forward_to = [prometheus.relabel.instance.receiver]
|
|
scrape_interval = "{{ alloy_scrape_interval }}"
|
|
}
|
|
{% endif %}
|
|
|
|
{% if alloy_collect_logs %}
|
|
// ============== LOG COLLECTION ==============
|
|
|
|
// Discover log files - brew services
|
|
local.file_match "brew_logs" {
|
|
path_targets = [
|
|
{% for log in alloy_brew_logs %}
|
|
{__path__ = "{{ log.path }}", service = "{{ log.service }}", stream = "{{ log.stream }}"},
|
|
{% endfor %}
|
|
]
|
|
}
|
|
|
|
// Discover log files - mcquack LaunchAgents
|
|
local.file_match "mcquack_logs" {
|
|
path_targets = [
|
|
{% for log in alloy_mcquack_logs %}
|
|
{__path__ = "{{ log.path }}", service = "{{ log.service }}", stream = "{{ log.stream }}"},
|
|
{% endfor %}
|
|
]
|
|
}
|
|
|
|
// Read and forward brew service logs
|
|
loki.source.file "brew_logs" {
|
|
targets = local.file_match.brew_logs.targets
|
|
forward_to = [loki.relabel.add_host.receiver]
|
|
}
|
|
|
|
// Read and forward mcquack service logs
|
|
loki.source.file "mcquack_logs" {
|
|
targets = local.file_match.mcquack_logs.targets
|
|
forward_to = [loki.relabel.add_host.receiver]
|
|
}
|
|
|
|
// Add host label to all logs
|
|
loki.relabel "add_host" {
|
|
forward_to = [loki.write.loki.receiver]
|
|
|
|
rule {
|
|
target_label = "host"
|
|
replacement = "{{ alloy_instance_label }}"
|
|
}
|
|
|
|
rule {
|
|
target_label = "cluster"
|
|
replacement = "indri"
|
|
}
|
|
}
|
|
|
|
// Write logs to Loki
|
|
loki.write "loki" {
|
|
endpoint {
|
|
url = "{{ alloy_loki_url }}"
|
|
}
|
|
}
|
|
{% endif %}
|