2014年6月17日火曜日

CentOS6.4でvmtoolsdが起動しなくなった場合の対応方法

カーネルをyum updateしてしまってvmtoolsdが起動しなくなってしまった
「vmtoolsd &」のようにコマンドを打ってもすぐにプロセスが死んでしまう
ログとかどこに出ているかもよくわからなかったので再度configしなおしたら起動したのでメモしておく
何しているかをちゃんと調べてからやるほうが吉です(すいません、自分は詳しくは未調査です)

■環境
CentOS release 6.4 (Final)
Linux localhost 2.6.32-279.el6.x86_64 #1 SMP Fri Jun 22 12:19:21 UTC 2012 x86_64 x86_64 x86_64 GNU/Linux

■手順
  1. initctl list | grep vmware
  2. initctl配下で管理されていることを確認
  3. less /etc/init/vmware-tools.conf
  4. 起動ファイルの場所を確認
  5. /etc/vmware-tools/services.sh start
  6. Checking acpi hot plug                                  [  OK  ]
    VMware Tools is installed, but it has not been
    (correctly) configured for the running kernel.
    To (re-)configure it, invoke the following command:
    /usr/bin/vmware-config-tools.pl.
    
  7. /usr/bin/vmware-config-tools.pl
  8. 言われるがままにperlスクリプトを実行
  9. 質問されるがすべてenterを押下
  10. 「/usr/sbin/vmtoolsd &」で起動できることを確認

以上です
initctl配下で管理されるようになってからよくわからんですね

2014年6月16日月曜日

jmeterで指定したreq/secで負荷テストを実施する方法

前回までのjmeter関連の記事は以下の通りです

今回は更に指定したリクエスト/secだけリクエストできるようにしたいと思います
上記まで完了している体で説明します

  1. スレッドグループを右クリック -> 追加 -> タイマ -> 定数スループットタイマ を追加
  2. タイマの名前を適当に決めます
  3. ターゲットスループット(サンプル数/分)に「1分間でリクエストするリクエスト数」を指定
  4. ここで指定するリクエストがreq/minであることに注意してください 例えば 100 rec/sec のリクエストを送りたい場合は「6000.0」と入力してください
  5. Caluculate Throughput based onは「this thread only」を選択
  6. スレッドグループを編集
  7. スレッドプロパティの無限ループのチェックボックスをON
  8. スレッドプロパティのスケジューラをON
  9. スケジューラ設定内の持続時間(秒)にリクエストを発行し続ける秒数を指定
  10. 開始時刻と終了時刻は過去の時間を設定しておけば無視されるので過去の時間を設定してください

これでタイマに指定した間隔でjmeterはリクエストをかけるようになります
スレッドグループのスレッド数をあげることでもreq/secをあげることができますがクライアントのPCスペックに依存するのでスペックに合わせてスレッド数は上げ下げしてください

2014年6月13日金曜日

JmeterでREST-APIを負荷テストするテストケースを作成する方法

事前にjmeterのインストールは済ませておいてください
またjmeterのGUIを使ってテストケースを作成するのでX環境が必要です

■手順
  1. jmeter.bat(またはjmeter.sh)をクリックしGUIを起動
  2. テスト計画を右クリック -> 追加 -> Threads(Users) -> スレッドグループでスレッドグループを追加
  3. 名前とスレッド数とループ数を設定
  4. 作成したスレッドグループを右クリック -> 追加 -> サンプラー -> HTTPリクエストでリクエストを追加
  5. サーバ名、ポートを設定(APIをコールするエンドポイントの情報です)
  6. プロトコル、パスを設定
  7. プロトコルは「https」か「http」を入力
  8. メソッドがGETならばパスの部分にパラメータ情報をすべて記載
  9. Header情報が必要な場合は「Parameters」の部分に名前と値のkey, value形式で追加
  10. プロキシが必要な場合はProxyServerに設定を記載
  11. HTTPリクエストを右クリック -> 追加 -> リスナー -> 統計レポート を追加
  12. 他の結果も表示したい場合は同様に追加
  13. 設定が完了したら上部の緑三角ボタンをクリックして実行
  14. 追加した統計レポートに結果が表示されることを確認

