Ubuntu上でNagiosでグラフ化、リモートホスト監視設定

これは自分用のメモです。
監視する側のサーバーにはnagios3.Xが入っているものとする。

リモートホスト監視設定

参考URL

クライアント側
・インストール
apt-get install nagios-plugins nagios-nrpe-server nagios-nrpe-plugin
・メモリ監視がないためインスコ
cd /usr/lib/nagios/plugins/wget http://www.sysadminsjourney.com/sites/sysadminsjourney.com/files/code/check_mem.pl.txt
mv check_mem.pl.txt check_mem.pl
chmod 755 check_mem.pl
./check_mem.pl -w 10 -c 5 -f -COK - 66.6% (419448 kB) free.|TOTAL=629976KB;;;; USED=210528KB;;;; FREE=419448KB;;;; CACHES=406196KB;;;;
・設定ファイル
# vi /etc/nagios/nrpe_local.cfg
        • -
allowed_hosts=XXX.XXX.XXX.XXX,127.0.0.1 command[check_users]=/usr/lib/nagios/plugins/check_users -w 5 -c 10 command[check_load]=/usr/lib/nagios/plugins/check_load -w 15,10,5 -c 30,25,20 command[check_all_disks]=/usr/lib/nagios/plugins/check_disk -w 20 -c 10 command[check_zombie_procs]=/usr/lib/nagios/plugins/check_procs -w 5 -c 10 -s Z command[check_total_procs]=/usr/lib/nagios/plugins/check_procs -w 150 -c 200 command[check_swap]=/usr/lib/nagios/plugins/check_swap -w 20 -c 10 command[check_mem]=/usr/lib/nagios/plugins/check_mem.pl -w 10 -c 5 -f -C
        • -
# /etc/init.d/nagios-nrpe-server restart # /usr/lib/nagios/plugins/check_nrpe -H localhost NRPE v2.12 注) 監視側のポート5666を空けておく
サーバー側 (ngios設定済みとする)
# apt-get install nagios-nrpe-plugin
# /usr/lib/nagios/plugins/check_nrpe -H REMOTE.SERVER.IP
NRPE v2.12
CHECK_NRPE: Error - Could not complete SSL handshake.
がでた場合は、
/etc/nagios/nrpe_local.cfg
で監視サーバーのIPが指定されているか確認

nagiosグラフ化

参考URL

インストール
apt-get install perl rrdtool librrds-perl php5-gd
git clone git://pnp4nagios.git.sourceforge.net/gitroot/pnp4nagios/pnp4nagios
cd pnp4nagios
./configure
make allmake install
make install-webconf
make install-config
nagios.cfg設定

まずは、nagiosからperfdata.plを呼び出せるように設定ファイルを編集する。

vi /usr/local/nagios/etc/nagios.cfg
        • -
※ 以下のディレクティブを以下の通りにする。 process_performance_data=1 enable_environment_macros=1 service_perfdata_command=process-service-perfdata host_perfdata_command=process-host-perfdata
        • -

以下Basic認証のファイルは適宜作成しておく

vi /etc/apache2/conf.d/pnp4nagios.conf
        • -
AuthType Basic AuthUserFile /etc/nagios3/htpasswd.users
        • -
/etc/init.d/nagios3 restart /etc/init.d/apache2 restart
テスト確認

ページ表示の確認

http://[SERVER DOMAIN]/pnp4nagios/

細かい設定

mv /usr/local/pnp4nagios/share/install.php /usr/local/pnp4nagios/share/install.php.org
vi /usr/local/pnp4nagios/etc/process_perfdata.cfg
        • -
: LOG_LEVEL=2 :
        • -
vi /etc/nagios3/conf.d/hoge.cfg
        • -
host, service を参考URLをもとに修正する
        • -
/etc/init.d/nagios3 restart

Hudson in ubuntu10

インスコ

wget -O - http://hudson-ci.org/debian/hudson-ci.org.key | sudo apt-key add -
vi /etc/apt/sources.list
-----
  :
  :
deb http://hudson-ci.org/debian binary/
-----
sudo apt-get update
sudo apt-get install hudson
→ デーモン起動してくれる

動作確認

http://localhost:8080

実行ユーザー変更

vi /etc/sysconfig/hudson
-----
:
HUDSON_USER=hudson
:
-----

