一个logstash引发的连环案,关于logstash提示:reachedopenfileslimit:4095,setbythe'max_open_files'op(代码片段)

leocorn leocorn     2022-11-23     133

关键词:

不多说,直接上问题。版本logstash-2.4.0,启动后提示错误:

!!! Please upgrade your java version, the current version \'1.7.0_45-mockbuild_2013_10_22_03_37-b00\' may cause problems. We recommend a minimum version of 1.7.0_51
:timestamp=>"2018-11-02T17:46:20.823000+0800", :message=>"Pipeline main started"
!!! Please upgrade your java version, the current version \'1.7.0_45-mockbuild_2013_10_22_03_37-b00\' may cause problems. We recommend a minimum version of 1.7.0_51
:timestamp=>"2018-11-02T17:46:25.727000+0800", :message=>"Pipeline main started"
:timestamp=>"2018-11-02T17:47:10.274000+0800", :message=>"Reached open files limit: 4095, set by the \'max_open_files\' option or default, files yet to open: 375248", :level=>:warn
:timestamp=>"2018-11-02T17:47:15.429000+0800", :message=>"Reached open files limit: 4095, set by the \'max_open_files\' option or default, files yet to open: 375248", :level=>:warn
:timestamp=>"2018-11-02T17:47:39.819000+0800", :message=>"Reached open files limit: 4095, set by the \'max_open_files\' option or default, files yet to open: 375248", :level=>:warn

先说一下项目环境,由于项目需要,申请了8台主机,1台web应用主机(app),3台项目服务器负载均衡、每台搭载logstash处理操作日志(后面用gate1、gate2、gate3、gate4),3台日志存储服务器(es、redis集群,用es1、es2、es3代替)。

因为项目服务器上的大量操作日志,需要通过logstash进行处理送入es,看到这个问题就想到修改limit文件,于是对各个集群主机进行limit配置文件不断的配置,重启logstash,问题依旧存在。记录一下解决问题过程中遇到的各种坑。

#血案一

根据logstash抛出的问题,首先想到修改配置,初次了解logstash,应该修改哪些主机的配置呢,首先ulimit -a看了一下搭载logstash的负载均衡服务器,发现配置都已经修改过,并且配置到最大

[linkage@dandianwg-gate3 bin]$ ulimit -a
core file size          (blocks, -c) unlimited
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 193095
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 65535
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) unlimited
cpu time               (seconds, -t) unlimited
max user processes              (-u) 65535
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

#很明显抛出错误的不是logstash主机,那么查看es集群的3台主机,果然配置很低

[linkage@dandianwg-es1 ~]$ ulimit -a
core file size          (blocks, -c) 0
data seg size           (kbytes, -d) unlimited
scheduling priority             (-e) 0
file size               (blocks, -f) unlimited
pending signals                 (-i) 128456
max locked memory       (kbytes, -l) 64
max memory size         (kbytes, -m) unlimited
open files                      (-n) 1024
pipe size            (512 bytes, -p) 8
POSIX message queues     (bytes, -q) 819200
real-time priority              (-r) 0
stack size              (kbytes, -s) 1024
cpu time               (seconds, -t) unlimited
max user processes              (-u) 1024
virtual memory          (kbytes, -v) unlimited
file locks                      (-x) unlimited

#开始对es集群的主机进行修改配置vi /etc/security/limits.conf 、vi /etc/security/limits.d/90-nproc.conf,把各项指标都调到65535

[root@dandianwg-es1 ~]$ vi /etc/security/limits.conf 
# End of file
*       soft    nproc   65535
*       hard    nproc   65535
*       soft    nofile  65535
*       hard    nofile  65535

[root@dandianwg-es1 ~]$
[root@dandianwg-es1 ~]$vi /etc/security/limits.d/90-nproc.conf 
# Default limit for number of user\'s processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     65535
root       soft    nproc     65535 

#血案二

root用户登录es集群主机ulimit -a查看配置生效,切换到普通查看配置生效居然没生效,open files依然1024(这个问题让人摸不着头脑,各种配置调试、百度,偶然发现一篇文章提到和ssh有关)

