Oude gegevens verwijderen (Prune) en de Mongo-databasegrootte aanpassen

Oude gegevens verwijderen (Prune) en de Mongo-databasegrootte aanpassen

UniFi gebruikt MongoDB om relevante informatie over aangesloten apparaten, controllerconfiguratie, clients en statistieken op te slaan. De UniFi Network Controller biedt de mogelijkheid om de database vanuit de Controller zelf te comprimeren. Ervan uitgaande dat u in staat bent om in te loggen op de UniFi Network Controller, gebruik dan de compacte databaseknop onder het gedeelte Services in Instellingen> Onderhoud in plaats van de handmatige prune-instructies in dit artikel te volgen.

De compacte database-optie verwijdert geen gegevens uit de database, maar verkleint alleen de gegevensgrootte van wat zich momenteel in de database bevindt. Het comprimeren van de database omvat defragmentatie, maar niet het corrigeren van fouten. Volg de onderstaande instructies als er vermoedelijke ongeldige of corrupte vermeldingen in uw database zijn.

Hoe u een op Windows gehoste controller kunt "Prunen".​

1. Download Mongo. Het Windows UniFi-installatieprogramma bevat niet het mongo-binaire bestand. Bezoek de officiële MongoDB-downloadwebsite en download de .zip-release die overeenkomt met uw besturingssysteem en de MongoDB die overeenkomt met de versie die uw UniFi Network Controller-versie gebruikt, zoals te zien in het MongoDB-logboek of vermeld in de release-opmerkingen van de controller op de community .

2. Extract mongo. Pak \ bin \ mongo.exe uit in een werkmap naar keuze. In dit voorbeeld wordt C: \ prune \ gebruikt. U kunt alle andere bestanden in het pakket negeren.

3. Download Script. Download het script naar de server door hier te klikken en sla het op in uw werkmap.

4. Open de opdrachtprompt. Open de opdrachtprompt door op WINDOWS + R te drukken. Typ cmd in de pop-up en druk op ENTER.

5. Ga naar de Working Directory. Ga in de opdrachtprompt naar uw werkmap door de volgende opdracht in te typen en op enter te drukken:
Code:
cd C:\prune\
6. Voer een testrun uit. Standaard staat het script in de "dry run" -modus en geeft aan wat er uit de database wordt verwijderd zonder het daadwerkelijk te doen. Deze stap is om ervoor te zorgen dat het script werkt zoals verwacht. Typ de volgende opdracht en druk op Enter:
Code:
mongo.exe --poort 27117 <mongo_prune_js.js
De uitvoer zou er ongeveer zo uit moeten zien:

1.png


7. Schakel "dryrun" uit. Bewerk het script om dryrun uit te schakelen en configureer het aantal dagen aan gegevens dat moet worden bewaard. Standaard bewaart het script gegevens voor 7 dagen. Gebruik Notepad ++ of een vergelijkbare teksteditor om het script te wijzigen en op te slaan. Gebruik geen rich-text-editor zoals Wordpad of Word die verborgen tekens kan toevoegen en geen rekening houdt met regeleinden.

Bewerk var dagen = 7; om te wijzigen hoeveel dagen aan gegevens bewaard moeten blijven, en verander var dryrun = true; naar var dryrun = false; zodat het script de database daadwerkelijk kan opschonen in plaats van alleen een testrun uit te voeren.

2.png


8. Prune de database. Nadat de wijzigingen zijn aangebracht en opgeslagen, voert u het aangepaste script uit, waarbij u de database deze keer daadwerkelijk opschoont:
Code:
mongo.exe --poort 27117 <mongo_prune_js.js
Info
Aangezien de database daadwerkelijk wordt gewijzigd, kan deze stap aanzienlijk langer duren in vergelijking met de test (droog). Onderbreek het proces niet totdat u een bericht ontvangt dat zegt tot Goodbye.

9. Controleer de voltooiing. Controleer of de bewerking is voltooid en of er geen fouten zijn gerapporteerd. De uitvoer moet er ongeveer zo uitzien:

3.png


10.
optional.svg
Opruimen.
Verwijder de map die u heeft gemaakt en de bestanden erin als u ze niet opnieuw wilt gebruiken.

Hoe een controller te prunen die wordt gehost op macOS​

