Rocky Linux部署ELK+Redis构建高可用日志收集系统

发布时间:2026/9/12 4:39:47

Rocky Linux部署ELK+Redis构建高可用日志收集系统 1. 项目概述构建高可用日志收集系统的必要性在分布式系统架构中日志管理一直是个令人头疼的问题。当你有10台服务器时还能勉强用grep命令应付但当服务器数量达到100台甚至更多时传统的日志管理方式就完全失效了。这就是为什么我们需要构建一个集中式的日志收集系统。我最近在Rocky Linux 9.6上部署了一套基于ELK 7.17.10和Redis 5.0.7的Nginx日志收集系统这套方案有几个显著优势首先Redis作为缓冲队列能有效应对日志量突增的情况其次ELK Stack提供了从收集、存储到可视化的一站式解决方案最后Rocky Linux作为RHEL的替代品提供了企业级的稳定性和安全性。这套系统特别适合以下场景日访问量在百万级以上的Web应用需要实时监控业务异常的中大型系统有合规性审计需求的金融、政务类应用2. 环境准备与组件选型2.1 操作系统选择为什么是Rocky Linux 9.6Rocky Linux作为RHEL的完美替代品继承了其所有优点长期支持周期通常5年以上稳定的软件包版本完善的安全更新机制在Rocky Linux 9.6上我们需要先做一些基础配置# 更新系统 sudo dnf update -y # 安装常用工具 sudo dnf install -y vim wget curl net-tools epel-release # 设置时区以上海为例 sudo timedatectl set-timezone Asia/Shanghai注意生产环境建议禁用SELinux或设置为permissive模式避免权限问题影响日志收集。2.2 组件版本选择考量选择ELK 7.17.10和Redis 5.0.7有几个关键原因版本稳定性这两个版本都是各自系列中的长期支持(LTS)版本经过了充分的生产环境验证兼容性ELK 7.x与Redis 5.x有良好的兼容记录功能平衡新版本往往追求新特性而牺牲稳定性这两个版本在功能和稳定性上达到了最佳平衡3. Redis部署与配置3.1 Redis安装与基础配置Redis在这里扮演着日志缓冲区的角色防止Elasticsearch因突发的日志洪峰而崩溃。# 安装Redis sudo dnf install -y redis # 修改关键配置 sudo vim /etc/redis.conf需要修改的配置项bind 0.0.0.0 protected-mode no maxmemory 2gb maxmemory-policy allkeys-lru appendonly yes启动Redis并设置开机自启sudo systemctl enable --now redis3.2 Redis高可用方案生产环境建议至少部署3个节点的Redis哨兵集群主从复制配置# 在从节点上配置 replicaof master-ip 6379哨兵配置示例sentinel monitor mymaster master-ip 6379 2 sentinel down-after-milliseconds mymaster 5000 sentinel failover-timeout mymaster 60000经验分享Redis内存大小应根据日志量设置一般建议保留最近2小时的日志量。我们曾遇到过因内存不足导致日志丢失的情况后来通过监控Redis内存使用率解决了这个问题。4. ELK Stack部署4.1 Elasticsearch集群部署Elasticsearch是整个系统的存储核心建议至少3个节点组成集群。# 导入Elasticsearch GPG key sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch # 添加ELK仓库 sudo tee /etc/yum.repos.d/elasticsearch.repo EOF [elasticsearch-7.x] nameElasticsearch repository for 7.x packages baseurlhttps://artifacts.elastic.co/packages/7.x/yum gpgcheck1 gpgkeyhttps://artifacts.elastic.co/GPG-KEY-elasticsearch enabled1 autorefresh1 typerpm-md EOF # 安装Elasticsearch sudo dnf install -y elasticsearch-7.17.10关键配置/etc/elasticsearch/elasticsearch.ymlcluster.name: nginx-logs node.name: ${HOSTNAME} network.host: 0.0.0.0 discovery.seed_hosts: [node1, node2, node3] cluster.initial_master_nodes: [node1, node2, node3]4.2 Logstash配置详解Logstash负责从Redis读取日志处理后写入Elasticsearch。sudo dnf install -y logstash-7.17.10配置文件示例/etc/logstash/conf.d/nginx.confinput { redis { host redis-host port 6379 data_type list key nginx_logs threads 4 } } filter { grok { match { message %{COMBINEDAPACHELOG} } } date { match [ timestamp, dd/MMM/yyyy:HH:mm:ss Z ] } geoip { source clientip } } output { elasticsearch { hosts [http://es-node1:9200, http://es-node2:9200] index nginx-logs-%{YYYY.MM.dd} } }4.3 Kibana安装与可视化Kibana提供了强大的日志分析界面。sudo dnf install -y kibana-7.17.10关键配置/etc/kibana/kibana.ymlserver.host: 0.0.0.0 elasticsearch.hosts: [http://es-node1:9200]5. Nginx日志收集配置5.1 Nginx日志格式优化标准的Nginx日志格式信息有限建议自定义log_format json_combined escapejson { time_local:$time_local, remote_addr:$remote_addr, remote_user:$remote_user, request:$request, status: $status, body_bytes_sent:$body_bytes_sent, http_referer:$http_referer, http_user_agent:$http_user_agent, http_x_forwarded_for:$http_x_forwarded_for, request_time:$request_time, upstream_response_time:$upstream_response_time }; access_log /var/log/nginx/access.log json_combined;5.2 Filebeat配置Filebeat轻量高效适合收集Nginx日志并发送到Redis。sudo dnf install -y filebeat-7.17.10配置文件示例/etc/filebeat/filebeat.ymlfilebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.log json.keys_under_root: true json.add_error_key: true output.redis: hosts: [redis-host:6379] key: nginx_logs db: 0 timeout: 56. 系统调优与问题排查6.1 Elasticsearch性能优化JVM堆内存设置/etc/elasticsearch/jvm.options-Xms4g -Xmx4g索引模板优化{ index_patterns: [nginx-logs-*], settings: { number_of_shards: 3, number_of_replicas: 1, refresh_interval: 30s } }6.2 常见问题与解决方案问题1Redis队列积压严重检查Logstash处理速度top -p $(pgrep -f logstash)增加Logstash worker线程数考虑升级Redis配置或分流部分日志问题2Elasticsearch集群变黄/红检查磁盘空间df -h检查节点状态curl -XGET http://localhost:9200/_cluster/health?pretty调整索引生命周期策略删除旧索引问题3Nginx日志解析失败测试Grok模式bin/logstash -e filter { grok { match { message %{COMBINEDAPACHELOG} } } }使用自定义模式匹配特殊日志格式7. 安全加固措施7.1 网络层防护使用防火墙限制访问sudo firewall-cmd --permanent --add-rich-rulerule familyipv4 source address192.168.1.0/24 port port9200 protocoltcp accept sudo firewall-cmd --reload为Elasticsearch和Kibana配置基础认证# Elasticsearch配置 xpack.security.enabled: true # Kibana配置 elasticsearch.username: kibana_system elasticsearch.password: your_strong_password7.2 日志数据保护敏感信息过滤在Logstash中filter { mutate { gsub [ message, (password)[^]*, \1[REDACTED], message, (credit_card)\d, \1[REDACTED] ] } }定期备份Elasticsearch数据# 创建快照仓库 PUT _snapshot/my_backup { type: fs, settings: { location: /mnt/backups/elasticsearch } } # 手动创建快照 PUT _snapshot/my_backup/snapshot_18. 监控与告警配置8.1 ELK组件健康监控Elasticsearch监控# 集群健康状态 curl -XGET http://localhost:9200/_cluster/health?pretty # 节点状态 curl -XGET http://localhost:9200/_nodes/stats?pretty使用Prometheus Grafana监控ELK通过Elasticsearch Exporter暴露指标配置关键指标的告警规则如JVM使用率、索引延迟等8.2 业务日志告警在Kibana中设置异常日志告警进入Management Stack Management Rules and Connectors创建基于日志条件的告警规则例如5分钟内出现10次500错误关键接口响应时间超过2秒配置告警动作邮件、Slack、Webhook等9. 高级功能扩展9.1 多租户日志隔离对于SaaS类应用可能需要隔离不同客户的日志在Nginx日志中添加租户ID字段使用Elasticsearch索引别名和权限控制PUT /nginx-logs-tenant1 { aliases: { tenant1-logs: {} } }通过Kibana Spaces实现可视化隔离9.2 机器学习异常检测利用Elasticsearch的机器学习功能自动发现异常模式在Kibana中进入Machine Learning Anomaly Detection创建针对以下指标的作业异常状态码频率请求量突增/突降地理位置异常访问10. 实际运维经验分享经过半年多的生产环境运行我们总结了以下宝贵经验容量规划每100万条日志大约需要1GB存储空间含副本。我们最初低估了存储需求导致频繁扩容。索引策略按天创建索引虽然管理方便但对于小规模应用可能造成索引过多。我们后来调整为按周创建索引显著提升了查询性能。冷热数据分离使用ILM策略将30天前的索引自动迁移到冷节点节省了60%的硬件成本。日志采样对于超高流量应用日PV1亿我们实现了采样率可调的日志收集在保证关键信息不丢失的前提下减少了70%的存储压力。测试环境隔离最初开发人员在测试环境执行大量查询影响了生产集群性能后来我们严格分离了测试和生产集群。
延伸阅读