中途请教了一个大师,将文件/etc/security/limits.d/90-nproc.conf中的配置全部配成unlimited,结果不可预料的事情发生了(root没有登录权限了,普通用户可以登录并且无法切换到root,最后请网络管理部门通过单用户模式进入还原了配置,单用户模式我也不懂,类似windows的虚拟机吧)。

[linkage@dandianwg-es1 ~]$ cat /etc/security/limits.d/90-nproc.conf 
# Default limit for number of user\'s processes to prevent
# accidental fork bombs.
# See rhbz #432903 for reasoning.
*          soft    nproc     unlimited
root       soft    nproc     unlimited

#首先查看了一番当前系统环境,发现ssl、ssh版本都很低,于是开始升级ssh(由于es集群3个主机系统都是克隆安装,所以3个主机系统一模一样)

[linkage@dandianwg-app bin]$ ssh -V
OpenSSH_5.3p1, OpenSSL 1.0.0-fips 29 Mar 2010

[linkage@dandianwg-app bin]$ openssl version -a
OpenSSL 1.0.1s  1 Mar 2016
built on: Wed Aug 17 15:42:37 2016
platform: linux-x86_64
options:  bn(64,64) rc4(16x,int) des(idx,cisc,16,int) idea(int) blowfish(idx) 
compiler: gcc -I. -I.. -I../include  -fPIC -DOPENSSL_PIC -DZLIB -DOPENSSL_THREADS -D_REENTRANT -DDSO_DLFCN -DHAVE_DLFCN_H -Wa,--noexecstack -m64 -DL_ENDIAN -O3 -Wall -DOPENSSL_IA32_SSE2 -DOPENSSL_BN_ASM_MONT -DOPENSSL_BN_ASM_MONT5 -DOPENSSL_BN_ASM_GF2m -DSHA1_ASM -DSHA256_ASM -DSHA512_ASM -DMD5_ASM -DAES_ASM -DVPAES_ASM -DBSAES_ASM -DWHIRLPOOL_ASM -DGHASH_ASM
OPENSSLDIR: "/usr/local/ssl"

#将zlib、ssl、ssh都升级了一遍,重启服务(版本分别升级到zlib-1.2.11、openssl-1.0.2p、openssh-7.9p1,升级步骤不说了,网上一大堆)

以下是升级脚本:

tar -xvf openssh-7.9p1.tar.gz
tar -xvf openssl-1.0.2p.tar.gz
tar -xvf zlib-1.2.11.tar.gz

cd /export/home/tools/zlib-1.2.11
./configure --prefix=/usr 
make -j4 && make install

cd /export/home/tools/openssl-1.0.2p
./config --prefix=/usr  --shared  zlib
make -j4 && make install

cd /export/home/tools/openssh-7.9  

  ./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwords --without-openssl-header-check

make && make install

sed -i \'s/SSHD=\\/usr\\/local\\/sbin\\/sshd/SSHD=\\/usr\\/sbin\\/sshd/g\'  /etc/init.d/sshd 
service sshd restart

#第三坑  由于是源码安装,安装成功之后查看版本也正常,(不管普通用户还是root,通通没有登录权限)

[linkage@dandianwg-gate2 bin]$ ssh 192.168.54.17
The authenticity of host \'192.168.54.17 (192.168.54.17)\' can\'t be established.
RSA key fingerprint is b8:f3:61:35:51:2e:34:22:d5:b4:96:b9:e9:a4:cc:f5.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added \'192.168.54.17\' (RSA) to the list of known hosts.
linkage@192.168.54.17\'s password: 
Permission denied, please try again.
linkage@192.168.54.17\'s password: 
Permission denied, please try again.
linkage@192.168.54.17\'s password: 
Permission denied (publickey,password,keyboard-interactive).

解决方案:导致问题的原因是由于安装新版ssh时指定了新目录--prefix=/usr,/etc/init.d/sshd的配置文件(这里只需要覆盖安装,并且不需要修改/etc/init.d/sshd就正常了)

./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwords --without-openssl-header-check

 

