1. 什么是性能監控系統
這里說的性能監控系統,主要側重點是監控應用系統的性能。 說直白點就是每個業務(例如注冊,登錄)的請求響應時間,請求次數等信息。 操作系統的監控不是這里的重點,因為業界已經有許多相當成熟的基於Linux的運維系統。 操作系統的運維和應用系統的運維是兩碼事,應用系統的運維相對來說沒有這么多選擇。 而對於任何線上系統來說,運維監控系統又是必不可少的。 如果你是在大公司,一般會選擇開發自己的運維系統,而對於中小團隊,因為人力有限,大多會采用開源的解決方案。
我在這里要介紹的就是使用StatsD,Graphite, Grafana, Kamon搭建監控系統的方案。 這里的Kamon只適用於基於JVM的項目,另外,如果你的項目是基於Play或Akka或Spray,可以做到不寫代碼實現監控。 因為Kamon對這幾個框架提供了AspectJ支持,在類加載的時候插入代碼為你完成記錄。 其他情況你需要調用Kamon API來進行數據記錄,這也非常的簡單。
2. 監控系統UI
介紹搭建步驟之前,先來看一看搭好后的界面。 轉自(https://github.com/kamon-io/docker-grafana-graphite)
這里包含4部分的圖表。
- Actor Metrics是Akka Actor的統計圖表。因為我的項目中沒有直接使用Akka,所以暫時忽略這一部分內容。
- Trace Metrics是業務請求的統計圖表。例如每個請求的響應時間,以及某個時間段內各請求數量的統計對比。
- OS Metrics一看就知道是操作系統的統計圖表了。
- JVM Metrics是JVM的統計圖表。
3. StatsD, Graphite, Grafana, Kamon簡介
簡單介紹一下這四個開源項目,因為都在Github上就不貼鏈接了,
已經對這幾個項目很熟悉的可以略過。
1. StatsD
StatsD是一個用於記錄統計信息的守護進程。使用NodeJS開發,提供各種語言的客戶端API。
2. Graphite
使用Python開發,分為三個子項目
- carbon 守護進程,接收StatsD發送過來的原始統計數據。
- whisper 用來存儲統計數據的庫。
- graphite webapp 用來圖形化展示統計數據的web項目。
3. Grafana
使用Go開發,可以直接在界面上設計統計圖表。
之前看到就是使用Grafana制作的界面。
4. Kamon
一套類庫用來記錄統計數據,使用Scala開發,提供Java和Scala API。
除了提供API,還結合AspectJ對一些框架提供自動記錄的功能,當然性能上會有損耗。
整體流程:業務系統調用Kamon的Api記錄數據,Kamon將數據發送給StatsD,
StatsD定期(默認10s)將數據匯總發送到Graphite,
當用戶訪問Grafana界面的時候,Grafana調用Graphite接口讀取數據繪制成圖形展示給用戶。
4.搭建環境
因為用到了多個項目,並且每個項目都基於不同語言,所以安裝過程肯定不會很簡單。
使用docker的朋友直接參考這個項目(https://github.com/kamon-io/docker-grafana-graphite)
用docker鏡像會方便很多。
如果不用docker,可以參考我的安裝步驟。
以下安裝是基於Ubuntu14.04,如果是CentOS或其他系統可能某些步驟會不一樣。
另外因為測試的時候是在開發機上,所以下面安裝的時候沒有使用獨立用戶和權限。
1
2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |