RHEL5にGraphiteをセットアップ

RHEL5にGraphiteをセットアップ はてなブックマーク - RHEL5にGraphiteをセットアップ


■Graphiteとは?

Graphite はオープンソースで開発されているリアルタイムモニタリングツール。開発者サイト及びドキュメントについては http://graphite.wikidot.com/ を参照。主にデータ収集を司る Whisper と、データを保管する Carbon の2つのプログラムがコア部。開発言語は Python 2.4 (2.6以上推奨) 、動作環境は Django 1.0 以上、その他 Twisted 8.0 以上、zope や WSGI など。

■この記事は?

RHEL6/CentOS6 では Graphite の各バイナリパッケージが配付されている。しかし、RHEL5 の環境では自分で動作環境を構築する必要があった。しかし、ネットの情報を頼ろうにも情報が少なかった。一通り動作できる所まで確認できたので、記録として残しておく。

■依存関係

  • Python 2.4 以上(2.6以上推奨)
  • Pycairo
  • Django 1.0 以上
  • django-tagging 0.3.1 以上
  • Twisted 8.0 以上(10.0以上推奨)
  • zope-interface
  • WSGI ( mod_wsgi & mod_python )

■セットアップ手順

まず、yum をつかってセットアップ可能なものは、yum を使用する(正規リポジトリ + EPEL を使用する)。

yum install \
    python \
    python-devel \
    python-pip \
    pycairo \
    python-twisted-web \
    python-zope-interface \
    mod_wsgi \
    mod_python \
    python-simplejson \
    python-sqlite2

Django は ver 1.5 のセットアップを試みるが、”pip-python install Django”を実行しても、バージョン関係のエラーが次のように表示されて実行できなかった。

# pip-python install Django
Downloading/unpacking Django
  Downloading Django-1.5.1.tar.gz (8.0Mb): 8.0Mb downloaded
  Running setup.py egg_info for package Django
    Traceback (most recent call last):
      File "<string>", line 14, in ?
      File "/home/zem/build/build/Django/setup.py", line 84, in ?
        version = __import__('django').get_version()
      File "django/__init__.py", line 6, in get_version
        from django.utils.version import get_version
      File "django/utils/version.py", line 20
        parts = 2 if version[2] == 0 else 3
                   ^
    SyntaxError: invalid syntax
    Complete output from command python setup.py egg_info:
    Traceback (most recent call last):

何度か検証した所、version 1.4 および 1.5 ではエラーが出てしまう。そこで、バージョンを指定してセットアップを継続する。

# pip-python install Django==1.3.7
Downloading/unpacking Django==1.3.7
  Downloading Django-1.3.7.tar.gz (6.5Mb): 6.5Mb downloaded
  Running setup.py egg_info for package Django
Installing collected packages: Django
  Running setup.py install for Django
    changing mode of build/scripts-2.4/django-admin.py from 644 to 755
    changing mode of /usr/bin/django-admin.py to 755
Successfully installed Django
Cleaning up...

今度は正常に進行した。引き続き、django-tagging もセットアップする。

# pip-python install django-tagging
Downloading/unpacking django-tagging
  Downloading django-tagging-0.3.1.tar.gz
  Running setup.py egg_info for package django-tagging
Installing collected packages: django-tagging
  Running setup.py install for django-tagging
Successfully installed django-tagging
Cleaning up...

これで基本動作環境は終わり。

■whisper、carbon、graphite-web セットアップ

whisper は pip-python をつかってセットアップする。

# pip-python install whisper
Downloading/unpacking whisper
  Downloading whisper-0.9.10.tar.gz
  Running setup.py egg_info for package whisper
Installing collected packages: whisper
  Running setup.py install for whisper
(snip)
    changing mode of /usr/bin/whisper-create.py to 755
Successfully installed whisper
Cleaning up...

次に carbon だが、これは pip-python 経由では入らない。

# pip-python install carbon
Downloading/unpacking carbon
  Running setup.py egg_info for package carbon
    package init file 'lib/twisted/plugins/__init__.py' not found (or not a regular file)
    warning: no files found matching '*' under directory 'distro/'
    warning: no previously-included files found matching 'conf/*.conf'
