Frage

Ich möchte eine Statistik-Monitoring-Plattform zum Aufbau eines bestimmten Dienstes zu sehen, aber ich bin nicht sicher, wie ruhig, darüber zu gehen. die abgefangenen Datenverarbeitung ist nicht meine Sorge, nur, wie man das macht. Eine Idee war ein Proxy zwischen der Client-Anwendung zu installieren und den Dienst, so dass alle TCP-Datenverkehr zuerst zu meinem Proxy ging, würde der Proxy dann delegieren die abgefangenen Nachrichten an einen wartenden Thread / Gabel die Nachricht weiterzugeben und die Ergebnisse zu empfangen. Der andere war zu versuchen, und schnüffelt den Datenverkehr zwischen Client und Service.

Mein primäres Ziel ist es einen ernsthaften Verlust der Übertragungsgeschwindigkeit zwischen Client und Anwendung zu vermeiden, sondern zu 100% vollständig die Kommunikation zwischen Client und Service.

Umwelt: ubuntu 8.04

Sprache: c / c ++

Im Hintergrund dachte ich eine SQLite-DB der Verwendung vollständig im Speicher oder ein 20-25MB memcache Dameon läuft meinen Prozess nachgeführt.

Update:    Insbesondere versuche ich die Verwendung der Schlüssel für einen memcache Daemon zu verfolgen, die Anzahl der Sätze Speicherung / bekommt Erfolg / nicht auf dem Schlüssel. Die Idee ist, dass die meisten Tasten haben eine Art Zeichen der Trennung [ `| _- #] eine Art Namensraum zu schaffen. Die Idee ist, zwischen dem Daemon und dem Client, spaltete die Schlüssel voneinander durch einen Separator und konfiguriert Datensatz Statistiken über sie Schritt.

War es hilfreich?

Lösung

Sie erwähnt nicht einen Ansatz: Sie Memcached oder Ihren Kunden ändern könnten, um die Statistiken zu erfassen Sie benötigen. Dies ist wahrscheinlich der einfachste und sauberste Ansatz.

Zwischen dem Proxy und dem libpcap Ansatz, gibt es ein paar Kompromisse:

- If you do the packet capture approach, you have to reassemble the TCP
  streams into something usable yourself. OTOH, if your monitor program
  gets bogged down, it'll just lose some packets, it won't break the cache.
  Same if it crashes. You also don't have to reconfigure anything; packet
  capture is transparent. 

- If you do the proxy approach, the kernel handles all the TCP work for
  you. You'll never lose requests. But if your monitor bogs down, it'll bog
  down the app. And if your monitor crashes, it'll break caching. You
  probably will have to reconfigure your app and/or memcached servers so
  that the connections go through the proxy.

Kurz gesagt, wird der Proxy wahrscheinlich einfacher Code sein, aber es kann sein, eine königliche Schmerz Implementierung und es wäre besser, perfekt sein oder sein Ihre Caching-Abbau. Ändern der App oder Memcached scheint, wie die vernünftigste Ansatz für mich.

BTW: Sie haben das Reporting auf Memcached-interne Statistiken geschaut? Ich glaube nicht, seine granular genug für das, was Sie wollen, aber wenn Sie es nicht gesehen haben, werfen Sie einen Blick, bevor die eigentliche Arbeit :-D

tun

Andere Tipps

Genau das, was Sie versuchen, zu verfolgen? Wenn Sie eine einfache Zählung von Paketen oder Bytes oder grundlegenden Header-Informationen wollen, dann wird iptables dass Aufzeichnung für Sie:

iptables -I INPUT -p tcp -d $HOST_IP --dport $HOST_PORT -j LOG $LOG_OPTIONS

Wenn Sie detailliertere Informationen benötigen, schauen Sie in das iptables ULOG Ziel, das jedes Paket zur Analyse an User-Space sendet.

Siehe http://www.netfilter.org für sehr gründliche docs .

Wenn Sie den Sniffer Weg gehen wollen, könnte es einfacher sein, anstatt tcpdump oder libpcap zu verwenden tcpflow. tcpflow wird nur TCP-Payload ausgegeben, so müssen Sie nicht interessieren die Daten selbst streamen Zusammenbauen. Wenn Sie eine Bibliothek bevorzugen anstelle eine Reihe von Programmen für die Zusammenkleben könnten Sie in libnids interessiert sein.

libnids und tcpflow sind auch auf anderen Unix-Varianten zur Verfügung und Sie nicht beschränken, nur Linux (im Gegensatz zu iptables).

http://www.circlemud.org/~jelson/software/tcpflow/ http://libnids.sourceforge.net/

iptables bietet libipq , ein User-Space-Paket-Warteschlangen Bibliothek. Aus der Manpage:

  

Netfilter stellt einen Mechanismus für   Pakete aus dem Stapel vorbei für   Warteschlangen auf Anwenderseite, dann empfängt   diese Pakete wieder in den Kernel   mit einem Urteil spezifizieren, was zu tun   mit den Paketen (wie akzeptieren oder   FALLEN). Diese Pakete können auch sein,   Stand in Anwenderseite modifiziert   zurück in die Kernel Reinjektion.

Durch die Einrichtung zugeschnitten iptables Regeln, die Pakete weiterleiten libipq, zusätzlich zu dem Urteil für sie spezifizieren, ist es möglich, Paketprüfung für die Statistik-Analyse zu tun.

Ein weiterer gangbarer Weg wird manuell schnüffeln Pakete mittels libpcap oder PF_PACKET Buchse mit dem Sockel-Filter-Unterstützung.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top