UniFi — Как удалить старые (лишние) данные и отрегулировать размер базы данных Mongo

В статье описано, как отрегулировать размер базы данных, используемой контроллером UniFi с помощью сценария, удаляющего устаревшую статистическую информацию.
Для хранения информации о подключенных устройствах, конфигурации контроллера, клиентах и статистике, UniFi использует базу данных MongoDB.
Контроллер UniFi, оставленный без должного контроля, управляющий многими устройствами и ведущий журналы многих клиентов, может по прошествии некоторого времени, накопить очень большой объем данных.  В данной статье описано, как использовать сценарий prune (удаление старых данных) для удаления статистики, «возраст» которой превышает X дней, в том числе, событий, сообщений сигнализации, гостевых входов, обнаруженных ненадежных АР, известных клиентов, истекших квитанций чеков, статистики трафика.
Сценарий prune не будет удалять данные, важные для правильного функционирования контроллера, например, данные о пользователях, которые были блокированы.
Примечание: В версии V5, контроллер UniFi имеет опцию для удаления старой информации из базы данных (непосредственно из контроллера).  Предполагается, что Вы сможете зарегистрироваться в контроллере UniFi, поэтому пожалуйста, используйте функцию Compact Database (Уменьшить размер базы данных) в разделе Settings -> Maintenance (Настройки — Поддержание работоспособности) вместо способов, описанных в данной статье.

Содержание

  1. Как удалить старые данные контроллера, функционирующего под управлением Windows
  2. Как удалить старые данные контроллера, функционирующего под управлением Mac OS X
  3. Как удалить старые данные из контроллера, функционирующего под управлением Linux (Ubuntu, Debian и облачный ключ (Cloud Key))
  4. Сценарий Prune (для справок)

Как удалить старые данные контроллера, функционирующего под управлением Windows

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

Шаг 1: Загрузка Mongo

Установщик UniFi под Windows не содержит двоичного кода mongo.  Посетите Официальный сайт загрузки базы данных MongoDB, выберите версию 2.4.14 из раскрывающегося списка и загрузите архив .zip версии, соответствующей архитектуре CPU Вашего сервера.

Шаг 2: Извлечение Mongo

Извлеките \bin\mongo.exe в рабочий каталог, выбранный по Вашему усмотрению.  В данном примере мы использовали C:\prune\ . Вы можете игнорировать все остальные файлы, включенные в пакет.

Шаг 3: Загрузка сценария

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

Шаг 4: Открытие командной строки

Откройте командную строку. Для этого нажмите комбинацию клавиш WINDOWS + R на клавиатуре. В открывшемся меню введите cmd и нажмите ENTER (ВВОД).

Шаг 5: Вход в рабочий каталог

В командной строке введите команду перехода в рабочий каталог:

cd C:\prune\

Шаг 6: Выполнение теста работоспособности

По умолчанию сценарий работает в пробном режиме «dryrun». Поэтому он будет сообщать, что он удалит старые данные из базы данных, но на самом деле этого происходить не будет.  На этом шаге убедитесь, что сценарий действительно работает так, как ожидается.

mongo.exe —port 27117 < mongo_prune_js.js

На выходе должно быть примерно следующее:

2.68

Шаг 7: Выключение пробного режима «dryrun»

Чтобы выключить режим dryrun и задать число дней поддержки данных, отредактируйте сценарий.  По умолчанию сценарий поддерживает данные 7 дней.  В notepad (Блокнот) или другом текстовом редакторе простого текста измените сценарий. Не используйте редакторы сложного текста, такие как Wordpad или Word.  Рекомендуется использовать такой редактор, как Notepad++ , вследствие того, что он не добавляет скрытых символов и разрывов строк.
Отредактируйте var days=7; задайте другое число дней поддержки данных; измените var dryrun=true; на var dryrun=false; это позволит сценарию действительно удалять старые данные из базы данных (то есть он будет работать не так, как в режиме тестирования).

2.68-1

Шаг 8: Удаление старых данных из базы данных

Запустите отредактированный сценарий, реально вычищающий старые данные из базы данных:

mongo.exe —port 27117 < mongo_prune_js.js

Примечание: Вследствие того, что база данных действительно изменяется, данный шаг может занять больше времени, чем в режиме тестирования на шаге 6.  Не прерывайте вывод на консоли до тех пор, пока не получите сообщение «bye».

