告别Nginx原始日志!VictoriaLogs+Grafana构建企业级应用日志分析平台实战

发布于:2025-07-26 ⋅ 阅读:(19) ⋅ 点赞:(0)

[ 知识是人生的灯塔,只有不断学习,才能照亮前行的道路 ]

📢 大家好,我是 WeiyiGeek,一名深耕安全运维开发(SecOpsDev)领域的技术从业者,致力于探索DevOps与安全的融合(DevSecOps),自动化运维工具开发与实践,企业网络安全防护,欢迎各位道友一起学习交流、一起进步 🚀,若此文对你有帮助,一定记得倒点个关注⭐与小红星❤️,收藏学习不迷路 😋 。

0x00 前言简述

描述:做为一个合格的运维工程师,在面对企业安全运维管理中,日志审计是一项非常重要的工作。日志审计可以帮助我们了解系统的运行状态、发现潜在的安全问题以及进行故障排查等。在企业中,最常见的日志类型包括应用服务器日志和网络安全设备日志,那么如何高效的采集、存储和可视化这些日志数据,成为了运维工程师需要解决的重要问题,这也作者前面所遇的问题,进过作者一番调研与实践,最终选型 VictoriaLogs 开源日志聚合系统,它可以帮助我们高效地采集、存储和可视化查询日志数据,并通过 Grafana 将日志数据可视化展示出来。

通过前面的几篇文章,读者应该可以了解到 VictoriaLogs 是一个开源的、高性能的日志聚合系统,作者介绍了 VictoriaLogs 的一些基本概念,包括 VictoriaLogs 的架构、二进制及容器部署方式、多种日志上传实践,访问权限安全配置等。在文中读者可能看到作者针对 VictoriaLogs 在企业中应用/网络日志审计落地实践的场景,给出了详细的方案设计。

从本章开始,作者将通过 Nginx/OpenResty 产出应用日志 + Promtail 实现日志采集 + VictoriaLogs 日志存储 + Granafa 日志可视化查询,以及 网络安全设备审计 + Rsyslogs 日志格式化转发 + VictoriaLogs 日志存储 + Granafa 日志可视化查询 等一系列的落地方案设计为基础,分为两篇实践文章,为读者如何在企业中落地应用日志审计和网络设备、安全设备日志审计采集到可视化查看的整套流程,以完善企业中最薄弱的安全防护环节。

先来看看作者熬了两宿爆肝制作,最终实现的 Nginx 网站请求分析即用户画像面板效果图:

  • 站点访问统计

weiyigeek.top-官网站点访问统计图

  • 站点访问趋势及接口耗时

weiyigeek.top-官网站点访问趋势及接口耗时图

  • 站点用户访问画像信息

weiyigeek.top-官网站点用户访问画像信息图

授人以鱼不如授人以渔,各位运友们可参照作者的方案设计,在自己的项目中根据实际情况调整落地,例如,不在仅仅采集 NGINX 应用日志,而是采集 Apache、Tomcat、SpringBoot 等多种应用服务器的日志,又如,不再仅仅采集网络设备、安全审计审计日志,而是 Windows、Linux 等多种操作系统的审计日志等,大家可充分发挥想象、实践能力,也欢迎大家在知识星球中分享自己的方案设计,一起交流学习。

下面,作者将实践 Nginx 日志采集到 VictoriaLogs 日志聚合平台,并在 Granafa 可视化展示,让我们一起在运维知识的海洋中,乘风破浪,扬帆远航。

温馨提示: 系列文章将在【全栈工程师修炼指南】知识星球首发(PS:目前加入知识星球只需要69元,数量有限),并同步到公众号【可观测性监控实践】专栏中,后续会持续更新,希望运友们多多支持。

温馨提示: 相关部署脚本以及配置文件,和Grafana模板已经打包上传到私有网盘了,请在文末获取下载链接。

原文地址:https://articles.zsxq.com/id_j6izsi7t5iq8.html

