在CentOS6上,statsD和Graphite的部署过程

近期研究LogStash和Elasticsearch过程中,注意到了statsD和Graphite的组合,前者负责数据的初步处理,后者负责数据展现,相得益彰,在部署过程中,主要是Graphite遇到了一些依赖方面的问题,而statsD的部署可以说是非常简单。


系统版本:CentOS release 6.5 (Final)

Python版本:Python 2.7.6


部署Graphite

系统依赖:

yum -y install libpng-devel mysql-devel mysql nginx

Graphite是一个Django的项目,所以必须有基础的Python环境,并推荐使用pip作为Python模块的管理工具:

easy_install pip

然后,完善Django环境,使用的版本是Django1.5.8(1.6版本会有一些模块变更,导致不兼容),并一并安装依赖django-tagging插件:

pip install Django==1.5.8
pip install django-tagging

Django要使用mySQL作为后端存储,故需要确保Python环境中包含mysql模块:

pip install mysql-python

安装 Graphite的三个主要组件:

pip install carbon
pip install whisper
pip install graphite-web

安装cairo以及pycairo,这里遇到了一些问题:1.对版本有要求,yum源里的cairo版本太旧,需要手动下载源码包进行安装;2. 在安装pycairo的时候,需要PKG_CONFIG_PATH,并且pycairo不能用pip来安装,还是要下载源码,自己动手安装:

wget http://cairographics.org/releases/cairo-1.12.0.tar.gz -O /tmp/cairo-1.12.0.tar.gz
cd /tmp/
tar xvzf cairo-1.12.0.tar.gz
cd cairo-1.12.0
./configure && make && make install && ldconfig
export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig
wget http://cairographics.org/releases/py2cairo-1.10.0.tar.bz2 -O /tmp/py2cairo-1.10.0.tar.bz2
cd /tmp/
bzip2 -d py2cairo-1.10.0.tar.bz2
tar xvf py2cairo-1.10.0.tar
cd /tmp/py2cairo-1.10.0
./waf configure && ./waf build && ./waf install

安装完毕之后,对于carbon先使用默认的配置文件即可:

cd /opt/graphite/conf
cp carbon.conf.example carbon.conf
cp storage-schemas.conf.example storage-schemas.conf

主要还是要修改Django的数据库信息、Secret Key和时区等配置,其中最重要的是前两项。对应的配置文件默认位于/opt/graphite/webapp/graphite/settings.py:

以下是数据库配置:

#Initialize deprecated database settings
DATABASE_ENGINE = ''
DATABASE_NAME = ''
DATABASE_USER = ''
DATABASE_PASSWORD = ''
DATABASE_HOST = ''
DATABASE_PORT = ''

DATABASES = {
  'default': {
    'NAME': 'graphite',
    'ENGINE': 'django.db.backends.mysql',
    'USER': 'root',
    'PASSWORD': 'xxxxx',
    'HOST': '192.168.2.244',
    'PORT': '3306'
  }
}

Secret Key的设置,需要设置成自己的

SECRET_KEY = 'gdhr=wufuyf701&j602f&#hx4f=!ojj5y)7s9_u(m$%x1j(k0d'

设置完Django的数据库配置之后,还要同步数据库,当然非常简单:

cd /opt/graphite/webapp/graphite
python manage.py syncdb

还有一个需要注意的地方就是,默认安装的Twisted在这里不兼容,会导致报出:ImportError: cannot import name daemonize 这样的错误,而要解决这个问题,需要做的就是修正一下版本:

pip uninstall Twisted
pip install "Twisted<12.0"


启动,carbon-cache服务:

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

这样,基础的软件设施已经部署完毕,下面就是Django WEB服务的部署了,这里我采用的是比较熟悉的Nginx+uWSGI的部署模式,当然,我们要先确保uwsgi的存在:

pip install uwsgi

配置并启动uwsgi服务:

cd /opt/graphite/conf
cp graphite.wsgi.example wsgi.py
cd /opt/graphite/
vim grapite.ini

uWSGI的配置如下:

[uwsgi]
socket = 127.0.0.1:8630
chdir=/opt/graphite/conf
module=wsgi
master=True
processes = 4
pidfile=/var/run/uwsgi-graphite.pid
vacuum=True
max-requests=5000
daemonize=/var/log/uwsgi-graphite.log
stats = 127.0.0.1:9192
protocol=http

以下是Nginx虚拟主机的配置(/etc/nginx/conf.d/graphite.conf):

server {
        listen 8081;
        server_name a00;
        proxy_buffer_size 64k;
        proxy_buffers   32 32k;
        proxy_busy_buffers_size 128k;

        location / {
                include uwsgi_params;
                proxy_pass http://127.0.0.1:8630;
        }

        location /static/admin/ {
                alias /usr/local/lib/python2.7/site-packages/django/contrib/admin/static/admin/;
        }
}

之后重新加载Nginx配置:

nginx -s reload

打开浏览器,访问8081端口,效果图如下:




部署statsD:

statsD的部署非常简单,并且只需要非常简单的配置就能够和Graphite结合起来,那我们先看一下部署:

cd /opt/
git clone https://github.com/etsy/statsd.git
cd statsd
cp exampleConfig.js Config.js
# Here configure Config.js, using backends graphite!
node stats.js Config.js

如果你是在本机上部署的Graphite的话,你甚至不需要对配置做任何修改!其中有必要修改的仅仅是Graphite相关的信息而已:

{
  graphitePort: 2003
, graphiteHost: "a01"
, port: 8125
, backends: [ "./backends/graphite" ]
, debug: true
}

需要注意的是,statsd监听的8125端口是UDP协议的,在查看的时候netstat -ntlp是看不到的,可以使用netstat -nulp来查看。下面通过statsD向Graphite发送一条数据测试一下,如果一切顺利的话,你应该可以在Graphite的页面上看到变化:

echo "hello.world:1|c" | nc -u -w0 127.0.0.1 8125

以上。希望能帮到各位,如果写的有疏漏或者错误,欢迎拍砖、指正,谢谢!

你可能感兴趣的:(监控,数据可视化,Graphite,statsd)