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

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

大家好,我是讯享网,很高兴认识大家。这里提供最前沿的Ai技术和互联网信息。



 

========================================================================

文章开始前我想说的

Elasticsearch 7.17.10 双节点集群部署实战(基于 Rocky Linux 9.6)

Elasticsearch 7.17.10 双节点集群部署(二):安装 elasticsearch-head 插件实现可视化

ELK日志分析平台(三):Logstash 7.17.10 独立节点部署与基础测试(基于Rocky Linux 9.6)

ELK日志分析平台(四):Kibana 7.17.10 部署与基本配置(与ES01同机,基于Rocky Linux 9.6)

ELK日志分析平台(五):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架构图 nginx+filebeat+redis+logstash+elasticsearch+kibana 工作展示图

对于高访问量,日志频繁写入的应用场景,使用redis做高速缓存,提高了elk架构的可用性,logstash从redis里再收集日志并过滤处理,最后提交到es群集里分片存储。

1、工作流程如下:

。当有用户访问的时候,就会产生日志,filebeat负责把指定路径的日志收集起来提交到redis;

。redis会以key的形式存储日志,从服务器做好备份,提高redis的冗余性;

。logstash会在redis里面input日志信息并做分析过滤,然后转发给es;

。es对日志分片和索引; 。kibana通过web形式将es里面的日志展示出来,便于管理员集中管理。

redis在ELK架构里的作用(缓冲层)

存储日志,可以是nginx,apache,tomcat等其他只要产生都可以存储,只要打上标签,flebeat在input时就会分好类,就像京东快递仓库一样,把所有的快递全部集中到一起,只要写好目标地址,就会送到你手里

。提高冗余性,若redis后面的全部宕机了,也不至于数据丢失

。加快日志的读取速度

。全部日志集中一起,打好标签,便于操作管理

Nginx的作用(负载均衡)

。接收多个节点的feilbeat的数据,还可以根据情况分配到多个logstash

。提高系统可靠性

2、实验环境
hostname IP role 配置 es01 192.168.92.14 es+kibana+es-head 4G内存 es02 192.168.92.15 es 2G logstash 192.168.92.16 logstash 2G filebeat01 192.168.92.17 filebeat+nginx 2G redis 192.168.92.18 redis 2G
二、redis安装部署

其他节点已经部署好,再增加一个redis节点

初始化配置

安装基础软件

GPT plus 代充 只需 145#配置rockylinux9.6的yum源 sed -e 's|^mirrorlist=|#mirrorlist=|g' -e 's|^#baseurl=http://dl.rockylinux.org/$contentdir|baseurl=https://mirrors.aliyun.com/rockylinux|g' -i.bak /etc/yum.repos.d/rocky*.repo dnf makecache yum install wget vim net-tools -y

selinux、firewall关闭、设置时区

timedatectl set-timezone Asia/Shanghai systemctl stop firewalld systemctl disable firewalld setenforce 0 vim /etc/selinux/config
1、下载redis
GPT plus 代充 只需 145wget http://download.redis.io/releases/redis-5.0.7.tar.gz
2、安装redis
cp 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”意思为“工具命令语言"是一种基于字符串的命令语言,是一种解释性语言。 成功后,继续操作。

GPT plus 代充 只需 145cd src make test make clean #如果执行make install失败的话 make install

说明

//编译,如果出现Hint:It's a good idea to run 'make test';),则是编译OK make //或者安装到当前目录下 make install

启动redis

GPT plus 代充 只需 145[root@redis redis-5.0.7]# cd utils/ [root@redis utils]# pwd /opt/redis-5.0.7/utils [root@redis 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! [root@redis 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] Description=Redis 6379 After=network.target [Service] Type=notify ExecStart=/usr/local/bin/redis-server /etc/redis/6379.conf --supervised systemd ExecStop=/usr/local/bin/redis-cli -p 6379 shutdown Restart=always User=redis Group=redis RuntimeDirectory=redis RuntimeDirectoryMode=0755 [Install] WantedBy=multi-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
GPT plus 代充 只需 145[root@redis ~]# 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配置文件
[root@redis utils]# cp /etc/redis/6379.conf{,.bak} [root@redis utils]# vi /etc/redis/6379.conf #修改bind0.0.0.0让所有的人都可以连接上去 bind 0.0.0.0 [root@redis utils]# systemctl restart redis_6379

查看redis服务对应端口号

GPT plus 代充 只需 145#ss -ltn 是一个用于查看系统当前监听的 TCP 端口的命令。 [root@redis 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节点已经部署好了。

在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服务

GPT plus 代充 只需 145systemctl 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配置文件

GPT plus 代充 只需 145[root@logstash ~]# cd /etc/logstash/conf.d/ [root@logstash conf.d]# pwd /etc/logstash/conf.d [root@logstash conf.d]# vi redistest.conf input { redis {

host => "192.168.92.18" port => 6379 key => "nginx" data_type => "list" db => 0 

} }

filter date }

output { stdout { } } #这里是输出到elasticsearch上 #output {

stdout { }

elasticsearch {

hosts => [“192.168.10.197”]

index => “logstash-nginx-%{+YYYY.MM.dd}”

}

#}

效果测试

如果这个时候logstash挂掉,则数据会停留在redis中,没有消费掉

GPT plus 代充 只需 145127.0.0.1:6379> keys *

  1. “nginx”
小讯
上一篇 2026-03-20 10:29
下一篇 2026-03-20 10:27

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容,请联系我们,一经查实,本站将立刻删除。
如需转载请保留出处:https://51itzy.com/kjqy/244366.html