我有一個應用程序運行在Apache下,我想保持「在當下」統計。我想有應用程序告訴我的東西,如:每秒如何在Apache下運行的應用程序中保持即時應用程序級別的統計信息?
- 請求,通過類型的要求
- 延遲,使通過節儉請求各種後端服務分解(通過服務和服務器分解) 每秒
- 等
我想這樣做沒有任何外部依賴被服務
該應用程序是使用python編寫的python,儘管我懷疑這更像是「跨進程通信」設計問題,而不是python特定的問題。
我有一個應用程序運行在Apache下,我想保持「在當下」統計。我想有應用程序告訴我的東西,如:每秒如何在Apache下運行的應用程序中保持即時應用程序級別的統計信息?
我想這樣做沒有任何外部依賴被服務
該應用程序是使用python編寫的python,儘管我懷疑這更像是「跨進程通信」設計問題,而不是python特定的問題。
也許你可以將相關的計數器和其他統計信息保存在一個memcached中,所有的apache進程都可以訪問它?
使用pylons.g對象。它是你的Pylons應用程序的lib/app_globals.py文件中的Globals類的一個實例。它的狀態變化對所有線程都是可見的,所以它裏面的東西需要是線程安全的。
的lib/app_globals.py:
class Globals(object):
def __init__(self):
self.requests_served = 0
控制器/ status.py:
from pylons import g
class StatusController(BaseController):
def status(self):
g.requests_served += 1
return "Served %d requests." % g.requests_served
這不適用於不同的流程(prefork和workers模型都會發生這種情況)。這是顯而易見的方法,我們已經嘗試過:) – 2010-01-22 19:38:00
我想這樣做,無需任何外部 依賴。
如果你的Apache不知何故死亡?(關注點分離?)
個人而言,我現在用的(冗餘)Nagios監控硬件本身,服務,和應用指標。這樣,我可以輕鬆/自動地繪製「請求每秒/用戶在線」,「CPU負載/用戶激活X每秒」等圖表,這些幫助很多事情。
爲nagios編寫插件非常簡單,也有成千上萬的預製腳本在任何語言。
Apache的監控
我提取我從通過Nagios的插件阿帕奇mod_status的頁面需要的信息監控的Apache。
示例插件響應:
APACHE OK - 0.080 sec. response time, Busy/Idle 18/16, open 766/800, ReqPerSec 12.4, BytesPerReq 3074, BytesPerSec 38034
應用監控
我使用mod_status的,就像你的,你想監控的事情列表中的一個例子。
對於我們的應用程序,我們有一個非常小的Nagios插件框架,所以基本上每個nagios檢查都是一個小類,它對緩存或數據庫運行檢查並將其值返回給nagios(小而簡單的命令行腳本)。
更多的例子:
Memcache:
OK - consumption: 82.88% (106.1 MBytes/128.0 MBytes), connections: 2, requests/s: 10.99, hitrate: 95.2% (34601210/36346999), getrate: 50.1% (36346999/72542987)
Application feature #1 usage:
OK - last 5m: 22 last 24h: 655 ever: 26121
Application feature #2 usage:
OK - last 5m: 39 last 24h: 11011
Other applications metrics:
OK - users online: 556
我想說的:擴展Nagios的應用監控是很容易的。 用我的小框架花了我3-4個小時的時間寫下來,我添加的任何支票現在只需要幾分鐘。
我們正在使用nagios。但是,我們希望收集超出mod_status可提供的應用程序級別統計信息。也許改變這個問題的一個好方法是「如何使用自定義應用程序統計信息創建類似mod_status的東西?」 – 2010-01-26 17:41:39
編輯我的答案更多的應用程序監控細節 – Karsten 2010-01-26 18:27:04
是啊,這是一個想法,但正如我上面提到的,我真的很喜歡這個沒有任何外部依賴的工作,因爲它可以用於診斷問題時,其他服務可能無法正常工作。 – 2010-01-21 22:27:30