時刻のタイムゾーンが日本時間にならない

javaで以下のように時刻を取得して時刻を表示すると

Calendar cal1 = Calendar.getInstance();

US時刻で表示されてしまう。

# ll /etc/localtime 
lrwxrwxrwx 1 root root 30 2010-09-29 10:11 /etc/localtime -> /usr/share/zoneinfo/Asia/Tokyo

にも関わらずだ。

Calendar cal1 = Calendar.getInstance(TimeZone.getTimeZone("Asia/Tokyo"));

ような書き方をしないとタイムゾーンがづれてしまうよう。
上記のためHudsonでも時刻がUS時刻になってしまう。

Hudoson内では上記のような時刻の取得をしているらしくづれる。

これを解決するために以下対応を行った。

vi /etc/init.d/hudson
-----
:
JAVA_ARGS="-Duser.timezone=Asia/Tokyo"
:
-----
/etc/init.d/hudson start

ポートを使用しているプロセス調べる in ubuntu

!!! root で実行しないとプロセス名が表示されないので気をつける
# netstat -A inet -npl
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 0.0.0.0:25              0.0.0.0:*               LISTEN      3182/master     
tcp        0      0 0.0.0.0:8000            0.0.0.0:*               LISTEN      9434/apache2  
  :
  :

Django + nose + selenium in ubuntu で自動テスト環境を整える

環境

Python2.6 + Django1.2 + Ubuntu10
など

使うもの

nose

Pythonのunittestをもっと簡単にできるように拡張したもの。プラグインなど簡単に作成する事ができ拡張性も高い
http://somethingaboutorange.com/mrl/projects/nose/1.0.0/

django-nose-selenium

djangoとnoseとseleniumでテストやるためのもの。documentに書かれていない罠が結構ある
https://github.com/weluse/django-nose-selenium

Xvfb

仮想的な X を立ち上げることで、実際に X を起動しておかなくても X を使用した処理を行うことが出来るようにするためのライブラリ
http://en.wikipedia.org/wiki/Xvfb

環境構築

$ sudo pip install nose
$ sudo pip install django-nose-selenium
$ sudo pip install cherrypy
使うsettingsを指定しておく
$ export DJANGO_SETTINGS_MODULE=shohu_settings
$ export PYTHONPATH=/PROJECT_ROOT/:$PYTHONPATH
Firefoxインスコ
$ sudo apt-get install firefox
Xvfbインスコ
$ sudo apt-get install xvfb
FirefoxをX上で動かすための設定
$ export DISPLAY=1.0
$ Xvfb :1 -screen 0 1024x768x24 > /dev/null &
※Firefox起動確認を参考URLを元にしておく

ここまででUbuntu Server上でFirefoxが起動できるようになっているはず。
次にSeleniumサーバーを動かしておく

wget http://selenium.googlecode.com/files/selenium-server-standalone-2.0b1.jar
java -jar selenium-server-standalone-2.0b1.jar > /tmp/selenium.log 2>&1 & 

ここまででDjango+nose+seleniumを使う環境は整ったはず。

ソースと実行

テストクラス
vi tests.py
-----
# -*- coding: utf-8 -*-
import unittest

class TestSelenium(unittest.TestCase):

    selenium_test = True
    start_live_server = True
    
    def test_start(self):
        """Tests the start page."""
        self.selenium.open("/")
        self.failUnless(self.selenium.is_text_present(u"ようこそテストサイトへ!"))
-----

start_live_server = True にしていないと

    • with-djangoliveserver(テスト時のみのDjangoサーバー立ち上げる)
    • with-cherrypyliveserve(Cherrpyを使用してテスト時のみのサーバー立ち上げる)

を指定してもテスト実行時にサーバーがたちあがらないので必ず指定する事。
ただ--with-djangoliveserverはうまく動かなかったのでcherrypyの方で実行した。

実行
$ nosetests --with-selenium --with-cherrypyliveserver tests.py
ok
----------------------------------------------------------------------
Ran 1 test in 9.140s
OK
Finished: SUCCESS

nosetestsを実行すると

1.テスト中にDjangoアプリケーションがサーバーとしてたちあがる
2.仮想X上でFirefoxが起動して"/"(ルート)にアクセスする
3.”ようこそテストサイトへ!”の文字が表示されているかチェックする

