2013年6月30日日曜日

【Apache】httpをすべてhttpsにリダイレクトする方法

■概要
今回もchefでapacheをインストールした場合の手順です
chefでのapacheインストール方法は以下を参照ください
http://kakakikikeke.blogspot.jp/2013/05/opscodecookbooks.html

■手順
■モジュールの有効化
cd /etc/httpd/mods-available/
touch rewrite.load
vi rewrite.load
LoadModule rewrite_module modules/mod_rewrite.so
cd ../mods-enabled/
ln -s /etc/httpd/mods-available/rewrite.load rewrite.load
service httpd restart
apachectl -M | grep rewrite

■リダイレクト設定
vi /etc/httpd/sites-enabled/000-default
RewriteEngine On
RewriteLog "logs/ssl_rewrite_log"
RewriteLogLevel 0
RewriteCond %{SERVER_PORT} !^443$
RewriteRule ^(.*)$ https://%{HTTP_HOST}%{REQUEST_URI} [R,L]
service httpd restart

Rewriteの宣言はVirtualHostディレクティブ直下に記載することができます

2013年6月27日木曜日

Federation exchange 'amq.rabbitmq.trace' in vhost '/' connected to exchange 'amq.rabbitmq.trace' in vhost '/' on amqp://localhost:5672

ローカルホストを設定するとき
amqp://localhost

リモートホストを設定するとき
amqp://guest:guest@rabbittest(違うホスト)


URIの最後に/を入れるとはまります
特にvhost「/」指定しようとした場合です

2013年6月26日水曜日

【Ruby】sinatraインストール方法

■環境
CentOS release 6.3 (Final)
ruby 1.9.3p286
gem 1.8.24

■rubyとgemをインストール
sudo true && curl -L https://www.opscode.com/chef/install.sh | sudo bash

■sinatraインストール
cd /opt/chef/embedded/bin
./gem update
./gem install sinatra
mkdir -p /var/tmp/sinatra
cd /var/tmp/sinatra
vi hello.rb
require 'sinatra'
get '/' do
  'Hello world!'
end
/opt/chef/embedded/bin/ruby hello.rb -e production
でブラウザからhttp://localhost:4567/にアクセスする

2013年6月24日月曜日

【Perl】catalystのインストール方法

■環境
CentOS release 6.3 (Final)
perl v5.10.1

■cpan設定
cpan Module::Build
yesをひたすら入力していきます
wget http://shadow.cat/static/cat-install
perl cat-install
(はじめにどっかに接続しようとするけどできない、たぶんスルーでおk)

■catalystインストール
perl -MCPAN -e shell
cpan[1]> o conf prerequisites_policy follow
cpan[2]> o conf commit
cpan[3]> install Catalyst::Devel
cpan[4]> install Task::Catalyst
cpan[5]> q
cd /var/tmp
catalyst.pl test
plが実行できない場合は以下で再インストールしてみてください
perl -MCPAN -e 'install Catalyst::Devel'
ls -ltr test
合計 36
-rw-r--r-- 1 root root 104 7月 19 18:27 test.psgi
-rw-r--r-- 1 root root 127 7月 19 18:27 test.conf
drwxr-xr-x 2 root root 4096 7月 19 18:27 t
drwxr-xr-x 2 root root 4096 7月 19 18:27 script
drwxr-xr-x 3 root root 4096 7月 19 18:27 root
drwxr-xr-x 3 root root 4096 7月 19 18:27 lib
-rw-r--r-- 1 root root 51 7月 19 18:27 README
-rw-r--r-- 1 root root 902 7月 19 18:27 Makefile.PL
-rw-r--r-- 1 root root 143 7月 19 18:27 Changes
cd test
./script/test_server.pl

⇒デフォルトポートは3000で起動する、ブラウザからhttp://localhost:3000/にアクセスする、FWは開放する

emacs lib/test/Controller/Root.pm
⇒$c->response->body( "Hellow Catalyst" );にしcatalystを再起動するとトップページのメッセージが変更している

2013年6月23日日曜日

s3fsのインストール方法

