A Day In The Boy's Life -165ページ目

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

まぁ、人生がうまく行き過ぎたなんてことは経験したことがないので、仕事に関する話なんですが・・・。


仕事をしていてとんとん拍子に進んでいくと、少し不安になってきたりします。

テストも順調に消化され、万全の体制でリリース日を迎える。

ただ、こんなにうまくいっていいものだろうか?とか。


私は、悲観的というかネガティブ思考が強いほうではなく、結構楽観主義者であります。

何事もなんとかなると思っていますし、くよくよ悩んでもしょうがないからと前向きに考えようとするほうです。


そんな私でも、あまりにうまく行き過ぎると本当に大丈夫なのか?という考えが頭をよぎりだします。

なぜかと考えてみたときに、1つは潜在する問題やリスクというものが洗い出しきれていないのではないかと考えてしまうからです。

問題が山済みであることは返って好都合であります。その対策を考えられるからです。

しかし、その問題が顕著化していないと、いざ問題がおきたときに対応が後手に回ります。


問題が明らかでその対応がしっかりと考えられているのであれば、その問題がきても「そらきた!」とばかりにすぐに対応に移れます。

しかし、「大丈夫。大丈夫」と高をくくっていて、いざ問題がおきたら、そこから対策を考え対応に移るという、短時間でとても体力のいる作業が必要になります。

そして、現場はおおかた修羅場となります。


要するに根拠のない楽観的主観は危険であり、問題はあるにしてもそのときにどうすればよいのかということだけがちゃんと考えられていたらよいということです。

そして、悲惨なのはそういう根拠のない楽観主義をPJなりチームなりのリーダーが持っている場合です。


少し前に参画したPJでも、かなりとんとん拍子で進んでいき、「これぐらいの規模のPJだったら、こんなもんで進むよねぇ」なんて思っていざリリースしたら、後から問題がポロポロでてきて面倒な事態になり、反省した経験があります。


どんなに順調に仕事が進んでいても、本当に大丈夫なのか?と冷静に周りを見渡してみる時間が必要です。

これは、楽観主義者である私自身の教訓でもあります。





ブログを禁止したい企業とブロガーの微妙な関係 @ ITmedia オルタナティブ・ブログ


うちの会社もはっきりと禁止という通達が出ているわけではないですが、書いてほしくない雰囲気が出ていますね。

なんか、情報統制をしたいというか、ブログ自体が不祥事の素みたいな感じを受けます。


どちらにしろ、今の世の中で情報を統制することなんて不可能だと思います。

某国みたいに、国がネットを規制するなら話は別でしょうけど。

今の時代には今の時代のやり方があるのだと思いますので、リスクの面だけを考えるのではなく、メリットを考えてみて企業のイメージアップにつながる方向性を考えてみてはどうかと思ったりします。


以前に「突然あなたのブログを会社公認にしたいと言われたら? 」の中で書いたように、会社公認のブログというものに憧れはあったりします。

あまりにその企業の色というものを出すような記事ばかりを書かされると嫌気が差すでしょうけど、こういう人が働いているんだよ、という中の人を紹介するいいきっかけになるのではないかと思います。

実名で書くとなると、変なこともいえないでしょうし、それが返って良い縛りになるのではないかと。


情報漏洩をを気にして、社員が持つ知識やノウハウというものは企業の財産だから流出を阻止したいと考えるんじゃなくて、その人自身を財産と考えてほしいものです。

少なくとも今の時代を生きる人たちは、単にその企業の中から得た知識だけで育っているわけではないと思います。

私も知識のかなりをネットから得ました。

上司の口癖が、「調べろ」でしたし、それが可能な世の中になっています。


情報を拾うのはいいけど、出すのはダメだというのはかなりデタラメな論理に聞こえます。

ネットがインタラクティブであるということを認識していて、それを誰もが活用したいと思っているのに、そこだけ一方通行で、というのはおかしな言い分です。

ブログを規制するというのは、ネットから得られる恩恵を捨てているということではないかと思ったりします。


ブログ禁止とまで言わなくても、会社でネット禁止!といわれていたら絶対に今の自分はないだろうなと思います。





前回の「inotifyを使ってファイルやディレクトリに起きたイベントを簡単に監視する 」にてinotifyの機能を使ってみましたが、PHPのプログラムからも利用できるようなので、試しにログを監視するスクリプトを作ってみました。


inotifyの機能を使って独自のPHPスクリプトを書けば、何かのファイルを監視したり、ディレクトリにおきた変化をトリガーにして何か処理をするというようなスクリプトも簡単に書くことができます。



PECLのinotifyパッケージをインストールする


PHPからinotifyの機能を利用するにはPECLの拡張モジュールとして組み込む必要があります。

PECLで提供されている拡張モジュールのインストール方法 は色々用意されているようですが、今回はphpizeコマンドを使ってモジュールをコンパイルし、PHPに組み込むようにしました。


