update
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
services:
|
||||
<< service_name >>:
|
||||
image: docker.io/grafana/alloy:v1.16.0
|
||||
restart: << restart_policy >>
|
||||
<%- if container_hostname %>
|
||||
hostname: << container_hostname >>
|
||||
<%- endif %>
|
||||
<%- if traefik_enabled %>
|
||||
networks:
|
||||
<< traefik_network >>:
|
||||
<%- endif %>
|
||||
command:
|
||||
- run
|
||||
- /etc/alloy/alloy.d/
|
||||
- --server.http.listen-addr=127.0.0.1:12345
|
||||
<%- if not traefik_enabled %>
|
||||
ports:
|
||||
- "<< ports_webui >>:12345"
|
||||
<%- endif %>
|
||||
volumes:
|
||||
- << service_name >>_data:/alloy/data
|
||||
- ./config:/etc/alloy/alloy.d/:ro
|
||||
<%- if logs_enabled or metrics_enabled %>
|
||||
- /:/rootfs:ro
|
||||
- /sys:/sys:ro
|
||||
<%- endif %>
|
||||
<%- if logs_enabled and logs_system %>
|
||||
- /run:/run:ro
|
||||
- /var/log:/var/log:ro
|
||||
<%- endif %>
|
||||
<%- if (logs_enabled and logs_docker) or (metrics_enabled and metrics_docker) %>
|
||||
- /var/lib/docker/:/var/lib/docker/:ro
|
||||
<%- endif %>
|
||||
<%- if metrics_enabled and metrics_system %>
|
||||
- /run/udev/data:/run/udev/data:ro
|
||||
<%- endif %>
|
||||
<%- if traefik_enabled %>
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.docker.network=<< traefik_network >>
|
||||
- traefik.http.services.<< service_name >>-web.loadBalancer.server.port=12345
|
||||
- traefik.http.routers.<< service_name >>-http.service=<< service_name >>-web
|
||||
- traefik.http.routers.<< service_name >>-http.rule=Host(`<< traefik_host >>.<< traefik_domain >>`)
|
||||
- traefik.http.routers.<< service_name >>-http.entrypoints=<< traefik_entrypoint >>
|
||||
<%- if traefik_tls_enabled %>
|
||||
- traefik.http.routers.<< service_name >>-https.service=<< service_name >>-web
|
||||
- traefik.http.routers.<< service_name >>-https.rule=Host(`<< traefik_host >>.<< traefik_domain >>`)
|
||||
- traefik.http.routers.<< service_name >>-https.entrypoints=<< traefik_tls_entrypoint >>
|
||||
- traefik.http.routers.<< service_name >>-https.tls=true
|
||||
- traefik.http.routers.<< service_name >>-https.tls.certresolver=<< traefik_tls_certresolver >>
|
||||
<%- endif %>
|
||||
<%- endif %>
|
||||
|
||||
<%- if traefik_enabled %>
|
||||
networks:
|
||||
<< traefik_network >>:
|
||||
external: true
|
||||
<%- endif %>
|
||||
|
||||
volumes:
|
||||
<< service_name >>_data:
|
||||
driver: local
|
||||
@@ -0,0 +1,4 @@
|
||||
logging {
|
||||
level = "info"
|
||||
format = "logfmt"
|
||||
}
|
||||
@@ -0,0 +1,23 @@
|
||||
<%- if logs_enabled and logs_docker %>
|
||||
discovery.docker "dockerlogs" {
|
||||
host = "unix:///var/run/docker.sock"
|
||||
}
|
||||
|
||||
discovery.relabel "dockerlogs" {
|
||||
targets = []
|
||||
|
||||
rule {
|
||||
source_labels = ["__meta_docker_container_name"]
|
||||
regex = "/(.*)"
|
||||
target_label = "service_name"
|
||||
}
|
||||
}
|
||||
|
||||
loki.source.docker "default" {
|
||||
host = "unix:///var/run/docker.sock"
|
||||
targets = discovery.docker.dockerlogs.targets
|
||||
labels = {"platform" = "docker"}
|
||||
relabel_rules = discovery.relabel.dockerlogs.rules
|
||||
forward_to = [loki.write.default.receiver]
|
||||
}
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,44 @@
|
||||
<%- if logs_enabled and logs_system %>
|
||||
loki.source.journal "journal" {
|
||||
max_age = "24h0m0s"
|
||||
relabel_rules = discovery.relabel.journal.rules
|
||||
forward_to = [loki.write.default.receiver]
|
||||
labels = {component = string.format("%s-journal", constants.hostname)}
|
||||
// NOTE: This is important to fix https://github.com/grafana/alloy/issues/924
|
||||
path = "/var/log/journal"
|
||||
}
|
||||
|
||||
local.file_match "system" {
|
||||
path_targets = [{
|
||||
__address__ = "localhost",
|
||||
__path__ = "/var/log/{syslog,messages,*.log}",
|
||||
instance = constants.hostname,
|
||||
job = string.format("%s-logs", constants.hostname),
|
||||
}]
|
||||
}
|
||||
|
||||
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"
|
||||
}
|
||||
}
|
||||
|
||||
loki.source.file "system" {
|
||||
targets = local.file_match.system.targets
|
||||
forward_to = [loki.write.default.receiver]
|
||||
}
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,23 @@
|
||||
<%- if metrics_enabled and metrics_docker %>
|
||||
prometheus.exporter.cadvisor "dockermetrics" {
|
||||
docker_host = "unix:///var/run/docker.sock"
|
||||
storage_duration = "5m"
|
||||
}
|
||||
|
||||
/* Relabel component to drop container_spec metrics that often have NaN values */
|
||||
prometheus.relabel "docker_filter" {
|
||||
forward_to = [prometheus.remote_write.default.receiver]
|
||||
|
||||
rule {
|
||||
source_labels = ["__name__"]
|
||||
regex = "container_spec_(cpu_period|cpu_quota|cpu_shares|memory_limit_bytes|memory_swap_limit_bytes|memory_reservation_limit_bytes)"
|
||||
action = "drop"
|
||||
}
|
||||
}
|
||||
|
||||
prometheus.scrape "dockermetrics" {
|
||||
targets = prometheus.exporter.cadvisor.dockermetrics.targets
|
||||
forward_to = [prometheus.relabel.docker_filter.receiver]
|
||||
scrape_interval = "10s"
|
||||
}
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,36 @@
|
||||
<%- if metrics_enabled and metrics_system %>
|
||||
discovery.relabel "metrics" {
|
||||
targets = prometheus.exporter.unix.metrics.targets
|
||||
rule {
|
||||
target_label = "instance"
|
||||
replacement = constants.hostname
|
||||
}
|
||||
rule {
|
||||
target_label = "job"
|
||||
replacement = string.format("%s-metrics", constants.hostname)
|
||||
}
|
||||
}
|
||||
|
||||
prometheus.exporter.unix "metrics" {
|
||||
disable_collectors = ["ipvs", "btrfs", "infiniband", "xfs", "zfs"]
|
||||
enable_collectors = ["meminfo"]
|
||||
rootfs_path = "/rootfs"
|
||||
filesystem {
|
||||
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)$"
|
||||
mount_points_exclude = "^/(dev|proc|run/credentials/.+|sys|var/lib/docker/.+)($|/)"
|
||||
mount_timeout = "5s"
|
||||
}
|
||||
netclass {
|
||||
ignored_devices = "^(veth.*|cali.*|[a-f0-9]{15})$"
|
||||
}
|
||||
netdev {
|
||||
device_exclude = "^(veth.*|cali.*|[a-f0-9]{15})$"
|
||||
}
|
||||
}
|
||||
|
||||
prometheus.scrape "metrics" {
|
||||
scrape_interval = "15s"
|
||||
targets = discovery.relabel.metrics.output
|
||||
forward_to = [prometheus.remote_write.default.receiver]
|
||||
}
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,20 @@
|
||||
<%- if logs_enabled %>
|
||||
loki.write "default" {
|
||||
endpoint {
|
||||
url = "<< logs_loki_url >>"
|
||||
|
||||
// Batching configuration to reduce request volume and prevent rate limiting
|
||||
batch_wait = "5s" // Wait up to 5 seconds before sending
|
||||
batch_size = "1MiB" // Send when batch reaches 1MB (1048576 bytes)
|
||||
}
|
||||
external_labels = {}
|
||||
}
|
||||
<%- endif %>
|
||||
|
||||
<%- if metrics_enabled %>
|
||||
prometheus.remote_write "default" {
|
||||
endpoint {
|
||||
url = "<< metrics_prometheus_url >>"
|
||||
}
|
||||
}
|
||||
<%- endif %>
|
||||
@@ -0,0 +1,239 @@
|
||||
{
|
||||
"slug": "alloy",
|
||||
"kind": "compose",
|
||||
"metadata": {
|
||||
"name": "Grafana Alloy",
|
||||
"description": "OpenTelemetry collector by Grafana that collects, processes, and exports metrics and logs to various backends like Prometheus and Loki.",
|
||||
"tags": [
|
||||
"traefik"
|
||||
],
|
||||
"icon": {
|
||||
"provider": "selfhst",
|
||||
"id": "grafana-alloy"
|
||||
},
|
||||
"draft": false,
|
||||
"version": {
|
||||
"name": "v1.16.0",
|
||||
"source_dep_name": "docker.io/grafana/alloy",
|
||||
"source_dep_version": "v1.16.0"
|
||||
}
|
||||
},
|
||||
"variables": [
|
||||
{
|
||||
"title": "General",
|
||||
"name": "general",
|
||||
"items": [
|
||||
{
|
||||
"name": "service_name",
|
||||
"type": "str",
|
||||
"title": "Service Name",
|
||||
"required": false,
|
||||
"default": "alloy",
|
||||
"config": {
|
||||
"placeholder": "alloy"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "container_hostname",
|
||||
"type": "str",
|
||||
"title": "Hostname",
|
||||
"required": false
|
||||
},
|
||||
{
|
||||
"name": "restart_policy",
|
||||
"type": "enum",
|
||||
"title": "Container restart policy",
|
||||
"required": true,
|
||||
"default": "unless-stopped",
|
||||
"config": {
|
||||
"options": [
|
||||
"unless-stopped",
|
||||
"always",
|
||||
"on-failure",
|
||||
"no"
|
||||
]
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Log Collection",
|
||||
"toggle": "logs_enabled",
|
||||
"name": "logs",
|
||||
"items": [
|
||||
{
|
||||
"name": "logs_docker",
|
||||
"type": "bool",
|
||||
"title": "Docker Logs",
|
||||
"required": false,
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "logs_enabled",
|
||||
"type": "bool",
|
||||
"title": "Logs",
|
||||
"required": false,
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "logs_loki_url",
|
||||
"type": "str",
|
||||
"title": "Loki URL",
|
||||
"required": true,
|
||||
"default": "http://loki:3100/loki/api/v1/push",
|
||||
"description": "Loki endpoint URL for sending logs",
|
||||
"config": {
|
||||
"placeholder": "http://loki:3100/loki/api/v1/push"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "logs_system",
|
||||
"type": "bool",
|
||||
"title": "System Logs",
|
||||
"required": false,
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Metrics Collection",
|
||||
"toggle": "metrics_enabled",
|
||||
"name": "metrics",
|
||||
"items": [
|
||||
{
|
||||
"name": "metrics_docker",
|
||||
"type": "bool",
|
||||
"title": "Docker Metrics",
|
||||
"required": false,
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "metrics_enabled",
|
||||
"type": "bool",
|
||||
"title": "Metrics",
|
||||
"required": false,
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "metrics_prometheus_url",
|
||||
"type": "str",
|
||||
"title": "Prometheus URL",
|
||||
"required": true,
|
||||
"default": "http://prometheus:9090/api/v1/write",
|
||||
"config": {
|
||||
"placeholder": "http://prometheus:9090/api/v1/write"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "metrics_system",
|
||||
"type": "bool",
|
||||
"title": "System Metrics",
|
||||
"required": false,
|
||||
"default": true
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Ports",
|
||||
"name": "ports",
|
||||
"items": [
|
||||
{
|
||||
"name": "ports_webui",
|
||||
"type": "int",
|
||||
"title": "Web UI Port",
|
||||
"required": false,
|
||||
"default": 12345,
|
||||
"description": "Port for Alloy web UI",
|
||||
"config": {
|
||||
"placeholder": "12345"
|
||||
}
|
||||
}
|
||||
]
|
||||
},
|
||||
{
|
||||
"title": "Traefik",
|
||||
"name": "traefik",
|
||||
"toggle": "traefik_enabled",
|
||||
"items": [
|
||||
{
|
||||
"name": "traefik_enabled",
|
||||
"type": "bool",
|
||||
"title": "Traefik",
|
||||
"required": false,
|
||||
"default": false
|
||||
},
|
||||
{
|
||||
"name": "traefik_host",
|
||||
"type": "str",
|
||||
"title": "Host",
|
||||
"required": true,
|
||||
"config": {
|
||||
"placeholder": "alloy"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "traefik_domain",
|
||||
"type": "str",
|
||||
"title": "Domain",
|
||||
"required": true,
|
||||
"config": {
|
||||
"placeholder": "home.arpa"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "traefik_entrypoint",
|
||||
"type": "str",
|
||||
"title": "Entrypoint",
|
||||
"required": true,
|
||||
"default": "web",
|
||||
"config": {
|
||||
"placeholder": "web"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "traefik_network",
|
||||
"type": "str",
|
||||
"title": "Traefik network name",
|
||||
"required": true,
|
||||
"default": "traefik",
|
||||
"config": {
|
||||
"placeholder": "traefik"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "traefik_tls_enabled",
|
||||
"type": "bool",
|
||||
"title": "TLS",
|
||||
"required": false,
|
||||
"default": true
|
||||
},
|
||||
{
|
||||
"name": "traefik_tls_entrypoint",
|
||||
"type": "str",
|
||||
"title": "TLS Entrypoint",
|
||||
"required": true,
|
||||
"default": "websecure",
|
||||
"config": {
|
||||
"placeholder": "websecure"
|
||||
},
|
||||
"needs": [
|
||||
"traefik_tls_enabled=true"
|
||||
]
|
||||
},
|
||||
{
|
||||
"name": "traefik_tls_certresolver",
|
||||
"type": "str",
|
||||
"title": "Cert Resolver",
|
||||
"required": true,
|
||||
"default": "cloudflare",
|
||||
"config": {
|
||||
"placeholder": "cloudflare"
|
||||
},
|
||||
"needs": [
|
||||
"traefik_tls_enabled=true"
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
}
|
||||
Reference in New Issue
Block a user