P.S 20160317
fuse のインストール先が sourceforge -> Github に移行していたので修正しました

■環境
CentOS release 6.3 (Final)
fuse 2.8.5 -> 2.9.5
s3fs 1.61

■fuseインストール
yum install -y gcc libstdc++-devel gcc-c++ curl-devel libxml2-devel openssl-devel mailcap make
cd /var/tmp

wget http://sourceforge.net/projects/fuse/files/fuse-2.X/2.8.5/fuse-2.8.5.tar.gz/download
wget https://github.com/libfuse/libfuse/releases/download/fuse_2_9_5/fuse-2.9.5.tar.gz
tar zxvf fuse-2.9.5.tar.gz
cd fuse-2.9.5
./configure --prefix=/usr
make
make install
ldconfig
modprobe fuse
何もエラーが表示されなければ完了です
念のためfuse.pcがインストールされていることを確認します
find / -name "fuse.pc"

■s3fsインストール
cd /var/tmp/
wget https://s3fs.googlecode.com/files/s3fs-1.61.tar.gz
tar zvxf s3fs-1.61.tar.gz
cd s3fs-1.61
(ソースを修正した場合は以下以降を再度実行することで再インストールできる)
export PKG_CONFIG_PATH=/usr/bin/lib/pkgconfig/:/usr/lib/pkgconfig/
./configure --prefix=/usr
make
make install
s3fs-h
でヘルプが表示されればインストール完了

■マウント
※クラウドストレージにマウントしたいバケットを作成
※コントロールパネルからaccesskeyとsecretkeyを取得しておく
mkdir -p /mnt/s3fs
echo "accesskey:secretkey" > /etc/passwd-s3fs
chmod 600 /etc/passwd-s3fs
s3fs "s3fs" /mnt/s3fs/ -o url="http://ncss.nifty.com/"
cd /mnt/s3fs/
touch test
(コンパネでエクスプローラからtestがバケット配下に作成されていることを確認する)

(再起動等でアンマウントしてしまった際には以下で再マウント可能)
modprobe fuse
s3fs "s3fs" /mnt/s3fs/ -o url="http://ncss.nifty.com/"

■ソースコード修正
src/curl.cppでオレオレ証明書を許可する設定と
src/s3fs.cppでタイムスタンプの付け方をUTCからJSTに変換するのを追加
src/s3fs.cppでキャッシュを参照せずに常にストレージアクセスする設定はいれてない(負荷増大が懸念されるため)
ソースコード修正後は再度s3fsインストールからやり直せばOK

■備忘録
  • fuseは2.9.2が最新版で出ていたのでそれをインストールしても問題ないかもしれません
  • 一旦ローカル側に保存してからストレージへの転送を開始するためローカル側に転送するファイルを受け入れられるだけのストレージ容量が必要

2013年6月21日金曜日

【chef】ZabbixでApacheを監視する方法

■環境
CentOS 6.2 64bit
Zabbix Server 2.0.7
Apache 2.2.15

またインストールはすべてchefで実施しているものとする
 http://kakakikikeke.blogspot.jp/2013/05/opscodecookbooks.html
python はデフォルトで CentOS 6.2 にインストールされているものを使用します

■mods_statusを有効にする(apacheサーバ側設定)
vi /etc/httpd/mods-available/status.conf
ExtendedStatus On
On に変更します
一旦 httpd を再起動してください
そもそも/etc/httpd/mods-available/に対してstatus.confとstatus.loadのシンボリックリンクがない場合は以下を実行してリンクを作成してください
cd /etc/httpd/mods-available/
ln -s /etc/httpd/mods-available/status.conf status.conf
ln -s /etc/httpd/mods-available/status.load status.load

デフォルトでは「Allow from localhost ip6-localhost」でローカルからのみアクセスできるようになっています
curl http://localhost/server-status
で Forbidden 等でなくサーバの情報が返ってくることを確認しましょう
逆にローカルじゃない環境からブラウザ等でアクセスしてステータス画面が表示されないことを確認します

