Logstash基于Nginx的HA高可用架构

Logstash基于Nginx的HA高可用架构

应用场景

最近,在项目当中部署在客户端的logstash在采集日志的时候由于日志量过大,并且没有开启本地磁盘持久化操作,logstash限制了一部分filebeat的日志数据传输,导致数据有丢失的现象,为了能够更好的满足客户端采集收集日志的高可用需求,今天介绍下如何在客户端基于nginx做一个logstash的高可用。

架构图

在这里插入图片描述
简单介绍下架构图:

  1. 客户端安装多个filebeat对应用日志进行监控并发送给nginx
  2. nginx监听端口,转发请求给logstash
  3. logstash监听nginx转发的端口
  4. logstash打开本地磁盘持久化配置

Nginx安装

yum install -y gcc-c++ #会自动安装依赖gcc 和更新(或安装)依赖 libgcc
yum install -y pcre pcre-devel
yum install -y zlib zlib-devel
yum -y install openssl openssl-devel

cd /usr/local
wget https://nginx.org/download/nginx-1.16.0.tar.gz
tar -xvf nginx-1.16.0.tar.gz
 cd nginx-1.16.0
 ./configure --prefix=/usr/local/nginx --with-stream
 make && make install

Nginx配置

worker_processes  4; #nginx worker数量
worker_rlimit_nofile 65535; #指定一个nginx进程可以打开的最多文件描述符数目
#设定nginx的工作模式及连接数上限
events {
	use epoll;
    worker_connections  10240; #设定worker的最大连接数
    multi_accept on; #打开同时接受多个新网络连接请求的功能
}

stream {
	access_log off; #关闭access_log,即不记录访问日志
    upstream dns_servers {  #建立server组
        server 127.0.0.1:11514;
        server 127.0.0.1:12514;
    }	   
    server {
        listen 8514; #监听本地端口
        proxy_pass dns_servers; #代理组
        proxy_timeout 20s;
        proxy_connect_timeout 5s;
    }
}

logstash配置

准备两个logstash1,logstash2。
修改logstash1 config文件
input{ 
   beats {
        port => 11514
    }
}    
修改logstash2 config文件
input{ 
   beats {
        port => 12514
    }
}   
修改logstash1和logstash2中的logstash.yml文件
找到这个配置打开,然后改成如下配置并保存。
queue.type: persisted


其他配置介绍:
queue.type: persisted
path.queue: /usr/share/logstash/data #队列存储路径;如果队列类型为persisted,则生效
queue.page_capacity: 250mb #队列为持久化,单个队列大小
queue.max_events: 0 #当启用持久化队列时,队列中未读事件的最大数量,0为不限制
queue.max_bytes: 1024mb #队列最大容量
queue.checkpoint.acks: 1024 #在启用持久队列时强制执行检查点的最大数量,0为不限制
queue.checkpoint.writes: 1024 #在启用持久队列时强制执行检查点之前的最大数量的写入事件,0为不限制
queue.checkpoint.interval: 1000 #当启用持久队列时,在头页面上强制一个检查点的时间间隔

总结

在这里插入图片描述
Logstash 的工作分为以下三个步骤。

input
filter (可选)
output

Logstash 通过事件处理管道协调三者的执行,即 input、filter、output。
Logstash 管道的每个 input 阶段都有一个其自己的线程处理。input 将事件写入一个中心队列,这个队列可能存在于内存中(默认),也可能存在于硬盘中。然后管道的工作线程会将中心队列中的事件批量出队,然后通过 filter 进行事件的过滤、处理,最后再将经过处理的事件交给 output ,执行事件的输出。

Logstash 的整个工作流程,input,filter,ouput 三者对外表现为线性地对数据进行收集、处理,即抽象为管道,但是实际上收集者与处理者是分离的,通过队列进行数据的传递。
对于用户来说,logstash 的工作流程是线性的,事件一个一个的进入管道,一个一个的被处理,方便用户理解,配置。而内部是利用队列将收集与处理的逻辑分离了开来,这样可以适当的提高代码的可维护性,并且可以提高整体的执行效率,因为收集到的事件会先存进队列中,如果队列是存在于内存中的,就相当于处理流程中添加了缓存,同时可以灵活地给分配线程去分别完成收集和处理。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值