という事を行ってくれる。

以上でDjango+nose+seleniumで自動テスト環境が整った。
これにHudsonを使う事によって統合テストの自動化環境が整う。

Satchmoで通貨単位を¥にする

ソース

settings.py
-----
  :
L10N_SETTINGS = { 
  'currency_formats' : { 
     'JPN' : {'symbol': u'¥', 'positive' : u"¥%(val)d", 'negative': u"¥(%(val)d)",
               'decimal' : ','},
  },  
  'default_currency' : 'JPN',
  'show_admin_translations': False,
  'allow_translation_choice': False,
}
  :
-----

Satchmoをちょこちょこ触ってみている

SatchmoというPython+Djangoで書かれたECサイト用?のオープンソースがある。
ショッピングカートや支払い機能もデフォルトでついていて、機能を把握して
カスタマイズできるようになれば、かなり便利なソースだと思われる。
※ただとにかく日本語の情報が少ない

Satchmo

http://www.satchmoproject.com/

近いところでいうとdjango-cartなどあるようだけど
http://stackoverflow.com/questions/490439/django-cart-or-satchmo
「django-cartよりもSatchmoがんばってつかったほうがいいぞ!」
など、Satchmoを勧める声は大きい。

インストール

以下を見てがんばる。
http://www.satchmoproject.com/docs/dev/quickstart.html

カスタマイズ

以下を見てさらにがんばる。
http://www.satchmoproject.com/docs/dev/#modifying-a-store

ローカライズ

Satchmoも国際化に対応しているのですが日本語には対応していないみたい。
このため日本語に対応させるため
django-rosetta
http://code.google.com/p/django-rosetta/
を使用して日本語のpoファイルを作成する事に。

インストール
$ sudo easy_install django-rosetta
$ cd PROJECT_ROOT
$ vi settings.py
-----
INSTALLED_APPS = (
   :
 'rosetta'
   :
)
-----
$ vi urls.py
-----
  :
from django.conf import settings
if 'rosetta' in settings.INSTALLED_APPS:
    urlpatterns += patterns('',
        url(r'^rosetta/', include('rosetta.urls')),
    )
  :
-----
poファイル作成

その後
http://localhost:3000/rosetta
にアクセスして、英語(米国)箇所の各Applicationの行を見ていく。
各Applicationのpoファイルの場所がわかるので確認して、そのファイルを所持するAPPROOTにcdで移動
※satchmo/apps/satchmo_utils/locale/en/LC_MESSAGES/django.po
 がFileであれば、satchmo/apps/satchmo_utils/に移動
その後各ディレクトリで以下実行

django-admin.py makemessages -l ja -e html,txt

日本語用のpoファイルが各ディレクトリ配下のlocaleに作成される。

実際にローカライズ

日本語用のpoファイルが作成されたが、このままでは当たり前だが日本語に変換されないため
変換されるように修正する。

http://localhost:3000/rosetta
にアクセスして日本語のApplicationを選択し、suggestを押していってコツコツと地道にローカライズしていく。
suggest機能は便利だけど、やはり誤訳も多い。
Suggest All なる機能があるかと思いきや、無いためひたすらポチポチリンク押しながらがんばるが結構時間かかるな、、、これ。
Suggest All なる機能は要望としてあがっているようだが、正式版のソースにははいっていないもよう。
http://code.google.com/p/django-rosetta/issues/detail?id=88#c1

これ全部訳すと大変だな。。。
必要な部分だけ、ローカライズしていこう。

node.js で php を使う方法

javascriptでsprintfがないのかなぁ、と調べていると
php.jsなるものをrequireすればnode.jsでも使えるようになる事がわかりました。
※そういえばid:yssk22さんがBPStudy#39でしゃべっていたのを同時に思い出す(汗

php.js

php.jsはJavaScriptによるPHP関数の実装で元々クライアント向けに作られているものなので
そのままではnode.jsでは使えないとのこと。

id:yssk22さんがnode.js用に変換したphp.jsをgitに登録してくれていたので、それをつかって以下のようにprintfが使えるようになりますた。

サンプル

ソース
var php = require('php');
var hoge = php.sprintf("%sはタイトルです。",title);