■監視スクリプト配備(apacheサーバ側設定)
mkdir /root/zabbix_apache_watch
cd zabbix_apache_watch
wget https://raw.github.com/gpmidi/zabbix-apache-stats/master/bin/fetch.py
python fetch.py --help
でヘルプが表示されることを確認します
(python の syntacs エラー等にならないことを確認します)

crontab -e
* * * * * /usr/bin/python /root/zabbix_apache_watch/fetch.py -c localhost -z [ZabbixサーバのIPまたはホスト名] > /dev/null 2>&1
1分おきにZabbixサーバに送信するように設定します
pythonのPATHが不明なときは「which python」でPATHを調べておいてください

vi fetch.py
でzabbix_senderのパスを187行目あたりの以下で管理しているのでchefでインストールしたパスに変更します
default = "/usr/bin/zabbix_sender"
↓
default = "/opt/zabbix/bin/zabbix_sender"

■スクリプト動作確認(apacheサーバ側)
telnet 等を使ってzabbixサーバと10051で通信できるか確認します
通信が確認できたら実際にpythonスクリプトを実行してみましょう
/usr/bin/python /root/zabbix_apache_watch/fetch.py -c localhost -z [ZabbixサーバのIPまたはホスト名]

zabbix_sender [6393]: DEBUG: answer [{
"response":"success",
"info":"Processed 0 Failed 19 Total 19 Seconds spent 0.000377"}]
info from server: "Processed 0 Failed 19 Total 19 Seconds spent 0.000377"
sent: 19; skipped: 0; total: 19
上記のようにsenderの出力結果が表示されればOKです

■Zabbixサーバテンプレート登録(zabbixサーバ側)
https://www.zulukilo.com/svn/pub/zabbix-apache-stats/trunk/zabbix_export.xml
からXMLのテンプレートをダウンロードしてください
リンクが存在しない場合は以下の参考サイトにあるページにXMLが書いてあるのでコピペして保存します

保存したらZabbixのWebインタフェースから
設定→テンプレート→インポートの順に進みます(インポートボタンは画面右上にあります)
インポートするファイルで先ほどダウンロードしたファイルを選択します
「インポートに成功しました」と表示されたら、テンプレートの一覧に「Template_App_Apache_Stats」があることを確認します

■テンプレートとホストの紐付け(zabbixサーバ側)
設定→テンプレートで「ホスト/テンプレート」から紐付けしたいホストを選択します
設定→ホストで紐付けしたホストでアイテムを見ると「Template_App_Apache_Stats」のアイテムが紐付ていることがわかります

■サンプルグラフの作成(zabbixサーバ側)
設定→テンプレート→「Template_App_Apache_Stats」のグラフからグラフの作成を実施します
グラフの名前を「apache総リクエスト数の推移」などとしてグラフタイプを積算グラフにします
追加するアイテムは以下を追加します(色は適当に決めてください)
Template_App_Apache_Stats: Apache - Total Accesses
上記でapacheの総アクセス数を取得することができるようになります

■参考サイト
https://www.zabbix.com/wiki/templates/apache
今回はzabbix_senderを使用した監視方法を紹介しましたが、上記ページでは他のpythonスクリプトやbashスクリプトを使った監視方法も紹介してます

■Tips
・server-statusを閲覧するための専用のVirtualHostを作成する
すでにVirtualHostの設定で複数のドメインを受けるようになっていたり、80番や443番のポートを使用している場合に同じVirtualHostの設定ファイルにserver-statusの設定を書くとapacheのログにserver-stautusともともと設定してあったログが混在して見づらくなります
なので8001番ポートで受けることができる<VirtualHost>の定義をすることでserver-statusを8001番で受けることができます
具体的には以下のような設定ファイルを作成すると個別のポートで受けることが可能になります
vim /etc/httpd/sites-enabled/8001_localhost.conf
<VirtualHost *:8001>
        <Location /server-status>
                SetHandler server-status
                Order allow,deny
                allow from all
        </Location>

        ErrorLog /var/log/httpd/apache_status.log
        LogLevel warn
        CustomLog /var/log/httpd/apache_status.log combined
        ServerSignature On