Шаг 9: Проверка выполнения

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

2.68-2

Шаг 10 (опция): Чистка

Удалите созданный Вами каталог и все данные внутри него (если Вы не собираетесь использовать его снова).

Как удалить старые данные контроллера, функционирующего под управлением Mac OS X

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

Шаг 1: Создание рабочего каталога

Создайте на компьютере рабочий каталог.  Для целей данной статьи мы создали каталог с именем /prune.

Шаг 2: Загрузка Mongo

Установщик UniFi под Mac OS X не содержит двоичного кода mongo.  Посетите  официальный сайт загрузки MongoDB, щелкните вкладкуe OSX, выберите версию 2.4.14 из раскрывающегося списка и загрузите пакет .tgz.

Шаг 3: Извлечение Mongo

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

Шаг 4: Перемещение Mongo в рабочий каталог

Отыщите двоичный файл bin/mongo и скопируйте его в рабочий каталог.  С этого момента загруженный пакет .tgz и любые дополнительные извлеченные файлы могут быть удалены. Необходимым является только двоичный файл mongo.

Шаг 5: Вход в рабочий каталог

Откройте окно терминала и перейдите из текущего каталога в рабочий каталог, созданный на шаге 1:

cd /prune

Шаг 6: Загрузка сценария

Загрузите сценарий для удаления старых данных:

curl «https://help.ubnt.com/hc/en-us/article_attachments/204082688/mongo_prune_js.js» -o «mongo_prune_js.js»

2.68-3

Шаг 7: Выполнение теста работоспособности

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

./mongo —port 27117 < mongo_prune_js.js

На выходе должно быть примерно следующее:

2.68-4

Шаг 8: Выключение пробного режима «dryrun»
Чтобы выключить режим dryrun и задать число дней поддержки данных, отредактируйте сценарий.  По умолчанию сценарий поддерживает данные 7 дней.  Для редактирования сценария используйте редактор nano или ему подобный:

nano mongo_prune_js.js

Допустим, Вы используете редактор nano. Для навигации по тексту используйте кнопки со стрелками.  Отредактируйте var days=7; задайте другое число дней поддержки данных; измените var dryrun=true; на var dryrun=false; это позволит сценарию действительно удалять старые данные из базы данных (то есть он будет работать не так, как в режиме тестирования).  По завершении редактирования, нажмите на клавиатуре CTRL + O, чтобы сохранить файл (для подтверждения нажмите Enter). Затем нажмите CTRL + X, чтобы выйти из редактора.

2.68-5

Шаг 9: Удаление старых данных из базы данных

Запустите отредактированный сценарий, реально вычищающий старые данные из базы данных:

./mongo —port 27117 < mongo_prune_js.js

Примечание: Вследствие того, что база данных действительно изменяется, данный шаг может занять больше времени, чем в режиме тестирования на шаге 7.  Не прерывайте вывод на консоли до тех пор, пока не получите сообщение «bye».

Шаг 10: Проверка выполнения

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

2.68-6

Шаг 11: Завершение сессии

Завершите сессию терминала:

exit

Закройте окно терминала.

Шаг 12 (ОПЦИЯ): Чистка

Удалите рабочий каталог, если не намереваетесь использовать его снова.

Как удалить старые данные из контроллера, функционирующего под управлением Linux (Ubuntu, Debian и облачный ключ (Cloud Key))

Подготовительные действия: Перед выполнением сценария, контроллер должен уже работать.  Если он не работает, пожалуйста, запустите его и только потом выполните описанные ниже шаги.  Вы можете запустить контроллер, введя после выполнения шага 2 следующую команду:

sudo service unifi start

Перед внесением значительных изменений (подобных этому) не забывайте создать резервную копию контроллера.

Шаг 1: Установление соединения

Подключитесь к серверу по SSH, используя клиент, который предпочитаете и пройдите аутентификацию.  Снимки экрана в этом разделе статьи сделаны для приложения PuTTY (в Windows).  Если используется клиент Linux или Mac, Вы можете подключиться к серверу из встроенного терминала.

Шаг 2: Вход в рабочий каталог

Перейдите в Ваш домашний каталог, либо создайте рабочий каталог (по своему усмотрению).  При напрсании данной статьи был использован домашний каталог.

cd ~

Шаг 3: Загрузка сценария

Загрузите на свой сервер сценарий для удаления старых данных:

