2008-11-08 34 views
1

我想設置一個統計監控平臺來觀察特定的服務,但我不確定如何去做。處理截獲的數據不是我關心的,只是如何去做。一個想法是在客戶端應用程序和服務之間設置一個代理,以便所有TCP通信首先到達我的代理,代理然後將截獲的消息委派給等待的線程/分支以傳遞消息並接收結果。另一個是嘗試嗅探客戶端&服務之間的流量。攔截流量到memcached進行統計/分析

我的主要目標是避免任何嚴重的客戶端應用程序之間的傳輸速度損失,但獲得客戶端服務之間100%完整的通信。

環境:Ubuntu的8.04

語言:C/C++

在我想使用的內存或20-25MB的memcache dameon完全運行的sqlite的DB的背景從屬於我的過程。

更新: 具體而言,我試圖跟蹤一個memcache守護進程的密鑰的使用情況,存儲密鑰的集合/獲取成功/失敗的數量。這個想法是,大多數鍵都有某種分離字符[`| _-#]來創建一種名稱空間。這個想法是介入守護進程和客戶端之間,通過配置的分隔符將鍵分開並記錄它們的統計信息。

回答

0

你沒有提到一種方法:你可以修改memcached或你的客戶端來記錄你需要的統計信息。這可能是最簡單和最乾淨的方法。

代理和libpcap的方法之間,有一對夫婦權衡:

- 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. 

總之,代理將可能是更容易的代碼,但實現它可能是一個皇家疼痛,並且它有更好地完善或取消緩存。更改應用程序或memcached對我來說似乎是最爲冷靜的方法。

順便說一句:你看過memcached的內置統計報告?我不認爲它的粒度足夠你想要的,但如果你沒有看到它,請在做實際工作之前看看:-D

+0

我試圖解決的問題是要知道跆拳道的memcache和應用正在做「對即將到期的按鍵和還是有更多的集合然後得到」 – David 2008-11-08 19:11:36

1

究竟你在追蹤什麼?如果你想包或字節,或基本報頭信息的簡單計數,然後iptables會幫你記錄:

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

如果您需要更詳細的信息,請進入iptables ULOG目標,它發送的每個數據包到用戶空間進行分析。

請參閱http://www.netfilter.org對於非常徹底的文檔。

0

iptables provides libipq,一個用戶空間數據包排隊庫。從手冊頁:

的Netfilter提供 傳遞數據包出棧的機制 排隊到用戶空間,然後在接收 這些數據包返回到內核 與判決指定做什麼 與包(如ACCEPT或 DROP)。這些數據包也可能是 在 重新注入內核之前在用戶空間中被修改。

通過建立定製iptables的規則轉發數據包到libipq,除了指定的判決對他們來說,這是可以做到數據包檢查進行統計分析。

另一個可行的選擇是通過帶有套接字過濾器支持的libpcap或PF_PACKET套接字手動嗅探數據包。

1

如果你想採用嗅探方式,使用tcpflow代替tcpdump或libpcap可能更容易。 tcpflow將僅輸出TCP有效載荷,因此您無需關心自己重新組合數據流。如果你更喜歡使用庫而不是粘貼一堆程序,你可能會對libnids感興趣。

libnids和tcpflow也可在其他的Unix操作系統,並且不限制你剛纔的Linux(反之至iptables的)。

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