1. PECLのinotifyパッケージをダウンロードする


まずは、PECLの公式サイトからinotifyパッケージ をダウンロードします。

ダウンロード後はサーバーに転送し、下記のようにモジュールをコンパイルします。

# tar -xvzf inotify-0.1.3.tgz

# cd inotify-0.1.3

# phpize

# ./configure

# make

# make install

make install実行時の最後に拡張モジュールのインストール先が示されますので、その場所をメモしておきます。


Installing shared extensions: /usr/local/lib/php/extensions/no-debug-non-zts-20060613/

上記ディレクトリ内に、inotify.soという動的ライブラリファイルが作られています。


2. inotify拡張モジュールをPHPに組み込む


先ほど作られたinotifyの動的ライブラリファイル(inotify.so)をPHPの設定ファイル(php.ini)にセットして読み込まれるようにします。


extension_dir = "/usr/local/lib/php/extensions"

拡張モジュール用のディレクトリは、環境に合わせて適当に編集してください。


このままでは、extensionsディレクトリ以下にはinotify.soファイルは存在しないので、シンボリックリンクを作成しておきます。


# cd /usr/local/lib/php/extensions/

# ln -s ./no-debug-non-zts-20060613/inotify.so inotify.so

最後に、Apacheを再起動しておきましょう。



3. inotify拡張モジュールが有効になっているかテストしてみる


PECLのinotifyパッケージ内にはサンプルプログラム(tail.php)付属しています。

これを実行してうまく動作するか試してみましょう。


# tail.php /home/hoge/test.txt

引数に監視するファイルのパスを指定します。

上記を実行中に、test.txtファイルに文字を書き込んでみます。


# echo "xyz" >> /home/hoge/test.txt

すると・・・


# php tail.php /home/sakaiya/test.txt
Event received !
xyz

ターミナル上にイベントをキャッチしたメッセージが表示されました。

どうやらうまく動作してくれているようです。



ログファイルに何か書き込まれたらアラートメールを発砲する監視スクリプト


よくあるログ監視用のスクリプトを書いてみたいと思います。

監視ツールを導入するとなるとかなりの費用がかかってしまうため、このような簡易スクリプトで代替できる場合もあると思います。


先ほどのサンプルスクリプトをベースに作ってみました。


<?php

// 監視対象のログファイル
define("LOG_FILE_PATH", "/var/log/error.log");

// 通知先
define("MAIL_TO", itboy@hogehoge.com">itboy@hogehoge.com);

// ログファイルが存在するか、オープンできるかチェック
if (!file_exists(LOG_FILE_PATH) || ($fp = fopen(LOG_FILE_PATH, "r")) === FALSE) {
    echo "ログファイルの読み込みに失敗しました";
    exit;
}

// ファイルポインタを最後に持っていく(ログファイルに出力された内容を取得するため)
fseek($fp, 0, SEEK_END);

// inotifyのインスタンスを初期化
$fd = inotify_init
();

// inotifyの監視対象ファイルをセット
// ログファイルに内容が書き込まれた(変更があった)イベントを取得する
if (($watch_descriptor = inotify_add_watch ($fd, LOG_FILE_PATH, IN_MODIFY)) === FALSE) { echo "ログファイルの読み込みに失敗しました"; exit; } // イベントが発生するまでループ while (($events = inotify_read ($fd)) !== false) { // ログファイルに何か書き込まれたときはアラートのメールを発砲 foreach($events as $event) { if (!($event['mask'] & IN_MODIFY)) continue; // ログファイルに書き込まれた内容を取得 $log = stream_get_contents($fp); // メールを送信 mb_send_mail(MAIL_TO, "WARNING", $log); break; } } inotify_rm_watch ($fd, $watch_descriptor); fclose($fp); ?>

inotifyでは、イベントの種類をキャッチすることはできますが、何が書き込まれたのかなんかはわからないため、別でファイルを開いておいてその内容を取り込むようになっています。


テストをしたければ、上記スクリプトの実行中に


echo "DBが停止しました" >> /var/log/error.log

見たいな事をしてみれば、その内容がメールで送信されるはずです。


なお、実運用に耐えうるスクリプトにはなっていないのであしからず。
例えば、ログファイルに続けざまに書き込みが行われたら大量のメールが送信されることになります。
障害時には、そのように大量のメッセージを出力するということがよくあったりします。


あと、ログファイルにlogrotateなどをセットしておくと、そのローテーション実行時に場合によってはログファイルを見失うことになります。

(昔のログファイルを削除して、新規に作り直すような設定をしておいた場合)


注意)

現在のPECLのinotifyパッケージは、1つのイベントしか監視できないようです。

監視するイベントは、inotify_add_watch 関数で追加していきますが、複数追加しても最後にセットした監視イベントしか拾わなくなります。