1. Maak een werkdirectory. Maak een werkmap op de computer. Voor de toepassing van dit artikel maken we een map met de naam / prune.

2. Download Mongo. Het macOS UniFi-installatieprogramma bevat niet het mongo-binaire bestand. Bezoek de officiële downloadwebsite van MongoDB en download de .tgz-release die overeenkomt met de CPU-architectuur van uw server. U kunt hier ook 3.4.24 downloaden dat overeenkomt met de 5.12.66-controllerversie: 3.4.XX.tgz.

3. Extract mongo. Verplaats het gedownloade pakket naar uw werkmap en pak het uit door erop te dubbelklikken of door de toepassing van uw keuze te gebruiken.

4. Verplaats Mongo naar de werkmap. Zoek het binaire bestand bin / mongo en kopieer het naar uw werkmap. Op dit punt kunnen het gedownloade .tgz-pakket en eventuele extra uitgepakte bestanden worden verwijderd omdat we alleen het Mongo-binaire bestand nodig hebben.

5. Ga naar de Working Directory. Open een Terminal-venster en verander de mappen naar de werkmap die in Stap 1 is gemaakt met de volgende opdracht:
Code:
cd /prune

6. Download Script. Download het prunescript met het volgende commando:
Code:
krul "https://help.ui.com/hc/article_attachments/115024095828/mongo_prune_js.js" -o "mongo_prune_js.js"

4.png


7. Voer een testrun uit. Voer een testrun van het script uit. Standaard staat het script in de "dry run" -modus en geeft aan wat er uit de database wordt verwijderd zonder het daadwerkelijk te doen. Deze stap zorgt ervoor dat het script wordt uitgevoerd zoals verwacht:
Code:
./mongo --port 27117 <mongo_prune_js.js
De uitvoer zou er ongeveer zo uit moeten zien:

5.png


8. Schakel "dry run" uit. Als alles correct lijkt, bewerk dan het script om dry run uit te schakelen en configureer het aantal dagen aan gegevens dat moet worden bewaard. Standaard bewaart het script gegevens voor 7 dagen. Gebruik nano of een vergelijkbare editor om het script als zodanig aan te passen:
Code:
nano mongo_prune_js.js
Ervan uitgaande dat u nano gebruikt om het bestand te bewerken, gebruikt u de pijltoetsen om door de tekst te navigeren. Bewerk var dagen = 7; om te wijzigen hoeveel dagen aan gegevens bewaard moeten blijven, en verander var dryrun = true; naar var dryrun = false; zodat het script de database daadwerkelijk kan opschonen in plaats van alleen een testrun uit te voeren. Als u klaar bent, drukt u op CTRL + O om het bestand op te slaan (druk op Enter om te bevestigen) en CTRL + X om af te sluiten.

6.png


9. Prune de database. Voer het gewijzigde script uit en verwijder de database deze keer:
Code:
./mongo --port 27117 <mongo_prune_js.js
Info
Aangezien de database daadwerkelijk wordt gewijzigd, kan deze stap aanzienlijk langer duren in vergelijking met de test (droog). Onderbreek het proces niet totdat u een bericht ontvangt dat zegt Goodbye.


10. Controleer de voltooiing. Controleer of de bewerking is voltooid en of er geen fouten zijn gerapporteerd. De uitvoer moet er ongeveer zo uitzien:

7.png


11. Einde sessie. Beëindig de Terminal-sessie door de volgende opdracht te typen en op enter te drukken. Sluit vervolgens het Terminal-venster.

12.
optional.svg
Opruimen.
Verwijder de werkdirectory als u deze niet opnieuw wilt gebruiken.
Info

Als u een fout ziet die luidt:
Code:
WAARSCHUWING: shell- en serverversies komen niet overeen
Download een oudere versie van mongoDB. Probeer v3.4.x in plaats van de huidige versie:

Een op Linux gehoste controller prunen (Ubuntu, Debian en Cloud Key)​

De controller moet actief zijn voordat het script wordt uitgevoerd. Als het niet actief is, start dan de Controller voordat u de volgende stappen uitvoert en het volgende commando geeft na Stap 2: Ga naar de Working Directory.
Code:
sudo service unifi start

