因为公司打算监控kafka队列信息,但是又不想直接安装KafkaOffsetMonitor这个工具,希望能够将kafka的监控信息内嵌到grafana上面,在这个项目的github上面无意中看到这个个工具可以当作一个插件使用,可以直接内嵌到graphite当中,所有前提是需要搭建一个graphite,所以才有了这篇文章。

    系统环境描述:

      CentOS 7.2 

      Python 2.7


前置条件:Python2.7

    因为我使用的是CentOS7.2,系统自带的是Python2.7,但是现在graphite的线上支持最低版本是2.7,最高版本是不超过3.x。所有使用CentOS6.x系统的需要升级为Python2.7,具体的升级过程在此就不在描述了。


一.graphite的安装

1.直接从github上面下载项目即可。  

  • Graphite-web: git clone https://github.com/graphite-project/graphite-web.git

  • Carbon: git clone https://github.com/graphite-project/carbon.git

  • Whisper: git clone https://github.com/graphite-project/whisper.git

  • Ceres: git clone https://github.com/graphite-project/ceres.git

2.依赖环境的安装。

 1)进入graphite-web目录下面,可以看到下面文件

graphite的搭建_graphite

 2)在目录下面可以看到一个文件requirment.txt文件,这个文件内是graphite的依赖包。

可以直接执行以下命令,安装依赖包:

    pip install -r requirment.txt

 3)检查依赖关系。

在graphite下面存在以恶搞check-dependencies.py脚本,执行这个脚本会检测graphite的环境信息。

    python check-dependencies.py

[OPTIONAL] Unable to import the 'pyhash' module. This is useful for fnv1_ch hashing support.

1 optional dependencies not met. Please consider the optional items before proceeding.

All necessary dependencies are met.

    当环境检测输出O optional的时候,就说明graphite的环境已经搭建完成了。

  PS:pyhash这个模块需要依赖C++的boots库,编译完成之后可以下载pyhash的源码包安装。

  PS:虽然我没有安装pyhash,但是后续的安装还是没有出什么问题,不过能尽量编译的话就编译

  PS:安装过程中会有一些报错,需要yum install python-devel openssl openssl-devel

 4)安装graphite

  cd graphite-web

  python setup.py build

  python setup.py install

执行上面三个命令,graphite会默认安装路径是/opt/graphite

 5)安装Carbon,Whisper,Ceres

依次进入三个源码目录,执行下面俩个命令

  python setup.py build

  python setup.py install


3.文件配置信息修改

 1)修改时区

  mv /opt/graphite/webapp/graphite/local_stettings.py.example

/opt/graphite/webapp/graphite/local_stettings.py

  vi /opt/graphite/webapp/graphite/local_stettings.py

  修改成:TIME_ZONE = 'Asia/Shanghai'

 2)同步数据库,建库简表(我使用的是默认的数据库,需要修改成其他的数据可以进在local_settiongs.py里面自己修改,具体参数的修改就不再描述了)

  PYTHONPATH=/opt/graphite/webapp django-admin.py migrate --settings=graphite.settings --run-syncdb

 3)生成配置文件信息

  PYTHONPATH=/opt/graphite/webapp django-admin.py collectstatic --noinput --settings=graphite.settings

 4)配置文件修改

  cd /opt/graphite/conf

  cp carbon.conf.example carbon.conf

  cp relay-rules.conf.example relay-rules.conf

  cp storage-schemas.conf.example storage-schemas.conf

  cp storage-aggregation.conf.example storage-aggregation.conf

  cp graphite.wsgi.example graphite.wsgi

 5)修改graphite.ini配置文件

因为我使用的是Nginx作为web服务器,所有需要安装下载uwsgi

  pip install uwsgi

  配置uwsgi文件graphite.ini

  cd /opt/graphite/conf

  vi graphite.ini


[uwsgi]

processes = 2 

socket = 127.0.0.1:43210

#gid = nobody

#uid = nobody

chdir = /opt/graphite/conf/ #wsgi文件路径

wsgi-file=graphite.wsgi #wsgi文件

master=true

vacuum=true

#module = wsgi:application

#buffer-size = 65536

pidfile = /var/run/uwsgi.pid

#chmod-socket = 666

#pythonpath = /opt/graphite/webapp

daemonize = /var/log/uwsgi.log 日志


 6)修改nginx配置文件信息

    server {

        listen       90;

        server_name  172.16.3.15;

        charset      utf-8;

        access_log   /var/log/nginx/graphite_access.log;

        error_log    /var/log/nginx/graphite_error.log error;


        location / {

            add_header Access-Control-Allow-Origin $http_origin;

            add_header 'Access-Control-Allow-Credentials' 'true';

            add_header 'Access-Control-Allow-Methods' 'GET, OPTIONS';

            add_header 'Access-Control-Allow-Headers' 'origin, authorization, accept';

            uwsgi_pass 127.0.0.1:43210;

            include uwsgi_params;

        }


4.启动文件

 1)启动carbon

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

  PS:第一次启动的时候没有成功,然后第二次启动的时候成功了。

 2)启动Nginx

 3)启动uwsgi   

  uwsgi /opt/graphite/conf/graphite.ini


5.访问和测试

  在浏览器中输入http://172.16.3.15:90就可以访问

  测试

  python /opt/graphite/examples/example-client.py