场景举例:批量获取zk中/dubbo/interface下服务方、消费方的信息,得到的内容中各属性字段不易读取,需要解码。
获取dubbo节点信息:
#!/bin/bash
cluster=$1
idc=$2
sh ./zookeeper/bin/zkCli.sh ls /dubbo > ${idc}_interface.txt
##根据实际情况,排除客户端连接返回的无用信息
cat ${idc}_interface.txt | grep -v "2023-08-09" | grep "\[.*\]" -o | sed 's/, /\n/g;s/\[//g;s/\]//g' > ${idc}_interface_col.txt
for i in `cat ${idc}_interface_col.txt`;do providers=`sh ./zookeeper/bin/zkCli.sh ls /dubbo/$i/providers`;echo $providers;done > ${idc}_providers.txt
for i in `cat ${idc}_interface_col.txt`;do consumers=`sh ./zookeeper/bin/zkCli.sh ls /dubbo/$i/consumers`;echo $consumers;done > ${idc}_consumers.txt
cat ${idc}_providers.txt | sed 's#\%3A\%2F\%2F#\:\/\/#g;s#\%3F#\?#g;s#\%3D#\=#g;s#\%26#\&#g;s#\%2F#\/#g;s#\%2C#\,#g;s#\%3A#\:#g' | grep "\[dubbo.*\]" -o | awk -F']' '{print $1}' | sed 's/\[//g;s/, /\n/g' > ${idc}_providers_col.txt
cat ${idc}_consumers.txt | sed 's#\%3A\%2F\%2F#\:\/\/#g;s#\%3F#\?#g;s#\%3D#\=#g;s#\%26#\&#g;s#\%2F#\/#g;s#\%2C#\,#g;s#\%3A#\:#g' | grep "\[consumer.*\]" -o | awk -F']' '{print $1}' | sed 's/\[//g;s/, /\n/g' > ${idc}_consumers_col.txt
##provider字段根据实际情况和需求进行增改
for url in `cat ${idc}_providers_col.txt`
do
ip=`echo $url| awk -F'/|:' '{print $4}'`
port=`echo $url| awk -F'/|:' '{print $5}'`
application=`echo $url | grep -o "application=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
interface=`echo $url | grep -o "interface=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
side=`echo $url | grep -o "side=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
echo $cluster,$idc,$ip,$port,$application,$interface,$side
done > ${idc}_providers.db
##consumer字段根据实际情况和需求进行增改
for url in `cat ${idc}_consumers_col.txt`
do
ip=`echo $url| awk -F'/|:' '{print $4}'`
application=`echo $url | grep -o "application=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
interface=`echo $url | grep -o "interface=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
side=`echo $url | grep -o "side=.*\&" | awk -F'&' '{print $1}' | awk -F'=' '{print $2}'`
echo $cluster,$idc,$ip,$application,$interface,$side
done > ${idc}_consumers.db
脚本中的解码解释:
编码对应关系
| url编码 | url解码 |
|---|---|
| %3A%2F%2F | :// |
| %3F | ? |
| %3D | = |
| %26 | & |
| %2F | / |
| %2C | , |
| %3A | : |
可以使用sed直接修改文件:
sed -i -e 's#\%3A\%2F\%2F#\:\/\/#g' -e 's#\%3F#\?#g' -e 's#\%3D#\=#g' -e 's#\%26#\&#g' -e 's#\%2F#\/#g' -e 's#\%2C#\,#g' -e 's#\%3A#\:#g' providers.txt
或者
sed -i 's#\%3A\%2F\%2F#\:\/\/#g;s#\%3F#\?#g;s#\%3D#\=#g;s#\%26#\&#g;s#\%2F#\/#g;s#\%2C#\,#g;s#\%3A#\:#g' providers.txt
consumers文件同理。
该脚本用于批量从Zookeeper获取Dubbo接口下的服务提供者和服务消费者信息,并进行解码处理。首先,通过Zookeeper的zkCli.sh获取/dubbo/interface下的节点信息,然后过滤并提取服务方和消费方的详细数据。接着,使用正则表达式和awk等工具对URL编码进行解码,最后分别输出服务提供者和消费者的信息到不同的文件中,包括IP、端口、应用名、接口和角色等关键字段。
3万+

被折叠的 条评论
为什么被折叠?



