自己寫代碼來定義一個metrics,然后讓prmetheus收走,在grafana里面定義一個panel並展示出來。
prometheus的四種metrics指標。雖然所有的metrics都是數字,但是數字和數字之間還不一樣。
counter:比如說請求的總量,cpu的使用時間
Gauge:統計的數,是可增加也可以減少的,比如說當前業務使用的內存的大小。垃圾回收后,內存就會減少。
Hostogram:用來做數據分布統計,比如說請求的響應時間來舉例子,某個應用收了100個請求,在這100個請求里面,響應時間在0到100毫秒的有多少。100毫秒到300毫秒的有多少個。300毫秒到500毫秒的有多少個。它可以統計出這個數來。這0到100,100到300 ,300到500 這些就是 bucket桶,bucket是用來裝數據的,bucket可以自己定義,
Summary:用來做數據分布統計,統計出來不是一個絕對的數,而是比率。還是拿響應時間來舉例子,用summary統計出來的,你這100個請求里有百分九十的請求小於100毫秒返回的,然后有99%的請求都是在150毫秒返回的。它是能告訴你這個數據,在一個比例的之間里面有多少請求。
寫代碼
統計創建訂單的服務被調用了多少次,getInfo訂單信息的服務被調用了多少次。
pom的這個里面已經引用了metrics了,但是這個里面是按照狀態碼來統計的。狀態碼是200的請求是多少,500的請求是多少。
但是我們現在想知道創建訂單和獲取訂單分別被調用了多少次。這個現在是沒法滿足的,需要我們自己寫一個指標的處理器來處理。我們用的指標的類型就是剛才講的counter.counter是只增不減的。我的訪問次數永遠是只增不減的
定義counter
加上@Configuration注解
注入prometheus的注冊器,然后自己寫一個指標。注冊到注冊器上去。
這樣我們在訪問prometheus的端點的時候就能看到,我給它系統的這個指標了。
這個包下的Counter。這個就是我們要的計數器。
用Counter的build方法,用里面有兩個參數的那個方法,第一個參數是指標的名字。
metrics的名字就是我們在這里看到的類似這種的
就是大括號前面之前的
第二個參數是Help。就是一個說明、描述性的文字。
要在這個指標上帶哪些標簽。
通過labelNames來指定。service代表是哪個請求,method代表是get還是post方法,code代表返回的狀態碼。
注冊到peometheus的注冊器上。
這樣prometheus的metrics指標上就會多一個is_request_count的指標。但是它現在還沒有值,
我們需要讓他用這個counter去計數。什么時候計數呢?我們需要在攔截器那,用攔截器攔住所有的請求,然后來計數。
創建prometheus的攔截器
繼承handlerInterceptor
直接聲明稱Spring的組件。
注入Counter,然后覆蓋掉afterCompletion,不管你的請求是成功還是失敗,最終會進入到這個方法里面來。
這里定義了三個標簽。
這里就要給它傳三個值
狀態碼是一個int類型轉換成String類型
調用它的inc方法,就是把這個counter往上加1
讓interceptor生效
創建一個配置類,實現WebMvcConfigurer
在這里面 我們把interceptor加進去。
注入我們自己寫的interceptor。然后注冊上去,並制定所有的請求,都攔截。
最后修改下orderController的參數接收方式
啟動測試
刷新端點,然后搜索我們自己定義的指標。指標有了但是沒有數據。
調用orders方法。多點擊幾次。
再調用 獲取訂單的方法。多點擊幾次
可以看到我們自己定義的指標有數據了 。這樣我就把服務的調用信息加到prometheus的端點上了。然后把這個metrics暴露出來了。
定義dashboard
下面去grafana里面定義個dashboard把數據展示出來。
加一個新的dashboard
進入到編輯頁面
起個名字
首先選擇數據源,這選擇Prometheus.
下面就是要寫查詢語句,這就是我們要查的東西。
創建訂單的方法被調用了多少次。
每隔5秒采一次樣,然后顯示最近5分鍾的數據
保存這個dashboard
再進去到編輯頁面
選擇當前最近的一次采集的數據
多調用幾次orders方法
這里的數據就變成10了
前綴和后綴
當前的值是10小於20所以顯示第一個顏色。
這里過戶選的是Value的話 就是數字的顏色
1在5和20之間 所以就顯示第二個顏色。
上面值的曲線。
在多訪問幾次接口,曲線應該還會往上走。
結束