找回密码
 立即注册
首页 业界区 业界 Vector 日志采集实战:采集夜莺日志推送 VictoriaLogs ...

Vector 日志采集实战:采集夜莺日志推送 VictoriaLogs 完整教程

单于易槐 2026-1-10 04:30:09
导读

VictoriaLogs 是一款高性能、低成本的时序数据库,广泛应用于监控和日志存储场景。Vector 是一个开源的日志和指标收集工具,支持多种数据源和目标。本文将介绍如何使用 Vector 采集夜莺(Nightingale)日志并推送给 VictoriaLogs,实现高效的日志管理和分析。
为了方便演示,所有模块均采用容器化部署。
本文大纲如下(本文兼顾新手,如果你是经验丰富的用户,也可以直接跳到相关章节):

  • 组件(Vector、VictoriaLogs、Nightingale)简介
  • 环境准备
  • 配置并启动 Nightingale
  • 配置并启动 VictoriaLogs
  • 配置并启动 Vector
  • 验证日志采集效果
Vector 简介

Vector 是高性能的可观测数据采集与处理组件,支持多种输入(文件、容器日志、syslog 等)、转换(VRL/Remap)以及多种输出(HTTP、Kafka、Elasticsearch 等)。

本文选择 Vector 作为日志采集器,因为 Vector 是 Rust 编写,相对比较轻量,且性能优异。当然,你也可以选择 Fluent Bit、Filebeat 等其他采集工具,在我的演示场景下无关紧要。
VictoriaLogs 简介

VictoriaMetrics 的指标存储查询能力有目共睹,该公司推出的 VictoriaLogs 则是专门针对日志存储和查询设计,前段时间也推出了集群版本,本文就尝个鲜,用 VictoriaLogs 来存储和查询日志。

Nightingale 简介

Nightingale(夜莺)是一个开源的监控系统,侧重点是做统一的告警引擎以及告警事件的 Pipeline 处理。夜莺可以对接多种数据源,根据用户配置的告警规则进行告警,最新版本也支持了 VictoriaLogs 作为数据源,既可以对 VictoriaLogs 中的日志进行告警。

我们要演示日志采集,自然需要有个源端产生日志,夜莺本身就会产生日志,那就用它来做日志源吧。
环境准备

我是在 Mac 上面启动了一个 Ubuntu 虚拟机,ARM64 架构,安装了 Docker 和 Docker Compose,其他 Linux 发行版也类似。
  1. root@ubuntu:~# uname -aLinux ubuntu 6.17.8-orbstack-00308-g8f9c941121b1 #1 SMP PREEMPT Thu Nov 20 09:34:02 UTC 2025 aarch64 aarch64 aarch64 GNU/Linuxroot@ubuntu:~# docker --versionDocker version 29.1.3, build f52814d
复制代码
配置并启动 Nightingale

Nightingale 提供了 Docker compose,我们直接下载发布包:

  • https://github.com/ccfos/nightingale/releases
这里我采用最新版本 v8.5.0。下载 tar.gz 并解压缩,进入 docker/compose-bridge 目录,里边可以看到 docker-compose.yml 文件。不过先不要启动,为了测试方便,我要修改一下 Nightingale 的配置文件,把日志输出到某个特定目录,不和 stdout 内容混在一起。
1、修改:etc-nightingale/config.toml,修改 [Log] 部分,指定日志文件路径:
  1. [Log]# log write dirDir = "logs"# log level: DEBUG INFO WARNING ERRORLevel = "INFO"# stdout, stderr, fileOutput = "file"# # rotate by timeKeepHours = 4# # rotate by size# RotateNum = 3# # unit: MB# RotateSize = 256
复制代码

  • Output 改为 file,表示把日志输出到文件
  • Dir 改为 logs,表示日志文件存放在 logs 目录,实际是容器里的 /app/logs 目录
  • KeepHours 改为 4,表示日志文件保留 4 小时,测试环境,不想保留太多日志