</VirtualHost>

また合わせて「/etc/httpd/ports.conf」に8001をLISTENする設定も記載してください
Listen 8001
NameVirtualHost *:8001

・シェルスクリプトを使って監視する
今回はpythonスクリプトを使って監視する方法を紹介しましたが、pythonスクリプト方式の場合スクリプトからzabbix_senderを使ってデータを送信しているためpush型の監視になっています
zabbixのpush型監視の場合はzabbixエージェントをactiveモードにしなければいけないほか今回の場合はzabbixサーバ側のログに以下のようなログが出続けてしまうそうです(解決できませんでした)
10714:20131129:164402.604 item [localhost:apache[localhost,WaitingforConnection]] became supported
10715:20131129:164437.619 item [localhost:apache[localhost,WaitingforConnection]] became not supported: ZBX_NOTSUPPORTED
自分の場合30秒起きに出力されてました、なのでこれを解決するためにシェルスクリプトによるapacheの監視方法も簡単に紹介します
基本は同じですが、大きく違うのはpull型の監視でUserParameterを使ってZabbixサーバが値を取得する関し方式になります(pull型は通常のZabbixの監視方式)
  1. https://www.zabbix.com/wiki/templates/apache の一番下にある method3 のシェルスクリプトをコピペしてサーバ上に配置
  2. 同様にZabbixのテンプレートのXMLファイルもあるのでコピペし適当にテキストに保存したあとZabbixのWebUIからテンプレートをインポート(インポート後は適当にホストを紐付けてください)
  3. UserParameter=apache[*],sh /zabbix_script/zapache.sh localhost:8001 $1 のユーザパラメータを「/etc/zabbix/zabbix_agentd.conf」に追記
  4. service zabbix_agentd restart
とするとこれまでのZabbix同様のpull型で監視することが可能です
また、ログにもZBX_NOTSUPPORTEDが出なくなります、zabbix_agentもactiveモードにする必要はありません
どちらも監視できる項目に違いはないのでどちらでやっても問題ないです、UserParameterに慣れている人はシェルスクリプトの方が簡単かもしれません

・おすすめグラフ設定
以下のアイテムを一つのグラフで積算で見ると稼働中のapacheの全プロセス数の数がわかります
  • Apache/ClosingConnection.
  • Apache/DNSLookup.
  • Apache/GracefullyFinishing.
  • Apache/IdleWorkers.
  • Apache/KeepAlive.
  • Apache/Logging.
  • Apache/ReadingRequest.
  • Apache/SendingReply.
  • Apache/StartingUp.
  • Apache/WaitingForConnection.
上記のアイテムをすべて足しあわせた値をトリガーとして設定してapacheに設定してあるMaxCilentの値付近になったらアラートをあげるアクションを登録しておくといいと思います

・リアルタイムでリクエスト数を監視する方法
デフォルトのテンプレートに「apache[ReqPerSec]」というキー名のアイテムがあり、/server-statusから取得しているのですが、
この値は瞬間的なリクエスト数ではなく「apacheが起動してからこれまでのリクエスト数の平均」の値となります
なので例えば瞬間的に1000req/secがあってもこの値で1000は取れません
運用する上でどうしてもリアルタイムなリクエスト数は見えたほうがいいのでそれを取得する方法を紹介します
使うキーは「apache[TotalAccesses]」を使用します
このキーはapacheが起動してから現在までのアクセス数の総数を取得することができます
すでに登録されているapache[TotalAccesses]のアイテムの設定で保存時の計算という項目があります、これを「差分」に変更します
差分に変更することで前回の値を引いた値がアイテムの値として保存されます
apache[TotalAccesses]はこれまでの全アクセス数なので、前回の値を引くことで加算されたアクセス数を取得することができます
取得間隔がデフォルトでは60秒なので60秒の場合は60秒間でのアクセス数を取得することができます
なのでこの値を1秒にすることで限りなくリアルタイムにアクセス数を監視することができるようになります

2013年6月20日木曜日

chefでTomcatをインストールした場合のJVMパラメータ設定方法