wget https://help.ubnt.com/hc/en-us/article_attachments/204082688/mongo_prune_js.js

2.68-7

Шаг 4: Выполнение теста работоспособности

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

mongo —port 27117 < mongo_prune_js.js

На выходе должно быть примерно следующее:

2.68-8

Шаг 5: Выключение пробного режима «dryrun»
Чтобы выключить режим dryrun и задать число дней поддержки данных, отредактируйте сценарий.  По умолчанию сценарий поддерживает данные 7 дней.  Для редактирования сценария используйте редактор nano или ему подобный:

nano mongo_prune_js.js

Допустим, Вы используете редактор nano. Для навигации по тексту используйте кнопки со стрелками.  Отредактируйте var days=7; задайте другое число дней поддержки данных; измените var dryrun=true; на var dryrun=false; это позволит сценарию действительно удалять старые данные из базы данных (то есть он будет работать не так, как в режиме тестирования).  По завершении редактирования, нажмите на клавиатуре CTRL + O, чтобы сохранить файл (для подтверждения нажмите Enter). Затем нажмите CTRL + X, чтобы выйти из редактора.

2.68-9

Примечание: Если выдается ошибка, уведомляющая, что редактор nano не установлен, Вы можете установить его, выполнив следующую команду (после нее снова введите предыдущую команду):

sudo apt-get update && sudo apt-get -y install nano

Шаг 6: Удаление старых данных из базы данных

Запустите отредактированный сценарий, реально вычищающий старые данные из базы данных:

mongo —port 27117 < mongo_prune_js.js

Примечание: Вследствие того, что база данных действительно изменяется, данный шаг может занять больше времени, чем в режиме тестирования на шаге 4.  Не прерывайте вывод на консоли до тех пор, пока не получите сообщение «bye».

Шаг 7: Проверка выполнения

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

2.68-10

Шаг 8 (ОПЦИЯ): Чистка

Удалите сценарий из Вашего домашнего каталога, если не намереваетесь использовать его снова.

rm mongo_prune_js.js

Шаг 9: Завершение сессии

Завершите сессию терминала:

exit

Сценарий Prune (для справок)

Ниже для справок приведен текст сценария для удаления старых данных:

// Поддержка данных, накопленных в течение N дней var days=7;

// Замените на false, чтобы сценарий действительно удалял старые записи
// из базы данных. Пока значение равно true, никаких изменений в базе данных производиться не будет var dryrun=true;

var now = new Date().getTime(),

time_criteria = now — days * 86400 * 1000,
time_criteria_in_seconds = time_criteria / 1000;

print((dryrun ? «[dryrun] » : «») + «pruning data older than » + days + » days (» + time_criteria + «)… «);

use ace;

var collectionNames = db.getCollectionNames();

for (i=0; i<collectionNames.length; i++) {

var name = collectionNames[i];
var query = null;

if (name === ‘event’ || name === ‘alarm’) {

query = {time: {$lt:time_criteria}};

}

// ненадежная точка доступа

if (name === ‘rogue’) {

query = {last_seen: {$lt:time_criteria_in_seconds}};

}

// удаляет квитанции чеков, срок хранения которых превышает ‘$days’ дней

// активные и неиспользованные квитанции НЕ ТРОГАЕМ

if (name === ‘voucher’) {

query = {end_time: {$lt:time_criteria_in_seconds}};

}

// авторизация гостя

if (name === ‘guest’) {

query = {end: {$lt:time_criteria_in_seconds}};

}

// если пользователь был замечен только ОДНАЖДЫ, $last_seen не будет определена
// Итак, если $last_seen не определена, будем вместо нее использовать $first_seen
// Убедитесь также, что установлена $blocked или $use_fixedip. Если это так, НЕ стирайте
// элемент списка, неважно, насколько он старый. Нам требуется, чтобы заблокированные пользователи и пользователи с фиксированными ip-адресами продолжали
// оставаться заблокированными или с зафиксированными

ip-адресами if (name === ‘user’) {

query = { blocked: { $ne: true}, use_fixedip: { $ne: true}, $or: [

{last_seen: {$lt:time_criteria_in_seconds} },

{last_seen: {$exists: false}, first_seen: {$lt:time_criteria_in_seconds} }

]

};

}

if (query) {

count1 = db.getCollection(name).count();
count2 = db.getCollection(name).find(query).count();
print((dryrun ? «[dryrun] » : «») + «pruning » + count2 + » entries (total » + count1 + «) from » + name + «…
«);
if (!dryrun) {

db.getCollection(name).remove(query);
db.runCommand({ compact: name });

}

}

}