cd /export/home/tools/openssh-7.9 
./configure --prefix=/usr --with-pam --with-zlib --with-md5-passwords --without-openssl-header-check
make && make install
sed -i \'s/SSHD=\\/usr\\/local\\/sbin\\/sshd/SSHD=\\/usr\\/sbin\\/sshd/g\'  /etc/init.d/sshd 
service sshd restart

修改脚本如下:
cd /export/home/tools/openssh-7.9  
./configure --with-ssl-dir=/usr/local/ssl --with-openssl-includes=/usr/local/ssl/include/openssl --with-openssl-libraries=/usr/local/ssl/lib
make && make install
//将之前安装替换的配置还原
sed -i \'s/SSHD=\\/usr\\/sbin\\/sshd/SSHD=\\/usr\\/local\\/sbin\\/sshd/g\'  /etc/init.d/sshd 
service sshd restart

 

#ssh升级后,通过普通用户和root登录测试,发现open files生效,(经过一些列的波折,搞定了修改open files普通用户不生效的问题)

 

#回到正题,解决logstash抛异常的问题,其实经过上面的填坑已经把这个异常的问题解决了,为什么logstash还在抛open files的异常???

原因分析:我们知道logstash可以根据业务需要配置多进程,我这里就配置了两个进程文件,一个用于文件入库es(logstash.conf),一个用于日志审计(tcp.conf,在app主机(其中一台web服务器)上有一个tcp协议接口单独处理文件的程序。

所以上面我们经过一系列的填坑,把es集群的ulimit 配置搞定了,其实真正的异常则是从app主机上抛出来的,只需要将app主机上的limit配置最大化。

经过以上的填坑,收获颇多,对linux和logstash都有了进一步的了解,一个研发在运维上的经验分享(本人是linux盲人,欢迎大神指评)。

 

2019-03-22记录:在几个月前经过以上一系列问题处理,现在依然出现logstash的报错Reached open files limit: 4095, set by the \'max_open_files\' option or default

现补充最终解决方案,logstash处理文件目录下,堆积大量文件,删除之后搞定.

 

logstash使用介绍

Logstash介绍Logstash是一个数据收集处理转发系统,是Java开源项目。它只做三件事:数据输入数据加工(不是必须的):如过滤,改写等数据输出  下载安装logstash是基于Java的服务,各操作系统安装Java环境均可使用。 Jav... 查看详情

干货|logstash自定义正则表达式etl实战

0、题记本文建立在干货|LogstashGrok数据结构化ETL实战上,并专注于在Grok中使用自定义正则表达式。有时Logstash没有我们需要的模式。幸运的是,我们有正则表达式库:Oniguruma。Oniguruma是一个灵活的正则表达式库。它包含多种语言... 查看详情

一场由tcp_timestamps引发的无解追击案

 案例描述:我们的合作客户(国内知名电子支付企业)反应有四台机器调用我们的接口服务,但是奇怪的是四台中有两台是通的,有两台是不通的,不通的机器也是偶尔通偶尔不通,这个问题一直断断续续困扰了他们很久,... 查看详情

logstash常用filter插件介绍(代码片段)

Filter是Logstash功能强大的主要原因,它可以对LogstashEvent进行丰富的处理,比如说解析数据、删除字段、类型转换等等,常见的有如下几个:date:日志解析grok:正则匹配解析dissect:分割符解析mutate:对字段做处理,比如重命名、... 查看详情

在 LogStash 中,如何删除任何大于特定大小的 json/xml 字段

】在LogStash中,如何删除任何大于特定大小的json/xml字段【英文标题】:InLogStash,howremoveanyjson/xmlfieldlargerthanspecificsize【发布时间】:2020-08-3113:29:27【问题描述】:简而言之,我在我们公司有这个堆栈用于我们的公司日志:AllRequest... 查看详情

elk/elasticsearch+fluentd+kibana

...系统采用elasticsearch+fluentd+kibana,用fluentd代替elk社区里的logstash,logstas的插件是最多的,同时logstash的性能和资源消耗太高,经某站大佬压力测试,在环境为2核4g的云计算服务器上,logstash写入qps极限为8000,通过结合易瑞现有询... 查看详情

关于一个需求引发的事务操作和锁-记录解决过程和思路

参考资料:http://openwares.net/java/spring_mybatis_transaction.htmlspring,mybatis事务管理配置与@Transactional注解使用http://www.cnblogs.com/mingxuan/archive/2011/10/11/2207560.html锁行还是锁表的实践验证http://blog.csdn.net/hush 查看详情

九连环全套解法图解

...展资料:拆解原理:解开九连环共需要256步,只要上或下一个环,就算一步,九连环的每个环互相制约,只有第一环能够自由上下。要想下/上第n个环,就必须满足两个条件(第一个环除外)。一、第n-1个环在架上;二、第n-1个环... 查看详情

logstash:配置例子(代码片段)

...式的日志来做一个说明,希望对大家有所帮助。关于Logstash,我之前有做一个meetup。里面还含有一个完整的例子。你可以在如下的地址进行查看:Logstash:Logstash入门教程(一) Logstash&# 查看详情

logstash:配置例子(代码片段)

...式的日志来做一个说明,希望对大家有所帮助。关于Logstash,我之前有做一个meetup。里面还含有一个完整的例子。你可以在如下的地址进行查看:Logstash:Logstash入门教程(一) Logstash&# 查看详情

一块抹布引发的关于测试策略的思考

一其实,这篇文章最开始的标题是《如何用一个抹布一次清理完一个落满灰尘的工位》,读来读去觉得有点绕,写到最后也发现,哇,这个抹布好惨呀,就把标题改为《一块抹布引发的惨案》,又感觉有标题党的嫌疑,最终就确... 查看详情

Dapper 执行存储过程引发关于多映射的 ArgumentException

...i-mapping【发布时间】:2012-01-2016:56:13【问题描述】:我有一个存储过程,我正在尝试使用Dapper执行它引发的错误似乎与我正在尝试做的事情无关,尽管我似乎无法弄清楚我在做什么我做错了。这是我试图调用的存 查看详情

kafka面试连环炮,看看你能撑到哪一步?

...谈谈你对kafka的集群架构是如何理解的?01Kafka整体架构图一个典型的Kafka集群中包含若干Producer,若干Broker「Kaf 查看详情

由上一个血案引发的关于property和attribute关系的思考(代码片段)

...rty是物体本身自带属性,不能改变的(一旦改了就是另外一个东西了)=》化学变化attribute,由于attribute还可以做动词,表示赋予。。。特性,属于人为赋予的可改变的属性。=》物理变化比如,你的头发,可以人为拉直、弯曲,... 查看详情

关于manjaro与ubuntu双系统并存引发的一个boot问题

事情发生在写下这篇博客的半小时前。笔者的电脑本身是Manjaro+win10双系统并存,因为一些原因要安装ubuntu。装完ubuntu用了一阵子,想切回manjaro,于是遇到了这个问题。看到kernelpanic的时候把我吓了一跳,怎么装个系统还能搞到... 查看详情

elk日志分析系统

大纲:一、简介二、Logstash三、Redis四、Elasticsearch五、Kinaba  一、简介1、核心组成ELK由Elasticsearch、Logstash和Kibana三部分组件组成;Elasticsearch是个开源分布式搜索引擎,它的特点有:分布式,零配置,自动发现,索引自动... 查看详情

springboot日志输出到logstash,logstash端没有日志输出,为啥?

...ngframework/boot/logging/logback/base.xml"/><appendername="LOGSTASH"class="net.logstash.logback.appender.LogstashTcpSocketAppender"><destination>x.x.x.x:4560</destination><!--日志输出编码--><encodercharset="UTF-8"class="net.... 查看详情

关于换个jdk引发的血案,对一个新的eclipse如何下手

总结一下今天一天发生的问题。。气的上火1.先是eclipse,换了JDK后,我的ecplise不兼容JDK7,但是我去官网总是下不到对的版本,结果是进错网页,没有搞清楚哪个eclipse对应哪个版本对应哪个名字2.然后是mavensetting.xml中配置没有改... 查看详情