Пример удаления ненужных метрик из clickhouse для graphite based monitoring

Может случиться так, что в вашу систему мониторинга на основе graphite + clickhouse попало что-то лишнее/неправильно сформированная метрика или вдруг метрики от приложения/сервера вам стали больше не нужны.

На самом деле многое зависит от схемы именования метрик, если она хорошо спроектирована, то удаление может и не понадобиться. Например, у нас она не очень удачна - все базируется на имени хоста (по-хорошему надо отталкиваться от имени application, которое шлет метрики, например, stats.collectd.my-server1.load):

stats.my-server1
stats.my-server1.load
stats.my-server1.load.midterm
stats.my-server1.load.longterm
stats.my-server1.load.shortterm
stats.my-server1.memory
stats.my-server1.nginx
...
stats.my-server2
stats.my-server2.load
stats.my-server2.load.midterm
...
 

Если в префикс stats будут слаться метрики от ненужных хостов/контейнеров/вообще что-то постороннее, то мы можем увидеть следующее:

К примеру, полученные метрики от collectd:

Переменная server в графане выглядит как stats.* На скриншоте метрики от короткоживущих контейнеров, которые не нужны (в stats.* ожидаем увидеть нормальные говорящие имена физических серверов).

Чтобы это почисть, необходимо выполнить 2 шага:

1. Почистить данные из таблицы с типом index:

carbon-clickhouse.conf:
...
[upload.graphite_index]
type = "index"
table = "graphite.graphite_index"

 

Запрос в БД:

Use graphite
ALTER TABLE graphite_index delete where Path like 'stats.bad_metrics.%';
ALTER TABLE graphite_index delete where Path like 'stats.486f3dfaddef.%';

 

2. Почистить данные из таблицы с типом points:

carbon-clickhouse.conf:
...
[upload.graphite]
type = "points"
table = "graphite.graphite"

 Запрос в БД:

USE graphite
ALTER TABLE graphite delete where Path like 'stats.0b54abdd995e.%';

 

Посмотреть как все будет удаляться (т.к. удаление асинхронно):

select * from system.mutations where table='graphite_index' FORMAT Vertical;
select * from system.mutations where table='graphite' FORMAT Vertical;

 

Насчет второго шага очень сильно не уверен - когда будут большие объемы записанных метрик, то здесь могут быть проблемы. На практике удаление points из таблицы объемом ~30Гб, расположенной на одном сервере, заняло часы. Предположительно в будущем объем метрик в БД будет до 1,5 ТБ и очень вероятно, что второй шаг не стоит делать. На самом деле, чтобы графана перестала отображать список содержимого из пути stats, достаточно почистить данные в таблице graphite_index.

 

 

Please publish modules in offcanvas position.