以下の方式でchefからTomcatをインストールしているものとします
http://kakakikikeke.blogspot.com/2013/05/opscodecookbooks.html


vi /etc/default/tomcat7


実は上記のファイルに追記します
フォーマットはすでにサンプルが記載されているので見ればわかると思うのですが
http://stackoverflow.com/questions/14926260/multiline-java-opts-in-setenv-sh
な感じで改行を使って記述することもできます

/usr/local/tomcat/default/bin/setenv.sh
を作成しても上記起動スクリプトがcatalina.shを使用せずに直接Javaを実行しているため
JVMが反映されないので注意してください

2013年6月19日水曜日

【Parse】Quota on Parse Exceeded

モバイルバックエンドで有名なParseさんを使っていたら以下のようなメールがきた

Hi there,

You recently exceeded your Basic Plan quota. Looks like you're getting some traction!

Please add a credit card to your account at your earliest convenience so that your application continues to function.

Cheers,
Team Parse

おそらくはベーシックプランの「Burst Limit 20/second」に引っかかったからだと思います
もう少し詳細を書いてくれてもいいと思いますが。。。
しかもまだリクエストできているので、警告的なやつかもしれません
次来ると、利用停止とかになるのかなー
継続して様子見。。。


P.S 20130617
ダッシュボードを見たらファイルストレージがいきなり457GBになっていました
確かにファイルをずっとアップロードしていたのですが、いきなり増えました
ので、それに引っかかってメールが来たんだと思います
でも、送り続けていたので2, 3日前からなので、集計している値はリアルタイムではなく
バッチ処理的に1週間に1度くらいなのかもしれません
ただ、メールは飛んで来ていたのにUI側はずっと0だったのも気になってます。。。

ちなみにAPIリクエスト数はもっと短い感じで1時間くらいでUI上の数値も増えてる感じでした

P.S 20130619
ダッシュボード上のFile Storageの表示がまた0になった
もしかしたらオーバした分も含めてすべて削除しれてしまったのかもしれない
「削除しました」等のメール告知はなかったので、冒頭のメールの警告でクレジットカードを登録しなかった場合はすぐに削除されてしまうのかもしれません、おそろしい。。。

P.S 20130620
と思ったらまたUI上のデータが復活していました
もうよくわかりません。。。
一応スクリーンショット貼っておきます。
457GBの容量が0になったら457GBになったりしてます


P.S 20130621
ダッシュボード上で
Notice: You have overages for this month but you don’t have a credit card on file. Add one to ensure your service isn’t interrupted.
と警告されるようになった、要するにクレジットカードを登録してくれということ
ダッシュボード上のストレージ容量も457GBになっていた
そろそろアプリが消えるかもしれない。。。

2013年6月18日火曜日

curlでHTTPレスポンスを表示する方法

curl -il "http://kakakikikeke.blogspot.jp"

取得できるHTML等が長い場合には head や less で調整してください

大文字の「-IL」で実施するとHTTPレスポンス情報だけが表示されて見やすいのですが

You can only select one HTTP request

と出ることがあるようです
その場合は小文字の「-il」で試して見てください

2013年6月13日木曜日

【chef】apacheとtomcatを連携してmod_proxy_balancerを有効にする方法

■概要
前回に引き続きchefでapacheをインストールした場合のmod_proxy_balancerを有効にする方法を紹介します
http://kakakikikeke.blogspot.com/2013/06/chefapachetomcatajp.html

■apache側設定
■モジュールの有効化
cd /etc/httpd/mods-available
vi proxy.load
LoadModule proxy_balancer_module /usr/lib64/httpd/modules/mod_proxy_balancer.so
上記を追記します

service httpd restart
apachectl -M | grep proxy_balancer_module
モジュールが有効になっていることを確認する

■confファイル修正
cd /etc/httpd/sites-available
vi test.conf
<Location />
  Order allow,deny
  Allow from all
  ProxyPass balancer://localcluster/ stickysession=JSESSIONID nofailover=Off