更多相关文章

2026/9/12 4:34:47

Java StringEntry接口设计与实现最佳实践

1. StringEntry接口的设计背景与核心诉求在软件开发中,数据结构的抽象与封装一直是提升代码复用性和可维护性的关键手段。StringEntry这个接口概念的提出,本质上是为了解决字符串类型数据在多种场景下的统一操作问题。我最近在重构一个历史遗留系统时&am…

2026/9/12 4:34:47

海光DCU接入K8s:整卡、共享与vDCU调度实战解析

如果你接过“把一批海光 DCU 节点接进 Kubernetes,再让上层 AI 平台和 DeepSeek 推理服务跑起来”这种需求,第一反应大概率是:装个驱动、部署个 Device Plugin 不就行了?真动手之后才会发现,整卡、共享、vDCU 虚拟化是…

2026/9/12 4:34:47

2026年软考高级系统分析师论文备考指南与高分技巧

1. 2026年软考高级系统分析师论文备考指南作为国内IT领域最具含金量的职业资格认证之一,软考高级系统分析师(以下简称"系分")的论文环节一直是考生面临的"拦路虎"。不同于选择题和案例分析,论文写作不仅需要扎…

2026/9/12 4:49:49

Actual 怎么创建并启用一个实验功能?

Actual 怎么创建并启用一个实验功能? 【免费下载链接】actual A local-first personal finance app 项目地址: https://gitcode.com/GitHub_Trending/ac/actual Actual 的很多新功能在正式稳定发布前,会以 experimental features(实验…

