k8s企业elk性能调优问题

问题

logstash消费速率远低于日志数量,消息堆积

部署背景

在这里插入图片描述

架构优点:

1、采用kafka作为日志缓冲,在高并发情况下可以通过队列就能起到削峰填谷的作用,防止 es 集群丢失数据。
2、实现动态schema,业务可以自定义schema,方便日志检索和查询
3、每一个业务有独立的索引
2.1 elk+kafka

发现问题

部署后发现日志量很大,一天有几个亿,kafka中堆积了很多消息,logstash消费不掉,增加logstash实例也收效甚微

1.怀疑是logstash的配置问题,导致消费太慢
2.es的效率是瓶颈

logstash配置

pipeline:
    workers: 30
    output.workers: 32
    batch.size: 3000
    batch.delay: 5

一下是input配置

inputs:
  main: |-
    input {
      kafka {
         type => "lx_service"
         codec => "plain"
         auto_offset_reset => "latest"
         client_id => "logstash2es-consumer"
         group_id => "logstash2es-consumer"
         topics_pattern  => ".*"
         bootstrap_servers => "kafka.logcenter-cluster.svc:9092"
         decorate_events => true
         consumer_threads => 4
         max_poll_records => "5000"
      }
    }
关键参数

pipeline.workers:64
总工作线程数,filter的速率主要取决于这个参数
pipeline.output.workers:32
output的线程数,不能高于worker线程数
pipeline.batch.size:1000
batch的总大小
pipeline.batch.delay:10
batch延迟的时间
consumer_threads => 4
消费者线程数,所有pod加起来的总数要尽量跟kafka的partition保持一致max_poll_records => “5000”
每次拉取的最大记录数queue.max_bytes: 4gblogstash队列最大保存大小。注:一定要比存储盘小

kafkaManager

在这里插入图片描述

事例:

假设logstash配置30个pod,每个pod配置4个consumer thread,那么共计我们就有4*30=120个consumer。假设有200个partition,那么就有80个partition会和其他partition持有相同的consumer,这样就没有分配到最合理。

优化方案:

发布4*50个=consumer线程,每个partition对应一个consumer线程。

问题排查

1.查看pod状态

进入pod
exec -it xxx /bin/bash
使用top命令,观察cpuload
在这里插入图片描述
cpuload保持在核数左右,还是比较可行的,高了则可以减少worker数量

2.查看集群pod内存及cpu使用

注:logstash在发布时cpu会快速增长,启动后恢复正常

3.通过ES索引速率查看当前消费效果

在这里插入图片描述
一万以下一定是有问题的

4.ES集群一直处于runing,没有可用

在这里插入图片描述一般是状态没有达到green

查看实际workers

top -H -p [pid进程号]

查看实际workers,一般等于核数
cpu load最好差不多等于核数
在这里插入图片描述

vmstat命令

查看bi和bo
看进入的io和输出io的量是否差不多

优化前在这里插入图片描述
优化后

在这里插入图片描述

千万不要加的配置

queue.checkpoint.writes: 1
logstash的持久化策略,为1时随时持久化到磁盘,非常影响效率

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以按照以下步骤来部署一个基于Kubernetes的ELK(Elasticsearch, Logstash, Kibana)集群: 1. 配置Kubernetes集群:首先,确保你有一个可用的Kubernetes集群。你可以使用工具如kops、kubeadm或Minikube来搭建一个本地测试环境。 2. 部署Elasticsearch:Elasticsearch是ELK集群的核心组件。你可以使用Helm来简化部署过程。首先,安装Helm客户端,并添加Elasticsearch的Helm存储库: ``` helm repo add elastic https://helm.elastic.co helm repo update ``` 然后,创建一个名为elasticsearch的命名空间,并部署Elasticsearch: ``` kubectl create namespace elasticsearch helm install elasticsearch elastic/elasticsearch -n elasticsearch ``` 注意:根据你的需求,你可能需要修改Elasticsearch的配置。 3. 部署Logstash:Logstash是用于日志收集和处理的组件。同样地,你可以使用Helm来部署Logstash: ``` kubectl create namespace logstash helm install logstash elastic/logstash -n logstash ``` 你也可以根据需求修改Logstash的配置。 4. 部署Kibana:Kibana是ELK集群的可视化工具。使用Helm来部署Kibana: ``` kubectl create namespace kibana helm install kibana elastic/kibana -n kibana ``` 同样地,你可以自定义Kibana的配置。 5. 配置与连接:根据你的需求,你可能需要配置Elasticsearch、Logstash和Kibana之间的连接。你可以使用Kubernetes的Service、Ingress或者LoadBalancer来使它们能够相互通信。 这样,你就完成了一个基于Kubernetes的ELK集群的部署。记得根据你的需求进行适当的配置和调整。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值