当前位置: 首页 > 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.dtcms.com/a/320478.html

相关文章:

  • 大语言模型提示工程与应用
  • 破界之光:DeepSeek 如何重构AI搜索引擎的文明坐标 || #AIcoding·八月创作之星挑战赛#
  • 分治-快排-215.数组中的第k个最大元素-力扣(LeetCode)
  • GPT OSS 双模型上线,百度百舸全面支持快速部署
  • MCP实现:.Net实现MCP服务端 + Ollama ,MCP服务端工具调用
  • 构建响应式在线客服聊天系统的前端实践 Vue3+ElementUI + CSS3
  • RAG实现:.Net + Ollama + Qdrant 实现文本向量化,实现简单RAG
  • 【优选算法】BFS解决拓扑排序
  • Spring Boot + ECharts 极简整合指南:从零实现动态数据可视化大屏
  • Java Stream API 详解与实战案例
  • 广东省省考备考(第七十天8.8)——言语、判断推理(强化训练)
  • Ubuntu 22.04 安装 Docker 完整指南
  • flutter TLS protocol versions: (TLSv1.2, TLSv1.3)
  • flutter开发(一)flutter命令行工具
  • Flutter开发 多孩子布局组件
  • 在 Debian 系统上安装 Redis服务
  • VRTE 的应用程序部署到Ubuntu上 报错:bash: ./rb_exmd: No such file or directory
  • Korg 电子琴 2025 高级电子琴手机版:专业的音乐创作与演奏工具
  • 平板探测器的主要技术指标
  • 电脑IP地址是“169.254.x.x”而无法上网的原因
  • ubuntu 22.04 使用yaml文件 修改静态ip
  • 论文阅读:AAAI 2024 ExpeL: LLM Agents Are Experiential Learners
  • openpnp - 不连接设备,只大概测试一下摄像头是否好使
  • Zabbix网络发现:自动化监控新利器
  • TestComplete 如何打造高效UI测试体系?
  • Vue开发的3D全景图效果
  • linux信号量和日志
  • 算法训练之字符串
  • 复杂水文环境下识别精度↑86%!陌讯多模态融合算法在水位监测中的优化实践
  • 四、redis入门之集群部署