</Location>
localclusterはバランシングするtomcatサーバのクラスタ名を自由に設定することができます
Locationの追記箇所はDirectoryの閉じタグ直下で問題ないです
JSESSIONIDを使ってバランシングのセッション管理をするための設定も記述します
これによりログイン等の動作が行われると自動的にcookiesにJSESSIONIDが付与され同じサーバにアクセスし続けます

<Proxy balancer://localcluster/>
  BalancerMember ajp://appserver001:8009/ loadfactor=10 route=appserver001
  BalancerMember ajp://appserver002:8009/ loadfactor=10 route=appserver002
</Proxy>
バランシングするtomcatサーバ2台を仮に「appserver001」「appserver002」としています

service httpd restart
再起動します、apache側はこれで完了となります

■tomcat側設定(appserver001, appserver002で実施する)
■server.xml修正
vi /usr/local/tomcat/default/conf/server.xml
<!-- You should set jvmRoute to support load-balancing via AJP ie :
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
-->
<Engine name="Catalina" defaulthost="localhost" jvmroute="appserver001">
jvmRouteを設定することでJSESSIONIDに「.appserver001」という文字列を付与することができ
cookiesの情報を見れば現在どちらのサーバにバランシングされているかがわかるようになります

<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster" channelSendOptions="8">

  <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" notifyListenersOnReplication="true"/>

  <Channel className="org.apache.catalina.tribes.group.GroupChannel">
    <Membership className="org.apache.catalina.tribes.membership.McastService"
                address="228.0.0.204"
                port="20001"
                frequency="500"
                dropTime="3000"/>
    <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver"
              address="appserver001"
              port="4000"
              autoBind="100"
              selectorTimeout="5000"
              maxThreads="6"/>

    <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter">
      <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender"/>
    </Sender>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector"/>
    <Interceptor className="org.apache.catalina.tribes.group.interceptors.MessageDispatch15Interceptor"/>
  </Channel>

  <Valve className="org.apache.catalina.ha.tcp.ReplicationValve" filter=""/>
  <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/>

  <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer"
            tempDir="/tmp/war-temp/"
            deployDir="/tmp/war-deploy/"
            watchDir="/tmp/war-listen/"
            watchEnabled="false"/>

  <ClusterListener className="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener"/>
  <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener"/>
</Cluster>
tomcatのクラスタ設定を変更します
アプリサーバ同士でsessionを共有するために実施します
上記設定はかならず<Host>タグの間に記載してください
<Engine>タグだとうまくレプリケーションしてくれませんでした

apacheでセッション保持をしますがtomcat側でも別途セッション共有をしておく必要があります
例えばapacheが2台ある場合には一回目のアクセスはwebA→appAだったのに二回目のアクセスがwebB→appBになるとtomcat側のセッションがない状態になってしまうからです
webAにリクエストが行き続ければ問題はないですがそういったケースはほとんどありえません

vi /usr/local/tomcat/default/conf/tomcat-users.xml
<user username="manageuser" password="manageuserpass" roles="admin,manager,manager-gui,admin-gui"/>
tomcatの管理画面にログインしてJSESSIONIDの挙動を確認するために管理画面用のユーザを作成します
余談ですが、admin-guiがないと「Host Manager」の画面にログインできません

service tomcat restart
tomcatを再起動します、これで設定完了です

tomcatの管理画面から「ManagerApp」と進みベーシック認証を実施します
認証後にcookies情報を確認すると設定した文字列が付与されかつ
Ctrl+F5等で画面をリロードしても同じサーバにバランシングされ続けることが確認できると思います

■参考サイト

2013年6月12日水曜日

【chef】apacheとtomcatの連携をajpで設定する方法

■概要
chefを使ってapacheとtomcatをインストールした場合のajpの設定方法について紹介します
chefを使ってapacheとtomcatをインストールする方法は以下で検証した通りです
http://kakakikikeke.blogspot.com/2013/05/opscodecookbooks.html 

■環境
CentOS 6.2 64bit
Apache 2.2.15
Tomcat 7.0.32.0
Java 1.7.0_17-b02

