Simple HTTP Checker – シンプルなHTTPサーバの監視ツール

WEBサイトの死活監視のサービスはいろいろあるけれど、どれも監視できるURL数に制限があったり、制限を解除してもらうには費用がかかるわけなのだけれど求める以上の機能があってちょっと高くついたり。なかなかピッタリこない。

仕方がない、さくらのレンタルサーバが1つあるのでそこで監視するようにしてみよう。社内のサーバ監視をしているNagiosは便利なんだけれど、さくらの500円/月のレンタルサーバに入れるのはちょっとアレだし、必要最小限のスクリプトをPythonで書くことにする。

求めた要件としては、

  • HTTPで接続できなかったらメールでお知らせが届く。
  • 一回メールを送ったら、しばらくはメールしないで欲しい。
  • HEADとGETとPOSTに対応。
  • HTTPステータスコードだけをチェックする(レスポンスに含まれるコンテンツのチェックは不要)。
  • 設定ファイルで複数のURLをまとめてチェックして欲しい。
  • (さくらなので)常駐するデーモンではなくて、単独のコマンドで実行できる(cronで繰り返し実行)。
  • お知らせメールはcrontabのMAILTOで送るからstderrに出力してくれればいい。
  • OKだったときのログはstdoutに出力してくれればいい。
  • スクリプトは1ファイルで完結させる。
  • Python2.4以降、標準ライブラリだけで動く。

続きを読む

さくらインターネットからLinodeへ移行した理由

さくらインターネットで借りている専用サーバからLinodeへ移行した。
現時点では一部のサイトは両方のサーバにアクセスがあるけれど、移行作業自体は全て完了した。

さくらの専用サーバは、約4年間順調に稼動している。でもいろいろ不都合も出てきた。

  • ロードアベレージが高い状態がずっと続いている(原因はWEBサイトへのアクセスが増えているから)。
  • 4年経ったマシンのハードウエア障害がそろそろ心配。
  • 管理するドメインの数が専用サーバに付いているDNSサービスの制限10件を超えた(DNSは自前で運用したくないのに仕方なく)。

といった感じの不満と不安があった。そろそろ仮想マシンベースの安いサービスが出ないものかと半年ほどウォッチしたけれど…
続きを読む

営業日を判断するOracle PL/SQLパッケージ

現実逃避から少しでもエンジンがかかるように、コードを公開してみよう。

OracleのPL/SQLで書いた営業日/稼働日判定用のストアード・パッケージ。いろいろと調べてみたのだけれど、ぴったりくるものが見当たらなくて書いてみたもの。まだリリースまで時間があって、それほどテストされていないけれど、そんなに複雑でもないので大丈夫ではないかと。IS_WORKDAYがCHARを返すのはカッコ悪いけれど、いろいろあってこういう仕様。直すのは簡単なので気になる人は直してください。

仕様としては、1)土曜日と日曜日は営業日じゃない、2)休日テーブル(holidays)に日付があったらそれは休日。wkd_pkg.is_workdayを直すことで、土曜日は営業日にしたり、水曜日を休日にしたりできるので、その辺りは適当に。仕様はExcelにあるworkdayとnetworkdayを参考にしているけれど、厳密には一緒じゃない(と思う)。

このパッケージには4つの関数があります。1つはオーバーロードしたものなので、実質的には3つ。

1. FUNCTION WORKDAY( i_startdate IN date, i_days IN number) RETURN DATE;
開始日からi_days営業日後の日付を返す、 i_daysが正数なら未来、負数なら過去、開始日は数えない。

2. FUNCTION IS_WORKDAY( i_date IN date) RETURN CHAR;
指定した日付が営業日ならYを返す。営業日じゃなければNを返す。

3. FUNCTION NETWORKDAY( i_startdate IN date, i_enddate IN date) RETURN NUMBER;
開始日と終了日の間に含まれる営業日の日数を返す。日数には開始日と終了日も含まれる。
続きを読む

Twitterがクラックされてダウン

今回のダウンはいつもの、過負荷でダウンとは違う模様。
TechCrunchのこの記事 Twitter Hacked, Defaced By “Iranian Cyber Army” (Developing)が詳しい。

