一行shell查看redis 连接数分布

46 篇文章 0 订阅

背景

线上某个redis连接数过万,老报警,于是产生刚需:快速知道某个redis的client分布. 
用于快速找出连接数占用最多的客户端.

shell

习惯python的老司机处理这点小事,那还不是手到擒来.可是偶尔不也想装个逼,用shell么?

先上代码,接着解读

#!/bin/bash

host=$1 
port=$2

echo $host: $port 
redis-cli -h $host -p $port client list | awk '{print $2}'| 
cut -d = -f 2| cut -d : -f 1 | sort | uniq -c | sort -rn | 
awk '{"host " $2 | getline h; print $1 "\t" $2 "\t" h;}'| awk '{print $1 "\t" $2 "\t" $7}'

举例子:

./redis-cli -h 195.203.6.51 -p 6379 -a key@creditcard client list | awk '{print $2}'| cut -d = -f 2| cut -d : -f 1 | sort | uniq -c | sort -rn | awk '{"195.203.6.51 " $2 | getline h; print $1 "\t" $2 "\t" h;}'| awk '{print $1 "\t" $2 "\t" $7}' 

此行较长,CSDN显示有问题,请复制该行,获取代码

解读

首先是redis-cli的client list命令列出所有client信息. 
注意:如果client数特别多,可能超过输出长度限制 
每一行输出信息如下: 
id=2 addr=127.0.0.1:49759 fd=5 name= age=5471 idle=5455 flags=N db=0 sub=0 psub=0 multi=-1 qbuf=0 qbuf-free=0 obl=0 oll=0 omem=0 events=r cmd=get

接着是awk输出第二列addr=127.0.0.1:49759

接着是cut命令,-d =指定以=分隔, -f 2获取分隔后的第二列,也就是127.0.0.1:49759

同上,继续cut,:分隔,取第一列127.0.0.1(客户端IP) 
感觉这两个cut可以合二为一

接着sort排序

接着uniq -c去重计数,统计出每个IP多少个链接

接着sort -rn按连接数排个倒序.结果如下

160 10.83.72.99 
142 10.83.80.63 
141 10.83.73.112 
140 10.83.80.101 
140 10.83.203.68 
139 10.83.73.118 
139 10.83.212.136 
135 10.83.225.53 
135 10.83.225.33 
132 10.83.80.103 
132 10.83.225.52 
128 10.83.225.32 
128 10.83.225.31 
125 10.83.73.89 
125 10.83.200.53 
123 10.83.72.217 
16 127.0.0.1

这个时候已经知道那些客户端占用连接数最多了,但是显示的是IP,不直观,能不能把IP那一列换成域名或者说主机名呢?

接着awk '{"host " $2 | getline h; print $1 "\t" $2 "\t" h;}' 
慢慢来,花括号里一共两条语句,第一条语句对第二例(也就是IP)调用系统命令host,同时把结果保存在变量h里.getline获取前面shell的结果,传参就存在参数里,不传就默认 $0 
print输出第一列(计数),第二列(IP),h(主机信息,也就是host命令的结果)
--------------------- 
作者:secretx 
来源:CSDN 
原文:https://blog.csdn.net/secretx/article/details/73498148 
版权声明:本文为博主原创文章,转载请附上博文链接!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值