■tomcat側設定
vi /usr/local/tomcat/default/conf/server.xml
以下のとおり8080の部分をコメントアウトします
<!--
<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
-->

service tomcat restart
netstat -an | grep 8080
8080が起動していないことを確認します

■apache側設定
■confファイルの設定
cd /etc/httpd/sites-available
cp -ipr default-ssl test.conf
vi test.conf
<Location />
  Order allow,deny
  Allow from all
  ProxyPass ajp://localhost:8009/
</Location>
/を設定しているDirectoryタグの閉じタグの直後に記載します
localhostの部分はtomcatがインストールしてある振り分け対象のホスト名を記載してください

ErrorLog /var/log/httpd/error_test.log
CustomLog /var/log/httpd/access_mbaas.log combine
アクセスログとエラーログもVirtualHostごとにわける場合は上記の箇所の設定を変更します

また、ports.confに記載しているNameVirtualHostとtest.confのVirtualHostに記載するIPアドレス(ドメイン)値は同じでなければなりません
例えば、parts.confが「*:443」と記載しているならtest.confも「*:443」と記載しなければなりません

■再起動
cd /etc/httpd/sites-enabled/
ln -s /etc/httpd/sites-available/test.conf test.conf

service httpd restart
apachectl -f /etc/httpd/sites-available/test.conf
エラーができないことを確認する

https://localhost/
にアクセスしてtomcatのROOTコンテキスト(管理画面)が表示されることを確認します

■トラブルシューティング
  • apacheのエラーログにclient denied by server configurationと出ている場合Locationの設定がおかしい可能性があります(Allow from allがない等)
  • apacheのエラーログにInvalid method in requestが出る場合はVirtualHostの設定がおかしい可能性があります(IPアドレスやドメインの指定がおかしい等)

2013年6月11日火曜日

VirtualBoxでvboxファイルの保存フォルダを変更する方法

■概要
VirtualBoxの管理系ファイル、vboxファイルを違う場所に移動すると以下のようなエラーとなりVMを起動できません

上記の復旧手順を紹介します

■手順
  1. VirtualBoxマネージャーからエラーとなっているVMを削除します
  2. 「ファイル」→「環境設定」からデフォルトの仮想マシンのフォルダーを変更します(移動したvboxファイルを管理しているフォルダを選択しましょう)
  3. 設定が完了したらメニューバーから「仮想マシン」→「追加」を選択します
  4. デフォルトの仮想マシンのフォルダの一覧が表示されるので追加したいVMのvboxファイルを選択します
  5. VirtualBoxマネージャーの一覧画面にVMが追加されれば完了です

追加されたら一旦起動できるか確認したほうがいいでしょう

2013年6月10日月曜日

githubでタグを作成する方法

git clone https://github.com/NIFTYCloud/sdk-java.git
タグを作成するリポジトリをクローンします
git tag -a [タグ名] -m 'Create tag for [タグ名]'
タグを作成します、同時にコメントも残します
個人的にはタグはバージョン名を記載します
git tag
タグが作成されているか確認します
git push --tags
タグ情報をメインストリームにpushする
これでmasterからタグを作成することができます
タグを作成するとgithubのtagsからzipファイルをダウンロードできるようになります

git tag -d [タグ名]
git push origin :refs/tags/[タグ名]
すると間違って作成してしまったタグを削除できます

タグを作成したあとはmasterに対して新しいバージョンの修正等をお好きなように反映して問題ないです

2013年6月9日日曜日

zabbixのapiをPHPから試してみた

■環境
CentOS 6.3 64bit
Zabbix 2.0.3
PHP 5.3.3

■設定およびサンプル実行
http://zabbixapi.confirm.ch/download.php?file=library
から最新のphpライブラリをダウンロードします

bzip2 -d PhpZabbixApi_Library.tar.bz2
tar xvf PhpZabbixApi_Library.tar
cd PhpZabbixApi_Library

vi ZabbixApi.class.php
以下の1行を追加します
require 'ZabbixApiAbstract.class.php';

vi sample_zabbix.php
以下のサンプルコードを記載します
「username」と「password」はzabbixにログインする際のものを使います
<?php