基本的なテストはこれで作成できます
あとはテスト計画をjmx形式で保存できます(中身はXML形式のファイルです)
これをサーバに転送してコマンドで実行することも可能です

jmeter -n -t hogefuga.jmx

ここまでできたらJenkinsと連携して結果を可視化できるようにもしたいですね

2014年6月11日水曜日

Zabbixでtimeoutするアイテムを監視する方法

Zabbix Agentのタイムアウトは最大で30秒までしか設定できません
値を取得するのに30秒以上かかるアイテムの場合はZBX_NOTSUPPORTEDになってしまい監視できません
その場合、自分はcron+リダイレクトを使った方法で監視しているので紹介します
(cronを使わない方法(zabbix_sender等)もありますので参考程度に御覧ください)

■環境
CentOS release 5.10 (Final)
Zabbix Server 2.2.1

■設定方法
  1. Zabbixに登録するデータを取得するコマンドを作成する
  2. 今回は時間がかかるコマンドとして「du -sx /」を例として紹介します
  3. 結果が数字の部分だけになるようにコマンドを修正する
  4. du -sx / | awk '{print $1}'
  5. cronに登録する(例として毎時5分実行するように設定する)
  6. cron内で結果をファイルにリダイレクトさせる
  7. 5 * * * * du -s . | awk '{print $1}' > /var/tmp/du.size
  8. zabbix_agent.confを開く
  9. emacs /etc/zabbix/zabbix_agent.conf
  10. UserParameterを使ってリダイレクトしたファイルの情報を取得する設定を記載する
  11. UserParameter=get.du.size,cat /var/tmp/du.size
  12. zabbix-agentdを再起動する
  13. 一度cronが回ってファイルが作成できたら念のためzabbix_getで設定したキーの値が取得できるか確認する
  14. zabbix_get -s hostname -k get.du.size
  15. zabbix-serverのアイテムにget.du.sizeで監視するアイテムを登録する
  16. ポイントは更新間隔(秒)を「3600」にすることでcronの間隔と合わせています

以上で設定は完了です
これで1時間おきにduの結果がZabbix Serverに登録されているかと思います

■Tips
うまく値が取得できなくZBX_NOTSUPPORTEDになってしまう場合は、ファイルの権限を確認して読み込み権限を付与してください

cronの部分をJenkinsで巻き取り、値を取得したあとでzabbix_getでZBX_NOTSUPPORTEDにならないか確認するとより正確な監視ができるかと思います
(Zabbix Serverはアイテムが何かの拍子にZBX_NOTSUPPORTEDになっても警告してくれないのでそこをJenkinsでカバーするイメージです)
RESULT=`zabbix_get -s yoshi3 -k get.du.size2`
if [ $RESULT = "ZBX_NOTSUPPORTED" ]
then 
  echo NG
  exit 1
fi

2014年6月7日土曜日

Chromecast使ってみた

ついに日本で発売になったChromecast
さっそく購入してセットアップ手順をまとめて実際に使うところまで試してみました

■環境
TV : Sony BRAVIA EX420
Chromecast
iOS 6
iPhone 5

※事前に無線LAN環境+Googleアカウントが必要になりますのでご注意ください

■設定方法
パッケージです
Chromecastの写真が載ってます


開封は横のシールを剥がして行います
剥がして横に引っ張り出せば取り出せます


中の箱を開けば本体がお目見えします
そして、驚きは説明書
開いた蓋の裏側に3つだけ手順が記載しています
  1. テレビにコンセントに差し込む
  2. テレビの入力切替をする
  3. アプリで設定する


本体の部分を取り出すと中にコンセント類が入っています
USB + コンセントと
HDMIの延長コードが入っています
本体は裏側に丸い穴が開いているのでそこを押せばケースから取り出せます(表から引っ張るとうまく出せないので裏から押しましょう)


USBとChromecastを接続します
Chromecastの周りにコーティング用のにシールが貼ってるのあるのでそれを剥がしてからUSBを接続します
USBは基本的に電源共有として使います
本体に直接付いているのはHDMIの端子でテレビと直接つなぎます
HDMI端子からは電源を供給できないのでUSBがついている感じです