2、修改 docker-compose.yml,把 nightingale 服务的 volumes 部分,挂载 logs 目录到宿主机:
  1.   nightingale:    image: flashcatcloud/nightingale:latest    container_name: nightingale    hostname: nightingale    restart: always    environment:      GIN_MODE: release      TZ: Asia/Shanghai      WAIT_HOSTS: mysql:3306, redis:6379    volumes:      - ./etc-nightingale:/app/etc      - ./n9elogs:/app/logs    networks:      - nightingale    ports:      - "17000:17000"      - "20090:20090"    depends_on:      - mysql      - redis      - victoriametrics    command:      - /app/n9e
复制代码
这样,容器内的 /app/logs 目录就映射到宿主机的 n9elogs 目录,方便我们后续用 Vector 采集日志。
3、启动 Nightingale:
  1. docker-compose up -d
复制代码
4、验证 Nightingale 是否启动成功:
访问 http://:17000,可以看到 Nightingale 的登录界面,说明启动成功。
默认的用户名和密码是 root / root.2020,登录后建议修改密码。为了让 Nightingale 产生日志,我们做两个配置:
4.1、添加数据源
进入 集成中心-数据源,添加一个数据源,数据源类型使用 Prometheus,名称随意,URL 填写 http://victoriametrics:8428,保存。

http://victoriametrics:8428 是 Nightingale 容器内访问 VictoriaMetrics 的地址,刚才的 docker-compose.yml 里已经定义了 victoriametrics 服务。
4.2、创建一个告警规则
在 告警-规则管理-告警规则 页面,创建一个新的告警规则:

我的告警规则配置如下:

之后,Nightingale 会根据这个规则中的查询语句查询 VictoriaMetrics,产生告警事件。这个过程会产生日志,方便我们后续采集。
4.3、验证日志产出
进入宿主机的 n9elogs 目录,可以看到有日志文件产生:
  1. root@ubuntu:~/qinxiaohui/n9e-v8.5.0/docker/compose-bridge/n9elogs# tail -f INFO.log2026-01-07 09:46:09.013141 INFO eval/eval.go:152 rule_eval:alert-1-1 finished, duration:9.436121ms
复制代码
可以看到这个日志格式分成 4 部分:

  • 时间戳:2026-01-07 09:46:09.013141 没有打印时区信息,Vector 采集的时候需要指定时区
  • 日志级别:INFO
  • 位置:eval/eval.go:152
  • 消息:rule_eval:alert-1-1 finished, duration:9.436121ms
回头我们在 Vector 里配置解析规则的时候,需要使用正则提取这些字段。
配置并启动 VictoriaLogs

VictoriaLogs 也可以用容器直接启动:
  1. docker run --name vmlogs -d -it -p 9428:9428 -v ./victoria-logs-data:/victoria-logs-data \  docker.io/victoriametrics/victoria-logs:v1.43.1 -storageDataPath=victoria-logs-data -retentionPeriod=3d
复制代码
这里我把数据目录挂载到宿主机的 victoria-logs-data 目录,日志保留 3 天。默认监听端口是 9428。启动后,可以访问 http://:9428,看到 VictoriaLogs 的 Web UI 界面:

进入 vmui,之后可以在 vmui 查询日志。
配置并启动 Vector

Vector 也使用容器启动,为了让 Vector 能够访问 Nightingale 产生日志的目录,我们需要把宿主机的 n9elogs 目录挂载到 Vector 容器内。同时准备相关的解析规则。现在宿主机创建 vector-n9e.yaml 配置文件:
  1. data_dir: "/datadir"api:  enabled: true  address: 0.0.0.0:8686sources:  app_logs:    type: "file"    include:      - "/n9elogs/*.log"transforms:  parse_log:    type: "remap"    inputs:      - "app_logs"    source: |      . |= parse_regex!(.message, r'(?P\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d{6}) (?P\w+) (?P[^ ]+) (?P.+)')      .timestamp = parse_timestamp(.timestamp, format: "%Y-%m-%d %H:%M:%S.%6f", timezone: "+08:00") ?? now()sinks:  vlogs:    inputs:      - parse_log    type: elasticsearch    endpoints:      - http://192.168.139.242:9428/insert/elasticsearch/    api_version: v8    compression: gzip    healthcheck:      enabled: false    query:      _msg_field: message      _time_field: timestamp      _stream_fields: host
