这是this
的扩展版本对于单个DC,我可以使用上面链接中描述的命令:
nodetool status | awk '/^(U|D)(N|L|J|M)/' | wc -l
我不知道如何获得多个直流的计数数组。 节点工具输出如下:
Datacenter: DC1
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
DN xx.xx.xx.xx 446.13 KB 256 ? 968d5d1e-a113-40ce-9521-e392a927ea5e rack1
DL xx.xx.xx.xx 446.13 KB 256 ? fc5c2dbe-8834-4040-9e77-c3d8199b6767 rack1
Datacenter: DC2
===============
Status=Up/Down
|/ State=Normal/Leaving/Joining/Moving
-- Address Load Tokens Owns Host ID Rack
UN xx.xx.xx.xx 446.13 KB 256 ? 6d28d540-2b44-4522-8612-b5f70a3d7d52 rack1
上述情况下的预期输出:
2 1
注意:我不想使用peer表,因为某些无效的条目可能会给出错误的结果,但nodetool状态更可靠。
答案 0 :(得分:4)
Awk
方法:
nodetool status \
| awk '/Datacenter/{ if (cnt) printf cnt OFS; cnt=0 }/^[A-Z]{2} /{ cnt++ }END{ print cnt }'
输出:
2 1
/^[A-Z]{2} /{ cnt++ }
- 遇到以2个大写节点名称[A-Z]{2}
开头的行 - 使用cnt++
计算/累计节点数/Datacenter/{ if (cnt) printf cnt OFS; cnt=0 }
- 遇到Datacenter
部分检查是否有先前的统计信息(节点名称计数),如果是,请将其打印printf cnt OFS
并重置cnt
变量以分开计数END{ print cnt }
- 打印上次统计信息