Downloading/unpacking twisted (from carbon)
  Running setup.py egg_info for package twisted
    Traceback (most recent call last):
      File "<string>", line 14, in ?
      File "/usr/local/src/build/twisted/setup.py", line 64, in ?
        main(sys.argv[1:])
(snip)
SyntaxError: invalid syntax

----------------------------------------
Command python setup.py egg_info failed with error code 1
Storing complete log in /root/.pip/pip.log

Twisted のバージョンに依存関係があるのか、正常に処理出来ない。Twisted を手動でセットアップする。http://twistedmatrix.com/ からファイルを入手。v 13.0 ではエラーが出たので、v 11.0 で作業を進める。

# wget --no-check-certificate https://pypi.python.org/packages/source/T/Tw
isted/Twisted-11.0.0.tar.bz2
# bunzip2 ./Twisted-11.0.0.tar.bz2
# tar xvf ./Twisted-11.0.0.tar
# python setup.py install

この状態で、再度 carbon のセットアップを行う。

# pip-python install carbon
Downloading/unpacking carbon
  Downloading carbon-0.9.10.tar.gz (42Kb): 42Kb downloaded
  Running setup.py egg_info for package carbon
    package init file 'lib/twisted/plugins/__init__.py' not found (or not a regular file)
    warning: no files found matching '*' under directory 'distro/'
(snip)
    SyntaxError: invalid syntax
Successfully installed carbon txamqp
Cleaning up...

途中、警告が多数出るがセットアップは完了する模様。

引き続き、graphite-web をセットアップする。

# pip-python install graphite-web
Downloading/unpacking graphite-web
  Downloading graphite-web-0.9.10.tar.gz (2.1Mb): 2.1Mb downloaded
  Running setup.py egg_info for package graphite-web
    warning: no files found matching '*' under directory 'distro/'
    warning: no previously-included files found matching 'webapp/graphite/local_settings.py'
    warning: no previously-included files found matching 'conf/*.conf'
Installing collected packages: graphite-web
  Running setup.py install for graphite-web
    changing mode of build/scripts-2.4/run-graphite-devel-server.py from 644 to 755
    changing mode of build/scripts-2.4/build-index.sh from 644 to 755
    warning: no files found matching '*' under directory 'distro/'
    warning: no previously-included files found matching 'webapp/graphite/local_settings.py'
    warning: no previously-included files found matching 'conf/*.conf'
    changing mode of /opt/graphite/bin/run-graphite-devel-server.py to 755
    changing mode of /opt/graphite/bin/build-index.sh to 755
Successfully installed graphite-web
Cleaning up...

こちらは、このようにスムーズに入った。

これで、Graphite 本体側のセットアップ作業は完了となる。ちなみに、設定ファイル群は /opt/graphite/ 以下に展開される。

更に、sqlite が入ってなければ yum で入れる。

■インストールの次にする事

Graphite を実際に使うためには、更に調整が必要となる。まずは、設定ファイルを設置する。

# cd /opt/graphite/conf
# cp carbon.conf.example carbon.conf
# cp storage-schemas.conf.example storage-schemas.conf
# cp storage-aggregation.conf.example storage-aggregation.conf
# cp relay-rules.conf.example relay-rules.conf
# cp aggregation-rules.conf.example  aggregation-rules.conf
# cp whitelist.conf.example  whitelist.conf
# cp graphite.wsgi.example graphite.wsgi

Graphite のデータベース接続設定。

# vi /opt/graphite/webapp/graphite/settings.py

ファイル中、sqlite を使う記述を有効にする。

#Initialize database settings - Old style (pre 1.2)
DATABASE_ENGINE = 'django.db.backends.sqlite3'  # 'postgresql', 'mysql', 'sqlite3' or 'ado_mssql'.
DATABASE_NAME = 'graphite1'                             # Or path to database file if using sqlite3.
DATABASE_USER = 'graph1'                                # Not used with sqlite3.
DATABASE_PASSWORD = 'graphpass'                         # Not used with sqlite3.
DATABASE_HOST = ''                              # Set to empty string for localhost. Not used with sqlite3.
DATABASE_PORT = ''                              # Set to empty string for default. Not used with sqlite3.

更に、設定ファイルを作成、編集する。

# cd /opt/graphite
# cp local_settings.py.example local_settings.py

ファイル local_settings.py を開き、DATABASES を調整する。

