本文僅涉及報警數據存儲盒展示部分,關於數據收集部分,請參閱【監控系統】使用collect進行進程監控; 關於報警服務部分,請參閱【監控系統】配合Graphite使用的報警系統python
grafana,按照官方的說法是 Beautiful metric & analytic dashboards
。grafana 負責數據的展現,能夠配置各類不一樣的數據源,其中包括 graphite。nginx
graphite 包含多個模塊,這裏咱們使用的模塊包括:git
Whisper:固定大小的數據庫,存儲方式相似RRD (round-robin-database),用來存儲收集到的 metricsgithub
Carbon:metrics 接收服務,接收到 metrics 之後調用 Whisper 進行存儲web
graphite-api:WSGI webapp 接口服務,grafana 在須要展示數據的時候使用其提供的 REST API 進行數據的獲取shell
本文的搭建的監控系統結構以下:數據庫
在本文檔中,咱們會盡可能將相關文件安裝在/opt/graphite目錄segmentfault
對於某些默認Python環境不是2.7的系統,須要安裝Python2.7。centos
從源碼編譯Python2.7api
configure make make install
建立Python2.7的virtualenv環境
virtualenv /opt/graphite --python=/usr/local/bin/python
加載virtualenv環境
source /opt/graphite/bin/activate
pip install carbon --install-option="--prefix=/opt/graphite" --install-option="--install-lib=/opt/graphite/lib" pip install whisper
使用默認的配置文件:
cp /opt/graphite/conf/storage-schemas.conf.example /opt/graphite/conf/storage-schemas.conf cp /opt/graphite/conf/carbon.conf.example /opt/graphite/conf/carbon.conf
啓動 Carbon
/opt/graphite/bin/carbon-cache.py start
carbon的文件目錄在配置文件 /opt/graphite/conf/carbon.conf 中進行定義,下面是默認的配置:
LOCAL_DATA_DIR = /opt/graphite/storage/whisper/
yum install libffi-devel pip install graphite-api --install-option="--prefix=/opt/graphite"
首先安裝uwsgi
pip install uwsgi
建立graphite-api的配置文件:/opt/graphite/etc/graphite-api.yml
search_index: /opt/graphite/index finders: - graphite_api.finders.whisper.WhisperFinder functions: - graphite_api.functions.SeriesFunctions - graphite_api.functions.PieFunctions whisper: directories: - /opt/graphite/storage/whisper carbon: hosts: - 127.0.0.1:7002 timeout: 1 retry_delay: 15 carbon_prefix: carbon replication_factor: 1
在這個配置文件中,whisper的數據路徑配置爲/opt/graphite/storage/whisper,這個是在carbon配置文件 /opt/graphite/conf/carbon.conf 中使用配置項LOCAL_DATA_DIR進行定義的。
centos中沒有uwsgi的package,須要自行下載相關的啓動腳本,這裏使用 https://github.com/jgoldschrafe/rpm-uwsgi
wget -O /etc/init.d/uwsgi https://raw.githubusercontent.com/jgoldschrafe/rpm-uwsgi/master/SOURCES/uwsgi.init chmod +x /etc/init.d/uwsgi
編輯文件 /etc/init.d/uwsgi 進行目錄配置
uwsgi="/opt/graphite/bin/uwsgi" prog=$(basename "$uwsgi") UWSGI_CONF_DIR="/etc/uwsgi" UWSGI_LOG_DIR="/var/log/uwsgi" PIDFILE_DIR="/var/run/uwsgi"
建立文件/etc/uwsgi/graphite-api.ini
[uwsgi] processes = 2 socket = 0.0.0.0:5000 module = graphite_api.app:app home = /opt/graphite env = GRAPHITE_API_CONFIG=/opt/graphite/conf/graphite-api.yml
啓動uwsgi
service uwsgi start
啓動之後會監聽5000端口,注意這裏5000端口是uwsgi協議,須要後面配置nginx進行代理。
server { listen 81; location / { include uwsgi_params; uwsgi_pass localhost:5000; } }
nginx啓動後能夠訪問洗面的連接檢查數據返回是否正常
http://127.0.0.1:81/render?target=test.metric
可使用多種個方式向監控系統中寫入數據,例如 dropwizard metrics。這裏爲了方便使用Python進行數據上報:
import socket import time CARBON_SERVER = 'xxx.xxx.xxx.xxx' CARBON_PORT = 2003 for k in xrange(100000): sock = socket.socket() sock.connect((CARBON_SERVER, CARBON_PORT)) message = "test.meter.qps %d %d\n" % (k % 10, int(time.time())) print message sock.sendall(message) sock.close() time.sleep(5)
程序運行之後能夠在carbon的數據目錄中會發現以下的文件結構:
test |-- metric.wsp |-- meter | |-- qps.wsp
首先配置grafana使用graphite做爲數據源
配置數據顯示:
對於監控系統,長期運行之後必然會積攢大量的歷史數據,whisper 經過配置數據保存的時間段以及在時間短內每間隔多長時間保存一條數據來解決歷史數據問題。
配置文件 /opt/graphite/conf/storage-schemas.conf 中描述了上述信息:
[default] pattern = .* retentions = 1m:30d,1h:1y
這個配置中,30天內的數據每間隔1分鐘保存一條數據,30天-1年之間的數據,每一個小時保存一條數據。
因爲 whisper 是一個固定大小的數據庫,因此當 storage-schemas.conf 設定之後,一個metrics所佔的磁盤空間就已經肯定了。在系統運行的週期中只要根據 metrics 的增長進行適當擴容便可。
注意:storage-schemas.conf修改之後對於已經在磁盤上進行記錄的Metrics不會生效,須要刪除數據從新寫入或者進行數據遷移才行。