フロッピーディスクの残骸

フロッピーディスクを分解するのって楽しいよね

ZabbixでKVMのpool-listの死活監視をする

pool-listは一言で言うとイメージの置き場所の一覧です。
例えば、KVMが動作する環境でvirsh pool-listというコマンドを打ち込むと
ストレージプールの現在の状態や自動起動設定はどうなっているかを確認できる。

[root@KVM]# virsh pool-list
 Name                 State      Autostart
-------------------------------------------
 aiueo                active     yes
 default              active     yes
 gomi                 active     no
 templates            active     yes

基本的には自動起動の設定をやるものだと思ってるんだけど、
何らかの原因(障害など)でストレージプールが起動ができなくなった場合がある。
今回は、これをZabbixで監視してみる。

ZabbixのUserParameterを利用する

Zabbixで事前に定義されていない監視をやりたい場合、自分でスクリプトを書いたりしなければならない。
そこで役立つのがUserParameterです。

KVMの監視は、Zabbixで事前に定義されていないものなので、
自分でスクリプトを書く必要があります。

まずはスクリプトを書く

下記のShellScriptを書きました。(virsh-pool-status.sh)

POOL_STATUSの行で、virsh pool-listから得られる情報をパースしています。

#!/bin/sh
READ_ARGUMENT=$1
if [ "${READ_ARGUMENT}" = "" ];then
    ERROR=`date +"%Y%m%d:%H%M%S "`${0}' :  empty argument $1'
    echo $ERROR
    exit
fi


POOL_STATUS=`sudo virsh pool-list | sed -e '1,2d' | sed -e 's/^ *//' | sed -e 's/ *$//' | sed -e 's/\s\+/,/g' | grep -w ${1} | cut -f2 -d ','`


ACTIVE="active"
DEAD="inactive"
if [ ${POOL_STATUS[${READ}]} = ${ACTIVE} ]; then
  echo 1
elif [ ${POOL_STATUS[${READ}]} = ${DEAD} ]; then
  echo 0
else
  echo ""
fi

1回目のsedで、1-2行目の不要な情報をカットします。
2,3回目のsed行前後の空白文字をカットし、 4回目のsedで複数の空白を,に置換しています。
(これは後から、得られる情報を取り出しやすくするためです) sedが終わった段階では下記のようになっているはずです。

# sudo virsh pool-list | sed -e '1,2d' | sed -e 's/^ *//' | sed -e 's/ *$//' | sed -e 's/\s\+/,/g'

aiueo,active,yes
default,active,yes
gomi,active,yes
templates,active,yes

あとは、grepで取り出すストレージプールを探して決めて、そこからcutコマンドで必要な列を抽出するだけです。
こんな感じで簡単に書くことができます。 POOL_STATUSより下の行はactive,inactiveの情報を0 or 1の情報に変換しているだけです。

ACTIVE="active"
DEAD="inactive"
if [ ${POOL_STATUS[${READ}]} = ${ACTIVE} ]; then
  echo 1
elif [ ${POOL_STATUS[${READ}]} = ${DEAD} ]; then
  echo 0
else
  echo ""
fi

ストレージプールを引数として渡して実行してみると10が帰ってくるはずです。

# sh virsh-pool-status.sh templates
1

スクリプトの配置と設定

スクリプト/etc/zabbix/virsh-pool-status.shとして配置し、実行権限をつけておきましょう。
また、大抵の環境ではvirshコマンドの実行はrootでやってますんで、zabbixユーザーにコマンドの実行権限を渡してやる必要があります。 visudoコマンドを使って設定を変更します。

Defaults:zabbix !requiretty
zabbix ALL = NOPASSWD: /bin/virsh

全部のコマンドの権限を渡すの必要は無いので、今回はvirshだけ渡します。

ユーザーパラメーターの定義

/etc/zabbix/zabbix_agentd.confに下記を追加しておきます。

UserParameter=virsh.pool_status[*],/etc/zabbix/virsh-pool-status.sh $1

これで設定は完了です。

ZabbixServerから値が取れるかチェックしてみる

]# zabbix_get -s IPADDR -k virsh.pool_status[templates]
> 1

ふう。とれたー。
あとは、Webからぽちぽちするだけですね。

OSC2016沖縄に行ってきた

OSC2016沖縄に行ってきました。

今回はボランティアスタッフとして微力ながらお手伝いさせていただきましたm(_ _)m

f:id:mty328:20160703142314j:plain

DDNSやDocker,コミュニティの運営の話などいろいろ聞けたし
懇親会でもいろんな人とおしゃべりできて楽しかったです。

来年もまた行きます(^o^)/

そういや足の筋肉痛が酷くて
iPhone歩数計をチェックしたら
ここ1ヶ月で一番歩いてました。
たまには運動しないとなぁ

f:id:mty328:20160703142330j:plain

ハッカーズチャンプル2016に参加してきました

昨日はハッカーズチャンプルに参加してきました。 hackers-champloo.org

