Skip to content

Instantly share code, notes, and snippets.

@iximiuz
Created May 12, 2025 11:30
Show Gist options
  • Save iximiuz/06f4f2a9c334fc07cf65a4c507de237f to your computer and use it in GitHub Desktop.
Save iximiuz/06f4f2a9c334fc07cf65a4c507de237f to your computer and use it in GitHub Desktop.
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