perfmetrics提供了一種簡單的方式來增加軟件的性能指標,Python庫和應用程序 使用perfmetrics找到真正的瓶頸在生產中的應用。
所述perfmetrics包是Statsd守護進程通過Etsy的,而這又是石墨的一個客戶機(即,碳守護程序)的客戶端。因為perfmetrics包發送UDP數據包Statsd,perfmetrics沒有增加I / O延遲對應用程序和小CPU開銷。它可以在螺紋(同步)或事件驅動(異步)軟件同樣出色的工作。
用法
使用@metric和@metricmethod裝飾包裹的功能和方法,應該發送時間和呼叫統計Statsd。添加裝飾來,可能是一個瓶頸,包括庫函數的任何函數或方法。
示例:
從perfmetrics導入公制
從perfmetrics進口metricmethod
@metric
高清MyFunction的():
 “”“你的東西,可能是昂貴的”“”
MyClass類(對象):
  @metricmethod
 高清的MyMethod(個體經營):
 “”“做一些其他的可能是昂貴的東西”“”
接下來,告訴perfmetrics如何連接到Statsd。 (除非你做的裝飾沒有任何效果。)理想情況下,你的應用程序應該在啟動時的配置文件中讀取Statsd URI,但下面的示例使用硬編碼的URI進行簡單:
從perfmetrics進口set_statsd_client
set_statsd_client('statsd://本地主機:8125')
對於我的xrange(1000):
  MyFunction的()
  MyClass的()的MyMethod()
