Docker部署Loki+Grafana+Vector实现全服务器日志监控(含N8N/SSH/Fail2ban监控)
一、前言
很多自建服务玩家、服务器运维新手,都想把 Docker容器日志(N8N/Airflow等)、服务器SSH登录日志、Fail2ban攻防拦截日志 统一收集,在Grafana图形界面集中查看、检索、回溯。
本文全程小白向,无复杂命令、无专业术语绕弯,手把手教你用 Docker Compose 一键部署 Loki + Grafana + Vector,实现:
- 所有Docker容器日志自动采集
- 服务器SSH登录/失败日志收集
- Fail2ban拦截黑客暴力破解日志收集
- Grafana可视化检索、按关键词过滤、按时间回溯
二、架构原理
简单理解:Vector收日志 → Loki存日志 → Grafana看日志
三、前置准备
四、目录准备
新建专属部署目录,后续所有配置都放这里:
mkdir -p ~/apps/log-monitor
cd ~/apps/log-monitor
五、编写docker-compose.yml
在 log-monitor 目录创建 docker-compose.yml,复制以下内容直接使用:
version: "3.8"
services:
loki:
image: grafana/loki:2.9.0
container_name: loki
restart: always
ports:
– "3100:3100"
volumes:
– ./loki–data:/loki
command: –config.file=/etc/loki/local–config.yaml
grafana:
image: grafana/grafana:latest
container_name: grafana
restart: always
ports:
– "3000:3000"
volumes:
– ./grafana–data:/var/lib/grafana
environment:
– GF_SECURITY_ADMIN_PASSWORD=adminXXXXX
depends_on:
– loki
vector:
image: timberio/vector:0.55.0–alpine
container_name: vector
restart: always
volumes:
– ./vector.toml:/etc/vector/vector.toml
– /var/run/docker.sock:/var/run/docker.sock
– /var/log:/host/var/log:ro
说明:
- 挂载 docker.sock:让Vector能监听所有Docker容器日志
- 挂载 /var/log:ro:只读挂载系统日志目录,用来采集auth.log、fail2ban.log
- Grafana默认账号:admin 密码:adminxxx,可自行修改
六、编写Vector核心配置 vector.toml
在同目录创建 vector.toml,最终稳定可用版,无语法报错、无429限流:
data_dir = "/var/lib/vector"
# 1. 采集所有Docker容器日志
[sources.docker_logs]
type = "docker_logs"
docker_host = "unix:///var/run/docker.sock"
# 2. 采集服务器SSH登录日志 auth.log
[sources.host_auth]
type = "file"
include = ["/host/var/log/auth.log"]
read_from = "end"
# 3. 采集Fail2ban拦截日志
[sources.fail2ban]
type = "file"
include = ["/host/var/log/fail2ban.log"]
read_from = "end"
# 输出所有日志到Loki
[sinks.loki]
type = "loki"
inputs = ["docker_logs", "host_auth", "fail2ban"]
endpoint = "http://loki:3100"
encoding.codec = "json"
# 固定标签,保证Loki正常接收
labels.job = "vector"
配置关键点小白解释:
- read_from = "end":只采集后续新产生日志,不加载海量历史日志,避免Loki被限流报429错误
- 三个数据源:容器日志、SSH日志、Fail2ban日志,统一发给Loki
七、启动整套服务
在 log-monitor 目录执行:
docker compose up -d
等待1分钟,三个容器全部后台启动完成。
查看Vector运行日志,确认无报错:
docker compose logs -f vector
出现 Healthcheck passed 即为正常启动。
八、配置Grafana对接Loki
九、日常日志查询用法(小白直接复制)
进入Grafana左侧 Explore,数据源选Loki,直接用下面语句查询:
1. 查看所有采集的日志
{job="vector"}
2. 只看N8N容器日志
{container="n8n"}
3. 只看SSH登录、登录失败日志
{job="vector"} |= "sshd"
4. 只看Fail2ban黑客拦截、封禁IP日志
{job="vector"} |= "fail2ban"
十、常见问题避坑(全程踩坑总结)
问题1:Grafana打开日志一片空白,明明Vector已采集
原因:Grafana默认只显示前1000行,Docker容器日志太多,把系统日志挤没了
解决:
问题2:Vector报 429 Too Many Requests
原因:一次性读取海量历史日志,Loki限流拒绝
解决:配置里统一用 read_from = "end" 只收集新日志,不加载历史
问题3:看不到Fail2ban/SSH日志,Vector能读到文件但不显示
原因1:日志文件权限限制,Vector无读取权限
执行命令开放权限:
sudo chmod 644 /var/log/auth.log /var/log/fail2ban.log
原因2:混用动态标签模板,Loki解析失败
解决:直接用本文极简配置,不搞复杂标签模板,只用固定 job="vector"
问题4:Vector配置文件报TOML语法错误
原因:缩进、冒号格式不对
解决:直接复制本文完整 vector.toml,不要手动改格式
网硕互联帮助中心



评论前必须登录!
注册