【ELK】Filebeat+Redis+双Logstash架构解析与部署教程(图文)

文章目录

更多相关内容可查看

引言

在大规模分布式系统,特别是金融级应用中,集中化的日志监控是保障系统可观测性与稳定性的关键。ELK栈是解决这一问题的经典方案。

核心架构设计

本次部署采用 Filebeat + Redis + 双Logstash管道 + Elasticsearch 的架构,旨在实现日志收集的解耦、缓冲与高可用

架构流程图

复制代码
[应用服务器A] --(Filebeat)--> [Logstash管道1] --> [Redis队列] --> [Logstash管道2] --> [Elasticsearch]
[应用服务器B] --(Filebeat)-->           (同一套)                               (同一套)

组件角色解析

  1. Filebeat:部署在每台应用服务器上,作为轻量级日志采集器,负责读取指定路径的日志文件。
  2. Logstash管道1:作为"生产者",接收来自多个Filebeat的日志数据,进行初步处理后,写入Redis作为缓冲队列。
  3. Redis :作为高性能内存队列,用于缓存日志数据。这有效地解耦了日志生产端和消费端,防止Elasticsearch或网络抖动直接影响前端应用。
  4. Logstash管道2:作为"消费者",从Redis队列中取出日志,进行最终处理后,写入Elasticsearch。
  5. Elasticsearch:负责日志数据的存储、索引和检索。

环境与软件准备

本次实战基于以下版本(请根据实际情况调整):

  • 操作系统:Linux (x86_64)
  • Redis: 6.2.6
  • Elastic Stack: 7.15.1 (包含 Elasticsearch, Logstash, Filebeat)

下载地址:
https://download.redis.io/releases/redis-6.2.6.tar.gz

https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.15.1-linux-x86_64.tar.gz

https://artifacts.elastic.co/downloads/logstash/logstash-7.15.1-linux-x86_64.tar.gz

https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.15.1-linux-x86_64.tar.gz

分步安装与配置

第一步:部署Redis缓冲队列
  1. 安装 :上传安装包,解压后进入目录执行 make && make install

  2. 配置 :复制默认配置文件 redis.conf6379.conf,并修改以下几处关键配置:

    properties 复制代码
    # 绑定IP,根据实际情况设置(生产环境建议绑定内网IP)
    bind 192.168.x.x
    # 保护模式,如果设密码可关闭
    protected-mode yes
    # 设置访问密码,这是必须的!
    requirepass your_strong_password_here
    # 以守护进程运行
    daemonize yes
    # 指定日志文件和进程ID文件
    logfile "/var/log/redis/redis-6379.log"
    pidfile /var/run/redis_6379.pid




  3. 启动./redis-server 6379.conf

第二步:部署Elasticsearch存储与检索引擎

因为安全问题elasticsearch 不让用root用户直接运行,所以使用非root用户。具体操作如下:

bash 复制代码
添加es用户
useradd es -m
设置es用户密码
passwd es
另外,es用户拥有的可创建文件描述的权限太低,至少需要65536,处理办法: #切换到root用户修改
vim /etc/security/limits.conf # 在最后面追加下面内容
es hard nofile 65536
es soft nofile 65536 #*** 是启动es的用户
max_map_count文件包含限制一个进程可以拥有的VMA(虚拟内存区域)的数量
处理办法: #切换到root用户修改
vim /etc/sysctl.conf # 在最后面追加下面内容
vm.max_map_count=655360
执行 sysctl -p
1、登录服务器,将elasticsearch-7.15.1-linux-x86_64.tar.gz上传至服务器,使用root用户执行
chown -R es:es elasticsearch-7.15.1-linux-x86_64.tar.gz
然后解压(tar -xzvf elasticsearch-7.15.1-linux-x86_64.tar.gz)产生文件夹elasticsearch-7.15.1
2、进入目录elasticsearch-7.15.1/config,修改elasticsearch.yml 文件。修改的主要内容:
#节点名称
node.name: es
#设置当前的ip地址,如果配置集群通过指定相同网段的其他节点会加入该集群中
network.host: 192.168.xx.xx
#设置对外服务的http端口
http.port: 9200
#集群节点名
cluster.initial_master_nodes: ["es"]
#以下内容添加在文件最后
http.cors.enabled: true
http.cors.allow-origin: "*"
http.cors.allow-headers: Authorization
xpack.security.enabled: true
xpack.security.transport.ssl.enabled: true
3、首次启动,不要关闭程序,直到设置密码之后再重启
./bin/elasticsearch
4、设置密码(均设置成相同的即可)
./bin/elasticsearch-setup-passwords interactive
第三步:部署双Logstash管道

