Created
May 12, 2025 11:30
-
-
Save iximiuz/06f4f2a9c334fc07cf65a4c507de237f to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
remotecfg { | |
url = "..." | |
id = "..." | |
poll_frequency = "60s" | |
basic_auth { | |
username = "..." | |
password = "..." | |
} | |
} | |
prometheus.remote_write "metrics_service" { | |
endpoint { | |
url = "..." | |
basic_auth { | |
username = "..." | |
password = "..." | |
} | |
write_relabel_config { | |
action = "drop" | |
source_labels = ["__name__"] | |
regex = "(alloy_component_.*|node_cooling_.*|node_cpu_frequency_.*|node_cpu_scaling_.*|node_disk_.*|node_scrape_collector.*|prometheus_remote_storage_.*)" | |
} | |
} | |
} | |
loki.write "grafana_cloud_loki" { | |
endpoint { | |
url = "..." | |
basic_auth { | |
username = "..." | |
password = "..." | |
} | |
} | |
} | |
///////////////////////////////////////////////////////////////////////////// | |
// Firefleet node metrics // | |
///////////////////////////////////////////////////////////////////////////// | |
// Add standard labels to metrics coming from node_exporter | |
discovery.relabel "node_exporter" { | |
targets = prometheus.exporter.unix.node_exporter.targets | |
rule { | |
target_label = "instance" | |
replacement = constants.hostname | |
} | |
rule { | |
target_label = "job" | |
replacement = "integrations/node_exporter" | |
} | |
} | |
// Collect system metrics | |
prometheus.exporter.unix "node_exporter" { | |
// Disable unnecessary collectors to reduce overhead (and fit the free tier) | |
disable_collectors = [ | |
"arp", | |
"bcache", | |
"bonding", | |
"btrfs", | |
"buddyinfo", | |
"dmi", | |
"edac", | |
"entropy", | |
"fibrechannel", | |
"hwmon", | |
"infiniband", | |
"ipvs", | |
"mdadm", | |
"netstat", | |
"pressure", | |
"schedstat", | |
"sockstat", | |
"softnet", | |
"timex", | |
"udp_queues", | |
"uname", | |
"xfs", | |
"zfs", | |
] | |
enable_collectors = ["meminfo"] | |
filesystem { | |
// Exclude filesystem types that aren't relevant for monitoring | |
fs_types_exclude = "^(autofs|binfmt_misc|bpf|cgroup2?|configfs|debugfs|devpts|devtmpfs|tmpfs|fusectl|hugetlbfs|iso9660|mqueue|nsfs|overlay|proc|procfs|pstore|rpc_pipefs|securityfs|selinuxfs|squashfs|sysfs|tracefs)$" | |
// Exclude mount points that aren't relevant for monitoring | |
mount_points_exclude = "^/(dev|proc|run/credentials/.+|sys)($|/)" | |
mount_timeout = "5s" | |
} | |
netclass { | |
// Ignore virtual and container network interfaces | |
ignored_devices = "^(veth.*|cali.*|docker.*|play.*|[a-f0-9]{15})$" | |
} | |
netdev { | |
// Exclude virtual and container network interfaces from device metrics | |
device_exclude = "^(veth.*|cali.*|docker.*|play.*|[a-f0-9]{15})$" | |
} | |
} | |
// Scrape metrics from the node_exporter | |
prometheus.scrape "node_exporter" { | |
scrape_interval = "60s" | |
targets = discovery.relabel.node_exporter.output | |
forward_to = [prometheus.remote_write.metrics_service.receiver] | |
} | |
///////////////////////////////////////////////////////////////////////////// | |
// Firefleet node logs // | |
///////////////////////////////////////////////////////////////////////////// | |
// Convert well-known journal message fields into labels | |
discovery.relabel "journal" { | |
targets = [] | |
rule { | |
source_labels = ["__journal__systemd_unit"] | |
target_label = "unit" | |
} | |
rule { | |
source_labels = ["__journal__boot_id"] | |
target_label = "boot_id" | |
} | |
rule { | |
source_labels = ["__journal__transport"] | |
target_label = "transport" | |
} | |
rule { | |
source_labels = ["__journal_priority_keyword"] | |
target_label = "level" | |
} | |
} | |
// journald logs | |
loki.source.journal "journal" { | |
// Only collect logs from the last 2 hours | |
max_age = "2h0m0s" | |
labels = { source = "journal", instance = constants.hostname } | |
relabel_rules = discovery.relabel.journal.rules | |
forward_to = [loki.write.grafana_cloud_loki.receiver] | |
} | |
// system log files | |
local.file_match "system_logs" { | |
path_targets = [{ | |
// Target localhost for log collection | |
__address__ = "localhost", | |
// Collect standard system logs | |
__path__ = "/var/log/{syslog,messages,*.log}", | |
instance = constants.hostname, | |
job = "integrations/node_exporter", | |
}] | |
} | |
// system logs (via file scraping) | |
loki.source.file "system_logs" { | |
targets = local.file_match.system_logs.targets | |
forward_to = [loki.write.grafana_cloud_loki.receiver] | |
} | |
///////////////////////////////////////////////////////////////////////////// | |
// Firefleet Docker logs // | |
///////////////////////////////////////////////////////////////////////////// | |
discovery.docker "docker_containers" { | |
host = "unix:///var/run/docker.sock" | |
refresh_interval = "5s" | |
} | |
discovery.relabel "docker_containers" { | |
targets = [] | |
rule { | |
target_label = "job" | |
replacement = "integrations/docker" | |
} | |
rule { | |
target_label = "instance" | |
replacement = constants.hostname | |
} | |
rule { | |
source_labels = ["__meta_docker_container_name"] | |
regex = "/(.*)" | |
target_label = "container" | |
} | |
rule { | |
source_labels = ["__meta_docker_container_log_stream"] | |
target_label = "stream" | |
} | |
} | |
loki.source.docker "docker_containers" { | |
host = "unix:///var/run/docker.sock" | |
targets = discovery.docker.docker_containers.targets | |
labels = { source = "docker" } | |
relabel_rules = discovery.relabel.docker_containers.rules | |
forward_to = [loki.write.grafana_cloud_loki.receiver] | |
refresh_interval = "5s" | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment