Каков наилучший способ получить количество узлов на один DC, которые принадлежат кластеру Cassandra с несколькими DC? - PullRequest
0 голосов
/ 09 мая 2018

Это расширенная версия этого

Для одного 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

Примечание: я не хочу использовать таблицу пиров, поскольку некоторые недействительные записи могут дать неправильный результат, однако статус nodetool более надежен.

1 Ответ

0 голосов
/ 09 мая 2018

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 } - напечатать последнюю статистику
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...