No introduction found. Create it?
Install with:
helm repo add alloy oci://ghcr.io/home-operations/charts-mirror/alloy
helm install alloy alloy/alloy -f values.yamlSee examples from other people.
| Name | Repo | Stars | Version | Timestamp |
|---|---|---|---|---|
| alloy | szinn/k8s-homelab | 304 | 1.10.1 | 2 months ago |
See the most popular values for this chart:
| Key | Types |
|---|---|
| boolean | |
| boolean | |
alloy.configMap.key (11) config.alloy | string |
alloy.configMap.name (11) alloy-configmap | string |
alloy.configMap.content (5) // ---------------------------------------------------------------------
// Loki write endpoint (same target promtail used)
// ---------------------------------------------------------------------
loki.write "default" {
endpoint {
url = "http://loki-gateway:80/loki/api/v1/push"
}
}
// ---------------------------------------------------------------------
// Kubernetes pod logs (replaces promtail chart's implicit default job)
// Reproduces promtail's default relabeling so the `app`, `namespace`,
// `pod`, `container`, `node_name`, `instance`, `component` and `job`
// labels match exactly — the loki alert rules depend on `app`.
// ---------------------------------------------------------------------
discovery.kubernetes "pods" {
role = "pod"
}
discovery.relabel "pod_logs" {
targets = discovery.kubernetes.pods.targets
rule {
source_labels = ["__meta_kubernetes_pod_controller_name"]
regex = "([0-9a-z-.]+?)(-[0-9a-f]{8,10})?"
target_label = "__tmp_controller_name"
}
rule {
source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_name", "__meta_kubernetes_pod_label_app", "__tmp_controller_name", "__meta_kubernetes_pod_name"]
regex = "^;*([^;]+)(;.*)?quot;
target_label = "app"
}
rule {
source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_instance", "__meta_kubernetes_pod_label_instance"]
regex = "^;*([^;]+)(;.*)?quot;
target_label = "instance"
}
rule {
source_labels = ["__meta_kubernetes_pod_label_app_kubernetes_io_component", "__meta_kubernetes_pod_label_component"]
regex = "^;*([^;]+)(;.*)?quot;
target_label = "component"
}
rule {
source_labels = ["__meta_kubernetes_pod_node_name"]
target_label = "node_name"
}
rule {
source_labels = ["__meta_kubernetes_namespace"]
target_label = "namespace"
}
rule {
source_labels = ["namespace", "app"]
separator = "/"
target_label = "job"
}
rule {
source_labels = ["__meta_kubernetes_pod_name"]
target_label = "pod"
}
rule {
source_labels = ["__meta_kubernetes_pod_container_name"]
target_label = "container"
}
// Standard pods: /var/log/pods/<uid>/<container>/*.log
rule {
source_labels = ["__meta_kubernetes_pod_uid", "__meta_kubernetes_pod_container_name"]
separator = "/"
replacement = "/var/log/pods/*$1/*.log"
target_label = "__path__"
}
// Static (control-plane) pods keyed by config hash annotation.
rule {
source_labels = ["__meta_kubernetes_pod_annotationpresent_kubernetes_io_config_hash", "__meta_kubernetes_pod_annotation_kubernetes_io_config_hash", "__meta_kubernetes_pod_container_name"]
separator = "/"
regex = "true/(.*)"
replacement = "/var/log/pods/*$1/*.log"
target_label = "__path__"
}
}
local.file_match "pod_logs" {
path_targets = discovery.relabel.pod_logs.output
}
loki.source.file "pod_logs" {
targets = local.file_match.pod_logs.targets
forward_to = [loki.process.pod_logs.receiver]
}
loki.process "pod_logs" {
stage.cri {}
forward_to = [loki.write.default.receiver]
}
// ---------------------------------------------------------------------
// systemd journal (hostPath /var/log/journal, max_age 12h)
// ---------------------------------------------------------------------
loki.relabel "journal" {
forward_to = []
rule {
source_labels = ["__journal__systemd_unit"]
target_label = "unit"
}
rule {
source_labels = ["__journal__hostname"]
target_label = "hostname"
}
}
loki.source.journal "journal" {
path = "/var/log/journal"
max_age = "12h"
labels = { job = "systemd-journal" }
relabel_rules = loki.relabel.journal.rules
forward_to = [loki.write.default.receiver]
}
// ---------------------------------------------------------------------
// syslog TCP receiver (external devices push to ${SVC_SYSLOG_ADDR}:1514)
// ---------------------------------------------------------------------
loki.relabel "syslog" {
forward_to = []
rule {
source_labels = ["__syslog_message_hostname"]
target_label = "host"
}
rule {
source_labels = ["__syslog_message_app_name"]
target_label = "app"
}
}
loki.source.syslog "syslog" {
listener {
address = "0.0.0.0:1514"
protocol = "tcp"
label_structured_data = true
labels = { job = "syslog" }
}
relabel_rules = loki.relabel.syslog.rules
forward_to = [loki.write.default.receiver]
} | string |
alloy.extraPorts[].name (5) tcp-syslog | string |
| number | |
| string | |
| number | |
alloy.mounts.extra[].mountPath (4) /etc/alloy/geoip | string |
| string | |
| boolean | |
| boolean | |
| string | |
| string | |
| string | |
| string | |
| boolean | |
| number | |
| number | |
| string | |
| number | |
| string | |
| string | |
controller.type (4) daemonset | string |
controller.volumes.extra[].hostPath.path (4) /var/lib/alloy/geoip | string |
controller.volumes.extra[].hostPath.type (2) DirectoryOrCreate | string |
| string | |
controller.tolerations[].effect (3) NoSchedule | string |
controller.tolerations[].operator (3) Exists | string |
controller.tolerations[].key (2) node-role.kubernetes.io/master | string |
| string | |
controller.initContainers[].args[] (2) - if [ -f /etc/alloy/geoip/GeoLite2-City.mmdb ]; then
echo "GeoIP database already exists, skipping download"
exit 0
fi
exec /usr/bin/geoipupdate
| string |
controller.initContainers[].command[] (2) - /bin/sh | string |
controller.initContainers[].env[].name (2) GEOIPUPDATE_ACCOUNT_ID | string |
controller.initContainers[].env[].value (2) GeoLite2-City GeoLite2-ASN | string |
controller.initContainers[].env[].valueFrom.secretKeyRef.key (2) GEOIPUPDATE_ACCOUNT_ID | string |
controller.initContainers[].env[].valueFrom.secretKeyRef.name (2) alloy-maxmind-secret | string |
controller.initContainers[].image (2) ghcr.io/maxmind/geoipupdate:v7 | string |
controller.initContainers[].name (2) geoip-download | string |
controller.initContainers[].volumeMounts[].mountPath (2) /etc/alloy/geoip | string |
| string | |
crds.create (2) false | boolean |
| boolean | |
| string | |
| string | |
extraObjects[].kind (1) Service | string |
| string | |
extraObjects[].metadata.name (1) alloy-syslog | string |
extraObjects[].metadata.namespace (1) monitoring | string |
| string | |
extraObjects[].spec.ports[].name (1) syslog-tcp | string |
| number | |
| string | |
| number | |
| string | |
extraObjects[].spec.type (1) LoadBalancer | string |