ELK 7.17.10 + Redis 5.0.7 构建高可用 Nginx 日志收集系统(Rocky Linux 9.6 实战)

发布时间:2026/5/23 13:02:38

ELK 7.17.10 + Redis 5.0.7 构建高可用 Nginx 日志收集系统(Rocky Linux 9.6 实战) ELKredis安装部署文章开始前我想说的Elasticsearch 7.17.10 双节点集群部署实战基于 Rocky Linux 9.6Elasticsearch 7.17.10 双节点集群部署二安装 elasticsearch-head 插件实现可视化ELK日志分析平台(三)Logstash 7.17.10 独立节点部署与基础测试(基于Rocky Linux 9.6)ELK日志分析平台(四)Kibana 7.17.10 部署与基本配置与ES01同机基于Rocky Linux 9.6ELK日志分析平台(五)Filebeat 部署与 Nginx 日志采集输出至 Logstash(基于Rocky Linux 9.6)这 5 篇文章已经完整覆盖了 ELK 日志分析平台从 0 到 1 的全部搭建流程可以直接用于生产环境Elasticsearch Logstash Kibana Filebeat通常被称为ELK Stack或Elastic Stack。我之前发的这5篇实现了Elasticsearch Logstash Kibana Filebeat现在为Elasticsearch Logstash Kibana Filebeat redis一、前言典型的elk架构图引入redis架构图 nginxfilebeatredislogstashelasticsearchkibana 工作展示图对于高访问量日志频繁写入的应用场景使用redis做高速缓存提高了elk架构的可用性logstash从redis里再收集日志并过滤处理最后提交到es群集里分片存储。1、工作流程如下:。当有用户访问的时候就会产生日志filebeat负责把指定路径的日志收集起来提交到redis;。redis会以key的形式存储日志从服务器做好备份提高redis的冗余性;。logstash会在redis里面input日志信息并做分析过滤然后转发给es;。es对日志分片和索引; 。kibana通过web形式将es里面的日志展示出来便于管理员集中管理。redis在ELK架构里的作用(缓冲层)。存储日志可以是nginxapachetomcat等其他只要产生都可以存储只要打上标签flebeat在input时就会分好类就像京东快递仓库一样把所有的快递全部集中到一起只要写好目标地址就会送到你手里。提高冗余性若redis后面的全部宕机了也不至于数据丢失。加快日志的读取速度。全部日志集中一起打好标签便于操作管理Nginx的作用(负载均衡)。接收多个节点的feilbeat的数据还可以根据情况分配到多个logstash。提高系统可靠性2、实验环境hostnameIProle配置es01192.168.92.14eskibanaes-head4G内存es02192.168.92.15es2Glogstash192.168.92.16logstash2Gfilebeat01192.168.92.17filebeatnginx2Gredis192.168.92.18redis2G二、redis安装部署其他节点已经部署好再增加一个redis节点初始化配置安装基础软件#配置rockylinux9.6的yum源 sed -e s|^mirrorlist|#mirrorlist|g \ -e s|^#baseurlhttp://dl.rockylinux.org/$contentdir|baseurlhttps://mirrors.aliyun.com/rockylinux|g \ -i.bak \ /etc/yum.repos.d/rocky*.repo dnf makecache yum install wget vim net-tools -yselinux、firewall关闭、设置时区timedatectl set-timezone Asia/Shanghai systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config1、下载rediswget http://download.redis.io/releases/redis-5.0.7.tar.gz2、安装rediscp redis-5.0.7.tar.gz /opt #将当前目录下的 Redis 源码包 redis-5.0.7.tar.gz 复制到 /opt 目录。 cd /opt tar -zxvf redis-5.0.7.tar.gz -C . yum install gcc -y # redis依赖包 yum install tcl -y cd redis-5.0.7 make说明:tcl全称ToolCommandLanguage”意思为“工具命令语言是一种基于字符串的命令语言,是一种解释性语言。 成功后继续操作。cd src make test make clean #如果执行make install失败的话 make install说明//编译如果出现Hint:Its a good idea to run make test;),则是编译OK make //或者安装到当前目录下 make install启动redis[rootredis redis-5.0.7]# cd utils/ [rootredis utils]# pwd /opt/redis-5.0.7/utils [rootredis utils]# ./install_server.sh Welcome to the redis service installer This script will help you easily set up a running redis server Please select the redis port for this instance: [6379] Selecting default: 6379 Please select the redis config file name [/etc/redis/6379.conf] Selected default - /etc/redis/6379.conf Please select the redis log file name [/var/log/redis_6379.log] Selected default - /var/log/redis_6379.log Please select the data directory for this instance [/var/lib/redis/6379] Selected default - /var/lib/redis/6379 Please select the redis executable path [/usr/local/bin/redis-server] Selected config: Port : 6379 Config file : /etc/redis/6379.conf Log file : /var/log/redis_6379.log Data dir : /var/lib/redis/6379 Executable : /usr/local/bin/redis-server Cli Executable : /usr/local/bin/redis-cli Is this ok? Then press ENTER to go on or Ctrl-C to abort. cp: cannot create regular file /etc/init.d/redis_6379: No such file or directory ERROR: Could not copy redis init script to /etc/init.d/redis_6379. Aborting! [rootredis utils]#这个错误是因为您的系统使用systemd管理服务而 Redis 的install_server.sh脚本是旧式的 SysV init 脚本它试图将启动脚本复制到/etc/init.d/目录但该目录在 Rocky Linux 9.6 中默认不存在即使存在systemd 也不会使用它。您可以采用以下两种方式解决方法二推荐手动配置 Redis 为 systemd 服务既然已经编译完成可以直接使用编译好的二进制文件并创建 systemd 服务单元文件这是 Rocky Linux 的标准做法。#1. 创建 Redis 配置文件 sudo mkdir -p /etc/redis sudo cp /opt/redis-5.0.7/redis.conf /etc/redis/6379.conf sudo vim /etc/redis/6379.conf 根据您的需求修改配置如 daemonize yes、pidfile、logfile 等。至少确保以下设置 daemonize no # systemd 管理时不需要守护进程 pidfile /run/redis/redis_6379.pid #logfile /var/log/redis/redis_6379.log dir /var/lib/redis/6379 然后创建目录并授权 sudo mkdir -p /var/log/redis sudo chown redis:redis /var/log/redis #创建数据目录 sudo mkdir -p /var/lib/redis/6379 #2. 创建 systemd 服务单元文件 sudo vi /etc/systemd/system/redis_6379.service 写入以下内容 [Unit] DescriptionRedis 6379 Afternetwork.target [Service] Typenotify ExecStart/usr/local/bin/redis-server /etc/redis/6379.conf --supervised systemd ExecStop/usr/local/bin/redis-cli -p 6379 shutdown Restartalways Userredis Groupredis RuntimeDirectoryredis RuntimeDirectoryMode0755 [Install] WantedBymulti-user.target #3. 创建 redis 用户和组如果不存在 sudo groupadd --system redis sudo useradd --system -g redis --home-dir /var/lib/redis redis sudo chown redis:redis /etc/redis/6379.conf sudo chown -R redis:redis /var/lib/redis #4. 重新加载 systemd 并启动服务 sudo systemctl daemon-reload sudo systemctl start redis_6379 sudo systemctl enable redis_6379 #5. 验证服务状态 sudo systemctl status redis_6379 redis-cli -p 6379 ping # 应返回 PONG[rootredis ~]# sudo systemctl daemon-reload sudo systemctl start redis_6379 sudo systemctl status redis_6379 # 查看状态 ● redis_6379.service - Redis 6379 Loaded: loaded (/etc/systemd/system/redis_6379.service; enabled; preset: disabled) Active: active (running) since Wed 2026-03-18 13:44:15 CST; 43ms ago Main PID: 30747 (redis-server) Tasks: 4 (limit: 4402) Memory: 8.7M CPU: 6ms CGroup: /system.slice/redis_6379.service └─30747 /usr/local/bin/redis-server 127.0.0.1:6379 Mar 18 13:44:15 redis systemd[1]: Started Redis 6379.您已经通过手动创建 systemd 服务单元成功启动并运行了 Redis从systemctl status可以看到active (running)。这说明 Redis 服务已经正常工作无需再运行install_server.sh。3、编辑redis配置文件[rootredis utils]# cp /etc/redis/6379.conf{,.bak} [rootredis utils]# vi /etc/redis/6379.conf #修改bind0.0.0.0让所有的人都可以连接上去 bind 0.0.0.0 [rootredis utils]# systemctl restart redis_6379查看redis服务对应端口号#ss -ltn 是一个用于查看系统当前监听的 TCP 端口的命令。 [rootredis utils]# ss -ltn State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 511 0.0.0.0:6379 0.0.0.0:* LISTEN 0 128 0.0.0.0:22 0.0.0.0:* LISTEN 0 128 [::]:22 [::]:*此时redis节点已经部署好了。三、elkredis功能测试在filebeat01节点上修改filebeat配置文件(vi /etc/filebeat/filebeat.yml)# 之前这里是写到了logstash上,注释掉这里 #output.logstash: # The Logstas hosts # hosts: [192.168.92.16:5044] #粘贴为下面的内容 output.redis: hosts: [192.168.92.18:6379] key: nginx db: 0 data_type: list重启filebeat服务systemctl restart filebeat访问nginx产生几条日志然后查看redis数据(key,value的数据存储模式);redis有16个初始化库编号0到15默认使用0号库# 进入 Redis 命令行 redis-cli # 查看当前库的全部 key keys * # 获取列表 nginx 的长度 llen nginx # 查看 key nginx 的类型 type nginx # 按照索引从左往右获取列表 nginx 中对应索引的值例如索引 0 lindex nginx 0 # 退出 redis-cli exit为配置logstash服务运行时此时数据临时存储在redis节点中。 在logstash节点上新建redistest.conf配置文件[rootlogstash ~]# cd /etc/logstash/conf.d/ [rootlogstash conf.d]# pwd /etc/logstash/conf.d [rootlogstash conf.d]# vi redistest.conf input { redis { host 192.168.92.18 port 6379 key nginx data_type list db 0 } } filter { json { source message remove_field [beat, offset, tags, prospector] } date { match [timestamp, dd/MMM/yyyy:HH:mm:ss Z] target timestamp } } output { stdout { } } #这里是输出到elasticsearch上 #output { # stdout { } # elasticsearch { # hosts [192.168.10.197] # index logstash-nginx-%{YYYY.MM.dd} # } #}效果测试如果这个时候logstash挂掉则数据会停留在redis中没有消费掉127.0.0.1:6379 keys * 2) nginx

相关新闻