VFG技术架构概述
VFG 构建了一种高效的日志管理平台,结合了 Filebeat、VictoriaLogs 和 Grafana 以实现日志收集、存储、查询、可视化和告警等功能。以下是该架构的详细设计与优势:
- 日志采集与输入:Filebeat
接收Syslog日志:使用Filebeat接收UDP协议(如Syslog)日志,通过Filebeat配置文件进行输入配置。
日志分段:Filebeat在接收到日志后,可以进行分段处理,并将日志数据传输到VictoriaLogs进行存储。 - 日志存储:VictoriaLogs
为什么选择VictoriaLogs:
相比Elasticsearch/Grafana Loki,VictoriaLogs的资源消耗显著低。它能节省数十倍的CPU、内存和存储资源,极大提升硬件资源利用率。
与ELK的优势:VictoriaLogs不仅支持ELK的Web查询、日志压缩存储、Syslog日志接收,还具有良好的性能。
部署:
日志持久化存储:通过Docker运行VictoriaLogs,将日志数据保存在本地目录。
数据保留策略:支持自定义日志保留期,默认可设置为365天。
无认证的HTTP访问:默认端口为9428,用于提供HTTP访问,但需要通过其他软件添加认证。
数据过期时间:数据过期时间是全局设置的,如果需要不同过期时间的日志存储,需部署多个实例。 - 日志可视化与查询:Grafana
Grafana的角色:
可视化:由于VictoriaLogs自带的Web UI较简陋,使用Grafana进行可视化展示。
数据查询与告警:Grafana支持通过LogQL语法对日志进行查询,并能设置告警规则,及时通知异常日志。
数据导出:支持将日志查询结果导出为CSV文件,方便后续处理。 - 技术栈与部署
Docker:所有服务都通过Docker进行部署,使用Docker Compose编排。
VictoriaLogs:通过docker.io/victoriametrics/victoria-logs镜像运行,设置日志数据保留期并持久化存储。
Grafana:通过grafana/grafana-enterprise镜像运行,安装并配置victoriametrics-logs-datasource插件,连接VictoriaLogs作为数据源。
Filebeat:通过docker.elastic.co/beats/filebeat镜像运行,配置Filebeat接收Syslog日志并转发到VictoriaLogs。 - Docker Compose配置
VictoriaLogs服务:
使用victoriametrics/victoria-logs:latest镜像。
配置数据卷挂载、日志保留期、时区等参数。
设置健康检查确保服务的正常运行。
Grafana服务:
使用grafana/grafana-enterprise镜像。
设置默认管理员密码、时区、Grafana的配置文件等。
配置Grafana的健康检查。
Filebeat服务:
使用docker.elastic.co/beats/filebeat:8.17.2镜像。
配置接收Syslog日志的UDP端口,输出到VictoriaLogs。
6. 数据流与测试
数据流:使用Filebeat收集Syslog日志,发送到VictoriaLogs进行存储,Grafana通过配置的VictoriaLogs数据源进行查询和可视化展示。
测试:
通过echo “songxwn.com!” | nc -4u 202.182.109.11 514命令模拟发送Syslog日志。
通过Grafana Web界面访问,使用默认账户admin/Songxwn.com登录,查看和查询日志。
使用Grafana的LogQL语法查询日志,并支持导出查询结果为CSV文件。
7. 告警与可视化
日志告警:在Grafana中设置基于查询结果的告警规则,可以及时发现系统中的异常日志。
仪表盘构建:Grafana支持创建各种可视化仪表盘,帮助团队实时监控日志数据。
Docker Compose 及配置文件说明:VictoriaLogs、Filebeat 和 Grafana 部署
本文将详细说明如何使用 Docker Compose 部署 VictoriaLogs、Filebeat 和 Grafana,构建一个高效的日志管理系统。以下是各个部分的配置和部署步骤。
- 创建项目目录
首先,创建一个工作目录,存放所有相关配置文件。
mkdir /opt/VFG
cd /opt/VFG
- VictoriaLogs 配置
VictoriaLogs 用于存储日志数据。配置文件及相关内容如下:
victoria-logs-data 目录
创建本地目录用于存储 VictoriaLogs 数据。
mkdir victoria-logs-data
VictoriaLogs Docker 配置
使用 victoria-logs 镜像创建容器并指定日志存储目录和数据保留策略。创建 docker-compose.yml 配置文件。
version: "3"
services:
victoria-logs:
image: victoriametrics/victoria-logs:latest
container_name: syslog-victoria-logs
volumes:
- ./victoria-logs-data:/victoria-logs-data
restart: always
command:
- "--retentionPeriod=365d"
environment:
- TZ=Asia/Shanghai
healthcheck:
test: ["CMD", "wget", "-q", "--spider", "http://127.0.0.1:9428/health"]
interval: 1m30s
timeout: 10s
retries: 3
这个配置确保了:
VictoriaLogs 容器使用本地存储目录 victoria-logs-data 进行持久化存储。
日志数据保留365天。
定期健康检查容器是否正常运行。
3. Grafana 配置
Grafana 用于可视化日志数据。以下是 Grafana 配置的步骤:
Grafana 数据存储目录
创建一个本地目录来存储 Grafana 数据:
mkdir grafana-data
Grafana 数据源配置
在 Grafana 中,我们需要配置连接到 VictoriaLogs 的数据源。创建目录和配置文件。
mkdir -p ./provisioning/datasources
vim ./provisioning/datasources/vm.yml
内容如下:
apiVersion: 1
datasources:
- name: VictoriaLogs-songxwn.com
type: victoriametrics-logs-datasource
access: proxy
url: http://syslog-victoria-logs:9428
isDefault: true
Grafana 服务配置
在 docker-compose.yml 中加入 Grafana 服务配置:
grafana:
image: grafana/grafana-enterprise
container_name: syslog-grafana
ports:
- "3000:3000"
environment:
- GF_INSTALL_PLUGINS=victoriametrics-logs-datasource
- GF_SECURITY_ADMIN_PASSWORD=Songxwn.com
- TZ=Asia/Shanghai
volumes:
- ./grafana-data:/var/lib/grafana
- ./provisioning:/etc/grafana/provisioning
restart: always
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:3000/api/health"]
interval: 1m30s
timeout: 10s
retries: 3
GF_INSTALL_PLUGINS:安装 victoriametrics-logs-datasource 插件,以便与 VictoriaLogs 配合使用。
GF_SECURITY_ADMIN_PASSWORD:设置管理员密码。
健康检查:定期检查 Grafana 是否健康。
4. Filebeat 配置
Filebeat 用于收集日志并将其发送到 VictoriaLogs。首先,配置 Filebeat 以接收 Syslog 日志。
Filebeat 配置文件
创建一个 filebeat.docker.yml 配置文件:
filebeat.inputs:
- type: udp
enabled: true
max_message_size: 10KiB
host: "0.0.0.0:514"
fields:
type: udp
output.elasticsearch:
hosts: ["http://127.0.0.1:9428/insert/elasticsearch/"]
parameters:
_msg_field: "message"
_time_field: "@timestamp"
_stream_fields: "host.hostname"
allow_older_versions: true
Filebeat 服务配置
在 docker-compose.yml 中加入 Filebeat 配置:
filebeat:
image: docker.elastic.co/beats/filebeat:8.17.2
container_name: syslog-filebeat
ports:
- "514:514/udp"
volumes:
- ./filebeat.docker.yml:/usr/share/filebeat/filebeat.yml:ro
restart: always
environment:
- TZ=Asia/Shanghai
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:5066"]
interval: 60s
timeout: 10s
retries: 3
Filebeat 将监听 UDP 514 端口,接收 Syslog 日志,并将其传送到 VictoriaLogs。
- 启动 Docker Compose
确保所有配置文件已经完成后,通过以下命令启动服务:
docker compose up -d
这将启动 VictoriaLogs、Grafana 和 Filebeat 服务,并将它们在后台运行。
VictoriaLogs:存储日志数据。
Grafana:可视化日志数据并提供查询功能。
Filebeat:接收 Syslog 日志并转发到 VictoriaLogs。
6. 验证与使用
发送测试日志: 使用以下命令发送测试日志到 UDP 514 端口:
echo "songxwn.com!" | nc -4u 202.182.109.11 514
访问 Grafana: 在浏览器中访问 http://<服务器IP>:3000,使用管理员账号 admin/Songxwn.com 登录。
查询日志: 在 Grafana 中,选择数据源 VictoriaLogs-songxwn.com,使用 LogQL 语法查询日志数据。
导出日志: 在 Grafana 中,您可以导出查询结果为 CSV 文件。
设置告警: 使用 Grafana 设置基于日志内容的告警规则,确保及时处理异常日志。
Docker 国内安装https://mirror.nju.edu.cn/mirrorz-help/docker-ce/?mirror=NJU
sudo mkdir -p /etc/docker
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"registry-mirrors": [
"https://dockerproxy.com",
"https://docker.mirrors.ustc.edu.cn",
"https://docker.nju.edu.cn"
]
}
EOF
sudo systemctl daemon-reload
sudo systemctl restart docker
docker run -d --restart always \
-p 9428:9428 \
-v ./victoria-logs-data:/victoria-logs-data \
--name victoria-logs-syslog-songxwn.com \
docker.io/victoriametrics/victoria-logs:latest \
--retentionPeriod=365d
1、9428/tcp 对外HTTP访问端口
2、数据保留365天
3、victoria-logs-data 为存储目录部署Grafana
docker run -d --name=grafana -p 3000:3000 \
-e GF_INSTALL_PLUGINS=victoriametrics-logs-datasource \
--name Grafana \
grafana/grafana-enterprise