require 'ZabbixApi.class.php';

try {
    $api = new ZabbixApi('http://hostname/api_jsonrpc.php', 'username', 'password');
    $res = $api->apiinfoVersion();
    var_dump($res);
} catch (Exception $e) {
    echo $e->getMessage() . "\n";
}

?>

php sample_zabbix.php
を実行するとapiのバージョンが返ってきます

エラーになる場合は以下を確認してみてください

  • phpファイルの権限が755になっていることを確認する、もしくは実行するユーザに実行権限が付いていることを確認する
  • zabbixのホスト名やユーザ名パスワードが間違っていないか
  • そもそもphpがインストールされていない

■Tips
PHPのメソッドのコール方法はZabbixAPI名と連動している
例えばホストを取得するAPIは host.get というAPIをコールするが、PHPでは hostGet というメソッドをコールする
ドットで区切られている部分をcamel caseに変換してコールすればPHPで呼ぶことができる
なのでPHPのリファレンスがなくてもZabbixのAPIリファレンスを見るだけで必要なメソッドをコールすることができる
Zabbix 2.0 APIリファレンス

リファレンス内のリクエストパラメータで「query」というTypeが存在している
ここには以下が指定できる
  • shorten - returns just the primary key;
  • refer - returns the primary key and the foreign keys used to link related objects;
  • extend - returns all object properties;
  • count - returns the number of retrieved records; supported only by certain subselects.
基本的にはレスポンス情報に影響するパラメータで、詳細に表示するか簡易的に表示するかのモードが切り替えられる感じかなと思います
指定可能なquery一覧


■参考サイト

2013年6月7日金曜日

Zabbixのグラフで文字化けしたので対応した

■概要
chefでzabbixをインストールしたら日本語が表示されていなかったので対応してみました

■環境
CentOS 6.2 64bit
Zabbix 2.0.3
以下のchefでzabbixをインストール
http://kakakikikeke.blogspot.com/2013/05/opscodecookbooks.html 

■コマンド
yum -y install ipa-gothic-fonts.noarch
cd /opt/zabbix/web/fonts/
ln -s /usr/share/fonts/ipa-pgothic/ipagp.ttf ipagp.ttf
vi /opt/zabbix/web/include/defines.inc.php
//define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans');
define('ZBX_GRAPH_FONT_NAME', 'ipagp')
画面をリロードすると日本語は表示されるようになります

chefでインストールしていない場合は以下のディレクトリ構成も確かめて見てください
yum -y install ipa-gothic-fonts.noarch
cd /usr/share/zabbix/fonts/
ln -s /usr/share/fonts/ipa-gothic/ipag.ttf
vim /usr/share/zabbix/include/defines.inc.php
define('ZBX_GRAPH_FONT_NAME', 'ipag')

2013年6月2日日曜日

zipimport.ZipImportError: can't decompress data; zlib not available

yum -y install zlib*
したあとに再度pythonをconfigureしてmakeすれば幸せになれると思います

というかソースからインストールした場合ってyumでライブラリインストールしたあとは
再コンパイルしないとダメなのだろうか
あまりpythonは詳しくないのでわからない・・・

2013年6月1日土曜日

【CentOS6.3】python2.7.5をインストール

■コマンド
wget http://www.python.org/ftp/python/2.7.5/Python-2.7.5.tgz
tar xvfz Python-2.7.5.tgz
cd Python-2.7.5
yum -y install gcc zlib* openssl*
./configure
make
make test
make install

which python
cd /usr/local/bin/
rm python.back python2 python2-config python-config python
cd /usr/bin/
rm python2
mv python python2.6.6
ln -s /usr/local/bin/python2.7 python
python --version
vi /usr/bin/yum
冒頭のpythonへのパスを/usr/bin/python2.6.6に変更する
yum search python
yumができることを確認する

ポイントはyum installで、ソースからインストールするときはyumをインストールしてからでないとコンパイル後のpythonに反映されません
つまり、yumでモジュールをインストールしたあとは再コンパイルしないといけません