今回は、ボランティアスタッフとして
微力ながらお手伝いさせていただきましたm( )m
可愛いTシャツもいただきました(^o^)/

f:id:mty328:20160626214954j:plain

みなさん刺激的な発表をしててすごい楽しかったです。
内容も素敵でしたが、+見せ方、伝え方がうまいなぁって感じました。
場馴れなのか、それともそういう勉強をしているのかどうかは気になっています。

Mackerelの話が聞けたり、DBの負荷分散だったりすごく満足してます。

来年もお手伝いできたら嬉しいです。

そろそろインプットばかりでなく
アウトプットもしたいところ(=o=)/

仮想マシンをVirtualBoxからESXiへ移行する

VirtualBoxで動作させていたVMをESXiに移行する必要があったので、その時のメモ。

VirtualBoxでの作業

  1. VMを停止させる
  2. ファイルメニューから仮想アプライアンスのエクスポート
  3. エクスポートする仮想マシンをポチっとやって終わり

Macのデフォルトだと~/Documentsディレクトリにあるはずです。
ただし、そのOVAファイルをそのままESXiにデプロイできないため、
ちょっと設定を変更する必要があります。

ovftoolの導入

VMWare OVF Tool - VMWareからVMWare OVF Tool for Mac OSXをダウンロードしてインストールします。
GUIからインストールすると/Applications/VMWare OVF Toolというディレクトリができてるので、そこにovftoolコマンドが入ってます。

OVAファイルの書き換え

ここを参考にやってみます。 - OVAファイルからOVFファイルを抽出

$ cd /Applications/VMWare OVF Tool
$ ./ovftool --lax ~/Documents/test.ova ~/Documents/test.ovf
$ ls ~/Documents/
> - test.ova
> - test.ovf
> - test.vmdk
> - test.mf
  • OVFファイルの書き換えは上記のURLを参考に。
  • sha1の再生成 OVFファイルを書き換えたことによりsha1が変わってるので、test.ovfsha1を再生成してtest.mfの中も書き換える必要があります。
    下記のコマンドでsha1を再生成してコピペしてください。
$ openssl sha1 test.ovf
>SHA1(test.ovf)= xxxxxxxxxxxxxxxxxxx

OVFをESXiにデプロイする

vCenterは利用しません。ovftoolコマンドでmacからESXiに向けてデプロイします。

  • __ID__ ESXiのID
  • __PASSWORD__ ESXiのパスワード
  • __ESXi_HOST__ ESXiのIPアドレス
$ ./ovftool --diskMode='thin' --name='test' ~/Documents/test.ovf vi://__ID__:__PASSWORD__@__ESXi_HOST__

これでデプロイは完了です。おしまい。

ZabbixでHueを監視してみる

4月に自宅にHueを導入してから、
生活レベルがちょっと上がったような気がします(^o^)

328.hateblo.jp

実はタイマーを設定しており

  • 寝る時間になったら照明を切る
  • 起きる時間になったら照明を入れる
  • 会社に行く時間になったら照明を切る

というのをやってます。
後はイレギュラーなものに対応するためにスマホGPSを利用して

  • 家から離れると照明を切る
  • 家に近づくと照明を入れる というのもやってます。
    最近、家に不在の間に誤作動が起きているという話が家族から上がってきてたので
    Zabbixで監視することにしました。

Hueは、SNMPを喋ったりZabbix-Agent仕込んだりというのはできません。
かといって、Web監視では、HTTPリクエストのステータスしかチェックできないので、
Zabbixの外部チェック機能を利用する必要があります。
curl叩いて返ってきたjsonをperseするとかそういうのを考えているなら外部チェックを利用しましょう。

外部チェック機能はZabbixのドキュメントに詳しく書いてます。
3.0のマニュアルは英語版のみですが、2.2のドキュメントを見るとやることは大きく変わってる様子もないので、
日本語が良いって人は2.2のドキュメントを見るといいかもしれません。

じゃあさっそくはじめます。

APIキーの取得

hueコントローラーのIPアドレス192.168.0.3とします。
コントローラーのボタンを押してからcurlを叩くとシークレットキーっぽいのが返ってきますのでそれを保存しておいてください。

$ curl -d '{"devicetype":"Zabbix"}' http://192.168.0.3/api

試しに情報を取ってみる

取れてたらOKです。

$ curl  http://192.168.0.3/api/__SECRETKEY__/lights

ZabbixServerにスクリプトを登録

/usr/lib/zabbix/externalscriptsに下記の2つのスクリプトを置きます。

[root@zabbix30 externalscripts]# ls
hue-brightness-check.sh  hue-light-check.sh
  • hue-light-check.sh 照明のON,OFFの状態をチェックします。
#!/bin/sh

IPADDR=$1
SECRETKEY=$2
LIGHT_NUMBER=$3
SWITCH=`curl -s http://${IPADDR}/api/${SECRETKEY}/lights/${LIGHT_NUMBER} | jq .state.on`
if [ ${SWITCH} == true ]; then
  echo 1