DATABASES = {
    'default': {
        'NAME': '/opt/graphite/storage/graphite.db',
        'ENGINE': 'django.db.backends.sqlite3',
        'USER': 'graph1',
        'PASSWORD': 'graphpass',
        'HOST': '',
        'PORT': ''
    }
}
#####################################
# Additional Django Settings #
#####################################
# Uncomment the following line for direct access to Django settings such as
# MIDDLEWARE_CLASSES or APPS
from graphite.app_settings import *

最後はコメントアウトする。

次に、Python 2.5 以上では不要な作業なのだが、この環境は古いので、hashlib が必要。

# wget --no-check-certificate https://pypi.python.org/packages/source/h/ha
shlib/hashlib-20081119.zip
# unzip hashlib-20081119.zip
# cd hashlib-20081119
# python setup.py install

終わったら、データベース調整。

# python manage.py syncdb
Creating tables …
Creating table account_profile
Creating table account_variable
Creating table account_view
Creating table account_window

# chown apache.apache /opt/graphite/storage/graphite.db

carbon の起動。

# /opt/graphite/bin/carbon-cache.py start
Starting carbon-cache (instance a)

動作確認は status を引数に。

# /opt/graphite/bin/carbon-cache.py status
carbon-cache (instance a) is running with pid 1117

ps でも動作している事は確認できる。

$ ps ax | grep carbon
 1117 ?        Sl     0:00 /usr/bin/python /opt/graphite/bin/carbon-cache.py start
 1127 pts/1    S+     0:00 grep carbon

次に Apache 側の設定を進める。

# mkdir /etc/httpd/wsgi
# vi /etc/httpd/conf.d/graphite.conf

ファイルの中身は、参考 URL の内容を拝借。

 WSGISocketPrefix /etc/httpd/wsgi/

 <VirtualHost *:8080>
        ServerName strike.pocketstudio.net
        DocumentRoot "/opt/graphite/webapp"
        ErrorLog /var/log/httpd/strike.pocketstudio.net-error.log
        CustomLog /var/log/httpd/strike.pocketstudio.net-access.log combined

        WSGIDaemonProcess graphite processes=5 threads=5 display-name='%{GROUP}' inactivity-timeout=120
        WSGIProcessGroup graphite
        WSGIApplicationGroup %{GLOBAL}
        WSGIImportScript /opt/graphite/conf/graphite.wsgi process-group=graphite application-group=%{GLOBAL}

        WSGIScriptAlias / /opt/graphite/conf/graphite.wsgi 

        Alias /content/ /opt/graphite/webapp/content/
        <Location "/content/">
                SetHandler None
        </Location>

        Alias /media/ "@DJANGO_ROOT@/contrib/admin/media/"
        <Location "/media/">
                SetHandler None
        </Location>
        <Directory /opt/graphite/conf/>
                Order deny,allow
                Allow from all
        </Directory>

 </VirtualHost>

もう1つファイルの編集

# vi /etc/httpd/conf.d/wsgi.conf

末尾のコメントを削除。設定を有効化する。

LoadModule wsgi_module modules/mod_wsgi.so

これが無いと「Invalid command ‘WSGISocketPrefix’, perhaps misspelled or defined by a module not included in the server configuration」というエラーが出る。

次に、

# vi /etc/httpd/conf.d/python.conf

ここでは設定を無効化する。

#LoadModule python_module modules/mod_python.so

設定を有効にするため、httpd の再起動を実施。

# service httpd restart

パーミッションの調整。

# /opt/graphite/bin/carbon-cache.py stop
# chown -R apache:apache /opt/graphite/storage/
# /opt/graphite/bin/carbon-cache.py start

あとは、ブラウザからアクセスして動作確認。

 

■参考URL

Installing From Pip — Graphite 0.9.10 documentation
https://graphite.readthedocs.org/en/latest/install-pip.html

Install statsd and graphite on CentOS or RHEL – ezUnix
http://www.ezunix.org/index.php?title=Install_statsd_and_graphite_on_CentOS_or_RHEL#Installation

install – Installing Django on Jython – Stack Overflow
http://stackoverflow.com/questions/15451900/installing-django-on-jython

Graphite for RHEL 5.7 | Jeff Blaine
http://www.kickflop.net/blog/2011/11/01/graphite-for-rhel-5-7/