我们将Logstash部署两份,扮演不同角色。

  1. 解压并复制

    bash 复制代码
    tar -xzvf logstash-7.15.1-linux-x86_64.tar.gz
    cp -r logstash-7.15.1 logstash-producer
    cp -r logstash-7.15.1 logstash-consumer
  2. 配置生产者管道 (logstash-producer/config/producer.conf)

    ruby 复制代码
    input {
      beats {
        port => 5044
      }
    }
    filter {
      # 可在此处添加公共的过滤逻辑,如grok解析
    }
    output {
      redis {
        host => "localhost"
        port => 6379
        password => "your_strong_password_here"
        db => 0
        data_type => "list"
        key => "logstash"
      }
    }
  3. 配置消费者管道 (logstash-consumer/config/consumer.conf)

    ruby 复制代码
    input {
      redis {
        host => "localhost"
        port => 6379
        password => "your_strong_password_here"
        db => 0
        data_type => "list"
        key => "logstash"
      }
    }
    filter {
      # 可在此处进行最终的数据处理和富化
    }
    output {
      elasticsearch {
        hosts => ["http://ES服务器IP:9200"]
        index => "%{[@metadata][type]}-%{+YYYY.MM.dd}"
        user => "elastic"
        password => "你设置的elastic用户密码"
      }
    }
  4. 启动 :分别进入两个目录,执行 bin/logstash -f config/对应配置文件.conf

第四步:部署Filebeat日志采集器

在需要收集日志的应用服务器上部署Filebeat。

  1. 核心配置 (filebeat.yml):

    yaml 复制代码
    filebeat.inputs:
    - type: log
      enabled: true
      paths:
        - /app/logs/Server1/*.log
      fields:
        type: "server1-log" # 自定义字段,用于标识日志来源,对应Logstash中的[type]
    - type: log
      enabled: true
      paths:
        - /app/logs/Server2/*.log
      fields:
        type: "server2-log"
    
    output.logstash:
      hosts: ["Logstash生产者服务器IP:5044"]
  2. 启动./filebeat -e -c filebeat.yml

核心配置要点与安全提醒

  1. 密码安全:Redis密码、Elasticsearch各用户密码必须设置为强密码,切勿使用示例中的简单密码。
  2. 网络隔离:Elasticsearch和Redis的监听地址应绑定内网IP,并通过防火墙策略限制访问源。
  3. 索引生命周期管理:在Elasticsearch中配置ILM策略,自动清理旧日志,避免磁盘写满。
  4. 监控:监控Redis内存使用率、Elasticsearch集群健康状态和节点磁盘空间。

总结

  • 可靠性:Redis队列有效应对了消费端(Elasticsearch)临时不可用或处理速度慢的问题。
  • 解耦:生产(采集)和消费(存储)分离,便于各自扩展和维护。
  • 灵活性:可在两个Logstash阶段分别进行不同的数据加工处理。
相关推荐
小小unicorn2 小时前
[微服务即时通讯系统]语音子服务的实现与测试
c++·算法·微服务·云原生·架构·xcode
云边云科技_云网融合2 小时前
SD-WAN 专线:为亚马逊云、微软云访问提速的核心逻辑
网络·人工智能·安全·microsoft·架构
x_lrong2 小时前
LangChain&Redis记忆
数据库·redis·langchain·向量数据库
代码探秘者2 小时前
【Redis】双写一致性:延迟双删 / 读写锁 / 异步通知 / Canal,一文全解
java·数据库·redis·后端·算法·缓存
A 糖醋排骨2 小时前
小型项目elk搭建
elk
你的论文学长2 小时前
【架构拆解】从 RAG 检索到全局 Linting:如何用工程化思维跑通几万字的自动化写作流?
运维·人工智能·安全·自然语言处理·架构·自动化·ai写作
Maxwell的猫2 小时前
PCIe接口技术深度解析:从发展历程到核心架构
架构·pcie·高速接口·串行总线
weiyvyy2 小时前
机械臂控制开发实战-机械臂控制系统架构
人工智能·嵌入式硬件·机器学习·架构·机器人·需求分析·嵌入式实时数据库
dajun1811234562 小时前
音乐制作从创作到发行完整流程图表怎么画
大数据·运维·人工智能·信息可视化·架构·流程图·能源