use ace_stat;

var collectionNames = db.getCollectionNames();

for (i=0; i<collectionNames.length; i++) {

var name = collectionNames[i];
var query = null;

// статистики в хронологическом порядке (stat.*)

if (name.indexOf(‘stat’)==0) {

query = {time: {$lt:time_criteria}};

}

if (query) {

count1 = db.getCollection(name).count();
count2 = db.getCollection(name).find(query).count();
print((dryrun ?
«[dryrun] » : «») + «pruning » + count2 + » entries (total » + count1 + «) from » + name + «… «);
if (!dryrun) {

db.getCollection(name).remove(query);
db.runCommand({ compact: name });

}

}

}

if (!dryrun) db.repairDatabase();

 

Другие статьи по этой темеUniFi - Как удалить старые (лишние) данные и отрегулировать размер базы данных Mongo

 

Все авторские права и другие права интеллектуальной собственности на данные материалы являются собственностью Компании «Рутстор» (ROOTSTORE). При использовании данного материала ссылка на сайт rootstore.ru обязательна.

Авторизация
*
*
Регистрация
*
*
*
*

Политика в отношении обработки персональных данных

1. Общие положения
Настоящая политика обработки персональных данных составлена в соответствии с требованиями Федерального закона от 27.07.2006. №152-ФЗ «О персональных данных» и определяет порядок обработки персональных данных и меры по обеспечению безопасности персональных данных ООО «Сети» (далее – Оператор).
1.1. Оператор ставит своей важнейшей целью и условием осуществления своей деятельности соблюдение прав и свобод человека и гражданина при обработке его персональных данных, в том числе защиты прав на неприкосновенность частной жизни, личную и семейную тайну.
1.2. Настоящая политика Оператора в отношении обработки персональных данных (далее – Политика) применяется ко всей информации, которую Оператор может получить о посетителях веб-сайта https://rootstore.ru.

2. Основные понятия, используемые в Политике
2.1. Автоматизированная обработка персональных данных – обработка персональных данных с помощью средств вычислительной техники;
2.2. Блокирование персональных данных – временное прекращение обработки персональных данных (за исключением случаев, если обработка необходима для уточнения персональных данных);
2.3. Веб-сайт – совокупность графических и информационных материалов, а также программ для ЭВМ и баз данных, обеспечивающих их доступность в сети интернет по сетевому адресу https://rootstore.ru;
2.4. Информационная система персональных данных — совокупность содержащихся в базах данных персональных данных, и обеспечивающих их обработку информационных технологий и технических средств;
2.5. Обезличивание персональных данных — действия, в результате которых невозможно определить без использования дополнительной информации принадлежность персональных данных конкретному Пользователю или иному субъекту персональных данных;
2.6. Обработка персональных данных – любое действие (операция) или совокупность действий (операций), совершаемых с использованием средств автоматизации или без использования таких средств с персональными данными, включая сбор, запись, систематизацию, накопление, хранение, уточнение (обновление, изменение), извлечение, использование, передачу (распространение, предоставление, доступ), обезличивание, блокирование, удаление, уничтожение персональных данных;
2.7. Оператор – государственный орган, муниципальный орган, юридическое или физическое лицо, самостоятельно или совместно с другими лицами организующие и (или) осуществляющие обработку персональных данных, а также определяющие цели обработки персональных данных, состав персональных данных, подлежащих обработке, действия (операции), совершаемые с персональными данными;
2.8. Персональные данные – любая информация, относящаяся прямо или косвенно к определенному или определяемому Пользователю веб-сайта https://rootstore.ru;
2.9. Пользователь – любой посетитель веб-сайта https://rootstore.ru;
2.10. Предоставление персональных данных – действия, направленные на раскрытие персональных данных определенному лицу или определенному кругу лиц;
2.11. Распространение персональных данных – любые действия, направленные на раскрытие персональных данных неопределенному кругу лиц (передача персональных данных) или на ознакомление с персональными данными неограниченного круга лиц, в том числе обнародование персональных данных в средствах массовой информации, размещение в информационно-телекоммуникационных сетях или предоставление доступа к персональным данным каким-либо иным способом;
2.12. Трансграничная передача персональных данных – передача персональных данных на территорию иностранного государства органу власти иностранного государства, иностранному физическому или иностранному юридическому лицу;
2.13. Уничтожение персональных данных – любые действия, в результате которых персональные данные уничтожаются безвозвратно с невозможностью дальнейшего восстановления содержания персональных данных в информационной системе персональных данных и (или) уничтожаются материальные носители персональных данных.