TVにChromecastを接続します
今回、テレビはBRAVIA EX420を使用しております
テレビの裏側にHDMI入力端子がありますのでまずそちらを差し込みます
空いているHDMI端子に差し込めばOKです
EX420は全部で3つのHDMI端子があります(裏側に2つ、側面に1つあります)
写真はすでに1つのHDMI端子を使っていますので空いている部分に接続します
(すいません、写真に埃がかぶっていました。。。)


接続したらこんな感じになります
その後、電源供給用のUSBを接続します
EX420の場合、ちょうど接続したHDMIの下にHDDを接続するためのUSB端子があります
電源供給はそこにUSBを接続してもできるようなので私の場合はそこに接続しました
(写真だと見づらいですが、すでにUSB端子に接続している状況です)
充電がはじまるとChromecastが白く点滅します
これでChromecastの設定は完了です、次にiPhoneアプリをインストールしてアプリの設定をします


https://cast.google.com/chromecast/setup/
iPhoneでブラウザを開いて上記のURLにアクセスします
iPhoneの場合はAppStoreに誘導されるのでAppStoreでChromecastアプリをダウンロードします


アプリの設定を行います
まずは利用規約に同意します
次にChromecastをセットアップします
まだ接続がないので「新しいChromecastのセットアップ」を選択します
するとiPhoneのWi-Fi設定でChromecastに接続してくださいと言われるので、Wi-FI設定でChromecastに接続します




接続が完了したらアプリに戻ります
Chromecastに固有の名前を設定します
まず「次へ」を選択します


テレビを点けて入力をHDMIに切り替えください
テレビ画面に出ているコードとアプリ側に出ているコードが一致していることを確認したらアプリ側で「次へ」を選択します
(すいません、一応コードの部分は黒塗りにしています)


国の選択画面になりますのでお住まいの国を選択してください


そしてChromecastの名前を決定します
なんでもOKです
自分が判断できる名前をつけてください
名前の設定が完了したら「次へ」を選択します


そしてChromecastが接続するネットワークを選択します
「Wi-Fiネットワークを選択」を押すとChromecastの範囲にあるネットワークを表示しますので接続したいネットワークを選択します
当たり前ですが、私は自分のネットワーク(WiMAX)に接続しました
ネットワークとパスワードを入力したらセットアップを選択します
(このセットアップが始まるとiPhoneとChromecastの接続は終了します、そしてその後はアプリ経由でChromecastに接続することになります)




セットアップがはじまります
アプリおよびテレビにも同じようなくるくるが始まります
数分待てばセットアップが完了します
Chromecastの初回セットアップで最新ファームウェアがないか探しにいくのでアップデートした場合はChromecastの再起動が走るようです


一応テレビにこんな感じのが移ればOKだと思います


Chromecast側のセットアップが完了してからアプリに戻ると設定したChromecastがアプリから認識できているのが確認できると思います
また、アプリからChromecastを認識するためには
Chromecastが接続されているネットワークにiPhoneも接続している必要がある
ということにご注意ください
なのでiPhoneでキャリアの回線(例えばau-4GLTE)を使っている場合はアプリを立ち上げてChromecastを認識しないのでご注意ください
(おそらくなのですがChromecast側には認証がないのでネットワークの接続認証で代替しているのだと思います)


これでセットアップは完了です
次にChromecast用のアプリをダウンロードしていろいろと使ってみたいと思います

■使ってみる
Chromecatアプリを立ち上げ「アプリを見つける」を選択します
するとsafariが立ち上がりChromecastのアプリページに誘導されます
今のところ「Google Playムービー」しかなさそうなのでとりあえず選択し、AppStoreからダウンロードします


ダウンロードしたGoogle Playムービーを立ち上げます
右上をタップし端末に接続から設定したChromecastに接続します
これでGoogle Playで購入、ダウンロードした動画をChromecastを経由して見れるようになります
iPhoneからではGoogle Playアプリがないので直接ブラウザでGoogle Playにアクセスして動画を購入もしくはダウンロードしてください


試しにPCでGoogle Playにアクセスして「ドラマ 闇金ウシジマくん」の1話をダウンロードしました
するとGoogle Playムービーのアプリにもドラマが表示されるのでこれを選択すれば、Chromecastを経由でしてテレビでGoogle Playでダウンロードしたドラマを見ることができるようになります
再生してもChromecast側で動画が再生されない場合は「Google Playムービー」アプリとして右上にあるアイコンからChromecastに転送できます
動画再生中はiPhoneで別アプリをいじっても問題なしです