如果您運行的代碼,它會火2000 UDP數據包的端口8125.但是,除非你已經安裝了石墨和Statsd,所有這些數據包將被忽略,丟棄。滴是一件好事:你不希望你的生產應用程序失敗或減緩只是因為你的性能監控系統已停止或無法正常工作。
安裝石墨Statsd接收和圖形的指標。安裝它們的一個好方法是graphite_buildout例如在GitHub上,這在自定義位置安裝石墨Statsd沒有root權限。
線程
雖然大多數程序發送的指標從任何線程到一個單一的全球Statsd服務器,有些程序需要使用不同的Statsd服務器為每個線程。如果你只需要一個全球性的Statsd服務器上,使用在應用程序啟動的set_statsd_client功能。如果需要使用不同的Statsd服務器為每個線程,使用statsd_client_stack對象中的每個線程。用PUSH,POP,和明確的方法。
石墨提示
石墨將每個指標與多種分辨率時間序列。樣品graphite_buildout店10秒的分辨率48小時,1小時的分辨率為31天,1天分辨率為5年。以產生從細粒度值的粗粒值,石墨計算的平均值(平均值)為每個時間跨度。
由於石墨計算平均值含蓄,最明智的方式來對待櫃檯石墨是作為價值“每秒點擊”。這樣一來,一個圖可以不管其使用的分辨率水平產生正確的結果。
然而,治療櫃檯命中每秒有不幸的後果。如果一些度量看到1000命中尖峰在一秒鐘,然後下降到零為至少9秒,石墨圖表對於該度量將顯示一個尖峰100,而不是1000,因為石墨接收度量每10秒和尖峰看起來石墨像每秒100次點擊,10秒的時間。
如果你希望你的圖形顯示1000年點擊率,而不是每秒100次點擊,應用石墨hitcount()函數,用10秒以上的分辨率。該hitcount功能將每秒值近似原始的命中次數。一定要提供一種分辨率值足夠大,以通過對所得到的曲線圖的至少一個像素的寬度來表示,否則石墨將計算命中計數的平均值,並產生一個混淆曲線圖。
它通常是有道理的石墨處理空值為零,儘管這不是默認的;默認情況下,石墨繪製沒有為空值。您可以打開該選項的每個圖形。
參考文獻
裝飾
@metric
&NBSP;使用通知已Statsd UDP每一個函數被調用時。同時發送通話次數和時間信息。發送到Statsd度量的名稱是<模塊>。<函數名>。
@metricmethod
&NBSP;像@metric,但Statsd度量的名稱是<類模塊> <類名> <方法名>。
公制(STAT =無,率= 1,方法=假,計數=真,時間=真)
&NBSP;有多種選擇的裝飾或上下文管理。
&NBSP;統計是發送度量標準的名稱;它設置為無使用的功能或方法的名稱。速度可以讓你減少通過選擇一個隨機抽樣送到Statsd包的數量;例如,將其設置為0.1發送數據包的十分之一。如果方法參數為true,則默認度量名稱是基於該方法的類名,而不是模塊的名字。設置數量為False禁用發送到Statsd計數器的統計數據。設置時間為False禁用發送到Statsd的計時統計。
&NBSP;樣品用作裝飾:
&NBSP; @Metric('frequent_func',速率= 0.1,定時=假)
&NBSP;高清frequent_func():
&NBSP;“”“做的東西快速,頻繁”“”
&NBSP;樣品用作上下文管理器:
&NBSP;高清do_something():
&NBSP;與公制('doing_something'):
&NBSP;通
&NBSP;如果perfmetrics發送數據包過於頻繁,UDP數據包可能會丟失,應用程序的性能可能會受到影響。可以減少數據包的數目,並使用公制裝飾用的選項,而不是度量或metricmethod的CPU開銷。上面裝飾的例子使用的採樣率和靜態度量名稱。它還會禁用定時信息的收集。
&NBSP;當使用公制作為一個上下文管理器,您必須提供統計參數,或者什麼也不會被記錄下來。
功能
statsd_client()
&NBSP;返回當前配置的StatsdClient。返回線程本地客戶如果有一個,或全局客戶如果有或無。
set_statsd_client(client_or_uri)
&NBSP;設置全局StatsdClient。該client_or_uri可以是StatsdClient,一個statsd:// URI或無。
statsd_client_from_uri(URI)
&NBSP;從創建一個URI一個StatsdClient。一個典型的URI是statsd://本地主機:8125。支持可選的查詢參數前綴和gauge_suffix。默認前綴是空的,默認gauge_suffix是...查看StatsdClient文檔,了解有關gauge_suffix更多信息。
StatsdClient方法
Python代碼可以通過先得到使用statsd_client()方法,當前StatsdClient發送自定義指標。需要注意的是statsd_client()返回None如果沒有客戶端已配置。
最下方的方法具有可選的速率和的buf參數。率參數,當設置為一個小於1的值,使StatsdClient發送數據包的每個分組的隨機樣本,而不是。如果在buf參數是一個列表,StatsdClient追加分組內容到buf中列表,而不是發送數據包,從而能夠在單個數據包發送的多個更新。請記住,UDP數據包的大小是有限的(限由網絡而異,但1000字節通常是一個很好的猜測),以及任何額外的字節將被忽略。
定時(STAT,價值,率= 1,BUF =無)
&NBSP;記錄的時間信息。統計是度量記錄的名稱和值以毫秒為單位的定時測量。需要注意的是Statsd維護多個數據點,每個定時度量,所以計時度量可以採取更多的磁盤空間比專櫃或壓力表。
計(STAT,價值,後綴=無,率= 1,BUF =無)
&NBSP;更新一計值。統計是度量記錄的名稱和值是新的計值。一計代表,如池的大小持久的價值。因為從不同的機器上經常發生衝突計,後綴通常適用於衡量的名字。如果後綴參數是一個字符串(包括空字符串),它覆蓋默認的計後綴。
增量(統計,計數= 1,率= 1,BUF =無)
&NBSP;遞增一個計數器由計數。需要注意的是Statsd清除它發出的度量石墨,這通常發生每10秒每次的所有計數器值。如果需要一個持久的值時,它可能是使用一個計數器的計代替更為合適。
DECR(統計,計數= 1,率= 1,BUF =無)
&NBSP;遞減計數器由計數。
sendbuf(BUF)
&NBSP;發送BUF列表的內容Statsd
什麼在此版本中是新的:
- 在添加一個可選的金字塔。吐溫和類似的WSGI過濾器的應用程序,設置了Statsd客戶為每個請求。
什麼在0.9.4版本新:
- 在優化使用降低採樣率
什麼是0.9.2版本,新的:
- 在公制現在可以用來無論是作為裝飾或一個上下文管理器。
- 在製造StatsdClient的簽名更像是詹姆斯Socol的StatsClient。
要求:
- 在Python中
評論沒有發現