3. Оператор может обрабатывать следующие персональные данные Пользователя
3.1. Фамилия, имя, отчество;
3.2. Электронный адрес;
3.3. Номера телефонов;
3.4. Также на сайте происходит сбор и обработка обезличенных данных о посетителях (в т.ч. файлов «cookie») с помощью сервисов интернет-статистики (Яндекс Метрика и Гугл Аналитика и других).
3.5. Вышеперечисленные данные далее по тексту Политики объединены общим понятием Персональные данные.

4. Цели обработки персональных данных
4.1. Цель обработки персональных данных Пользователя — информирование Пользователя посредством отправки электронных писем; предоставление доступа Пользователю к сервисам, информации и/или материалам, содержащимся на веб-сайте.
4.2. Также Оператор имеет право направлять Пользователю уведомления о новых продуктах и услугах, специальных предложениях и различных событиях. Пользователь всегда может отказаться от получения информационных сообщений, направив Оператору письмо на адрес электронной почты admin@rootstore.ru с пометкой «Отказ от уведомлений о новых продуктах и услугах и специальных предложениях».
4.3. Обезличенные данные Пользователей, собираемые с помощью сервисов интернет-статистики, служат для сбора информации о действиях Пользователей на сайте, улучшения качества сайта и его содержания.

5. Правовые основания обработки персональных данных
5.1. Оператор обрабатывает персональные данные Пользователя только в случае их заполнения и/или отправки Пользователем самостоятельно через специальные формы, расположенные на сайте https://rootstore.ru. Заполняя соответствующие формы и/или отправляя свои персональные данные Оператору, Пользователь выражает свое согласие с данной Политикой.
5.2. Оператор обрабатывает обезличенные данные о Пользователе в случае, если это разрешено в настройках браузера Пользователя (включено сохранение файлов «cookie» и использование технологии JavaScript).

6. Порядок сбора, хранения, передачи и других видов обработки персональных данных
Безопасность персональных данных, которые обрабатываются Оператором, обеспечивается путем реализации правовых, организационных и технических мер, необходимых для выполнения в полном объеме требований действующего законодательства в области защиты персональных данных.
6.1. Оператор обеспечивает сохранность персональных данных и принимает все возможные меры, исключающие доступ к персональным данным неуполномоченных лиц.
6.2. Персональные данные Пользователя никогда, ни при каких условиях не будут переданы третьим лицам, за исключением случаев, связанных с исполнением действующего законодательства.
6.3. В случае выявления неточностей в персональных данных, Пользователь может актуализировать их самостоятельно, путем направления Оператору уведомление на адрес электронной почты Оператора admin@rootstore.ru с пометкой «Актуализация персональных данных».
6.4. Срок обработки персональных данных является неограниченным. Пользователь может в любой момент отозвать свое согласие на обработку персональных данных, направив Оператору уведомление посредством электронной почты на электронный адрес Оператора admin@rootstore.ru с пометкой «Отзыв согласия на обработку персональных данных».

7. Трансграничная передача персональных данных
7.1. Оператор до начала осуществления трансграничной передачи персональных данных обязан убедиться в том, что иностранным государством, на территорию которого предполагается осуществлять передачу персональных данных, обеспечивается надежная защита прав субъектов персональных данных.
7.2. Трансграничная передача персональных данных на территории иностранных государств, не отвечающих вышеуказанным требованиям, может осуществляться только в случае наличия согласия в письменной форме субъекта персональных данных на трансграничную передачу его персональных данных и/или исполнения договора, стороной которого является субъект персональных данных.

8. Заключительные положения
8.1. Пользователь может получить любые разъяснения по интересующим вопросам, касающимся обработки его персональных данных, обратившись к Оператору с помощью электронной почты admin@rootstore.ru.
8.2. В данном документе будут отражены любые изменения политики обработки персональных данных Оператором. Политика действует бессрочно до замены ее новой версией.
8.3. Актуальная версия Политики в свободном доступе расположена в сети Интернет по адресу https://rootstore.ru/privacy/.

Генерация пароля