使用graphite和grafana進行應用程序監控

graphite+grafana 介紹

grafana,按照官方的說法是 Beautiful metric & analytic dashboards。grafana 負責數據的展現,能夠配置各類不一樣的數據源,其中包括 graphite。python

graphite 包含多個模塊,這裏咱們使用的模塊包括:nginx

  • Whisper:固定大小的數據庫,存儲方式相似RRD (round-robin-database),用來存儲收集到的 metrics
  • Carbon:metrics 接收服務,接收到 metrics 之後調用 Whisper 進行存儲
  • graphite-api:WSGI webapp 接口服務,grafana 在須要展示數據的時候使用其提供的 REST API 進行數據的獲取

本文的搭建的監控系統結構以下:git

輸入圖片說明

在本文檔中,咱們會盡可能將相關文件安裝在/opt/graphite目錄github

準備Python 2.7 環境

對於某些默認Python環境不是2.7的系統,須要安裝Python2.7。web

從源碼編譯Python2.7shell

configure
make
make install

建立Python2.7的virtualenv環境數據庫

virtualenv /opt/graphite --python=/usr/local/bin/python

加載virtualenv環境centos

source /opt/graphite/bin/activate

安裝Carbon+Whisper

pip install carbon --install-option="--prefix=/opt/graphite" --install-option="--install-lib=/opt/graphite/lib"
pip install whisper

使用默認的配置文件:api

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

啓動 Carbonbash

/opt/graphite/bin/carbon-cache.py start

carbon的文件目錄在配置文件 /opt/graphite/conf/carbon.conf 中進行定義,下面是默認的配置:

LOCAL_DATA_DIR = /opt/graphite/storage/whisper/

安裝graphite-api

yum install libffi-devel
pip install graphite-api --install-option="--prefix=/opt/graphite"

使用nginx+uwsgi的方式部署graphite-api

首先安裝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展示metric

首先配置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不會生效,須要刪除數據從新寫入或者進行數據遷移才行。

相關文章
相關標籤/搜索