Perl Advent 2011と牧歌組合

ご無沙汰してます!
最近、エンジニア&&Perler(本職)として文章を書いてます!
http://perl-users.jp/articles/advent-calendar/2011/hacker/24
http://perl-users.jp/articles/advent-calendar/2011/casual/18
http://perl-users.jp/articles/advent-calendar/2011/hacker/10
http://perl-users.jp/articles/advent-calendar/2011/dbix/12
http://perl-users.jp/articles/advent-calendar/2011/test/6
http://perl-users.jp/articles/advent-calendar/2011/test/19
よろしければお読みください〜
電子書籍化される(かも)とのことです。

フリーのサーバ監視ツールMONIT。

サービス生死確認やサーバリソース監視のために,最近はnagiosを使うことが多かったが、Nagiosより軽そうなのでmonitを試してみた。
スタンドアロン自宅サーバだし、いちいちcgiも要らないなってことで。

http://mmonit.com/monit/download/
からダウンロード。展開するとすぐ動かせる。

# tar vxzpf monit-5.3-linux-x86.tar.gz
# cd monit-5.3
# ln -s /home/hpsuser/monit-5.3 /usr/local/monit
# vi /usr/local/monit/conf/monitrc
----------------------------------------
set logfile /usr/local/monit/monit.log
set mailserver localhost
set alert root@localhost

#- サーバ監視
  check system localhost
    if loadavg (1min) > 4 then alert
    if loadavg (5min) > 2 then alert
    if memory usage > 75% then alert
    if swap usage > 25% then alert
    if cpu usage (user) > 70% then alert
    if cpu usage (system) > 30% then alert
    if cpu usage (wait) > 20% then alert
#- MySQLプロセス監視
check process mysqld with pidfile /var/lib/mysql/kadai.pid
    start program = "/etc/init.d/mysql start" with timeout 60 seconds
    stop program  = "/etc/init.d/mysql stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if totalmem > 200.0 MB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then stop
    if failed host localhost port 10501 protocol mysql
       then restart
    if 5 restarts within 5 cycles then timeout
    group server
#- アプリケーションcounterプロセス監視
check process counterd pidfile /var/run/counterd.pid
    start program = "/etc/init.d/counterd start" with timeout 60 seconds
    stop program  = "/etc/init.d/counterd stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if totalmem > 200.0 MB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then stop
    if 5 restarts within 5 cycles then timeout
    group server
#- MySQL Proxyプロセス監視
check process mysql-proxy with pidfile /home/mysql-proxy/mysql-proxy.pid
    start program = "/etc/init.d/mysql-proxy start" with timeout 60 seconds
    stop program  = "/etc/init.d/mysql-proxy stop"
    if cpu > 60% for 2 cycles then alert
    if cpu > 80% for 5 cycles then restart
    if totalmem > 200.0 MB for 5 cycles then restart
    if children > 250 then restart
    if loadavg(5min) greater than 10 for 8 cycles then stop
    if 5 restarts within 5 cycles then timeout
    group server
#- disk監視
  check filesystem datafs with path /dev/mapper/VolGroup00-LogVol00
    start program  = "/bin/mount /"
    stop program  = "/bin/umount /data"
    if failed permission 660 then unmonitor
    if failed uid root then unmonitor
    if failed gid disk then unmonitor
    if space usage > 80% for 5 times within 15 cycles then alert
    if space usage > 99% then stop
    if inode usage > 80000 then alert	#30000->80000
    if inode usage > 99% then stop
    group server
----------------------------------------

#- 起動スクリプトの作成
# cd /etc/rc.d/init.d/
# vi monit
----------------------------------------
#!/bin/sh
# chkconfig: 345 99 01
# description: Moniter Daemon
# processname: monit
progname=monit
lockfile=/var/lock/subsys/${progname}
prog=/usr/local/monit/bin/monit
conf=/usr/local/monit/conf/monitrc
. /etc/init.d/functions
RETVAL=0
start() {
        echo -n $"Starting $progname: "
        daemon "${prog} -c ${conf}"
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch $lockfile
        return $RETVAL
}
stop() {
        echo -n $"Stopping $progname: "
        pgrep -f $prog | xargs kill
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f $lockfile
        return $RETVAL
}
case "$1" in
  start)
        start
        ;;
  stop)
        stop
        ;;
  restart)
        stop
        start
        ;;
  *)
        echo $"Usage: $0 {start|stop|restart}"
        exit 1
esac
exit $RETVAL
----------------------------------------
# chkconfig --add monit
# chkconfig --list | grep monit
lvm2-monitor    0:off   1:on    2:on    3:on    4:on    5:on    6:off
mdmonitor       0:off   1:off   2:on    3:on    4:on    5:on    6:off
monit           0:off   1:off   2:off   3:on    4:on    5:on    6:off

非常に動作は軽く、アラートメール送信だけなら使えそうな感じでした。
導入もお手軽だし、機会あれば仕事でも使ってみたい。

Oracle VM VirtualBoxを試してみた。

いやあ、数年前のVMとは比べ物にならないほど使いやすい。わかりやすい!

端末制御がイマイチ不親切なのか、仮想マシンのターミナル操作を行うと、
親マシンでのコマンドが効かなくなるところがマイナスポイントだが、
概ね満足でした。


仮想プライベートネットワーク上に仮想Hadoopクラスタをでっち上げて、
思う存分、遊んでみたいもんだ〜

