性能剖析
- 服务器硬件Linux:1cpu4GRAM
- 假如每条日志250Byte。
剖析:
①logstash-Linux:1cpu 4GRAM
- 每秒500条日志;
- 去掉ruby每秒660条日志;
- 去掉grok后每秒1000条数据。
②filebeat-Linux:1cpu 4GRAM
- 每秒2500-3500条数据;
- 每天每台机器可解决:
24h*60min*60sec* 3000*250Byte=64,800,000,000Bytes,约64G。
③瓶颈在logstash从Redis中取数据存入ES,开启一个logstash,每秒约解决6000条数据;开启两个logstash,每秒约解决10000条数据(cpu已根本跑满);
④logstash的启动过程占用大量系统资源,因为脚本中要查看java、ruby以及其余环境变量,启动后资源占用会复原到失常状态。
2、对于收集日志的抉择:logstash/filter
没有准则要求应用filebeat或logstash,两者作为shipper的性能是一样的。区别在于:
- logstash因为集成了泛滥插件,如grok、ruby,所以相比beat是重量级的;
- logstash启动后占用资源更多,如果硬件资源足够则无需思考二者差别;
- logstash基于JVM,反对跨平台;而beat应用golang编写,AIX不反对;
- AIX 64bit平台上须要装置jdk(jre) 1.7 32bit,64bit的不反对;
- filebeat能够间接输出到ES,然而零碎中存在logstash间接输出到ES的状况,这将造成不同的索引类型造成检索简单,最好对立输出到els 的源。
总结:logstash/filter总之各有千秋,然而我举荐抉择:在每个须要收集的日志服务器上配置filebeat,因为轻量级,用于收集日志;再对立输入给logstash,做对日志的解决;最初对立由logstash输入给es。
3、logstash的优化相干配置
能够优化的参数,可依据本人的硬件进行优化配置:
①pipeline线程数,官网倡议是等于CPU内核数
- 默认配置 ---> pipeline.workers: 2;
- 可优化为 ---> pipeline.workers: CPU内核数(或几倍CPU内核数)。
②理论output时的线程数
- 默认配置 ---> pipeline.output.workers: 1;
- 可优化为 ---> pipeline.output.workers: 不超过pipeline线程数。
③每次发送的事件数
- 默认配置 ---> pipeline.batch.size: 125;
- 可优化为 ---> pipeline.batch.size: 1000。
④发送延时
- 默认配置 ---> pipeline.batch.delay: 5;
- 可优化为 ---> pipeline.batch.size: 10。
总结:
- 通过设置-w参数指定pipeline worker数量,也可间接批改配置文件logstash.yml。这会进步filter和output的线程数,如果需要的话,将其设置为cpu外围数的几倍是平安的,线程在I/O上是闲暇的。
- 默认每个输入在一个pipeline worker线程上流动,能够在输入output中设置workers设置,不要将该值设置大于pipeline worker数。
- 还能够设置输入的batch_size数,例如ES输入与batch size统一。
- filter设置multiline后,pipline worker会主动将为1,如果应用filebeat,倡议在beat中就应用multiline,如果应用logstash作为shipper,倡议在input中设置multiline,不要在filter中设置multiline。
Logstash中的JVM配置文件:
Logstash是一个基于Java开发的程序,须要运行在JVM中,能够通过配置jvm.options来针对JVM进行设定。比方内存的最大最小、垃圾清理机制等等。JVM的内存调配不能太大不能太小,太大会拖慢操作系统。太小导致无奈启动。默认如下:
- Xms256m#最小应用内存;
- Xmx1g#最大应用内存。
4、引入Redis的相干问题
filebeat能够间接输出到logstash(indexer),但logstash没有存储性能,如果须要重启须要先停所有连入的beat,再停logstash,造成运维麻烦;另外如果logstash产生异样则会失落数据;引入Redis作为数据缓冲池,当logstash异样进行后能够从Redis的客户端看到数据缓存在Redis中;
Redis能够应用list(最长反对4,294,967,295条)或公布订阅存储模式;
Redis做ELK缓冲队列的优化:
- bind 0.0.0.0 #不要监听本地端口;
- requirepass ilinux.io #加明码,为了平安运行;
- 只做队列,没必要长久存储,把所有长久化性能关掉:
- 快照(RDB文件)和追加式文件(AOF文件),性能更好;
- save "" 禁用快照;
- appendonly no 敞开RDB。
- 把内存的淘汰策略关掉,把内存空间最大
maxmemory 0 #maxmemory为0的时候示意咱们对Redis的内存应用没有限度。
5、Elasticsearch节点优化配置
服务器硬件配置,OS参数:
1)/etc/sysctl.conf 配置
# vim /etc/sysctl.confvm.swappiness = 1 #ES 举荐将此参数设置为 1,大幅升高 swap 分区的大小,强制最大水平的应用内存,留神,这里不要设置为 0, 这会很可能会造成 OOMnet.core.somaxconn = 65535 #定义了每个端口最大的监听队列的长度vm.max_map_count= 262144 #限度一个过程能够领有的VMA(虚拟内存区域)的数量。虚拟内存区域是一个间断的虚拟地址空间区域。当VMA 的数量超过这个值,OOMfs.file-max = 518144 #设置 Linux 内核调配的文件句柄的最大数量# sysctl -p #失效一下
2)limits.conf 配置
# vim /etc/security/limits.confelasticsearch soft nofile 65535elasticsearch hard nofile 65535elasticsearch soft memlock unlimitedelasticsearch hard memlock unlimited
3)为了使以上参数永恒失效,还要设置两个中央:
# vim /etc/pam.d/common-session-noninteractive# vim /etc/pam.d/common-session增加如下属性:session required pam_limits.so
可能需重启后失效。
Elasticsearch中的JVM配置文件:
-Xms2g-Xmx2g
- 将最小堆大小(Xms)和最大堆大小(Xmx)设置为彼此相等。
- Elasticsearch可用的堆越多,可用于缓存的内存就越多。但请留神,太多的堆可能会使您长时间垃圾收集暂停。
- 设置Xmx为不超过物理RAM的50%,以确保有足够的物理内存留给内核文件系统缓存。
- 不要设置Xmx为JVM用于压缩对象指针的临界值以上;确切的截止值有所不同,但靠近32 GB。不要超过32G,如果空间大,多跑几个实例,不要让一个实例太大内存。
Elasticsearch配置文件优化参数
1)主配置文件
# vim elasticsearch.ymlbootstrap.memory_lock: true #锁住内存,不应用swap#缓存、线程等优化如下bootstrap.mlockall: truetransport.tcp.compress: trueindices.fielddata.cache.size: 40%indices.cache.filter.size: 30%indices.cache.filter.terms.size: 1024mbthreadpool: search: type: cached size: 100 queue_size: 2000
2)设置环境变量
# vim /etc/profile.d/elasticsearch.sh export ES_HE AP _SIZE=2g #Heap Size不超过物理内存的一半,且小于32G。
集群的优化(我未应用集群):
- ES是分布式存储,当设置同样的cluster.name后会主动发现并退出集群;
- 集群会主动选举一个master,当master宕机后从新选举;
- 为避免"脑裂",集群中个数最好为奇数个;
- 为无效治理节点,可敞开播送discovery. zen.ping.multicast.enabled: false,并设置单播节点组discovery.zen.ping.unicast.hosts: ["ip1", "ip2", "ip3"]。
6、性能的查看
查看输出和输入的性能:Logstash和其连贯的服务运行速度统一,它能够和输出、输入的速度一样快。
查看零碎参数:
- 1)CPU
- 留神CPU是否过载。在Linux/Unix零碎中能够应用top-H查看过程参数以及总计。
- 如果CPU应用过高,间接跳到查看JVM堆的章节并查看Logstash worker设置。
- 2)Memory
- 留神Logstash是运行在Java虚拟机中的,所以它只会用到你调配给它的最大内存。
- 查看其余利用应用大量内存的状况,这将造成Logstash应用硬盘swap,这种状况会在利用占用内存超出物理内存范畴时。
- 3)I/O监控磁盘I/O查看磁盘饱和度
- 应用Logstash plugin(例如应用文件输入)磁盘会产生饱和。
- 当产生大量谬误,Logstash生成大量谬误日志时磁盘也会产生饱和。
- 在Linux中,可应用iostat,dstat或者其余命令监控磁盘I/O。
- 4)监控网络I/O
- 当应用大量网络操作的input、output时,会导致网络饱和。
- 在Linux中可应用dstat或iftop监控网络状况。
查看JVM heap:
- heap设置太小会导致CPU使用率过高,这是因为JVM的垃圾回收机制导致的。
- 一个疾速查看该设置的办法是将heap设置为两倍大小而后检测性能改良。不要将heap设置超过物理内存大小,保留至多1G内存给操作系统和其余过程。
- 你能够应用相似jmap命令行或VisualVM更加准确的计算JVM heap。
起源:https://www.cnblogs.com/along...