最近发现向es集群写数据需要很长的耗时,感觉应该是集群扛不住了,所以想观察一下es目前的写入速度,结果发现这玩意还这么不好看,所以写下此文,分享一下
1. 写入速度检测思路
es集群没有直接提供相应的接口查询集群写入速度,所以就要曲线救国,我目前采用的思路是,每两秒记录一下当前集群的文档总数,然后计算平均每秒写入速度的方法
其脚本如下
#!/bin/bash
ES_HOST='192.168.20.168:9200'
ES_DOC_COUNT_REQUEST="curl -s -XGET $ES_HOST/_cat/count/"
eval `$ES_DOC_COUNT_REQUEST | awk '{ printf("time=%s; VAR2=%s", $2, $3) }'`
last_doc=$VAR2
last_time=$(date -d "$time" +%s)
for ((i=1; i<=20; i++))
do
sleep 2s
eval `$ES_DOC_COUNT_REQUEST | awk '{ printf("time=%s; VAR2=%s", $2, $3) }'`
current_doc=$(($VAR2-$last_doc))
current_time=$(($(date -d "$time" +%s)-$last_time))
last_doc=$VAR2
last_time=$(date -d "$time" +%s)
witer_per_second=$(($current_doc / $current_time))
echo write per second $witer_per_second
done
其中ES_HOST为es集群地址,自行修改直接运行即可
2. 更全面的es集群监控手段
我现在只是需要看写入速度来排查问题,一般的话,我们需要对es整个集群的运行状况有个全面的检测,要做成这样,自然不能自己造轮子了,es也提供了类似的功能支持,就是x-pack + kibana来实现监控,等有时间搞起来以后,再来分享搭建过程~