如何从 docker events 获取日志到 Promtail?
我正在使用 Docker 在我的服务器上运行一组容器,我想使用 Promtail 收集和集中它们的日志。具体来说,我想从
docker events
(来自 docker 守护进程的有关容器启动时间等的日志)命令捕获日志并将其发送到 Promtail。
我怎样才能实现这个目标?为了将 docker events 的日志发送到 Promtail,我需要设置哪些步骤和配置?
请注意,我的 Docker 主机在 Windows 计算机上运行,并且我使用的是最新版本的 Promtail。
我的
promtail.yaml
文件:
server:
http_listen_port: 9080
grpc_listen_port: 0
positions:
filename: /tmp/positions.yaml
clients:
- url: http://loki:3100/loki/api/v1/push
scrape_configs:
- job_name: flog_scrape
docker_sd_configs:
- host: unix:///var/run/docker.sock
refresh_interval: 5s
filters:
- name: label
values: ["logging=promtail"]
relabel_configs:
- source_labels: ['__meta_docker_container_name']
regex: '/(.*)'
target_label: 'container'
- source_labels: ['__meta_docker_container_log_stream']
target_label: 'logstream'
- source_labels: ['__meta_docker_container_label_logging_jobname']
target_label: 'job'
任何帮助或建议将不胜感激。谢谢!
将此职位添加到您的
scrape_configs:
- job_name: journal
journal:
json: false
max_age: 12h
path: /var/log/journal
# matches: _syslog_identifier=dockerd
labels:
job: systemd-journal
relabel_configs:
- source_labels:
- __journal__systemd_unit
target_label: systemd_unit
- source_labels:
- __journal__hostname
target_label: hostname
- source_labels:
- __journal_syslog_identifier
target_label: syslog_identifier
- source_labels:
- __journal__transport
target_label: transport
这将收集所有服务的所有日志消息。如果您确实只想收集 docker 服务消息,可以取消注释
matches
行。
我不确定您需要具体更改 Windows 哪些内容,但这在 Ubuntu 22.04 上效果很好。
根据docker文档:https://docs.docker.com/config/daemon/logs/
在 Windows 上,日志位于: Windows (WSL2) (dockerd 日志) - %LOCALAPPDATA%\Docker\log m\dockerd.log
Windows (WSL2)(容器日志)-%LOCALAPPDATA%\Docker\log