log.pdus sur un worker entier, ce qui écrit les PDU décodées de chaque session dans un log partagé que le minuteur de nettoyage garde pendant une quinzaine.
Une capture fait la même chose pour une session, à la demande, et emporte le résultat avec elle.
smsg.ops.admin.token.
Ce qu’elle contient, et pourquoi c’est le token admin
Tout, décodé : corps des messages, numéros de destination, TLV. C’est le principe. Une capture qui laisserait le contenu de côté ne pourrait pas répondre à la question pour laquelle on en démarre une. C’est aussi pourquoi elles ont besoin du token admin plutôt que du token de lecture, et pourquoi le.txt le dit dans son propre en-tête.
Ce que ça coûte
Rien de mesurable, ce qui est la règle sur laquelle la fonctionnalité est construite. Le tap est une lecture de champ volatile par PDU sur les sessions non capturées. Sur la session capturée il fait unoffer borné sur une file de transfert et retourne ; un thread séparé fait tout le formatage et l’encodage, donc rien de coûteux ne tourne sur le thread I/O Netty.
Mesuré sur un listener loopback à ~32 000 TPS, environ trente fois une session réelle chargée, une capture sous charge est restée dans le bruit run-to-run de la baseline non capturée, avec dropped à zéro.
Limites, et rien ne touchant le disque
Le plafond atteint en premier arrête la capture et dit lequel.
stopped_because porte une phrase comme reached the 8388608 byte limit. Un fichier tronqué sans explication est un fait faux sur le client.
Les captures vivent en mémoire uniquement. Le service tourne sous ProtectSystem=strict, donc un fichier devrait s’asseoir dans le répertoire de données comme contenu client en clair ; un buffer borné qui expire fait de l’histoire de rétention « quinze minutes, appliquées » plutôt que « jusqu’à ce que quelqu’un s’en souvienne ». Une quatrième capture concurrente est refusée avec 409.
Le framing pcap est synthétique
Le.pcap s’ouvre dans Wireshark et son dissector SMPP le lit. Mais les en-têtes IPv4 et TCP autour de chaque PDU sont fabriqués.
Ce qui est capturé est des PDU décodées, ré-encodées, pas les octets qui étaient sur le fil. Les adresses et ports sont ceux réels de la session ; les numéros de séquence, fenêtres et flags sont construits pour faire réassembler le flux.
Sur un port non standard, dites à Wireshark que c’est SMPP
Wireshark enregistre le dissector SMPP sur TCP 2775. Une session sur tout autre port, un vendeur sur 2779, un second listener sur 27778, est dissectée comme du TCP brut, et le filtre SMPP correspond alors à rien. Ça ressemble exactement à un fichier corrompu, donc écartez ça d’abord :tcpdump -r capture.pcap -n | head -1 vous dit quel numéro utiliser.
Sessions vendeurs
Les captures fonctionnent pareil sur une connexion vendeur, c’est pourquoi chaque session rapporte unsession_id sur les deux types.
Cet id ne signifie pas qu’un bind vendeur peut être déconnecté. disconnect répond toujours 409 pour un worker vendeur, parce que le garde-fou est le type de worker, pas la présence d’un id.
Connexes
Tokens et accès
Pourquoi ceci a besoin du token admin et health non.
Contrôle des workers
Désactiver, suspendre et retenir.