1. Breng een verbinding tot stand. Maak verbinding met uw server via SSH met behulp van uw voorkeursclient en authenticeer. De schermafbeeldingen in dit gedeelte van het artikel zijn van PuTTY op Windows. Als u een Linux- of Mac-client gebruikt, kunt u verbinding maken met de server met behulp van de ingebouwde Terminal-applicatie.

2. Ga naar de Working Directory. Ga naar uw homedirectory of maak een werkdirectory naar keuze. Voor dit artikel wordt de homedirectory gebruikt.
Code:
cd ~

3. Download Script. Download het prunescript naar uw server:
Code:
wget https://help.ui.com/hc/article_attachments/115024095828/mongo_prune_js.js

8.png


4. Voer een test run uit. Voer een testrun van het script uit. Standaard staat het script in de "dry run" -modus en geeft aan wat er uit de database wordt verwijderd zonder het daadwerkelijk te doen. Deze stap controleert of het script wordt uitgevoerd zoals verwacht:
Code:
mongo --port 27117 <mongo_prune_js.js
De uitvoer zou er ongeveer zo uit moeten zien:

9.png


5. Schakel "dry run" uit. Bewerk het script om dry run uit te schakelen en configureer het aantal dagen aan gegevens dat moet worden bewaard. Standaard bewaart het script gegevens voor 7 dagen. Gebruik nano of een vergelijkbare editor om het script als zodanig aan te passen:
Code:
nano mongo_prune_js.js
Ervan uitgaande dat u nano gebruikt om het bestand te bewerken, gebruikt u de pijltoetsen om door de tekst te navigeren. Bewerk var dagen = 7; om te wijzigen hoeveel dagen aan gegevens bewaard moeten blijven, en verander var dryrun = true; naar var dryrun = false; zodat het script de database daadwerkelijk kan opschonen in plaats van alleen een testrun uit te voeren. Als u klaar bent, drukt u op CTRL + O om het bestand op te slaan (druk op Enter om te bevestigen) en CTRL + X om af te sluiten.

10.png

Info
Als u een foutmelding krijgt die aangeeft dat nano niet is geïnstalleerd, kunt u het installeren met de volgende opdracht en vervolgens de vorige opdracht opnieuw uitvoeren:
Code:
sudo apt-get update && sudo apt-get -y install nano

6. Database opschonen. Voer het gewijzigde script uit en verwijder deze keer de database:
Code:
mongo --port 27117 <mongo_prune_js.js
Info
Aangezien de database daadwerkelijk wordt gewijzigd, kan deze stap aanzienlijk langer duren in vergelijking met de test (droog). Onderbreek het proces niet totdat u een bericht ontvangt dat zegt Goodbye.


7. Controleer de voltooiing. Controleer of de bewerking is voltooid en of er geen fouten zijn gerapporteerd. De uitvoer moet er ongeveer zo uitzien:

11.png


8.
optional.svg
Opruimen.
Verwijder het script uit uw homedirectory als u het niet opnieuw wilt gebruiken:
Code:
rm mongo_prune_js.js
9. Beëindig de sessie. Beëindig de terminalsessie:
Code:
Uitgang

Een controller snoeien die wordt gehost op UniFi OS (UDM-Pro)​


1. Voer de shell in en download het script:
Code:
unifi-os shell-
curl https: // help.ui .com / hc / article _attachments / 115024095828 / mongo_prune_js.js -o /tmp/mongo_prune_js.js

2.
optional.svg
Definieer dagen om gegevens te bewaren.
Voer de volgende opdrachten uit om het aantal dagen te wijzigen dat gegevens worden bewaard. Het onderstaande voorbeeld stelt de 'dagen om gegevens te bewaren' in op 14 dagen; de standaardwaarde is 7. Door bijvoorbeeld days_to_keep = "14" te veranderen in days_to_keep = "21", stelt u de 'dagen om gegevens te bewaren' in op 21 en worden alle gegevens ouder dan 21 dagen opgeschoond.
Code:
current_days = $ (awk '/ var days / {print $ 2}' /tmp/mongo_prune_js.js | sed -e 's / days = // g' -e 's /; // g')
days_to_keep = "14"
sed -i "s / days = $ {current_days} / days = $ { days_to_keep } / g" /tmp/mongo_prune_js.js