0x01 Nginx 日志采集存储到可视化展示实践

1.方案设计

描述:作者将以 Nginx 应用日志采集到 VictoriaLogs 日志聚合平台,并在 Granafa 可视化展示方案设计为基础,并结合实际运维场景,给出详细的方案设计。方案设计主要包括以下几个部分:

  • 基础环境搭建配置:包括 Nginx/OpenResty 服务器、Promtail 采集工具、VictoriaLogs 日志聚合平台和 Grafana 可视化展示平台的安装与配置。

  • 应用日志格式化:Nginx 日志默认格式为不满足我们所需字段,例如真实IP地址,以及后端的响应时间,另外为了方便采集需要对 Nginx 日志进行格式化为JSON处理。

  • 应用日志采集上传:使用 Promtail 动态采集 Nginx 日志,解析其中的JSON字符串信息中真实IP地址,采用 GeoIP2 库进行地理位置经纬度解析,自定义设置 _stream、_msg 字段最后上传到 VictoriaLogs 日志聚合平台。

  • 应用日志可视化设计:在 Grafana 可视化平台中,通过在线安装 VictoriaLogs 插件对接,查询应用日志,创建可视化面板,实现 Nginx 日志的可视化展示。

weiyigeek.top-Nginx 日志采集存储到可视化展示设计方案图
weiyigeek.top-Nginx 日志采集存储到可视化展示设计方案图

本文,主要使用到的组件有:Nginx、OpenResty、Promtail、VictoriaLogs、vmauth、Grafana,其介绍如下:

  • Nginx:高性能的反向代理服务器、HTTP服务器和邮件代理服务器,采用事件驱动架构和非阻塞I/O模型,支持高并发连接处理(单机可处理成千上万连接)

  • OpenResty:基于Nginx和LuaJIT的高性能Web平台,扩展了Nginx的动态脚本能力,支持Lua编程嵌入Nginx各处理阶段

  • Promtail: Grafana Loki生态的日志收集代理,负责发现、标记并推送日志到Loki存储,支持多种日志格式,包括 JSON、syslog 等。

  • VictoriaLogs:轻量级日志存储与查询系统,定位为ElasticSearch的替代方案,专注于高性能和低资源占用

  • vmauth:VictoriaMetrics以及VictoriaLogs的认证代理组件,提供基础的安全接入功能(用户名/密码验证)

  • Grafana:一个开源的监控和可视化工具,它可以与多种数据源集成,包括 VictoriaMetrics,VictoriaLogs,Promethues、InfluxDB 等。通过它我们可以创建仪表板(Dashboard),实时监控和可视化各种指标数据,乃至日志数据,从而更好地理解和分析系统的运行状态。

2.环境准备

描述:作者企业生产环境为 K8S ,作者已在集群中完美落地,但是考虑到部分运友当前可能没有 K8S 环境,因此作者将以 Docker 容器环境为基础进行快速部署实践所需相关服务,部分运友可根据自己的实际情况修改容器部署的资源清单,并自行选择在 K8S 集群中部署, 作者也将会在文末附上相关部署配置文件网盘下载地址,供各位运友参考。

# 操作系统
openEuler 24.03 (LTS-SP1)

# Docker 版本
26.1.3
# Docker-Compose 版本
v2.35.1

# Nginx、OpenRestry、ingress-nginx 版本
nginx:1.28-alpine3.21
openresty/openresty:1.27.1.2-2-alpine
ingress-nginx 1.12.1

# VictoriaLogs 版本
victoriametrics/victoria-logs:v1.24.0-victorialogs

# VMauth 版本
victoriametrics/vmauth:v1.118.0

# Promtail 版本
grafana/promtail:main-c907640

# Grafana 版本
Grafana v12.0.2 (5bda17e7c1)