2026/9/12 4:49:49

Matlab实现楼宇微网虚拟储能优化调度方案

1. 项目背景与核心价值楼宇微网作为分布式能源系统的重要载体,正在经历从传统供能模式向智能化调度的转型。这个项目聚焦于需求侧虚拟储能系统的创新应用,通过Matlab实现了一套完整的优化调度方案。我在实际微网项目中多次验证过,这种融合虚拟…

2026/9/12 4:49:49

程序员如何驯化AI编程助手提升开发效率

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 4:49:49

王石商业案例:企业家精神与公司治理的现代启示

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/9/12 4:44:49

MindSpore多模态大模型产线落地实战:昇腾边缘实时推理优化

1. 项目概述:这不是又一个“跑通Demo”的故事,而是把多模态大模型真正焊进产线的实操笔记我做AI工程落地快八年了,从最早用TensorFlow 1.x搭CV pipeline,到后来在华为昇腾集群上跑通第一个千亿参数大模型推理服务,踩过…

2026/9/12 2:05:33

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/12 3:55:12

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/12 0:04:17

MATLAB仿生优化框架:长鼻浣熊算法多策略融合实现

简介:本资源是一份面向智能优化算法研究者与MATLAB初学者的仿生智能算法实践代码包,聚焦于长鼻浣熊优化算法(COA)的多策略改进与性能验证。针对传统COA易陷局部最优、收敛精度不足等问题,作者融合Circle映射初始化提升…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 JavaWeb 的校园一卡通管理系统的设计与实现 基于 JavaWeb 的校园卡业务管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/12 0:04:17

【JAVA毕设源码分享】基于 Java 的图书馆借阅管理平台的搭建与实现 基于 Java 的图书馆综合管理系统(程序+文档+代码讲解+一条龙定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
咨询二维码