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

发布时间:2026/11/13 23:23:24

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/11/13 22:09:43

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

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

2026/11/12 15:28:46

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

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

2026/11/12 13:58:29

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

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

2026/11/13 23:20:57

高压电工证归什么局保姆级教程:从报考到上岗全攻略

高压电工证归什么局保姆级教程:从报考到上岗全攻略 你是不是也和我一样,刚毕业就急着找工作,结果用人单位一听没特种作业证,直接摇头?尤其是像高压电工证这种必须持证上岗的工种, 没有证书连门都进不去…

2026/11/13 23:20:57

常州电工证费用怎么考?郑州报考避坑指南帮你避开培训费陷阱

常州电工证费用怎么考?郑州报考避坑指南帮你避开培训费陷阱 怕考不过白交培训费?你不是一个人。我认识的几个朋友,为了考电工证,有的花了3000多块,结果考试没过,连补考费都没人收;有的报名机构跑路,培训费打了水漂。别慌,这期我来聊聊常州电工证…

2026/11/13 23:20:57

航头考电工证在哪考 上岗必备实操考试避坑指南

航头考电工证在哪考 上岗必备实操考试避坑指南 实操考试心里没底怕挂科?你不是一个人。特别是在航头一带,像我这种刚从学校出来,准备转行做电工的新人,真的对考试流程、考点分布、上岗必备条件一无所知。今天就从我自己的经历出发,讲讲航头考电工证到底…

2026/11/13 23:20:57

电工证和电气监理证过期了不知道怎么复审延期?良心建议来了

电工证和电气监理证过期了不知道怎么复审延期?良心建议来了 证书过期了不知道怎么复审延期?别慌,电工证和电气监理证的复审流程其实并不复杂,关键是要掌握正确的方法。特别是在新乡从事公路工程的从业者,电工证和电气监理证都是必不可少的“通行证”,一…

2026/11/13 23:20:57

古雷港电工证办理流程:学历不高怕报不上名?上岗必备全解析

古雷港电工证办理流程:学历不高怕报不上名?上岗必备全解析 你是不是也经常听到别人说“电工证是上岗必备”,但又担心自己学历不够,根本报不上名?其实这种顾虑完全可以打消。在古雷港,只要符合条件,不管你是初中毕业还是高中毕业,都有机会拿到电工证。…

2026/11/13 23:15:52

盘锦电工证复审流程全解析:全国通用证书怎么考怎么用

盘锦电工证复审流程全解析:全国通用证书怎么考怎么用 实操考试心里没底怕挂科,盘锦电工证复审到底怎么操作?全国通用的证书不是随便能拿到的,但只要掌握流程和技巧,考过其实并不难。尤其是对于漯河应届工程类毕业生,刚入行就面临电工证考试、复审、继续…

2026/11/13 22:33:32

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/13 0:01:06

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了

办上海高压电工证良心建议:别被中介坑了,自己看这篇就够了 你是不是也像我一样,第一次听说“高压电工证”这个名词,就感觉一头雾水?其实很多人都跟我一样,不知道去哪报名、怕被中介坑,结果花了冤枉钱还考不上。今天我就从一个在商丘培训过的学员角度,…

2026/11/13 0:01:06

黎里考电工证在哪里值不值得考

黎里考电工证在哪里值不值得考 之前考的证在外省能不能转过来?这是很多在外地工作、准备回老家发展的朋友最关心的问题。特别是在黎里地区,很多从事电力相关工作的朋友,都面临这样一个难题: 外省的电工证能否在本地使用?值不值得考?…

2026/11/13 0:01:06

毕节哪里考电工证 怎么报名学历不高也能上手

毕节哪里考电工证 怎么报名学历不高也能上手 你是不是也和我一样,学历不高,想着考个电工证,但又担心自己条件不够,怕报不上名?其实不然,只要符合条件,学历不高也能考电工证。今天就来聊聊【毕节哪里考电工证】这个问题,还有怎么报名,让你一步到位不…

2026/11/13 22:32:11

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/13 12:14:39

SSM电子书店源码全解析:结构、原理、部署与排错实战

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

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

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

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