温馨提示:本文实践所用的 openEuler 24.03 国产操作系统是由华为开源,它完美兼容 CentOS 7、8 所以其可作为国产化迁移的不二之选,作者此处已将其安全加固,并已配置好 Docker 环境,满足等保三级主机安全要求,防止在实践过程中遇到其他依赖问题,建议各位运维先进行安全加固,再进行实践,可参考【【网安等保】OpenEuler 24.03系统主机安全加固及配置优化实践指南】文章。

Docker 环境安装

描述:在 openEuler 24.03 国产操作系统,使用阿里云镜像源安装 Docker 环境,并配置加速镜像源,最后安装最新的 Docker-Compose 容器编排工具。

# 1: 安装必要的一些系统工具
sudo yum install -y yum-utils

# 2: 添加软件源信息
yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
# 使用 CentOS 8 库中的源
echo"8" > /etc/yum/vars/centos_version
sed -i 's/$releasever/$centos_version/g'  /etc/yum.repos.d/docker-ce.repo

# 3: 安装 Docker 最新版本
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin -y

# 或者安装指定版本的Docker-CE:
# 1: 查找Docker-CE的版本:
# yum list docker-ce.x86_64 --showduplicates | sort -r
# 2: 安装指定版本的Docker-CE: (VERSION例如上面的17.03.0.ce.1-1.el7.centos)
# sudo yum -y install docker-ce-[VERSION]

# 4.配置 Docker 守护进程
mkdir -vp /etc/docker/
sudo tee /etc/docker/daemon.json <<-'EOF'
{
"data-root":"/var/lib/docker",
"registry-mirrors": ["https://hub.wygk.eu.org"],
"exec-opts": ["native.cgroupdriver=systemd"],
"storage-driver": "overlay2",
"log-driver": "json-file",
"log-level": "warn",
"log-opts": {
"max-size": "100m",
"max-file": "10"
},
"live-restore": true,
"dns": [ "223.5.5.5"],
"insecure-registries": [ "harbor.weiyigeek.top"]
}
EOF

# 5.重载守护进程
sudo systemctl daemon-reload

# 6.启动 Docker 服务(自启动)
sudo systemctl enable docker --now

# 7.验证安装是否成功
$ docker info
Client: Docker Engine - Community
 Version:    26.1.3
 Context:    default
....

$ sudo docker run --rm hello-world
  latest: Pulling from library/hello-world
  e6590344b1a5: Pull complete
  Digest: sha256:e0b569a5163a5e6be84e210a2587e7d447e08f87a0e90798363fa44a0464a1e8
  Status: Downloaded newer image for hello-world:latest
# 运行 Hello World 镜像后,输出下面的信息表示安装成功:
  Hello from Docker!
  This message shows that your installation appears to be working correctly.

# 9.安装验证 Docker-Compose
DOCKER_COMPOSE_VERSION=$(curl -s "https://api.github.com/repos/docker/compose/tags" | grep '"name":' | grep -v 'beta\|alpha\|rc' | head -n 1 | awk -F '"''{print $4}')
curl -L https://gh.wygk.eu.org/https://github.com/docker/compose/releases/download/${DOCKER_COMPOSE_VERSION:="v2.35.1"}/docker-compose-"$(uname -s)"-"$(uname -m)" -o /usr/local/bin/docker-compose
chmod +x /usr/local/bin/docker-compose
ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose

$ docker-compose version
  Docker Compose version v2.35.1

Docker 部署 Nginx、OpenRestry

描述:在 Docker 容器中部署 Nginx、OpenRestry,并配置 HTTPS 证书,在小节末尾还提及到 ingerss-nginx 日志格式化,代码示例操作如下:

步骤 01.创建持久化存储目录、证书、日志目录以及 Nginx、OpenRestry 配置文件。

温馨提示:作者使用 log_format 将默认日志格式为 JSON,并将记录真实IP字段的头 $http_x_forwarded_for 传递给ip键,并按天数切割日志,便于后续 Promtail 日志采集解析


网站公告

今日签到

点亮在社区的每一天
去签到