2026 Mac Mini loué 7×24 : matrice décisionnelle — rotation des journaux lz4 et zstd, nice I/O, seuils inode et disque pour lots longs

Lecture : 9 min

Les équipes qui louent un Mac Mini pour des charges 7×24 très journalisées accumulent souvent JSONL, traces passerelle et stderr workers sur un seul volume APFS jusqu'à ce que la rotation, la compression lz4 ou zstd et la pression inode volent discrètement de la réactivité au tail comme au SSH interactif — une situation que l'on résume souvent par « disque encore vert, mais métadonnées déjà tendues ».

Matrice, seuils et extraits newsyslog / logrotate / launchd pour un hôte Apple Silicon loué. Liens utiles : FAQ APFS, launchd & nice I/O, runbook journaux nuit, files 7×24.

Trois douleurs des hôtes loués très verbeux

  1. Pics CPU post-rotation. Un zstd agressif rivalise avec les workers batch sur les mêmes cœurs efficaces.
  2. Falaises d'inodes. Des milliers de petits fichiers .log.N épuisent les métadonnées avant que df -h ne paraisse critique.
  3. SSH qui « traîne ». Sans nice ni LowPriorityIO, les hooks de compression volent la priorité disque et gênent la console interactive.

Matrice codecs : choisir une ligne avant d'optimiser

Mesurez une tranche avec /usr/bin/time sur APFS.

Codec Posture CPU Posture taille Cas d'usage
lz4 -1 Très faible Réduction modérée Files toujours actives, compression « légère » avant envoi objet
zstd -3 Basse à moyenne Bonne densité Voie de nuit par défaut sur Apple Silicon M4 loué lorsque le disque serre
zstd -9 Élevée Archives denses Fenêtre maintenance unique, un seul gros écrivain, surveillance thermique

Niveaux de compression et occupation CPU

Les niveaux sont des contrats : un cœur saturé sur un Mac Mini loué trahit souvent la mauvaise ligne.

Bande de niveau Jaune CPU (planifier) Rouge CPU (agir)
lz4 rapide CPU utilisateur > 40 % pendant 5 min avec SLA batch actif > 70 % soutenu et latence en hausse
zstd 3 à 6 Un cœur > 60 % pendant 10 min Pression thermique ou watchdog qui redémarre le service
zstd 7 et plus Chevauchement wall-clock avec le batch principal Interdit sans fenêtre maintenance explicite et owner d'astreinte

Fréquence de rotation et dimensionnement des tranches

Taille pour les rafales ; heure pour les démons bavards.

  • Taille. Viser 50 à 200 Mo par fichier courant pour garder des append prévisibles.
  • Temps. Passerelles bruyantes en horaire, workers en tranche six heures, archives froides au quotidien.
  • Rétention locale. 7 à 14 générations sur SSD, puis déport vers stockage objet conforme à votre politique.

Couplage avec launchd (nice I/O et cadence)

Regroupez compression et upload ; Nice 10–19 et LowPriorityIO vrai pour ménager SSH.

<key>Nice</key>
<integer>12</integer>
<key>LowPriorityIO</key>
<true/>
<key>ThrottleInterval</key>
<integer>120</integer>

Exemple : nice -n 12 zstd -q -3 /var/log/runmini/app.log.0.

Actions sur lignes d'eau disque et inode

Automatisez avant les erreurs métadonnées ; avec Valkey, voir matrice disque Valkey.

Signal Jaune (planifier) Rouge (agir)
Pourcentage d'espace libre APFS Sous 15 % : rogner rétention, suspendre écrivains non critiques Sous 10 % : stopper nouvelles rotations jusqu'à vidage upload ; sous 5 % : conserver seulement points de contrôle
Taux d'utilisation inodes Au-dessus de 70 % : planifier fusion ou archive Au-dessus de 85 % : bloquer création de micro-fichiers minute
Profondeur file compression > 3 jobs post-rotation en attente > 6 jobs : repasser automatiquement en lz4 seul jusqu'à vidage

Extraits newsyslog, logrotate et bash

newsyslog natif ; logrotate souvent via Homebrew. Vérifiez man newsyslog.conf pour les drapeaux Z/G.

Fragment newsyslog.conf

# /etc/newsyslog.d/runmini-logs.conf — rotation taille ; compression lz4/zstd via launchd après HUP
/var/log/runmini/app.log  user:staff  640  14  102400  *  ZG

Fragment logrotate (zstd)

/var/log/runmini/app.log {
  size 128M
  rotate 14
  compress
  compresscmd /usr/bin/zstd
  compressext .zst
  compressoptions -3 -T1
  delaycompress
  postrotate
    /usr/bin/nice -n 12 /usr/local/bin/envoi-tranche.sh "$1" || true
  endscript
}

Script bash de tranche (lz4)

LOG=/var/log/runmini/app.log
TS=$(date -u +%Y%m%dT%H%M%SZ)
mv "$LOG" "$LOG.$TS"
/usr/bin/nice -n 12 /usr/bin/lz4 -q -f "$LOG.$TS" "$LOG.$TS.lz4"
/usr/bin/install -m 640 /dev/null "$LOG"
/bin/kill -HUP "$(cat /var/run/runmini.pid)"

Cinq étapes opérables

  1. Mesurer débit et inodes (df -g, df -i).
  2. Choisir codec, taille max et générations dans newsyslog ou logrotate.
  3. Plist Nice + LowPriorityIO pour compression et upload.
  4. Jaune : file > trois jobs → post-rotation lz4 seul ; rouge : pause rotation et drain objet.
  5. Tabletop après mise à jour macOS.

Repères : tranche 50–200 Mo, rétention 7–14, inode 70/85 %, disque libre 15/10/5 %, nice 12, zstd -3, file rouge 6 jobs.

FAQ

La nuit doit-elle compresser en lz4 ou zstd sur un seul hôte loué ?
lz4 lorsque la marge CPU est courte. zstd niveau trois lorsque le disque serre et que LowPriorityIO protège la console.
Quelle fréquence pour des jobs 7×24 bruyants ?
Combinez déclencheur taille et fenêtre horaire ; gardez toujours une sonde sur df -i.
Quand bloquer les petits écrivains à cause des inodes ?
Au-delà de quatre-vingt-cinq pour cent d'inodes utilisés, stoppez les créations minute jusqu'à archivage complet.

Achat versus location (note brève)

L'achat fige le capex ; louer lisse la trésorerie et permet de monter en SSD quand les journaux grossissent — voyez Tarification et Achat.

Choisir un nœud Mac pour journaux batch 7×24

RunMini : marge SSD pour tranches. Accueil, tarifs, aide, blog ; files 7×24, runbook logs.

Conservez un signet sur l'accueil et le blog : les mises à jour macOS déplacent parfois les défauts de newsyslog.

Louer un Mac Mini pour journaux batch 7×24