つぶやきたいのにつぶやけないときはどうするかなあと、FriendFeedで、つぶやいてみたら、こっちはサクサク動いて気持ちいい。

ダウン直前に、Twitterで新しいアカウントをとったのだけれど、14:57にそのアカウントのWelcomeメールが来て、さあ、つぶやこうかと思ったら全然つながらず。15時ちょうど?時限装置か。
まあ、もう少しいろいろ決まってからまたこの件はつぶやけってことか。

ところで、何をクラックされたのかまだわからないからあれだけれど、Twitterで使っているパスワードを他のサイトのと使いまわしているんだったら、Twitter以外の他のサイトのパスワードは、すぐに変えておいたほうが良さそう。DNSだけだったりすれば心配ないかもしれないけれど、まあこうなるとしばらくは何も信用できないな。

とにかくTwitterはなかなか楽しいけど、けっこう危ういサービスだなあというのが実感。

Ubuntu 9.04 serverを9.10へアップグレード

そろそろ、9.10も落ち着いてきたかなということで、Ubuntuサーバを9.04から9,10へアップグレードしてみる。
アップグレード方法は、Debianみたいにsources.listを書き換えるんじゃなくて、do-release-upgradeコマンドで実施(Debianも最近は違うんだろうか?もしかして)。

コマンド実行から、アップグレード、再起動まで概ね20分ぐらい。まあ簡単だったんだが、キーボードの選択画面がヒドい。ずらずらとメーカー名とキーボードタイプのリストが表示されて、その中から選べとでる。まあ、サーバ版なんだから、管理者はそのくらいわかるだろっ?ってところか。
僕にはわからず、結局、”Do not configure keyboard; keep kernel keymap”を選択してインストールを完了後に、dpkg-reconfigure console-setupでJapanに再設定。これをやらないと、コンソールで使うときになんだかおかしなことになっていた。USキーボードになってるのかな。そこまでは調べていない。

このUbuntuサーバは、VMware上で動いている仮想マシン。NagiosとMRTGを使って他のホストを監視している。NagiosもMRTGも設定をいろいろ書き換えているので、アップグレード中の設定を新しく書き換えるか?という質問には、既存の設定を使うと選択。これで、NagiosもMRTGもApacheも特に設定を直す必要もなく、動いている模様。これでとりあえず、完了。

あと、この、do-release-upgrade(update-manager-coreパッケージに含まれる)を見つけるのに、30分ぐらいかかった。Googleで検索しても、Desktop版のアップグレード方法ばかりがヒットする。
結局、Ubuntu Server Guideで見つける。これは、まあ、当たり前といえば、当たり前で、誰も悪くない。僕が悪い。最初にさがすべきところ。なんでも検索するんじゃないってことだな。

そうそう、一つ追記。
アップグレード後に、_netdev付きでnfsマウントしているボリュームをマウントしてくれなくなった。ネットワーク接続とマウントのタイミングがおかしいのかなんなのか詳しくは調べていないけれど、どうも不具合のように見える。とりあえずは、/etc/rc.localにmount -aを書いている。そのうち、アップデートで治るのかもしれない。

Flickrから自分のアップロードした写真を全部ダウンロードする

ふと思い立ってやってみようとしたけれど、これが結構大変。一括してダウンロードする方法がFlickrの機能としては見当たらない。
誰か他の人の写真じゃなくて自分のアップロードした写真ぐらい、機能があってもよさそうだけれど。
検索してみると、いくつかソフトウエアがあって、2つ試してみたけれど、認証に失敗して先に進めないのがひとつと、そもそもインストールできないのがひとつ(.Net Frameworkを使うやつ)。
意地になってしまって、flickr.pyを使ったPythonスクリプトを書いてみた。
Pythonとflickr.pyがあれば使えます。ユーザID(ユーザ名じゃない)、API KeyとかSecretとか難しいのが必要。やっぱり、Flickr自身で実装しないと普通の人には難しいんじゃないか。

下のスクリプトをローカルに保存して、設定を3ヶ所書き換えて(ユーザID、API Key、API Secret)、flickr.pyを同じディレクトリにおいて、実行するとサブディレクトリを作成してその中にズンズンダウンロードします。
続きを読む