憧れのデータマイナー

データマイナーへのキャリアチェンジを最近考えている。
2006年の転職にて渋谷の某企業に務めた際の中途同期のM君が、
「百戦錬磨のデータマイナーの話って心底面白い。
いわゆる『紙おむつとビール』なんて序の口で、様々な
人間の行動心理とマーケティング&データベースの法則が
出るわ出るわ!!本当に面白い」
と言っていたのを思い出す。

自分は様々な現場で数十億を超える膨大データを格納するデータベースエンジニアとして、
設計、開発、保守・運用と色々仕事をしてきた自信はあるし、
また、膨大データを高速に処理するSQLチューニングや設計には自信があるほうだ。

しかし、この歳からデータマイナーへのキャリアチェンジを図るとしたならば、
まだまだ勉強しなければならないことが多いだろう。

データマイナーには普通以下の2つのスキルが必要だという。

  1. 膨大データのデータベースを支えるスキル
  2. 統計学などデータを読むスキル

前者に関しては(かなり)自信があるが、後者は体型だった教育を受けてないし、
また職務上の実績もない。

マイニングは企業の”次のビジネス”や”将来の方向”を決める仕事だと思う。
それゆえにそこに憧れている。
データベースエンジニアからデータマイナーに転身を図るためには、
(1)のスキルを継続しつつそこで実際にデータマイニング企業に対して、
決して夢や絵空事ではない、直近のビジネス的な負荷要素を保証して、
(例:7億件データの格納と参照で困っている企業Xがあるならばそこで確実に実績を出す、
 RDBMSでの限界であるならば、HadoopなどKVSでの分散データストアを安価提案して高速構築するなど)
その後の展望を切り開けるような身の振り方が求められるのだろうな…。

エンジニアとして将来面白い仕事をするために。面白くないとエンジニア仕事も続けられない。

「君はアナリストなどと共同して企業のデータ分析を行う部署にデータベースエンジニアとして進むべきだ」
と、部署異動を望んでいる当時の部下Fに進言したことがある。
彼女には、SQLを組み立てる才能が明らかにあった。
データベースエンジニアとして進むべき道がデータマイナーであるべきことは輝かしいキャリアパスだと、
自信を持って思う。
しかし、今自らがその進路の選択を目前にして、
何をすべきか、何が出来るのか、非常に迷っている…。

音楽DB論理設計:物理図

最近残業が多く、エンジニアとしての自分の夢を見失いそうになっている。


5年前、2006年ごろ自分の手帳をみると

5年後、私は音楽ファンとして
音楽DBを運営している

という目標が記されていた。
あれから5年既に経ってしまっている。

自分は、技術者として本当に精進してきたのか???
技術者として堕落していたのでは???

という問いが頭の中をめぐっている。


こういうのが作りたい…

僕の人生のなかの2つの重要要素、
音楽とITを
結婚させたい……

和声進行も正規化してデータベースに登録したい。
バッハもモーツァルト
ボブ・ディランロバート・ワイアットもミンガスも。


そのとき我、解放されるだろう!!


一体なにをやってるんだ!


1999年11月7日に書いたノート。

アレクシス・コーナーの”Blues Incorporated”のようなミュージック・スクールを
インターネットで作りたい。
それは
・図書館
・イベント広場
・スタジオ
・喫茶室
・校舎
から構成される。
「図書館」には過去の音楽データベースがある。
音楽データベースは音楽販売と提携する。中古レコード店も含めて。
検索がタイトル、コード進行、リズムなど様々な形式で可能。
試聴室で関心方向でレコメンドもされる。

「イベント広場」はライブハウスでオンライン配信。
企画を自由に立てることができる。

「スタジオ」ではオンラインセッションが楽しめ、
レコーディングやミキシングも可能。
「喫茶室」では音楽仲間でのチャットができ仲間を見つけられる。
「校舎」では、リスペクトするミュージシャンからのオンライン・コーチを受けられる。

まあ、それから10年以上経って、既にヒトが作りしもの、まだ技術的に難しいもの
混在しているが。。
ゆっくり考えて実現してから死にたいねぇ。

論理削除など、何らかのテーブルのデータを変更した場合、

その変更がトリガーとなって他のデータ更新を行わないか
確認したいときの備忘。

SQL> select DESCRIPTION,TRIGGER_BODY from user_triggers
where trigger_name = '当該テーブルに近いトリガ名'
/

Teradataなどと並ぶOracleのDWH製品ということで、

windows マシンにインストールしてみる。

OUIが立ち上がる。

ホーム詳細の指定で

インストール名 OWB
パス d:\OWB

の入力が必要である。

それだけですぐにインストールが開始される。
rman, oem, oracleNetなど普通のRDBMS並にインストールが行われる。

インストールログは
c:\Program Files\Oracle\Inventory\logs\InstallActions.2011_...に記され問題なくインストールされた。

WarehouseBuilder リポジトリアシスタントを使用してリポジトリを作成する。
これに接続先のDB情報を与えると、リポジトリが作成される。
ユーザdukkiedukkieを指定したところ、
XEのdukkiedukkieスキーマ内にOWB_*というテーブルが大量に作られた。

OWBソフトから192.168.1.1のXEにアクセスするには、
XE_192.168.1.1
を用いる

# asianlinuxへのインストールは、.mkファイルで失敗した。

明日からちょっとずついじってみよう。


まあ基本的はオラクルデータベースサーバだなあ。