ELK Stack 日志平台性能优化
1、性能分析
2、关于收集日志的选择:logstash/filter
3、Logstash的优化相关配置
4、引入Redis的相关问题
5、Elasticsearch节点优化配置
6、性能检查
1、性能分析
服务器硬件Linux:****1cpu4GRAM
假设每条日志250Byte。
分析:
①logstash-Linux:1cpu 4GRAM
- 每秒500条日志;
- 去掉ruby每秒660条日志;
- 去掉grok后每秒1000条数据。
②filebeat-Linux:1cpu 4GRAM
- 每秒2500-3500条数据;
- 每天每台机器可处理:24h60min60sec* 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。
ELK Stack 日志平台性能优化的更多相关文章
- (转)ELK Stack 中文指南--性能优化
https://www.bookstack.cn/read/ELKstack-guide-cn/elasticsearch-README.md https://blog.csdn.net/cjfeii ...
- Kubernetes实战之部署ELK Stack收集平台日志
主要内容 1 ELK概念 2 K8S需要收集哪些日志 3 ELK Stack日志方案 4 容器中的日志怎么收集 5 K8S平台中应用日志收集 准备环境 一套正常运行的k8s集群,kubeadm安装部署 ...
- Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载)
Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构(源码可下载) 说明:Java开源生鲜电商平台-性能优化以及服务器优化的设计与架构,我采用以下三种维度来讲解 1. 代码层面. 2. 数 ...
- 性能调优之访问日志IO性能优化
性能调优之访问日志IO性能优化 poptest是国内唯一一家培养测试开发工程师的培训机构,以学员能胜任自动化测试,性能测试,测试工具开发等工作为目标.如果对课程感兴趣,请大家咨询qq:908821 ...
- 访问日志IO性能优化
在高并发量的场景下磁盘IO往往是性能的瓶颈所在,访问日志涉及到频繁的写操作,所以这部分要尽可能地优化,不然将拖累系统的整体性能.针对文件记录及数据库记录两种方式可以有以下措施提高写性能, l 避免频繁 ...
- Centos7 之安装Logstash ELK stack 日志管理系统
一.介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源 ...
- CentOS 7下安装Logstash ELK Stack 日志管理系统(上)
介绍 The Elastic Stack - 它不是一个软件,而是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来源,任 ...
- log4j日志输出性能优化-缓存、异步
转载 1.log4j已成为大型系统必不可少的一部分,log4j可以很方便的帮助我们在程序的任何位置输出所要打印的信息,便于我们对系统在调试阶段和正式运行阶段对问题分析和定位.由于日志级别的不同,对系 ...
- 170228、Linux操作系统安装ELK stack日志管理系统--(1)Logstash和Filebeat的安装与使用
安装测试环境:Ubuntu 16.04.2 LTS 前言 (1)ELK是Elasticsearch,Logstash,Kibana 开源软件的集合,对外是作为一个日志管理系统的开源方案.它可以从任何来 ...
随机推荐
- 从零开始完整开发基于websocket的在线对弈游戏【五子棋】,只用几十行代码完成全部逻辑。
五子棋是规则简单明了的策略型游戏,先形成五子连线者获胜.本课程习作采用两人在线对弈的方式进行比赛,拿着手机在上下班路上玩特别合适. 整个过程在众触低代码应用平台进行,使用表达式描述游戏逻辑(高度简化版 ...
- 造!又有新的生产力语言了「GitHub 热点速览 v.22.30」
作者:HelloGitHub-小鱼干 你还记得那些 PHP 开发都去哪了吗?转 Golang 了!移动端现在流行什么?Flutter 编程.现在谷歌带着新的生产力语言来了,Carbon,代号:C++ ...
- 【万字长文】使用 LSM-Tree 思想基于.Net 6.0 C# 实现 KV 数据库(案例版)
文章有点长,耐心看完应该可以懂实际原理到底是啥子. 这是一个KV数据库的C#实现,目前用.NET 6.0实现的,目前算是属于雏形,骨架都已经完备,毕竟刚完工不到一星期. 当然,这个其实也算是NoSQL ...
- 老子云携手福昕鲲鹏,首次实现3D OFD三维版式文档的重大突破
你见过能动起来的文档吗? 这可不是动图,也不是视频,而是可以直接自由交互3D模型的3D OFD文档! OFD可能有人不熟悉,它其实是国产"PDF",3D OFD则突破了以往文字.图 ...
- Flutter-填平菜鸟和高手之间的沟壑
Flutter-填平菜鸟和高手之间的沟壑 准备写作中... 1.Flutter-skia-影像,Flutter skia-图形渲染层.应用渲染层2.方法通道使用示例,用于演示如何使用方法通道实现与原生 ...
- Git 04 项目搭建
参考源 https://www.bilibili.com/video/BV1FE411P7B3?spm_id_from=333.999.0.0 版本 本文章基于 Git 2.35.1.2 创建工作目录 ...
- Markdown 常用语法精讲
- #### 标题 (`# 跟标题名称一定要留空格`)> > # 一级标题> ## 二级标题> ### 三级标题> #### 四级标题> ##### 五级标题> ...
- 手把手教你分析MySQL查询性能瓶颈,包教包会
当一条SQL执行较慢,需要分析性能瓶颈,到底慢在哪? 我们一般会使用Explain查看其执行计划,从执行计划中得知这条SQL有没有使用索引?使用了哪个索引? 但是执行计划显示内容不够详细,如果显示用到 ...
- Redis进阶篇:发布订阅模式原理与运用
"65 哥,如果你交了个漂亮小姐姐做女朋友,你会通过什么方式将这个消息广而告之给你的微信好友?" "那不得拍点女朋友的美照 + 亲密照弄一个九宫格图文消息在朋友圈发布大肆 ...
- APT 安装 MySQL 提示错误:dpkg: error: dpkg frontend lock is locked by another process
在安装 MySQL 的时候提示错误: ubuntu@VM-0-6-ubuntu:/opt$ sudo dpkg -i mysql-apt-config_0.8.22-1_all.deb dpkg: e ...