Add alloy

This commit is contained in:
2025-12-03 15:29:37 +01:00
parent 0912f7866e
commit 29b2adfb55
19 changed files with 473 additions and 0 deletions

View File

@@ -0,0 +1,160 @@
#!/usr/bin/env bashio
readonly CONFIG_DIR=/etc/alloy
readonly CONFIG_FILE="${CONFIG_DIR}/config.alloy"
readonly CONFIG_TEMPLATE="${CONFIG_DIR}/config.alloy.template"
if bashio::config.true 'override_config'; then
if bashio::config.is_empty 'override_config_path'; then
bashio::config.require 'override_config_path' "Config override is Enabled, must set override_config_path"
fi
else
# Add Prometheus Write Endpoint
if bashio::config.true 'enable_prometheus'; then
bashio::config.require 'prometheus_write_endpoint' "You need to supply Prometheus write endpoint"
EXTERNAL_LABELS=""
RELABEL_CONFIG=""
# Prometheus Write Endpoint
if bashio::config.has_value 'prometheus_write_endpoint'; then
PROMETHEUS_ENDPOINT="$(bashio::config "prometheus_write_endpoint")"
fi
# Servername External Label
if bashio::config.has_value 'servername_tag'; then
EXTERNAL_LABELS="
external_labels = {
\"servername\" = \"$(bashio::config "servername_tag")\",
}"
fi
# Relabel "instance" tag if configured
if bashio::config.has_value 'instance_tag'; then
RELABEL_CONFIG="
write_relabel_config {
action = \"replace\"
source_labels = [\"instance\"]
target_label = \"instance\"
replacement = \"$(bashio::config "instance_tag")\"
}"
fi
export PROMETHEUS_CONFIG="
prometheus.remote_write \"default\" {
endpoint {
url = \"$PROMETHEUS_ENDPOINT\"
metadata_config {
send_interval = \"$(bashio::config "prometheus_scrape_interval")\"
}
$RELABEL_CONFIG
}
$EXTERNAL_LABELS
}"
## Enable prometheus.exporter.unix
if bashio::config.true 'enable_unix_component'; then
export UNIX_CONFIG="
prometheus.exporter.unix \"node_exporter\" { }
prometheus.scrape \"unix\" {
targets = prometheus.exporter.unix.node_exporter.targets
forward_to = [prometheus.remote_write.default.receiver]
scrape_interval = \"$(bashio::config "prometheus_scrape_interval")\"
}"
fi
## Enable prometheus.exporter.process
if bashio::config.true 'enable_process_component'; then
export PROCESS_CONFIG="
prometheus.exporter.process \"process_exporter\" {
matcher {
name = \"{{.Comm}}\"
cmdline = [\".+\"]
}
}
prometheus.scrape \"process\" {
targets = prometheus.exporter.process.process_exporter.targets
forward_to = [prometheus.remote_write.default.receiver]
scrape_interval = \"$(bashio::config "prometheus_scrape_interval")\"
}"
fi
export ALLOY_CONFIG="
prometheus.exporter.self \"alloy\" { }
prometheus.scrape \"self\" {
targets = prometheus.exporter.self.alloy.targets
forward_to = [prometheus.remote_write.default.receiver]
scrape_interval = \"$(bashio::config "prometheus_scrape_interval")\"
}"
fi
# Add Loki to config if endpoint is supplied
if bashio::config.true 'enable_loki'; then
bashio::config.require 'loki_endpoint' "You need to supply Loki endpoint"
if bashio::config.has_value 'servername_tag'; then
labels="{component = \"loki.source.journal\", servername = \"$(bashio::config "servername_tag")\"}"
else
labels="{component = \"loki.source.journal\"}"
fi
if bashio::config.true 'enable_loki_syslog'; then
syslog_config="
loki.source.syslog \"syslog\" {
listener {
address = \"0.0.0.0:5601\"
labels = { component = \"loki.source.syslog\", protocol = \"tcp\" }
}
listener {
address = \"0.0.0.0:5514\"
protocol = \"udp\"
labels = { component = \"loki.source.syslog\", protocol = \"udp\"}
}
forward_to = [loki.write.endpoint.receiver]
}"
else
syslog_config=""
fi
export LOKI_CONFIG="
loki.relabel \"journal\" {
forward_to = []
rule {
source_labels = [\"__journal__systemd_unit\"]
target_label = \"unit\"
}
rule {
source_labels = [\"__journal__hostname\"]
target_label = \"nodename\"
}
rule {
source_labels = [\"__journal_syslog_identifier\"]
target_label = \"syslog_identifier\"
}
rule {
source_labels = [\"__journal_container_name\"]
target_label = \"container_name\"
}
rule {
action = \"drop\"
source_labels = [\"syslog_identifier\"]
regex = \"audit\"
}
}
loki.source.journal \"read\" {
forward_to = [loki.write.endpoint.receiver]
relabel_rules = loki.relabel.journal.rules
labels = $labels
path = \"/var/log/journal\"
}
$syslog_config
loki.write \"endpoint\" {
endpoint {
url = \"$(bashio::config "loki_endpoint")\"
}
}"
fi
envsubst < $CONFIG_TEMPLATE > $CONFIG_FILE
fi