2013-02-06 107 views
0

我想收集ejabberd中有用的統計信息。收集ejabberd中的特定組件統計信息

比方說,我會有興趣知道有多少消息被髮送給一個或多個特定的內部組件,什麼是你認爲這兩種解決方案之間的最佳?

  1. 設置一個帶有filter_packet掛鉤的新組件(基於gen_mod + gen_server),並在特定的函數中處理所有針對上述組件的消息。爲了不打擾消息轉發,我可以生成一個函數來儘快路由消息,然後使用某些ets/mnesia/mysql表輕鬆記錄此組件中的數據。
  2. 當我在感興趣的組件中實際接收數據時記錄數據。

你能告訴我哪個解決方案是最好的?

回答

0

如果目的是要建立一種機制來診斷系統在生產中,我認爲,你可以使用一個gen_event服務器,您可以連接,永久或暫時的一個或幾個事件處理程序。退步是你必須在當前代碼中生成事件。

example of supervision tree using a gen_event

如果目的是資料/分析應用程序,你應該看看現有的工具,如觀察者,聚馬來酸酐......

編輯:

gen_event的興趣是,它是一種現成的行爲,允許根據需要連接多個事件處理程序。

聚馬來酸酐可以讓你看到所有發送的消息,消息接收和處理的函數調用。默認情況下,它們是按照以下方式給出的,我沒有檢查是否可以添加其他信息(如時間戳),以及可以過濾或不能過濾的信息。

... 
<0.60.0>: call erlang:spawn_link(erlang, apply, [#Fun<util.3.13553350>,[]]) 
{trace,<0.60.0>,spawn,<0.180.0>,{erlang,apply,[#Fun<util.3.13553350>,[]]}} 
<0.60.0>: link <0.180.0> 
<0.60.0>: call erlang:now() 
<0.60.0>: call gen_event:notify(plc1, {store, t5_plc1, running, 1360156073108}) 
<0.60.0>: call gen_event:send(plc1, {notify, {store, t5_plc1, running, 1360156073108}}) 
<0.60.0>: ! To: plc1 Msg: {notify, {store, t5_plc1, running, 1360156073108}} 
<0.60.0>: call erlang:setelement(12, {state, t5_plc1, #Fun<testmngr.9.27375888>, #Fun<testmngr.10.27375888>, 46, forever, 0, 1, run, undefined, undefined, <0.179.0>, plc1}, <0.180.0>) 
<0.180.0>: call erlang:apply(#Fun<util.3.13553350>, []) 
<0.180.0>: rec timeout 
<0.180.0>: call gen_server:cast(manager_plc1, {complete, t5_plc1}) 
<0.180.0>: call gen_server:do_cast(manager_plc1, {complete, t5_plc1}) 
<0.180.0>: call gen_server:cast_msg({complete, t5_plc1}) 
<0.180.0>: call gen_server:do_send(manager_plc1, {'$gen_cast', {complete, t5_plc1}}) 
<0.180.0>: call erlang:send(manager_plc1, {'$gen_cast', {complete, t5_plc1}}, [noconnect]) 
<0.180.0>: ! To: manager_plc1 Msg: {'$gen_cast', {complete, t5_plc1}} 
<0.180.0>: ! To: <0.60.0> Msg: {'$gen_event', {complete, 47}} 
<0.60.0>: rec {'$gen_event', {complete, 47}} 
<0.180.0>: exit normal 
<0.60.0>: getting_unlinked <0.180.0> 
... 
+0

AFAIK observer和pman不是解決方案,因爲它們無法提供有關ejabberd處理的XMPP數據包的信息。事件處理程序是處理分析數據的另一種可能性,但此sata來自solution1或solution2 – user601836