From 8c36c014407163815dad5cb871350d1d965fc3fa Mon Sep 17 00:00:00 2001 From: Savosin Denis Date: Mon, 10 Nov 2025 18:24:03 +0700 Subject: [PATCH] replace agent with alloy some fixes --- .env.example | 16 ++++---- agent/agent.yaml | 49 ----------------------- alloy/alloy.conf | 99 ++++++++++++++++++++++++++++++++++++++++++++++ docker-compose.yml | 27 +++++++------ readme.md | 8 ++-- tempo/tempo.yml | 6 ++- 6 files changed, 129 insertions(+), 76 deletions(-) delete mode 100644 agent/agent.yaml create mode 100644 alloy/alloy.conf diff --git a/.env.example b/.env.example index 82615ed..c83e4ec 100644 --- a/.env.example +++ b/.env.example @@ -1,23 +1,21 @@ COMPOSE_PROFILES=grafana -GRAFANA_VERSION=11.1.3 +GRAFANA_VERSION=11.6.2 GRAFANA_HOST=grafana.docker.localhost -LOKI_STACK_VERSION=3.1.1 +LOKI_STACK_VERSION=3.5.1 LOKI_HOST=loki.docker.localhost LOKI_PROMTAIL_HOST=promtail.docker.localhost -AGENT_VERSION=v0.39.0 -AGENT_LOKI_URL=loki:3100 -AGENT_TEMPO_URL=tempo:4317 +ALLOY_VERSION=v1.11.3 -TEMPO_VERSION=2.3.1 +TEMPO_VERSION=2.9.0 TEMPO_CONFIG_FILE=/etc/tempo/tempo.yml TEMPO_SERVER_LOG_LEVEL=info -TEMPO_STORAGE_PATH=/opt/tempo +TEMPO_STORAGE_PATH=/var/tempo TEMPO_PROMETHEUS_URL=prometheus:9090 -PROMETHEUS_VERSION=v2.43.0 -PROMETHEUS_NODE_EXPORTER_VERSION=v1.5.0 +PROMETHEUS_VERSION=v3.4.1 +PROMETHEUS_NODE_EXPORTER_VERSION=v1.9.1 PROMETHEUS_HOST=prometheus.docker.localhost PROMETHEUS_RETENTION_TIME=10d diff --git a/agent/agent.yaml b/agent/agent.yaml deleted file mode 100644 index 22f32ed..0000000 --- a/agent/agent.yaml +++ /dev/null @@ -1,49 +0,0 @@ -logs: - configs: - - name: local - clients: - - url: "http://${AGENT_LOKI_URL}/loki/api/v1/push" - scrape_configs: - - docker_sd_configs: - - host: unix:///var/run/docker.sock - refresh_interval: 10s - job_name: docker - pipeline_stages: - - drop: - drop_counter_reason: reject_old_samples - older_than: 30m - - static_labels: - job: docker - relabel_configs: - - regex: /(.*) - source_labels: [__meta_docker_container_name] - target_label: container_name - - source_labels: [__meta_docker_container_id] - target_label: container_id - - source_labels: [__meta_docker_container_log_stream] - target_label: stream - - source_labels: [__meta_docker_container_label_com_docker_compose_project] - target_label: compose_project - - source_labels: [__meta_docker_container_label_org_label_schema_vcs_ref] - target_label: vcs_ref - - source_labels: [__meta_docker_container_label_org_label_schema_version] - target_label: image_version - positions_directory: /opt/positions - -traces: - configs: - - name: tempo - remote_write: - - endpoint: "http://${AGENT_TEMPO_URL}" - insecure: true - receivers: - otlp: - protocols: - http: - grpc: - automatic_logging: - backend: "logs_instance" - logs_instance_name: "local" - roots: true -server: - log_level: info diff --git a/alloy/alloy.conf b/alloy/alloy.conf new file mode 100644 index 0000000..9e329d9 --- /dev/null +++ b/alloy/alloy.conf @@ -0,0 +1,99 @@ +discovery.docker "logs_local_docker" { + host = "unix:///var/run/docker.sock" + refresh_interval = "10s" +} + +loki.process "logs_local_docker" { + forward_to = [loki.write.logs_local.receiver] + + stage.drop { + drop_counter_reason = "reject_old_samples" + older_than = "30m0s" + } + + stage.static_labels { + values = { + job = "docker", + } + } +} + +discovery.relabel "logs_local_docker" { + targets = [] + + rule { + source_labels = ["__meta_docker_container_name"] + regex = "/(.*)" + target_label = "container_name" + } + + rule { + source_labels = ["__meta_docker_container_id"] + target_label = "container_id" + } + + rule { + source_labels = ["__meta_docker_container_log_stream"] + target_label = "stream" + } + + rule { + source_labels = ["__meta_docker_container_label_com_docker_compose_project"] + target_label = "compose_project" + } + + rule { + source_labels = ["__meta_docker_container_label_org_label_schema_vcs_ref"] + target_label = "vcs_ref" + } + + rule { + source_labels = ["__meta_docker_container_label_org_label_schema_version"] + target_label = "image_version" + } +} + +loki.source.docker "logs_local_docker" { + host = "unix:///var/run/docker.sock" + targets = discovery.docker.logs_local_docker.targets + forward_to = [loki.process.logs_local_docker.receiver] + relabel_rules = discovery.relabel.logs_local_docker.rules + refresh_interval = "10s" +} + +loki.write "logs_local" { + endpoint { + url = "http://loki:3100/loki/api/v1/push" + } + external_labels = {} +} + +otelcol.receiver.otlp "default" { + grpc { + endpoint = "0.0.0.0:4317" + include_metadata = true + } + + http { + endpoint = "0.0.0.0:4318" + include_metadata = true + } + + output { + traces = [otelcol.exporter.otlphttp.tempo_http.input] + } +} + +otelcol.exporter.otlphttp "tempo_http" { + retry_on_failure { + max_elapsed_time = "1m0s" + } + + client { + endpoint = "http://tempo:4318" + tls { + insecure = true + insecure_skip_verify = true + } + } +} diff --git a/docker-compose.yml b/docker-compose.yml index 5c49d06..c2b4eff 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -28,21 +28,23 @@ services: profiles: - grafana - agent: - image: grafana/agent:${AGENT_VERSION} - environment: - WAL_DATA_DIRECTORY: /opt/agent/data - CONFIG_FILE_PATH: /etc/agent/agent.yaml - AGENT_LOKI_URL: "${AGENT_LOKI_URL}" - AGENT_TEMPO_URL: "${AGENT_TEMPO_URL}" + alloy: + image: grafana/alloy:${ALLOY_VERSION} volumes: - - ./agent:/etc/agent/ + - ./alloy/alloy.conf:/etc/alloy/config.alloy + - alloy-data:/var/lib/alloy/data - /var/run/docker.sock:/var/run/docker.sock:ro command: - - "-config.file=/etc/agent/agent.yaml" - - "-config.expand-env" + - run + - /etc/alloy/config.alloy + - --storage.path=/var/lib/alloy/data + - --server.http.listen-addr=0.0.0.0:12345 + expose: + - 12345 + - 4317 # otlp grpc + - 4318 # otlp http profiles: - - agent + - alloy tempo: image: grafana/tempo:${TEMPO_VERSION} @@ -60,7 +62,7 @@ services: TEMPO_PROMETHEUS_URL: ${TEMPO_PROMETHEUS_URL} volumes: - ./tempo:/etc/tempo - - tempo-local-storage:${TEMPO_STORAGE_PATH:-/opt/tempo} + - tempo-local-storage:${TEMPO_STORAGE_PATH:-/var/tempo} profiles: - tempo @@ -105,3 +107,4 @@ volumes: grafana-storage: tempo-local-storage: prometheus-data: + alloy-data: diff --git a/readme.md b/readme.md index 086ba88..4ec0138 100644 --- a/readme.md +++ b/readme.md @@ -6,9 +6,9 @@ 1. Скопировать [.env.example](/.env.example) в `.env` -#### With grafana agent +#### With grafana alloy -1. Добавить в `COMPOSE_PROFILES` значение `agent` в файле [.env](/.env) +1. Добавить в `COMPOSE_PROFILES` значение `alloy` в файле [.env](/.env) 2. Запустить docker-compose-стэк: ```shell docker compose up -d @@ -18,7 +18,7 @@ #### With docker plugin 1. Установить [лог-драйвер grafana loki для docker](https://grafana.com/docs/loki/latest/clients/docker-driver/) - + ```shell docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions ``` @@ -48,7 +48,7 @@ <<: *loki-log-config ``` -3. Убрать профиль `agent` из значения `COMPOSE_PROFILES` в файле [.env](/.env) +3. Убрать профиль `alloy` из значения `COMPOSE_PROFILES` в файле [.env](/.env) 4. Запустить стек `grafana` + `loki` ```shell diff --git a/tempo/tempo.yml b/tempo/tempo.yml index 86de4e4..b9bb143 100644 --- a/tempo/tempo.yml +++ b/tempo/tempo.yml @@ -18,11 +18,13 @@ query_frontend: # # for a production deployment you should only enable the receivers you need! distributor: - receivers: + receivers: otlp: protocols: http: + endpoint: "0.0.0.0:4318" grpc: + endpoint: "0.0.0.0:4317" ingester: max_block_duration: 5m # cut the headblock when this much time passes. this is being set for demo purposes and should probably be left alone normally @@ -53,4 +55,4 @@ storage: overrides: defaults: metrics_generator: - processors: [service-graphs, span-metrics] # enables metrics generator \ No newline at end of file + processors: [service-graphs, span-metrics] # enables metrics generator