■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/