- rsyslog omprog — Réception des messages syslog via asyncio
- confirmMessages="on" — Accusé de réception rsyslog (re-émission après perte)
- Format JSON — Codec JSON rsyslog (rsyslog → omprog → Python)
| Filtre | Options | Session |
|---|---|---|
| drop | source, words_file, mode (contains), case_sensitive | 8 |
| regex | source, pattern (groupes nommés) | 8 |
| kv | source, field_split, value_split, prefix | 8 |
| mutate | convert (integer/string), remove_field, prefix | 14 |
| mutate | uppercase, lowercase, capitalize, split, join, merge, copy, update, coerce | 20 |
| geoip | source, target, tag_on_failure | 24 |
- Dictionnaire statique JSON (
enrich-dict.example.json) - GeoIP via geoip2/maxminddb (
_build_geoip_record, session 21)
- Parsing des fichiers
.confvialogstash-pipeline-parser - Exemples :
pipeline.example.d/10_input,25_filter,30_output - tag_on_failure pour date et geoip (sessions 19, 22, 24)
OpenSearchIndexer— indexation asynchrone (opensearch-py[async])- Authentification via variables d'environnement
- Template d'index (
opensearch-index-template.json) - Retenue (retry) sur erreurs transitoires (connexion refusée, timeout)
LocalDeadLetterQueue.write()— JSONL append-only- Uniquement pour erreurs permanentes (RequestError/NotFoundError, 400/404)
- Jamais pour erreurs transitoires (retenue inchangée)
- Écriture dans thread séparé (
asyncio.to_thread) - Rotation par taille (
max_bytes) ou par âge de la plus ancienne entrée (max_age), compression gzip, purge par nombre (backups) et par âge (retention),parse_size/parse_durationpour les options CLI (issue #27)
compute_fingerprint()— sha256/sha1/md5- Document entier (fields=None/[]) ou sélection ordonnée de champs
- Séparateur de contrôle
\x1fanti-collision Nonesi tous les champs demandés sont absents
- Décorateur
@traced— entrée/sortie systématique (loguru) - Préserve
__name__/__doc__/__wrapped__(functools.wraps) - Compatible méthodes GObject/GTK4
| # | Item | Statut | Session |
|---|---|---|---|
| 2 | Dead Letter Queue pour échecs permanents | ✅ Fait | 13 |
| 4 | Fingerprint déterministe pour document_id | ✅ Fait | 17 |
- Rotation/purge disponibles dans
dlq.py(issue #27) ; options--dlq-*à câbler dansomprog.pyune fois le module importé (#25/#40)
- Pas de mode HMAC (nécessiterait une clé secrète)
- Pas de MURMUR3 (entier 32 bits, format _id différent)
- Pas de IPV4_NETWORK (portée trop spécifique)
- Voir issue #28
- Champ
nulltraité comme absent (se rend en chaîne vide) - Voir issue #29
- Réponse du serveur aux redirections (imprimante/série/parallèle) traitée côté serveur, jamais remontée à l'API
| Item | Priorité | Issue |
|---|---|---|
| Pousser les modules manquants | P0 | #25 |
| Écrire le README | P1 | #26 |
| DLQ rotation/purge — options CLI dans omprog.py | P3 | #27 |
| Fingerprint HMAC/MURMUR3 | P3 | #28 |
| Templates null vs absent | P2 | #29 |
| Test d'intégration bout en bout | P2 | #30 |
| Packaging package installable | P3 | #31 |
| Pousser fichiers de suivi | P0 | #32 |