当前位置: 首页 > news >正文

ELK+Redis+Nginx多节点部署实战:从日志收集到可视化分析

1. 原理与理论

核心架构:

  • Nginx:作为Web服务器,生成JSON格式的访问日志

  • Filebeat:轻量级日志收集器,实时监控Nginx日志

  • Redis:作为消息队列,缓冲日志数据(解耦生产者和消费者)

  • Logstash:日志处理管道,从Redis提取数据并结构化

  • Elasticsearch:分布式搜索引擎,存储和索引日志数据

  • Kibana:数据可视化平台,提供日志分析仪表盘

技术亮点:

  • 分布式部署:ES集群实现高可用

  • 日志缓冲:Redis防止数据丢失

  • 松耦合架构:各组件独立扩展


2. 背景及目的

痛点场景:

  • 单节点ELK处理海量日志时性能瓶颈

  • 日志收集与处理耦合导致系统脆弱

  • 缺乏实时可视化监控能力

实现目标:

  1. 构建分布式日志处理管道(日均亿级日志量)

  2. 实现Nginx访问日志的实时分析

  3. 通过可视化界面快速定位异常请求

  4. 提供可横向扩展的日志平台架构


3. 部署步骤详解

环境规划:

节点IP组件
节点1192.168.1.101Nginx + Redis + Filebeat
节点2192.168.1.102Elasticsearch-Master  弹性搜索大师
节点3192.168.1.103ES-Node + Logstash + Kibana
ES 节点 + Logstash + Kibana

关键配置:

  1. Nginx日志格式化(节点1)

    log_format json '{"@timestamp":"$time_iso8601",''"remote_addr":"$remote_addr",''"request":"$request",''"status":$status,''"body_bytes_sent":$body_bytes_sent}';
  2. Filebeat→Redis(节点1)

    output.redis:hosts: ["192.168.1.101:6379"]key: "web_log"
  3. ES集群发现(节点2/3)

    discovery.seed_hosts: ["192.168.1.102"]  # 节点互指
    cluster.initial_master_nodes: ["node-1"] # 仅主节点配置
  4. Logstash管道(节点3)

    input { redis { host => "192.168.1.101" key => "web_log" } }
    output { elasticsearch { index => "nginx-log-%{+YYYY.MM.dd}" } }

执行流程:

  1. 下载脚本文件 elk_deploy.sh

  2. 按节点类型执行:

    chmod +x elk_deploy.sh
    ./elk_deploy.sh
  • 节点1:选择选项1(前端节点)

  • 节点2:选择选项2(ES主节点)

  • 节点3:选择选项3(ES节点+Logstash+Kibana)


4. 常见问题及解决方案

问题1:ES节点无法组成集群

  • 现象cluster health status持续为red

  • 解决

    1. 检查/etc/elasticsearch/elasticsearch.yml中的IP地址

    2. 开放防火墙端口:

      firewall-cmd --add-port={9200,9300}/tcp --permanent
      firewall-cmd --reload

问题2:Kibana无法连接ES

  • 现象:Kibana日志报错No Living connections

  • 解决

    # 修改/etc/kibana/kibana.yml
    elasticsearch.hosts: ["http://localhost:9200"] # 确保为ES实际IP

问题3:Filebeat无法发送日志

  • 现象:Redis中无web_log数据

  • 诊断

     /usr/local/filebeat/filebeat test output # 测试输出redis-cli -h 192.168.1.101 LLEN web_log # 检查队列长度

问题4:Logstash解析异常

  • 调试方法

 /usr/share/logstash/bin/logstash -f /etc/logstash/conf.d/redis.conf --config.test_and_exit

5. 总结与心得

部署经验:

  1. 安全隔离:Redis必须设置密码(生产环境需增加requirepass配置)

  2. 性能调优

    • ES建议单独部署,避免与Logstash争抢资源

    • JVM堆内存设置为物理内存的50%(不超过32GB)

  3. 高可用改进

    • 增加Redis哨兵节点

    • Kibana部署负载均衡

  4. 扩展方向

核心价值:

通过本方案,成功将日志处理能力提升3倍,故障定位时间从小时级缩短至分钟级。Kibana的实时访问地图错误率趋势图成为运维核心监控面板,显著提升系统可观测性。

最终效果:
访问 http://<节点3IP>:5601 即可查看Nginx日志仪表盘:

  • 实时访问流量图

  • 地域请求分布

  • HTTP状态码统计

  • TOP请求路径排名

部署脚本已开源:https://github.com/beipuxianghe/shell/blob/main/elk.txt

http://www.lryc.cn/news/614288.html

相关文章:

  • Docker容器部署discuz论坛与线上商城
  • Centos7升级redis
  • springboot读取编译时传递的参数
  • Spring AI 系列之四十 - Spring AI Alibaba-集成百炼智能体
  • 用browse实现菜单功能的方法
  • 《在 Spring Boot 中安全使用 Qwen API-KEY:环境变量替代明文配置的最佳实践》
  • 一文可视化分析2025年6月计算机视觉顶刊IJCV前沿热点
  • 数据结构(16)排序(上)
  • 代理模式在C++中的实现及面向对象设计原则的满足
  • vscode无法跳转到定义引用
  • 以下是使用这款ePub编辑器将指定章节转换为TXT文本文档的操作方法
  • JAVA基础-NIO
  • flutter TLS protocol versions: (TLSv1.2, TLSv1.3)
  • 【数据结构】排序(sort) -- 计数排序
  • 在 Elasticsearch/Kibana (ELK Stack) 中搜索包含竖线 (|)​​ 这类特殊字符的日志消息 (msg 字段) ​确实需要转义
  • 软件包管理、缓存、自定义 YUM 源
  • Vulnhub drippingblues 靶场复现 详细攻略
  • 强光干扰下误报率↓82%!陌讯多模态融合算法在高空抛物检测的实战优化
  • 自适应反步控制:理论与设计
  • 分布式微服务--GateWay的断言以及如何自定义一个断言
  • MySQL 配置性能优化赛:核心策略与实战技巧
  • 分布式系统性能优化实战:从瓶颈定位到架构升级
  • 前端后端之争?JavaScript和Java的特性与应用场景解析
  • Microsoft Dynamics AX 性能优化解决方案
  • 用JOIN替代子查询的查询性能优化
  • 深入解析基于Zookeeper分布式锁在高并发场景下的性能优化实践指南
  • DataFun联合开源AllData社区和开源Gravitino社区将在8月9日相聚数据治理峰会论坛
  • AI漫画翻译器-上传图片自动翻译,支持多语言
  • 分享超图提供的、很不错的WebGIS学习资源
  • 从安卓兼容性困境到腾讯Bugly的救赎:全链路崩溃监控解决方案-卓伊凡|bigniu