Docker部署Loki+Grafana+Vector实现全服务器日志监控(含N8N/SSH/Fail2ban监控)

Docker部署Loki+Grafana+Vector实现全服务器日志监控(含N8N/SSH/Fail2ban监控)

一、前言

很多自建服务玩家、服务器运维新手,都想把 Docker容器日志(N8N/Airflow等)、服务器SSH登录日志、Fail2ban攻防拦截日志 统一收集,在Grafana图形界面集中查看、检索、回溯。

本文全程小白向,无复杂命令、无专业术语绕弯,手把手教你用 Docker Compose 一键部署 Loki + Grafana + Vector,实现:

  • 所有Docker容器日志自动采集
  • 服务器SSH登录/失败日志收集
  • Fail2ban拦截黑客暴力破解日志收集
  • Grafana可视化检索、按关键词过滤、按时间回溯

二、架构原理

  1. Vector:日志采集搬运工,负责抓取容器日志、系统日志,转发给Loki
  2. Loki:日志存储仓库,专门存放所有日志,不占大量磁盘
  3. Grafana:可视化面板,用来查询、看日志、做监控面板

简单理解:Vector收日志 → Loki存日志 → Grafana看日志

三、前置准备

  1. 一台Linux云服务器(Ubuntu/Debian均可)
  2. 已安装 dockerdocker-compose
  3. 服务器开放3000(Grafana)、3100(Loki)端口

四、目录准备

新建专属部署目录,后续所有配置都放这里:

bash 复制代码
mkdir -p ~/apps/log-monitor
cd ~/apps/log-monitor

五、编写docker-compose.yml

log-monitor 目录创建 docker-compose.yml,复制以下内容直接使用:

yaml 复制代码
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限流

toml 复制代码
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 目录执行:

bash 复制代码
docker compose up -d

等待1分钟,三个容器全部后台启动完成。

查看Vector运行日志,确认无报错:

bash 复制代码
docker compose logs -f vector

出现 Healthcheck passed 即为正常启动。

八、配置Grafana对接Loki

  1. 浏览器访问:服务器IP:3000
  2. 账号 admin,密码 admin123456
  3. 左侧菜单 → Connections → Data sources
  4. 点击 Add data source → 选择 Loki
  5. URL填写:http://loki:3100
  6. 拉到最下方 → Save & test,显示成功即可

九、日常日志查询用法(小白直接复制)

进入Grafana左侧 Explore,数据源选Loki,直接用下面语句查询:

1. 查看所有采集的日志

logql 复制代码
{job="vector"}

2. 只看N8N容器日志

logql 复制代码
{container="n8n"}

3. 只看SSH登录、登录失败日志

logql 复制代码
{job="vector"} |= "sshd"

4. 只看Fail2ban黑客拦截、封禁IP日志

logql 复制代码
{job="vector"} |= "fail2ban"

十、常见问题避坑(全程踩坑总结)

问题1:Grafana打开日志一片空白,明明Vector已采集

原因:Grafana默认只显示前1000行 ,Docker容器日志太多,把系统日志挤没了

解决:

  1. 右上角Limit默认1000,改成10000
  2. 不用全量查询,直接用 |= "关键词" 过滤

问题2:Vector报 429 Too Many Requests

原因:一次性读取海量历史日志,Loki限流拒绝

解决:配置里统一用 read_from = "end" 只收集新日志,不加载历史

问题3:看不到Fail2ban/SSH日志,Vector能读到文件但不显示

原因1:日志文件权限限制,Vector无读取权限

执行命令开放权限:

bash 复制代码
sudo chmod 644 /var/log/auth.log /var/log/fail2ban.log

原因2:混用动态标签模板,Loki解析失败

解决:直接用本文极简配置,不搞复杂标签模板 ,只用固定 job="vector"

问题4:Vector配置文件报TOML语法错误

原因:缩进、冒号格式不对

解决:直接复制本文完整 vector.toml,不要手动改格式

十一、使用总结

  1. 整套架构一条命令启动,无需复杂安装
  2. 自动全覆盖:Docker容器日志 + SSH安全日志 + Fail2ban攻防日志
  3. 不用登录服务器看日志,浏览器随时随地检索、回溯
  4. 只需复制配置,无需懂日志原理即可落地使用
  5. 避开了429限流、标签解析、行数限制、权限不足等所有坑

相关推荐
learning-striving1 小时前
Ubuntu26.04下载安装教程
运维·服务器·vmware·虚拟机
invicinble1 小时前
关于搭建运维监控系统(Prometheus+Grafana)
运维·grafana·prometheus
人工智能培训2 小时前
工程科研中的AI应用:结构力学分析技巧
人工智能·深度学习·机器学习·docker·容器
Joseph Cooper3 小时前
Linux regmap 子系统实战:在驱动中 dump PMIC 寄存器定位供电问题
linux·运维·服务器
计算机安禾3 小时前
【Linux从入门到精通】第35篇:容器化技术预备——Docker安装与基本概念
linux·运维·docker
子木HAPPY阳VIP3 小时前
信创UOS,Docker 完整操作部署(Dockerfile部署方式)&排错整合
linux·运维·redis·nginx·docker·容器·tomcat
暴力求解3 小时前
Linux---保存信号
linux·运维·服务器·开发语言·操作系统
AI服务老曹4 小时前
架构实战:基于 GB28181 与 RTSP 的异构设备统一接入方案,深度解析 Docker 化 AI 视频管理平台
人工智能·docker·架构
bqq198610264 小时前
Ubuntu vs CentOS
linux·服务器