とりあえずこれでGoogle Playでダウンロードした動画はテレビで見れるようになりました
あとは今後アプリが追加されてChromecastで見れる動画が増えるといいかなーと思います
(AndroidでGoogle Playで検索するとすでに多くのアプリがChromecast対応しておりました、iPhone対応のアプリが少ないだけのようです)

■所感とTips
正直、IT知識のない人には設定が結構たいへんかなーと思いました
というのも前提条件として「無線LANが必要」とか「Google アカウント必須」とか「HDMI対応テレビが必要」とか事前にやることがいろいろあるので「気軽にー」というわけにはいかなさそうです

あと画質は全く問題ないです、普通にテレビ感覚で見ることができます
前はPCからHDMIでTVに移していたのですが、それよりかは全然画質が綺麗です

Google Playムービーアプリを終了しても動画は再生し続けるようです

Google公式で出しているYoutubeアプリはChromecastにすでに対応しているのでGoogle Playムービー同様、アプリを立ち上げて、動画を再生して転送ボタンを押せばTVで見ることができます

Youtubeアプリには「TVキュー」という機能がありキューに入れておけば動画終了後、連続で再生することができるようです

Chromecastに対応したiPhoneアプリがまだ少ないのでAndroidがある場合はAndroidで操作するほうが全然いいです
  • d-Video
  • Youtube
  • Google Play Movies
  • Red Bull TV
  • Plex
  • Post TV
  • Viki
などなどいろいろなアプリがChromecast対応してました、詳しくはChromecastアプリから「アプリを見つける」で探すことができます

どの端末(iPhone, Android etc...)からcastされたのかTV上に出してくれます(動画転送時、はじめに少しだけ表示されます)
Googleアカウントに紐付いているのでGoogleアカウントのアクティビティログにcast履歴を出してくれるかもしれません(未確認)

2014年6月5日木曜日

EclipseでSAStrutsの開発環境構築をしてみた

■環境
Windows7 64bit
Eclipse 4.3.1 Kepler
SAStruts 1.0.4 sp9
Apache Tomcat 6.0.20

■Doltenプラグインのインストール
まずEclipseのプラグインをインストールします
これをインストールしなくても環境構築できますが入れたほうが簡単なのでインストールします

Eclipse MarketPlaceでは公開されていないのでプラグインの公開サイトを追加してインストールします

Help -> Install New Software
を開き
  • http://eclipse.seasar.org/updates/3.2
  • http://eclipse.seasar.org/updates/3.3
を追加します
追加するとURLに存在するプラグイン一覧が下ペインに表示されると思いますので

3.2では
  • DbLauncher
  • Dolteng
  • Sysdeo/SQLI Tomcat Launcher
3.3では
  • Dolteng
  • SAStrutsPlugin
のチェックボックスをONにしてインストールします(以下は3.3にあるプラグインをインストールする場合のウィザード)



requires 'bundle org.eclipse.jst.jsp.ui 0.0.0' but it could not be found
となってインストールエラーとなる場合には

Help -> Install New Software
を開き
  • Kepler - http://download.eclipse.org/releases/kepler
を選択し「Web, XML, Java EE and OSGi Enterprise Development」を選択しインストールします
結構量が多いのでインストールには時間がかかります

■SAStrutsサンプルプロジェクトの作成
プラグインをインストールできたらサンプルプロジェクトを作成してみます

  1. Package Explorerで右クリック -> New -> Other を選択
  2. プロジェクト作成ウィザードで Dolteng -> Dolteng Project を選択しNextをクリック
  3. プロジェクトに必要な情報を入力(プロジェクト名、パッケージ名は必須です、PresentationにはSAStrutsを選択します)
  4. 入力が完了したらNextをクリック
  5. 各種ファイルのパスを設定をっ実施(基本はデフォルトのままでOKです)
  6. 確認が完了したらFinishをクリック

これでプロジェクトの作成が完了です
次はこのサンプルプロジェクトを動作させてみます

