sql >> Database teknologi >  >> RDS >> Oracle

Logroter for at rydde op i datostemplede filer

Logrotate fjerner filer i henhold til rækkefølge i leksikalsk sorteret liste over roterede logfilnavne og også efter filalder (ved hjælp af sidste ændringstid for filen)

  • rotér er det maksimale antal roterede filer, du kan finde. Hvis der er et højere antal roterede logfiler, sorteres deres navne leksikalsk, og de leksikalsk mindste fjernes.

  • maxage definerer et andet kriterium for fjernelse af roterede logfiler. Enhver roteret logfil, der er ældre end det angivne antal dage, fjernes. Bemærk, at datoen detekteres fra filens sidste ændringstidspunkt, ikke fra filnavnet.

  • datoformat tillader specifik formatering af dato i roterede filer. Man page bemærker, at formatet skal resultere i leksikalsk korrekt sortering .

  • i går tillader brug af datoer i logfilnavne en dag tilbage.

For at beholde et givet antal dage i dagligt roterede filer (f.eks. 7), skal du indstille rotate til værdien 7, og du kan ignorere maxage , hvis dine filer oprettes og roteres virkelig hver dag.

Hvis logoprettelse ikke sker i et par dage, f.eks. i 14 dage vil antallet af roterede logfiler stadig være det samme (7).

maxage vil forbedre situationen i "logs ikke produceret" scenarier ved altid at fjerne for gamle filer. Efter 7 dage uden logproduktion vil der ikke være nogen roterede logfiler til stede.

Du kan ikke bruge dateformat som OP viser, da den ikke er leksikalsk sorterbar. Roder med dateformat ville sandsynligvis resultere i fjernelse af andre roterede logfiler, end du egentlig ønskede.

Tip :Kør logrotate fra kommandolinjen med -d mulighed for at udføre et tørløb:du vil se, hvad logrotate ville gøre, men faktisk ikke gør noget. Udfør derefter en manuel kørsel med -v (verbose), så du kan bekræfte, at det, der bliver gjort, er det, du ønsker.

Løsning:Rens logfiler oprettet af cron

Konceptet er:

Lad cron oprette og opdatere logfilerne, men lav små ændringer for at oprette filer, efter logrotate standard filnavne, når du bruger standard dateext

/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log

Brug kun logrotate til at fjerne for gamle logfiler

  • sigte mod ikke eksisterende logfil /data/tier2/scripts/logs/recover_standby_SID.log
  • brug missingok for at lade logrotate oprydning ske
  • indstil rotate høj nok til at dække antallet af logfiler at beholde (mindst 7, hvis der vil være én "roteret" logfil om dagen, men du kan roligt indstille den meget højt som 9999)
  • indstil maxage til 7. Dette vil fjerne filer med en sidste ændringstid på mere end 7 dage.
  • dateext bruges bare for at sikre, at logrotere søgninger efter ældre filer, der ligner roterede.

Logrotate-konfigurationsfilen ville se ud som:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 9999
    maxage 7
    dateext
}

Løsning:roter direkte ved at logrotere én gang om dagen

Jeg er ikke sikker på, hvordan en kildegendannelses-standby-fil oprettes, men jeg vil antage, at Oracle eller et eller andet script regelmæssigt eller konstant tilføjer til en fil /data/tier2/scripts/logs/recover_standby_SID.log

Konceptet er:

  • rotér filen én gang om dagen ved at logrotate
  • arbejder direkte med logfil, der indeholder gendannelsesdata /data/tier2/scripts/logs/recover_standby_SID.log
  • daily vil forårsage rotation én gang om dagen (med hensyn til hvordan cron). forstår daily )
  • rotate skal indstilles til 7 (eller et højere tal).
  • maxage indstillet til 7 (dage)
  • dateext for at bruge standard logroter dato-suffiks
  • dateyesterday bruges til at forårsage datosuffikser i roterede filer, der ligger en dag tilbage.
  • missingok for at rense ældre filer, selv når der ikke er nyt indhold til at rotere.

Logrotate config ville se ud som:

data/tier2/scripts/logs/recover_standby_SID.log {
    daily
    missingok
    rotate 7
    maxage 7
    dateext
    dateyesterday
}

Bemærk, at du muligvis skal lege lidt med copytruncate og andre lignende muligheder, der er relateret til, hvordan kildelogfilen oprettes af ekstern proces, og hvordan den reagerer på rotationshandlingen.



  1. Den version af SQL Server, der er i brug, understøtter ikke datatypen datetime2?

  2. Kan jeg bruge et Postgres-nøgleord som et alias på udvalgt liste?

  3. MySQL COALESCE og NULLIF funktion

  4. Hvorfor er én identifikator i en CREATE TABLE anført i dobbelte anførselstegn, men ikke de andre?