1.Container-Logs verschicken
Option A: ein Vector-Container für den ganzen Host
Die docker_logs-Source von Vector liest jeden Container mit (auch neue) und kennt Containername, Image und Labels.
sources:
docker:
type: docker_logs
exclude_containers: [vector]
transforms:
enrich:
type: remap
inputs: [docker]
source: |
.service = .container_name
.image = .image
.host = get_hostname!()
.env = "prod"
parsed, err = parse_json(string!(.message))
if err == null { . = merge(., parsed) }
del(.label); del(.source_type); del(.stream)
sinks:
uptimeeye:
type: elasticsearch
inputs: [enrich]
endpoints: ["https://logs.uptimeeye.com/v1/ingest/elasticsearch/"]
api_version: v8
compression: gzip
healthcheck: { enabled: false }
request:
headers:
Authorization: "Bearer ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX"
query:
_msg_field: message
_time_field: timestamp
_stream_fields: service,host,envchmod 600). Vector löst ${ENV}-Platzhalter in seiner Config nicht auf; willst du den Key in einer eigenen Datei halten, nimm sein Secret-Backend wie auf den Seiten zu Kubernetes und Vector gezeigt.Neben deinen Services starten
services:
vector:
image: timberio/vector:0.49.0-alpine
restart: unless-stopped
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- ./vector.yaml:/etc/vector/vector.yaml:ro
- vector-data:/var/lib/vector
volumes:
vector-data:Option B: der Loki-Logging-Driver pro Container
Der Loki-Driver von Docker spricht das Loki-Push-Protokoll, das UptimeEye annimmt. Der Key kommt als Basic-Auth-Passwort in die URL; Labels werden zu Feldern.
docker plugin install grafana/loki-docker-driver:latest --alias loki --grant-all-permissions
docker run -d --name api \
--log-driver=loki \
--log-opt loki-url="https://key:ue_ingest_XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX@logs.uptimeeye.com/v1/ingest/loki/api/v1/push" \
--log-opt loki-external-labels="service=api,env=prod" \
--log-opt loki-batch-wait=2s \
my-org/api:latestlogging: { driver: loki, options: { … } }.2.Suchen
Jeder Container erscheint als service:=<container name>. Ergänz level:error oder klick im Panel „Felder“ einen Wert an, um einzugrenzen.
Felder, die du bekommst
Diese Felder erscheinen im Panel „Felder“ und funktionieren in jedem Filter:
service(Containername)imagehostenv- JSON-Felder, die deine Anwendung loggt
Tipps
- Option A läuft weiter, wenn Container neu starten oder neu erstellt werden; der Loki-Driver erfasst nur Container, die du mit ihm gestartet hast.
- Bei Anwendungen, die Klartext loggen, bleibt die ganze Zeile die Nachricht; Zeitstempel und Level findest du trotzdem über den Zeitraum und die Wortsuche.
FAQ
Kann ich mit Vector nur einige Container verschicken?
include_containers / exclude_containers an der docker_logs-Source oder mit include_labels, um nach Compose-Label auszuwählen.Wo bekomme ich den Ingest-Key?
ue_ingest_ und wird nur einmal angezeigt. Management-Keys (ue_live_) lehnt der Ingest-Endpoint ab.Wie sehe ich, ob Logs ankommen?
service:=<your service>. Neue Zeilen sind nach etwa einer Sekunde durchsuchbar; Live-Tail zeigt sie mit etwa 6 s Verzögerung.