else
  echo 0
fi
  • hue-brightness-check.sh ランプの明るさをチェックします。
#!/bin/sh

IPADDR=$1
SECRETKEY=$2
LIGHT_NUMBER=$3
SWITCH=`curl -s http://${IPADDR}/api/${SECRETKEY}/lights/${LIGHT_NUMBER} | jq .state.on`
if [ ${SWITCH} == true ]; then
  curl -s http://${IPADDR}/api/${SECRETKEY}/lights/${LIGHT_NUMBER} | jq .state.bri
else
  echo 0
fi

jsonのperseにはjqコマンドを利用しているので、インストールしておいてください。

yum install epel-release
yum install --enablerepo=epel jq

でインストールできます。

ホストの登録

ホストを登録する際にマクロを設定しておいてください。 f:id:mty328:20160612120127p:plain

{$API_KEY} = SECRETKEY
{$IPADDR} = IPアドレス

アイテムの登録

タイプを外部チェックにして下記のキーを登録します。 引数の最後の"1"は、電球の数ですので、その数の分アイテムを登録してください。

hue-light-check.sh["{$IPADDR}","{$API_KEY}","1"]

f:id:mty328:20160612120341p:plain

アイテム全体はこんな感じです。
うちは電球が3つあるので、3つ登録していて、
light-checkとbrightness-checkで計6つとping監視も入れてます。 f:id:mty328:20160612120015p:plain

グラフの作成

  • f:id:mty328:20160612120734p:plain
  • f:id:mty328:20160612120757p:plain

スクリーンへの登録

これで照明がついた時間とか何時にどのくらいの明るさになっているかをチェックできるようになりました。
クラブっぽく照明をチカチカさせてたらとんでもないグラフになりそうですね。 f:id:mty328:20160612120853p:plain

おまけ

3週間ほど前にjanogのUS Regional Meetingがあったようです。 ustreamアーカイブがあったので昨日1日かけて見てました(^o^)
結構面白かった。

来月は沖縄で開催されるようなので、
行ってきます(^o^)

iPhone5sのバッテリーを交換してみた

iPhone5sのバッテリーが劣化してて、
そろそろ交換しようかなと思って保証期間を見ると
2年過ぎてた・・・orz

iPhone7までは待ってられないし、
かといって1万払って交換するか迷ってたんだけど
Amazonさんをみるとこういうのがあった

Amazon CAPTCHA

ほう。自分で交換か...
失敗したらASUSの安いやつかiPhoneSEを買うくらいの気持ちでやるのもありかもしれない
と思って、ポチっちゃいました。

交換作業

必要なものは購入したパッケージに入ってるので別途必要はありません。
下記の動画を参考にしながらやってました。

www.youtube.com

ホームボタンのケーブル

フロントカバーって結構硬くてちょっと力を入れて開けないといけないんだけど、
勢いあまってホームボタンのケーブルを切りそうになる。危ない危ない。

バッテリーのコネクタ

こっちは結構簡単に外れる。ただし、基盤を傷つけないように。

ディスプレイのケーブル

外さなくても頑張ればバッテリーを交換できるのだけれど、
何かの拍子にケーブルを切りかねないのでこの辺も外しておく。
外し方も動画に乗ってるのでご参考まで。
ネジが微妙に大きさが違うので、大きさをきちんと覚えておくこと

バッテリーを剥がす

両面テープみたいなのでくっついてるので剥がすのに一苦労。
摘むところがあるんだけど、そこが切れると剥がすのはもう大変大変。
ちなみに、僕は切れたので、バッテリー部分を再度温めなおして、ヘラで少しづつ持ち上げていく
ここだけで30分くらい使った。慎重にやらないと反対側の基盤に傷がつく。
後は、剥がすときにバッテリーを傷つけてしまって火花が散った。
「あ、やばい!w これ終わったやつかな?w」って思ったけど、ダメ元で最後までやってみる。

取り付け作業とその後の工程

両面テープ貼ってその上にバッテリーを貼り付けるだけでOKです。
後は、ケーブルを基盤にはめ込んでカバーをするだけです。
ネジがあまりにも小さくてカバーの穴に入らなくて結構時間かかりました。

f:id:mty328:20160605205835j:plain

動作チェック

f:id:mty328:20160605205841j:plain

電源入りました!やったぜ!
動作も問題なしでした。

感想

自分でバッテリー交換をやってみるのも面白いんですが、
作業が結構大変だったので1万円払ってでもプロにお願いしたほうがいいです。
失敗したときのために予備端末を持っておくか、
新しい端末を契約するくらいの覚悟でやったほうが良いです。
おしまい。

おまけ

Twitterでフォローしてる人が
ちょっと変わったコースターを上げてたので僕も買いに行きました。

キーボードの絵柄なんて始めてみました(^o^) 赤瓦でできてるので吸水性も抜群だそうです。
会社用と自宅用で2つ買っちゃいました。 f:id:mty328:20160605210338j:plain f:id:mty328:20160605210354j:plain

おしま