轉載自DevOps實戰:Graphite監控上手指南
英文原文Getting Started with Monitoring using Graphite
英文原文Google快照
做者 Franklin Angulo , 譯者 叢一 發佈於 2015年3月17日html
在本文中, 我將提供一個幫助讀者瞭解用Graphite套件建立監控系統所涉及的所有工做的指南. 前端
在本文中咱們將會談及以下用於建立Graphite監控系統的主題:python
首先, 咱們須要可以運行Graphite套件的硬件資源. 爲了簡單起見, 我將使用Amazon Web Services EC2主機. 不過, 你也可使用辦公室或家中已有的任何型號的計算機. git
技術規格:github
Graphite由多個後端和前端組件組成. 後端組件用於存儲數值型的時間序列數據. 前端組件則用於獲取指標項數據並根據狀況渲染圖表. 在本文中, 我首先會介紹後端組件:Carbon和Whisper. web
指標項能夠被髮布到一個負載均衡器或直接發佈到一個Carbon線程中. Carbon線程與Whisper數據庫交互, 將時間序列數據存儲到文件系統中. 算法
Carbon(Git)其實是一系列守護進程, 組成一個Graphite安裝的存儲後端. 這些守護進程用一個名爲Twisted的事件驅動網絡引擎監聽時間序列數據.
Twisted(TwistedMatrixLab)框架讓Carbon守護進程可以以很低的開銷處理大量的客戶端和流量. sql
要安裝Carbon, 運行以下命令便可(假設目標系統是RHEL操做系統):數據庫
$ sudo yum groupinstall "Development Tools"
$ sudo yum install python-devel
$ sudo yum install git
$ sudo easy_install pip
$ sudo pip install twisted
$ cd /tmp
$ git clone https://github.com/graphite-project/carbon.git
$ cd /tmp/carbon
$ sudo python setup.py install
/opt/graphite
文件夾下將包含以下Carbon庫和配置文件:django
$ ls -l /opt/graphite
drwxr-xr-x. 2 root root 4096 May 18 23:56 bin
drwxr-xr-x. 2 root root 4096 May 18 23:56 conf
drwxr-xr-x. 4 root root 4096 May 18 23:56 lib
drwxr-xr-x. 6 root root 4096 May 18 23:56 storage
在bin文件夾下, 可以找到以下三種不一樣類型的Carbon守護進程:
Whisper是一個用於存儲時間序列數據的數據庫, 以後應用程序能夠用create, update和fetch操做獲取並操做這些數據.
安裝Whisper, 須要運行以下命令:
$ cd /tmp
$ git clone https://github.com/graphite-project/whisper.git
$ cd /tmp/whisper
$ sudo python setup.py install
Whisper腳本如今應該已經相應的位置:
$ ls -l /usr/bin/whisper*
-rwxr-xr-x. 1 root root 1711 May 19 00:00 /usr/bin/whisper-create.py
-rwxr-xr-x. 1 root root 2902 May 19 00:00 /usr/bin/whisper-dump.py
-rwxr-xr-x. 1 root root 1779 May 19 00:00 /usr/bin/whisper-fetch.py
-rwxr-xr-x. 1 root root 1121 May 19 00:00 /usr/bin/whisper-info.py
-rwxr-xr-x. 1 root root 674 May 19 00:00 /usr/bin/whisper-merge.py
-rwxr-xr-x. 1 root root 5982 May 19 00:00 /usr/bin/whisper-resize.py
-rwxr-xr-x. 1 root root 1060 May 19 00:00 /usr/bin/whisper-set-aggregation-method.py
-rwxr-xr-x. 1 root root 969 May 19 00:00 /usr/bin/whisper-update.py
Carbon安裝包中包含了關於端口號和其餘多個配置參數的明確缺省值. 拷貝這些已有的示例配置文件:
$ cd /opt/graphite/conf
$ cp aggregation-rules.conf.example aggregation-rules.conf
$ cp blacklist.conf.example blacklist.conf
$ cp carbon.conf.example carbon.conf
$ cp carbon.amqp.conf.example carbon.amqp.conf
$ cp relay-rules.conf.example relay-rules.conf
$ cp rewrite-rules.conf.example rewrite-rules.conf
$ cp storage-schemas.conf.example storage-schemas.conf
$ cp storage-aggregation.conf.example storage-aggregation.conf
$ cp whitelist.conf.example whitelist.conf
$ vi carbon.conf
在cache區段下, 接收端口這一行包含一個默認值, 用於經過平文本協議(plaintext protocol )接受輸入指標項(以下所示):
[cache]
LINE_RECEIVER_INTERFACE = 0.0.0.0
LINE_RECEIVER_PORT = 2003
執行以下命令, 能夠啓動一個carbon-cache進程:
$ cd /opt/graphite/bin
$ ./carbon-cache.py start
Starting carbon-cache (instance a)
這個進程如今應該正在監聽2003端口:
$ ps -efla | grep carbon-cache
1 S root 2674 1 0 80 0 - 75916 ep_pol 00:18 ?
00:00:03 /usr/bin/python ./carbon-cache.py start
$ netstat -nap | grep 2003 tcp 0 0 0.0.0.0:2003 0.0.0.0:* LISTEN 2674/python
指標項(metric )是一種隨着時間不斷變化的可度量的數量, 例如:
數據點(datapoint)是包含以下信息的三元組:
客戶端應用程序經過將數據點發送至Carbon進程發佈指標項. 應用程序在Carbon進程所監聽的端口上創建TCP鏈接, 而後以簡單平文本格式發送數據點信息. 在本文的示例中, 這個端口號是2003. 這個TCP鏈接可能會一直處於打開狀態並根據須要儘量屢次重複使用. Carbon進程監聽輸入的數據可是並不會給客戶端返回任何響應.
數據點的格式定義以下:
例如, 下面是一些有效的數據點:
carbon-cache進程每分鐘接收到的指標項數量
carbon.agents.graphite-tutorial.metricsReceived 28198 1400509108
carbon-cache每分鐘建立的指標項數量
carbon.agents.graphite-tutorial.creates 8 1400509110
示例服務器端點每分鐘的p95響應次數
PRODUCTION.host.graphite-tutorial.responseTime.p95 0.10 1400509112
客戶端應用程序發佈指標項的方式能夠有多種:
爲了簡單起見, 在本文示例中我將經過netcat命令用平文本協議發佈指標項. 發佈如上所列的示例數據點, 運行以下命令便可:
$ sudo yum install nc
$ echo "carbon.agents.graphite-tutorial.metricsReceived 28198 `date +%s`" | nc localhost 2003
$ echo "carbon.agents.graphite-tutorial.creates 8 `date +%s`" | nc localhost 2003
$ echo "PRODUCTION.host.graphite-tutorial.responseTime.p95 0.10 `date +%s`" | nc localhost 2003
carbon-cache的日誌文件中將包含接收到的新指標項的有關信息以及存儲這些信息的位置:
$ tail -f /opt/graphite/storage/log/carbon-cache/carbon-cache-a/creates.log
19/05/2014 10:42:44 :: creating database file /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/metricsReceived.wsp (archive=[(60, 129600)] xff=0.5 agg=average)
19/05/2014 10:42:53 :: creating database file /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/creates.wsp (archive=[(60, 129600)] xff=0.5 agg=average)
19/05/2014 10:42:57 :: creating database file /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp (archive=[(60, 1440)] xff=0.5 agg=average)
Carbon與Whisper交互, 將這些時間序列數據存儲到文件系統中. 切換到文件系統相應的位置, 確保數據文件已經建立成功:
$ ls -l /opt/graphite/storage/whisper/carbon/agents/graphite-tutorial/
total 3040
-rw-r--r--. 1 root root 1555228 May 19 10:42 creates.wsp
-rw-r--r--. 1 root root 1555228 May 19 10:42 metricsReceived.wsp
$ ls -l /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/
total 20
-rw-r--r--. 1 root root 17308 May 19 10:42 p95.wsp
最後, 你能夠用whisper-info腳本獲取爲這些指標項建立的Whisper文件的元數據信息.
$ whisper-info.py /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp
maxRetention: 86400
xFilesFactor: 0.5
aggregationMethod: average
fileSize: 17308
Archive 0
retention: 86400
secondsPerPoint: 60
points: 1440
size: 17280
offset: 28
whisper-dump是一個更完整的腳本, 能夠輸出全部存儲保留週期內的原始數據以及Whisper文件的元數據信息.
$ whisper-dump.py /opt/graphite/storage/whisper/PRODUCTION/host/graphite-tutorial/responseTime/p95.wsp
Meta data:
aggregation method: average
max retention: 86400
xFilesFactor: 0.5
Archive 0 info:
offset: 28
seconds per point: 60
points: 1440
retention: 86400
size: 17280
Archive 0 data:
0: 1400609220, 0.1000000000000000055511151231257827
1: 0, 0
2: 0, 0
3: 0, 0
4: 0, 0
5: 0, 0
...
1437: 0, 0
1438: 0, 0
1439: 0, 0
理解聚合方法, 最大保留期, xFilesFactor和Whisper文件中的其餘屬性是至關重要的. 若是如今你有一點迷茫, 也不要過於擔憂, 我將在接下來的章節中詳細討論這些屬性.
當你或你的開發者同事和系統管理員們開始發佈數據點卻獲得了一些意想不到的結果時, 可能會有一些困惑:
首先咱們須要理解數據是如何在Whisper文件中存儲的. 當Whisper文件被建立時, 將擁有一個固定的文件尺寸, 這個尺寸永遠不會再改變. 在Whisper文件中可能會包含多個用於不一樣分辨率的數據點的「存儲區(bucket)」, 這些存儲區是在配置文件中定義的.
例如:
每一個存儲區還擁有一個保留期(retention)屬性用於標識該存儲區中的數據點應該保留的時間長度. 例如:
根據上述兩種信息, Whisper能夠進行一些簡單的數學計算, 計算出在每一個存儲區中實際須要保存多少數據點.
若是根據這個存儲模式配置建立Whisper文件, 該文件大小是56KB. 若是在這個文件上執行whisper-dump.py腳本, 會有以下輸出. 須要注意的是, 一個archive對應一個存儲區, 每點秒數(seconds per point )和點數(points )屬性則與咱們以前的計算相匹配.
元數據:
aggregation method: average
max retention: 604800
xFilesFactor: 0.5
Archive 0 info:
offset: 52
seconds per point: 10
points: 2160
retention: 21600
size: 25920
Archive 1 info:
offset: 25972
seconds per point: 60
points: 1440
retention: 86400
size: 17280
Archive 2 info:
offset: 43252
seconds per point: 600
points: 1008
retention: 604800
size: 12096
當數據從一個較高精度的存儲區移動到一個較低精度的存儲區時, 聚合開始發揮做用. 讓咱們之前一個示例中的存儲區A和存儲區B爲例:
咱們可能有一個每10秒鐘發佈一個數據點的應用程序. 在存儲區A中能夠找到6小時以內發佈的任何數據點. 不過, 若是我開始查詢6小時以前發佈的數據點, 就能夠在存儲區B中找到它們.
用高精度值除以低精度值, 以肯定須要聚合的數據點的數量.
l 60秒(存儲區B)/10秒(存儲區A)= 6個數據點須要聚合
注:Whisper須要較高精度的值可以整除較低精度的值(也就是說, 相除的結果必須是整數). 不然聚合的結果可能會不許確.
聚合數據時, Whisper從存儲區A中讀取6個10秒數據點, 而後將函數應用於這些數據點上, 得出一個將被存儲在存儲區B中的60秒數據點. 有5個聚合函數選項:average, sum, max, min和last. 聚合函數的選擇取決於須要處理的數據點. 例如, 第95百分位的值可能應該用max函數聚合. 另外一方面, 對於計數器來講, sum函數可能更合適.
在聚合數據點時, Whisper還處理了xFilesFactor的概念. xFilesFactor表示爲了保證聚合準確, 一個存儲區必須包含的數據點比率. 在咱們以前的示例中, Whisper肯定了它須要聚合6個10秒數據點. 因爲網絡問題, 應用重啓等緣由, 可能只有4個數據點有數據而其餘2個數據點是空值.
若是咱們的Whisper文件的xFilesFactor是0.5, 這意味着只有存在至少50%的數據點時, Whisper纔會聚合數據. 若是超過50%的數據點爲空時, Whisper會建立一個空值聚合. 在咱們的例子中, 即6個數據點中的4個——也就是66%. 聚合函數會被應用在非空數據點上, 建立聚合值.
你能夠將xFilesFactor設置爲0到1之間的任意值. 值0表示即便只有一個有效數據點, 就會執行聚合. 值1則表示只有所有的數據點都有效, 纔會執行聚合.
在前一章節中, 咱們將全部的樣例配置文件拷貝到了/opt/graphite/conf 文件夾中. 控制Whisper文件如何建立的配置文件以下:
存儲模式(storage-schemas)配置文件由多個條目組成, 每一個條目中包含一個模式, 用於匹配指標項名稱和保留期定義. 默認狀況下, 包含兩個條目:Carbon和所有其餘.
carbon條目匹配以「carbon」字符串開頭的指標項名稱. 默認狀況下, Carbon守護進程每60秒發佈一次它們本身內部的指標項(這一間隔是能夠更改的). 例如, carbon-cache進程會發布指標項, 用於標識該進程每分鐘建立的指標項文件的數量. 保留期的定義則表示數據點每60秒記錄一次, 並保存90天.
[carbon]
pattern = ^carbon\.
retentions = 60s:90d
所有其餘條目經過指定帶星號的模式捕捉所有其餘與Carbon無關的指標項. 這個保留期的定義表示數據點每60秒記錄一次, 並保存1天.
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
storage-aggregation配置文件也是由多個條目組成, 其中包括:
默認狀況下, 包含4個條目:
[min]
pattern = \.min$
xFilesFactor = 0.1
aggregationMethod = min
[max]
pattern = \.max$
xFilesFactor = 0.1
aggregationMethod = max
[sum]
pattern = \.count$
xFilesFactor = 0
aggregationMethod = sum
[default_average]
pattern = .*
xFilesFactor = 0.5
aggregationMethod = average
在測試環境下, 默認的存儲模式和存儲聚合函數能夠很好的完成任務, 不過真正應用到生產指標項時, 可能還要修改配置文件.
首先, 我會修改Carbon條目. 我但願Carbon每60秒記錄一次指標項, 並將這些指標項保存180天(6個月). 180天以後, 我但願可以以10分鐘的精度將這些指標項歸檔, 再保存180天.
[carbon]
pattern = ^carbon\.
retentions = 1min:180d,10min:180d
在Squarespace, 咱們用Dropwizard框架構建RESTful的Web Service. 在準生產環境和生產環境中, 咱們運行了許多這樣的服務, 全部這些服務都使用Dropwizard Metrics庫以每10秒一次的速度發佈應用和業務指標項. 這種10秒一次的數據我會保存3天. 3天后, 這些數據將被聚合爲1分鐘數據並保存180天(6個月). 最後, 6個月以後, 這些數據將被聚合爲10分鐘數據並再保存180天.
注:若是個人指標項庫以不一樣的速度發佈數據點, 我就須要修改保留的定義以匹配新的速度.
[production_staging]
pattern = ^(PRODUCTION|STAGING).*
retentions = 10s:3d,1min:180d,10min:180d
而Carbon, 生產環境或準生產環境以外的指標項, 可能只是用於測試. 我會將這些數據保存1天而且假設他們會每1分鐘發佈一次.
[default_1min_for_1day]
pattern = .*
retentions = 60s:1d
我會保留默認的存儲聚合條目, 不過會增長几條新的條目用於以ratio, m1_rate和p95結尾的指標項.
注:新增的條目須要添加到default條目以前.
[ratio]
pattern = \.ratio$
xFilesFactor = 0.1
aggregationMethod = average
[m1_rate]
pattern = \.m1_rate$
xFilesFactor = 0.1
aggregationMethod = sum
[p95]
pattern = \.p95$
xFilesFactor = 0.1
aggregationMethod = max
目前爲止, 你已經完成了Graphite後端的配置以匹配應用程序發佈數據點的速率而且已經徹底理解數據點是如何在文件系統中存儲的. 接下來的一章, 咱們將嘗試用graphite-webapp將這些數據可視化.
如今, 後端組件已經成功啓動並運行, 而且可以用咱們指定的格式存儲數值型的時間序列數據, 接下來咱們將瞭解Graphite的前端組件. 具體說來, 咱們須要查詢並可視化已存儲的信息的途徑.
據其Github描述文件所介紹, Graphite Web應用程序是一個運行在Apache/mod_wsgi下的Django應用程序. 通常來講, 可以提供以下功能:
graphite-web的安裝真的能夠稱得上是一個迷陣. 我已經屢次嘗試安裝graphite-web——在RHEL, CentOS, Ubuntu和Mac OS X上——而每一次的安裝步驟都是有不一樣的. 你能夠把它當成一場遊戲, 享受這個過程, 當全部必需的依賴都成功安裝完成後, 你就知道你已經完成了這個迷陣.
RHEL 6.5安裝指南:
$ cd /tmp
$ git clone https://github.com/graphite-project/graphite-web.git
$ cd /tmp/graphite-web
$ python check-dependencies.py
[REQUIRED] Unable to import the 'django' module, do you have Django installed for python 2.6.6?
[REQUIRED] Unable to import the 'pyparsing' module, do you have pyparsing module installed for python 2.6.6?
[REQUIRED] Unable to import the 'tagging' module, do you have django-tagging installed for python 2.6.6?
[OPTIONAL] Unable to import the 'memcache' module, do you have python-memcached installed for python 2.6.6? This feature is not required but greatly improves performance.
[OPTIONAL] Unable to import the 'txamqp' module, this is required if you want to use AMQP as an input to Carbon. Note that txamqp requires python 2.5 or greater.
[OPTIONAL] Unable to import the 'python-rrdtool' module, this is required for reading RRD.
3 optional dependencies not met. Please consider the optional items before proceeding.
3 necessary dependencies not met. Graphite will not function until these dependencies are fulfilled.
目標是保證至少全部必需的依賴都安裝成功. 若是計劃使用AMQ功能或Memcache的緩存功能, 就還須要安裝可選依賴.
$ sudo yum install cairo-devel
$ sudo yum install pycairo-devel
$ sudo pip install django
$ sudo pip install pyparsing
$ sudo pip install django-tagging
$ sudo pip install python-memcached
$ sudo pip install txamqp
$ sudo pip install pytz
$ cd /tmp/graphite-web
$ python check-dependencies.py
[OPTIONAL] Unable to import the 'python-rrdtool' module, this is required for reading RRD.
1 optional dependencies not met. Please consider the optional items before proceeding.
All necessary dependencies are met.
我已經安裝了不少包, 知足必需依賴的要求後, 就能夠開始安裝graphite-web:
$ cd /tmp/graphite-web
$ sudo python setup.py install
$ ls -l /opt/graphite/webapp/
total 12
drwxr-xr-x. 6 root root 4096 May 23 14:33 content
drwxr-xr-x. 15 root root 4096 May 23 14:33 graphite
-rw-r--r--. 1 root root 280 May 23 14:33 graphite_web-0.10.0_alpha-py2.6.egg-info
安裝腳本會將web應用文件移動到/opt/graphite/webapp文件夾下適當的位置.
web應用程序維護了一個內部數據庫用於保存用戶信息和儀表盤. 運行以下命令初始化該數據庫:
$ cd /opt/graphite
$ export PYTHONPATH=$PYTHONPATH:`pwd`/webapp
$ django-admin.py syncdb --settings=graphite.settings
You just installed Django's auth system, which means you don't have any superusers defined.
Would you like to create one now? (yes/no): yes
Username (leave blank to use 'root'): feangulo
Email address: feangulo@yaipan.com
Password:
Password (again):
Error: Blank passwords aren't allowed. Password: Password (again): Superuser created successfully. Installing custom SQL ... Installing indexes ... Installed 0 object(s) from 0 fixture(s)
上述命令將建立一個新的數據庫並將其保存在/opt/graphite/storage文件夾下:
$ ls -l /opt/graphite/storage/graphite.db
-rw-r--r--. 1 root root 74752 May 23 14:46 /opt/graphite/storage/graphite.db
包含graphite-webapp設置的配置文件位於/opt/graphite/webapp/graphit文件夾下. 將樣例配置文件拷貝到該文件夾下:
$ vi /opt/graphite/webapp/graphite/local_settings.py
#########################
$ General Configuration $
#########################
TIME_ZONE = 'UTC'
#########################
$ Database Configuration $
#########################
DATABASES = {
'default': {
'NAME': '/opt/graphite/storage/graphite.db',
'ENGINE': 'django.db.backends.sqlite3',
'USER': '',
'PASSWORD': '',
'HOST': '',
'PORT': ''
}
}
到如今爲止, 若是你遵循前述章節的指令, 如今只會有一個運行在2003端口上的carbon-cache進程和一個7002查詢端口. 這些是默認狀況下graphite-webapp所需的端口. 所以, 配置文件無需任何修改.
$ ps -efla | grep carbon-cache
1 S root 14101 1 0 80 0 - 75955 ep_pol May20 ? 00:00:26 /usr/bin/python ./carbon-cache.py start
$ netstat -nap | grep 2003
tcp 0 0 0.0.0.0:2003 0.0.0.0:* LISTEN 14101/python
$ netstat -nap | grep 7002
tcp 0 0 0.0.0.0:7002 0.0.0.0:* LISTEN 14101/python
不過, 你也能夠在設置文件中顯式指定從哪一個carbon-cache進程讀取數據:
$ vi /opt/graphite/webapp/graphite/local_settings.py
#########################
$ Cluster Configuration $
#########################
CARBONLINK_HOSTS = ["127.0.0.1:7002:a"]
上述代碼的含義是我有一個本地運行的名爲‘a’的carbon-cache進程, 其查詢端口設置爲7002. 查看Carbon配置文件, 將會看到以下配置:
$ vi /opt/graphite/conf/carbon.conf
[cache]
LINE_RECEIVER_INTERFACE = 0.0.0.0
LINE_RECEIVER_PORT = 2003
CACHE_QUERY_INTERFACE = 0.0.0.0
CACHE_QUERY_PORT = 7002
注:‘a’ 是從何而來的呢?是默認分配的名字. 若是要定義更多緩存, 須要在配置文件中建立新的命名區塊.
[cache:b]
LINE_RECEIVER_INTERFACE = 0.0.0.0
LINE_RECEIVER_PORT = 2004
CACHE_QUERY_INTERFACE = 0.0.0.0
CACHE_QUERY_PORT = 7003
Graphite Web應用中包含默認的儀表盤和圖表模版. 拷貝樣例配置文件:
$ cd /opt/graphite/conf
$ cp dashboard.conf.example dashboard.conf
$ cp graphTemplates.conf.example graphTemplates.conf
我對儀表盤配置文件做了一些修改, 讓圖表展現區塊更大.
$ vi /opt/graphite/conf/dashboard.conf
[ui]
default_graph_width = 500
default_graph_height = 400
automatic_variants = true
refresh_interval = 60
autocomplete_delay = 375
merge_hover_delay = 750
我對默認的圖表模版也作了一些修改, 讓它有一個黑色背景和白色前景. 另外我還把字體調小了一些.
$ vi /opt/graphite/conf/graphTemplates.conf
[default]
background = black
foreground = white
minorLine = grey
majorLine = rose
lineColors = blue,green,red,purple,brown,yellow,aqua,grey,magenta,pink,gold,rose
fontName = Sans
fontSize = 9
fontBold = False
fontItalic = False
終於, 一切準備就緒, 能夠運行Web應用程序了. 我會在8085端口運行這個Web應用, 你能夠隨意設置這個端口號. 運行以下命令:
$ cd /opt/graphite
$ PYTHONPATH=`pwd`/storage/whisper ./bin/run-graphite-devel-server.py --port=8085 --libs=`pwd`/webapp /opt/graphite 1>/opt/graphite/storage/log/webapp/process.log 2>&1 &
$ tail -f /opt/graphite/storage/log/webapp/process.log
打開一個Web瀏覽器並輸入以下地址http://your-ip:8085. 確保Graphite Web應用可以正常加載. 用tail命令查看process.log文件的輸出, 應該能夠看到資源的加載和來自於web應用的查詢.
在上一章中, 咱們用netcat命令將幾個指標項發佈到carbon-cache進程中. 具體以下:
「`
carbon.agents.graphite-tutorial.metricsReceived
carbon.agents.graphite-tutorial.creates
PRODUCTION.host.graphite-tutorial.responseTime.p95
Web應用程序以樹狀結構展現這些指標項. 若是在左側面板中操做指標樹, 就能夠看到所有的指標項.
點擊任意一個指標項, 右邊的面板上將繪製出這個指標項的圖表(默認狀況下是過去24小時的數據). 能夠經過面板中圖表上方的按鈕修改查詢的日期範圍.
(點擊圖片查看大圖)
默認的視圖適於快速瀏覽指標項並將其可視化. 不過若是想構建一個儀表盤, 能夠將瀏覽器地址指向http://your-ip:8085/dashboard. 該頁面的頂欄是另一種方式的指標項導航. 能夠用點擊選項的方式導航, 也能夠直接輸入文本獲取建議. 點擊某個指標項在底部區域將出現相應的圖表區塊. 繼續點擊新的指標項, 下方的面板中將會顯示新增的圖塊, 從而建立一個儀表盤. 有時你可能想要在一個圖表中展現多個指標項. 要實現這個功能, 將一個圖塊拖拽到另外一個圖塊上方, 多個指標項就會繪製在同一張圖表上. 經過圖塊的拖拽, 也能夠改變其在佈局中的位置.
(點擊圖片查看大圖)
用戶界面看起來十分簡單, 不過不要感到灰心. 你仍然能夠在指標項數據上完成強大的操做. 點擊某個圖表區塊, 會彈出一個對話框. 對話框中展現了正在繪製的指標項列表, 你能夠直接編輯這些指標項. 對話框中還有多個菜單, 用於在數據上應用函數, 修改可視化界面的外觀以及其餘許多操做.
此外, 還能夠用最頂端的菜單保存儀表盤, 加載其餘儀表盤, 修改當前儀表盤的日期範圍, 分享儀表盤以及其餘一些功能. 目前爲止我最喜歡的功能是Dashboard -> Edit Dashboard. 當我須要建立或修改儀表盤時, 這個功能節省了我許多時間.
(點擊圖片查看大圖)
爲了舉例說明這一功能, 我將構建一個用於監控carbon-cache進程的儀表盤. 前一章中曾經提到過, Carbon進程會記錄內部指標項. 相比於手工構建儀表盤, 我更喜歡用Edit Dashboard這一功能.
在Edit Dashboard窗口中輸入以下代碼, 便可構建用於監控carbon-cache進程的儀表盤.
注:該儀表盤會監控全部正在運行的carbon-cache進程. 注意在指標項名稱中星號(*)的使用會匹配全部以carbon.agents爲前綴的值.
[
{
「target」: [
「aliasByNode(carbon.agents.*.metricsReceived,2)」
],
「title」: 「Carbon Caches - Metrics Received」
},
{
「target」: [
「aliasByNode(carbon.agents.*.creates,2)」
],
「title」: 「Carbon Caches - Create Operations」
},
{
「target」: [
「aliasByNode(carbon.agents.*.cpuUsage,2)」
],
「title」: 「Carbon Caches - CPU Usage」
},
{
「target」: [
「aliasByNode(carbon.agents.*.memUsage,2)」
],
「title」: 「Carbon Caches - Memory Usage」
}
]
更新儀表盤的定義會看到以下界面:
(點擊圖片查看大圖)
修改Edit Dashboard對話框中的內容會更新瀏覽器中的儀表盤. 不過這些修改並無保存到Graphite的內部儀表盤數據庫中. 繼續並保存該儀表盤, 以即可以分享並再次打開它.
若是要查找儀表盤, 打開發現器(Finder):
在Graphite的生產安裝環境中, Graphite Caches儀表盤的外觀界面更相似下圖:
與其餘工具同樣, Graphite也有一些缺點:例如擴展性不是很好, 存儲機制並不是最優——可是Graphite的API是至關漂亮的. 有用戶界面的感受很不錯, 不過最重要的是經過UI能夠完成的工做, 徹底均可以經過graphite-web API請求來完成. 用戶能夠經過構造一個簡單的URL來請求定製化圖表. 在HTTP GET請求的查詢串中指定參數. 默認狀況下, 請求響應會返回一個PNG圖片, 不過用戶也能夠指明所需返回的格式——如, JSON數據.
樣例請求$1:
樣例請求$2:
Graphite API支持多種顯示選項以及遵循簡單的函數式語法的數據操做函數. 考慮到複雜的表達式和計算過程, 函數能夠嵌套. 查看在線文檔以詳細瞭解所有可用的函數:
假設我有一個運行在上百臺服務器上的應用, 每一個服務器每10秒鐘發佈一次各自的p95響應時間. 利用API中所提供的函數, 我能夠對指標項進行加工並構建一個信息化圖表:
咱們想要看一下所有p95時延的平均值
時延是以毫秒爲單位記錄的, 咱們想要以秒爲單位展現.
做爲指標項查詢的一部分傳遞給API的函數參數以下:
恭喜!咱們已經完成了Carbon, Whisper和graphite-webapp的安裝和配置, 指標項的發佈和導航以及儀表盤的構建. 如今你能夠爲你的業務和應用指標項構建漂亮的儀表盤.
本文是關於Graphite的一篇入門級文章. 關於更高級的主題請參考:
Carbon Cache壓力測試
Carbon聚合器
基於ELK組件的Graphite查詢統計
關於做者
Franklin Angulo在Squarespace的負責管理構建和維護大型核心後端引擎的團隊, Squarespace是一家位於紐約市的網站構建平臺. Franklin是一名在帶領複雜的跨領域的大型工程項目方面有豐富經驗的專業人士. 在加入Squarespace以前他曾經是亞馬遜的一名資深軟件開發工程師, 主要負責全球進貨物流和亞馬遜儲物櫃計劃的路由規劃調優, 運率購買和容量規劃算法.
查看英文原文: Getting Started with Monitoring using Graphite
Q : graphite數據接收和存儲正常,可是dashboard中不能正常顯示圖像.
A : 多是由於graphite.wsgi被vi了,從新拷貝一份覆蓋掉原來的就行.
Q :
A :