161 lines
5.7 KiB
Bash
Executable File
161 lines
5.7 KiB
Bash
Executable File
#!/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
|