复制代码

  • sources.app_logs:指定采集 /n9elogs/*.log 目录下的日志文件,之后启动 Vector 的时候,把宿主机的 n9elogs 目录挂载到容器的 /n9elogs 目录
  • transforms.parse_log:使用 VRL 脚本解析日志内容,提取时间戳、日志级别、位置和消息四个字段,并把时间戳做了 parse,指定了时区为 +08:00
  • sinks.vlogs:指定输出到 VictoriaLogs,使用 Elasticsearch 协议,endpoints 填写 VictoriaLogs 的地址。VictoriaLogs 支持 Elasticsearch 协议,可以直接兼容 Vector 的 Elasticsearch 输出。
  • _msg_field、_time_field、_stream_fields:指定消息字段、时间字段和流字段,这些是 VictoriaLogs 识别日志的重要字段。极为关键。
启动 Vector 容器:
  1. docker run \  -d \  -v $PWD/vector-n9e.yaml:/etc/vector/vector.yaml:ro \  -v $PWD/datadir:/datadir \  -v /root/qinxiaohui/n9e-v8.5.0/docker/compose-bridge/n9elogs:/n9elogs \  -p 8686:8686 \  --name vector \  timberio/vector:0.52.0-debian
复制代码
这里把配置文件挂载到容器的 /etc/vector/vector.yaml,数据目录挂载到 /datadir,以及把宿主机的 n9elogs 目录挂载到容器的 /n9elogs 目录。
最终所有容器都启动完成:
  1. root@ubuntu:~/links/vector# docker psCONTAINER ID   IMAGE                                       COMMAND                  CREATED        STATUS        PORTS                                                                                              NAMES13a4d10232cf   victoriametrics/victoria-logs:v1.43.1       "/victoria-logs-prod…"   13 hours ago   Up 13 hours   0.0.0.0:9428->9428/tcp, [::]:9428->9428/tcp                                                        vmlogs4b697ad2de0d   timberio/vector:0.52.0-debian               "/usr/bin/vector"        21 hours ago   Up 21 hours   0.0.0.0:8686->8686/tcp, [::]:8686->8686/tcp                                                        vectorf75999aeda62   flashcatcloud/categraf:latest               "/entrypoint.sh"         23 hours ago   Up 23 hours                                                                                                      categrafccf2ee7e9af9   flashcatcloud/nightingale:latest            "/app/n9e"               23 hours ago   Up 23 hours   0.0.0.0:17000->17000/tcp, [::]:17000->17000/tcp, 0.0.0.0:20090->20090/tcp, [::]:20090->20090/tcp   nightingaleb9ac63d0a71a   redis:6.2                                   "docker-entrypoint.s…"   23 hours ago   Up 23 hours   0.0.0.0:6379->6379/tcp, [::]:6379->6379/tcp                                                        redisde58098082f1   mysql:8                                     "docker-entrypoint.s…"   23 hours ago   Up 23 hours   0.0.0.0:3306->3306/tcp, [::]:3306->3306/tcp, 33060/tcp                                             mysql5a6c10ff23e5   victoriametrics/victoria-metrics:v1.79.12   "/victoria-metrics-p…"   23 hours ago   Up 23 hours   0.0.0.0:8428->8428/tcp, [::]:8428->8428/tcp                                                        victoriametrics
复制代码
如果你遇到异常,可以查看容器的日志。交给 AI 咨询,AI 会帮你分析日志并给出解决方案(有了大模型,我感觉现在自己强的可怕...)。
验证日志采集效果

访问 VictoriaLogs 的 Web UI,进入 vmui,执行查询语句:

大功告成!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

相关推荐

2026-1-24 07:42:42

举报

2026-1-25 08:02:16

举报

5 天前

举报

23 小时前

举报

您需要登录后才可以回帖 登录 | 立即注册