Как быстро удалить все файлы в множестве подкаталогов

Полезная мелочь которая пригодится если у вас файлы хранятся с одинаковой структурой и нужно быстро удалить/найти файлы по шаблону.

Вот пример поиска дирректорий во всех поддиректириях в папке subdir которые длинной в 5 символов

find -type d  -path '*/subdir/?????'

А затем собственно удаляем эти папки

find -type d  -path '*/subdir/?????' -exec rm -rf {} \;

 

Восстановление попрежденных файлов wsp (Whisper)

Graphite использует в качестве базы данных noSQL базу whisper, которая представляет собой просто структуру каталогов соответствующую ключу статистики в которых лежат файлы *.wsp где хранятся значения разбитые на временные участки.

Whisper это база данных со статичным размером, то есть при создании в конфиге вы определяете сколько и за какой период данных вы будете хранить, и как только появляется статистика с первым ключем, под него создается новый файл с указанным размером.

Данный конфиг задается в файле storage-schemas.conf

Пример такого конфига:

pattern = ^test\.
retentions = 10m:30d,30m:1y,1h:10y

Здесь все ключи, которые начинаются на test.* будут храниться 30 дней с периодичностью одно значение в 10 минут, один год с одним значением за 30 минут и 10 лет с одним значением в час. Все что старше 10 лет будет стираться.

Теперь вернемся к теме поста — если по какой либо причине файл повредился (например проблемы с винтами), графит не будет отображать данные по нему, а функция сумирования значений по маске, когда выводится общее значение по всем заданным метрикам тоже будет выдавать ошибку потому как один или несколько файлов повреждены.

Что бы починить это просто делаем изменения размеры базы на то же самое которое задано в конфиге. Для этого сначала переходим в папку где лежат эти wsp файлы в нужный каталог и выполняем команду

find ./ -type f -name '*.wsp' -exec whisper-resize.py --nobackup {} 10m:30d 30m:1y 1h:10y \;

Обратите внимание, временные промежутки разделены пробелом а не запятой как в конфиг файле.

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

Grafana — бесподобный дашборд графиков

Немного предыстории.

Я вообще говоря фанатик графиков, люблю что бы графиков было как можно больше, что бы различные оповещения сопровождались иллюстрацией на графике, в офисе у нас висит телек на который выведены графики с показателями основных параметров платформы.

Изначально я использовал какти с некоторыми дополнениями, об этом писал отдельный пост. Кто не работал с какти, раскажу что с ним не так — новый график нужно добавлять вручную, при чем это происходит в несколько этапов и занимает минут по 5-10 если уже знаешь что нужно сделать. Плюс к этому неудобство менеджмента когда графиков и данных очень много.

Затем была попытка применить заббикс для этих нужд. Из плюсов — там можно настроить discovery сервисов, когда заббикс самостоятельно создает новые графики по заданным критериям. Например из сервера выдается список пользователей, а заббикс по этому списку и заранее заданному шаблону запроса данных для каждого отдельного пользователя строит на каждого из них график.

Недостаток главный заключался в том, что графики у заббикса, простите, полнейшее говно.

grafana1

Без понимания что за данные изображены на графике возможно не будет настолько очевидно как это ужасно, но поверьте мне, графики заббикса не годятся ни для чего кроме мониторинга чисто серверных параметров типа трафика, памяти, nginx, php.

Удобство автоматического создания графиков теряло свою привлекательность абсолютным неудобством их отображения. Можно было либо выбирать по одному графику за раз из длиннющего выпадающего списка либо сделать комплексный экран и вывалить туда все графики по шаблону. В итоге выходили экраны на сотню и более графиков.

grafana2 

И снова обратите внимание на сколько уродски они выглядят. Оценить реально какую то динамику изменений невозможно. Вроде как и графики есть, а толку ноль.

Как появилось время, разочаровавшись заббиксом я решил попробовать новое решение и наткнулся на graphite, простая высокопроизводительная система ключ-значение на базе данных whisper. Суть в том, что в отличии от какти и заббикса здесь данные нужно пушить в базу, а не наоборот тянуть в базу с сервисов. Отсюда сразу же плюс в том, что данные автомаически собираются по всем нужным параметрам, этим управляет приложение, а не графит. Не нужно делать дополнительно дискавери сервисов как для заббикса, отдельно интефейсов для пула статы с сервиса.

Стата пулиться простым интерфейсом: ключ[пробел]значение[пробел][[время]]

Интерфейс графита который идет с ним в комплекте особо впечатления конечно не создает, скорее даже наоборот.

grafana3

Из всех сущестующих метрик можно формировать графики, создавать дашборды с предустановленными графиками, но это особо не интересно, т.к. этот интерфейс тоже совсем не интересен.

Настало время представить вам графану — лучший веб интерфейс для graphite и elasticsearch. Сам графит не хранит и не собирает данных, этим занимаются указанные выше системы, в моем случае графит. И выполняет он свою функцию наишучшим образом. В графите мне нравится все и отобразить там можно графики в любом виде, пользуясь кучей возможностей группировок, сумирования, создания переменных и прочее прочее.

grafana4Разве это не красота? Так выглядит один обзорный дашбоард.

Возможности по выводу графиков покрывают пока все мои нужды. Вся настройка проходит через удобный веб интерфейс в одном месте, все просто и понятно.

Есть так же и удобная возможность вывода десятков графиков (например какие то показатели по всем пользователям системы), только в отличии от забикса здесь можно добавить переменную с возможностью задания ей нескольких значений, и отображаться будут только графики по выбранным пользователям.

В общем подытожив, всячески рекомендую графану — лучший интерфейс графиков которые я встречал.

Впереди еще буду пробовать применять elasticsearch DB под свои нужды, с ним можно строить статистику в реальном времени.

Я снова на связи

Спустя три года решил возобновить записи в блог, за это время довольно много поменялось, узнал много нового и думаю будет о чем написать сюда.

Сейчас я являюсь СТО одного стартапа в рекламной сфере и наш проект обрабатывает запросы порядка трех миллионов пользователей в сутки. Вся архитектура проекта выстроена и поддерживается мной. Сейчас мы уже начали подключать команду админов для ее поддержания и оптимизации, так как у меня времени не хватает, смогу уделять больше времени другим моментам проекта.

Всегда настраивайте синхронизацию времени на серверах

Всегда, запомните, всегда настраивайте синхронизацию даты с внешними серверами. Особенно это актуально если у вас на компе запущена виртуалка где ведется разработка. Когда комп уходит с спящий режим, а затем просыпается, то дата со временем все больше и больше остает.

Это уже стоило мне один раз большому количеству потеряного времени на поиск причины проблемы. И после того я на рабочем компьютере настроил синхронизацию. 

Но вот недавно мне понадобилось подключить авторизацию через твиттер на одном личном сайте и разработка ведется тоже на личном ноуте, но через виртуалку.

Часов 6 я потратил на попытки определить причину проблемы. Различные настройки приложения в твиттере, настройки библиотеки hybrid_auth (библиотека для php которая позволяет легко подключать авторизацию через множество сервисов). И все тщетно.

Твиттер возвращал ошибку: 

Authentification failed! Twitter returned an error. 401 Unauthorized.

И вот, после многочисленных поисков с вариантами решений (ошибка одна, но причин ей множество) я наткнулся на этот ответ. И проблемы была именно в этом. В общем как только найдется время настрою и здесь себе синхронизацию времени.