■サンプルプロジェクトを動作させる
Tomcatで動作させるので事前にeclipse上のTomcatの設定を済ませてください
またTomcatはバージョン6系を使用しました(7だとSysdeo/SQLI Tomcat Launcherがうまく動作しませんでした)
eclipse上のTomcatの設定が完了したらプロジェクトとTomcatを連携します

  • プロジェクトを右クリック -> Tomcatプロジェクト -> コンテキスト定義を更新
をするとeclipseで開発したソースがリアルタイムでtomcatにデプロイされて開発しながらブラウザで確認できるようになります
コンテキストを更新したらツールバーにあるTomcatのアイコンからTomcatを起動してください

Tomcatの起動が完了したら、src/main/java 配下の
  1. com.sample.sas.action.IndexAction.java を右クリックし
  2. SAStruts -> View on Server をクリック
すると、eclipseに内蔵されているブラウザでサンプルの動作を確認できるかと思います
※この段階でTomcatが起動していなかったり、Sysdeo/SQLI Tomcat LauncherでeclipseとTomcatの連携ができていないと「このページは表示できません」という404エラーが画面になります

■参考サイト

この開発環境構築が大変なのはいかにもJavaという感じですね
せっかく環境構築できたので次はちょっとサンプルでも動かしてみたいです

P.S 20141027
以下のエラーが出る場合は「Web, XML, Java EE and OSGi Enterprise Development」を先にインストールしてから各種Sastruts用のプラグインをインストールしてください
Cannot complete the install because one or more required items could not be found.
Software currently installed: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin.feature.feature.group 0.0.14)
Missing requirement: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin 0.0.14) requires 'bundle org.eclipse.jst.jsp.ui 0.0.0' but it could not be found
Cannot satisfy dependency:
From: SAStrutsPlugin 0.0.14 (org.seasar.sastrutsplugin.feature.feature.group 0.0.14)
To: org.seasar.sastrutsplugin [0.0.14]
Web, XML, Java EE and OSGi Enterprise Developmentのインストール方法は
Help -> Install New Software -> Work with -> Luna
を選択すればその下の一覧に表示されるのでチェックボックスをONにしてインストールしてください
Lunaの部分は各Eclipseのバージョンごとに提供されているリポジトリ名なので適宜変更してください

2014年6月1日日曜日

shUnit2にパッチをあててJUnit形式のXMLファイルを吐けるようにしてみた

  1. https://code.google.com/p/shunit2/issues/detail?id=16 にアクセス
  2. 上記に添付してある shunit-2.1.6-xml.patch をダウンロード
  3. patchファイルをshunit2と同じディレクトリに配置
  4. [root@localhsot work]$ ls -ltr
    合計 100
    -rw-r--r-- 1 root   root   20944  5月 29 16:55 2014 shunit-2.1.6-xml.patch
    drwxr-xr-x 5 nifbat nifbat  4096  5月 29 16:59 2014 shunit2-2.1.6
    
  5. 以下のコマンドでパッチを当てる
  6. patch -u -p1 -d shunit2-2.1.6 < shunit-2.1.6-xml.patch
  7. パッチがあたることを確認する
  8. patching file bin/gen_test_results.sh
    patching file bin/which
    patching file lib/versions
    patching file src/shunit2
    patching file src/shunit2_test.sh
    patching file src/shunit2_test_asserts.sh
    patching file src/shunit2_test_failures.sh
    patching file src/shunit2_test_macros.sh
    patching file src/shunit2_test_misc.sh
    patching file src/shunit2_test_standalone.sh
    
  9. tempファイルをカレントディレクトリに作成しようとして権限がないと怒られるので「shunit2-2.1.6/src/shunit2」の以下も修正
  10. 1143 __shunit_system_out=$(mktemp 'shunit-out.XXXX')
    1144 __shunit_system_err=$(mktemp 'shunit-err.XXXX')
    ↓
    1143 __shunit_system_out=$(mktemp '/tmp/shunit-out.XXXX')
    1144 __shunit_system_err=$(mktemp '/tmp/shunit-err.XXXX')
    

パッチあてが完了したら実行する際に
export SHUNIT_OUTPUTDIR="/tmp" && sh testHoge.sh
みたいな感じで SHUNIT_OUTPUTDIR を export するようにしてください
そうしないとXMLファイルは標準出力に出力されてしまいます