3. Voer een testrun uit. Voer de volgende opdrachten uit om een "test" uit te voeren:
Code:
sed -i 's / dryrun = false / dryrun = true / g' /tmp/mongo_prune_js.js
mongo --port 27117 </tmp/mongo_prune_js.js
4. Voer het script uit. Dit zal het script draaien zonder "dry run".
Code:
sed -i 's / dryrun = true / dryrun = false / g' /tmp/mongo_prune_js.js
mongo --port 27117 </tmp/mongo_prune_js.js
5. Verwijder het script en verlaat de shell:
Code:
rm /tmp/mongo_prune_js.js
afsluiten

Prune script voor referentie​

Dit is het snoeiscript ter referentie, of u kunt het downloaden via de bijlagen onder aan het artikel:
JavaScript:
// houd N-dagen aan gegevens
var dagen = 7;

// verander naar false om het script echt oude records
// uit de database te laten uitsluiten . Hoewel true, wordt er helemaal geen wijziging aangebracht in de DB
var dryrun = true;

var now = nieuwe datum (). getTime (),
time_criteria = nu - dagen * 86400 * 1000,
time_criteria_in_seconds = time_criteria / 1000;

print ((dryrun? "[dryrun]": "") + "snoeigegevens ouder dan" + dagen + "dagen (" + time_criteria + ") ...");

gebruik aas;
var collectionNames = db.getCollectionNames ();
voor (i = 0; i <collectionNames.length; i ++) {
var name = collectionNames [i];
var query = null;

if (naam === 'evenement' || naam === 'alarm'

}

// frauduleuze ap
if (naam === 'rogue') {
query = {last_seen: {$ lt: time_criteria_in_seconds}};
}

// verwijdert vouchers die meer dan '$ dagen' geleden zijn verlopen
// actieve en ongebruikte vouchers worden NIET aangeraakt
als (naam === 'voucher') {
query = {end_time: {$ lt: time_criteria_in_seconds}};
}

// gastautorisatie
if (naam === 'gast') {
query = {einde: {$ lt: time_criteria_in_seconds}};
}

// als een gebruiker maar EENMAAL is gezien, wordt $ last_seen niet gedefinieerd
// dus als $ last_seen niet is gedefinieerd, laten we in plaats daarvan $ first_seen gebruiken
// controleer ook of $ geblokkeerd of $ use_fixedip is ingesteld. Indien waar, verwijder dan NIET het
// entry, ongeacht hoe oud het is. We willen dat geblokkeerde / fixed_ip-gebruikers doorgaan
// geblokkeerd / fixed_ip. Ook vermelde gebruikers mogen niet worden verwijderd.
if (naam === 'gebruiker') {
query = {geblokkeerd: {$ ne: true}, use_fixedip: {$ ne: true}, genoteerd: {$ ne: true}, $ of: [
{last_seen: {$ lt: time_criteria_in_seconds}},
{last_seen: {$ exist: false}, first_seen: {$ lt: time_criteria_in_seconds}}
]
};
}

if (query) {
count1 = db.getCollection (naam) .count ();
count2 = db.getCollection (naam) .find (query) .count ();
print ((dryrun? "[dryrun]": "") + "snoeien" + count2 + "items (totaal" + count1 + ") van" + naam + "...");
if (! dryrun) {
db.
db.runCommand ({compact: naam});
}
}
}

if (! dryrun) db.repairDatabase ();

gebruik ace_stat;
var collectionNames = db.getCollectionNames ();
voor (i = 0; i <collectionNames.length; i ++) {
var name = collectionNames [i];
var query = null;

// historische statistieken (stat. *)
if (name.indexOf ('stat') == 0) {
query = {tijd: {$ lt: time_criteria}};
}

if (query) {
count1 = db.getCollection (naam) .count ();
count2 = db.getCollection (naam) .find (query) .count ();
print ((dryrun? "[dryrun]": "") + "snoeien" + count2 + "items (totaal" + count1 + ") van" + naam + "...");
if (! dryrun) {
db.
db.runCommand ({compact: naam});
}
}
}

if (! dryrun) db.repairDatabase ();
  • Leuk
Waarderingen: MartinM
Auteur
Hempie
Weergaven
865
Geplaatst op
Laatste update
Beoordeling
0,00 ster(ren) 0 Waarderingen

Meer van Hempie

Bovenaan