2008年8月31日日曜日

IISのログファイルをタスクで月ごとに圧縮する

WindowsServer2003 に付属のHTTP他もろもろサーバ、IIS6を長いこと動かすとログがたまってくる。logrotateみたく圧縮ローテーション&自動削除ならいいのに。
 
サイトが少しならいいけど、サーバに何十とWEBサイトを作るとログファイルは結構な量になるので、容量はかさむしNTBackupにかかる時間は延びるし運用上よろしくない。
 
ということから作成して使っていたVBScriptを公開する。目的の大半は自分があとで使いまわすためですが、興味がある人は使ってみたらよいと思います。
WindowsServer2008+IIS7の環境でも動作することを確認。これでまだしばらく使い物になる。
cabarc.exeは取りあえずMicrosoft Cabinet SDKのものを使った。2008のサポートツールにも入ってるのかな?

 
 

一応、スクリプトの使い方と処理内容を記述しておく。
 
使い方は叩くだけ、丸々一カ月分/約30のログファイルが1つの cab ファイルにまとまる。
ログファイルの場所は特に指定しないでよい。
 
処理は下記の流れでやっている。

  1. WMIでIISのWEBサイト設定から、ログファイルの保存フォルダを取得

  2. 先月分のログファイルがあるか確認する
    例) 現在時刻が2008年8月に実行した場合、"ex200807*.log" に該当するファイルを探す

  3. 全部cabに圧縮して、成功したら元のログファイルを消去

  4. 1から3の処理をIIS上のWEBサイトすべてに対して繰り返す


 

なお、このスクリプトを使うにはサポートツールがいるので事前に導入しておく必要がある。
 
ほか、FTPのログも対象にしているのでFTPのサイトがないとエラーになる。IISのFTPを使っていない場合はFTPのところは消すべし、"objFTPsvc" の定義と、2つ目の大きなループを消せばOK.
 
 

以下スクリプト、拡張子VBSで保存して実行する。

2008年8月28日木曜日

ヤマハ ギガアクセスVPNルーター 『RTX1200』を発表

2008年8月27日
ヤマハ株式会社(本社:静岡県浜松市中区中沢町10-1、社長:梅村充)は、企業向けVPNルーター「RTXシリーズ」の新モデルとして、企業ネットワークの光ファイバー回線によるギガアクセス化へ向けたソリューションを提案する、ヤマハ ギガアクセスVPNルーター『RTX1200』を10月下旬から発売します。
引用元:ヤマハのプレスリリース

 
 

RTX1000、RTX1100 と結構お世話になっているシリーズが新しくなった。ただし RTX1100 は継続して売ると。
プレスリリースでRTX1100と比較しているけど、完全に性能アップしたマイナーチェンジモデルというように見えるが。コンフィグが少し違うとか、交換のニーズとかの絡みでしょうか。
 

LAN1のポート密度が上がって8Pに、ほかRTX3000みたいにポートが前面に来ているのでだいぶ見た目が違いますね。今までもRTX1100 はどうせ後ろ向きにしか使わなかったので、これは私にとってはいい傾向。
 
 
 

しかし、RTX1500 ってのが既にあるのに RTX1000 → RTX1100 → RTX1200 としてしまって大丈夫なのだろうか。
1300あたりから刻んでいくべきですよね、RTX1310 とか RTX1300-R2 とか。

Nagiosのプラグイン、check_httpでサーバ証明書の有効期限チェック

サーバ証明書の更新って忘れます。反論はあるかもしれませんが私が忘れるので忘れるということでお願いします。
ぜひとも管理台帳を眺めなくとも機械的に通知してもらいたい。更新の案内はもちろん来るけど、そうしょっちゅう来ないし見落とすこともある。
 

Naigosのプラグイン "check_http" はサーバ証明書の有効期限をチェック、Warningを返すことができます。
まずは直接たたいてみます。
{NagiosプラグインDir}/check_http -H {調査対象ホスト名} -p {使用ポート} -C 60

更新まで60日を切ったら警告します、"-C" (大文字C)オプションを指定することで証明書を監視、引数に数字で警告する有効期限の残り日数を指定できます。
ホスト名はそのまま、ポートは大体 443 ですね。
 
 

command.cfg で定義する場合は
define command{
command_name check_http_cert
command_line $USER1$/check_http -H $ARG1$ -p $ARG2$ -C 60
}

 

こんな感じですね。ちゃんとアラート通知間隔を調整し、1日一回程度警告されるようにしておきましょう。

2008年8月21日木曜日

syslog を rsyslog に入れ替える - CentOS5

ちょっと前にCentOS5.2 がリリースされたのですが、新しく追加されたパッケージの情報に rsyslog (rsyslogd) があった。
CentOS5.2 以降(Redhatがそうなったということなのですが) では これまでの syslog (syslogd) がスタメンを外されて rsyslog が標準の ログ収集デーモンとして採用ということらしい。
 

なので手元のCentOS5 で動いていた syslog を rsyslog に入れ替えてみることにした。
 
多少細かい設定は こちら→ rsyslog.confの設定項目 参考になります。
 
 

"yum install rsyslog" とすると "rsyslog-2.0.0-11.e" が引っかかった、ついでにカーネルロガーも必要バージョンにアップデートされる模様。
rsyslog公式 を見ると、 rsyslogd は現在バージョン2とバージョン3 の2系統がある模様、yumでは v2 が入るけど、どう違うのか。
 
ざっとドキュメント見たところ v2 はほぼ従来の syslog 互換で v3 は機能のモジュール化をしている?
v3 で置き換える場合はコンフィグに従来のsyslogでやっていた機能を提供するモジュールを組み込むよう記述すべしとのこと。
 

ドキュメントからちょっと引用、まあ大体こんな感じ
Rsyslogd understands stock syslogd syntax, so you can simply copy over /etc/syslog.conf to /etc/rsyslog.conf. Note since version 3 rsyslog requires to load plug-in modules to perform useful work
引用元:公式のインストールガイド

 
 
 

さてrsyslogdをインストールしたらコンフィグを確認してみる、"/etc/rsyslog.conf" と "/etc/sysconfig/rsyslog" だ。
ついでに従来のsysylog.conf や syslconfigのsysylog と比較の為両方書き出してみる。
 

"/etc/syslog.conf" の中身、今回のサーバでは全くいじってないのでデフォルト。
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
 
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
 
# The authpriv file has restricted access.
authpriv.* /var/log/secure
 
# Log all the mail messages in one place.
mail.* -/var/log/maillog
 
 
# Log cron stuff
cron.* /var/log/cron
 
# Everybody gets emergency messages
*.emerg *
 
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
 
# Save boot messages also to boot.log
local7.* /var/log/boot.log

 

"/etc/rsyslog.conf" の中身(yum でインストールしてデフォルト)
# Log all kernel messages to the console.
# Logging much else clutters up the screen.
#kern.* /dev/console
 
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none /var/log/messages
 
# The authpriv file has restricted access.
authpriv.* /var/log/secure
 
# Log all the mail messages in one place.
mail.* -/var/log/maillog
 
 
# Log cron stuff
cron.* /var/log/cron
 
# Everybody gets emergency messages
*.emerg *
 
# Save news errors of level crit and higher in a special file.
uucp,news.crit /var/log/spooler
 
# Save boot messages also to boot.log
local7.* /var/log/boot.log

両者特に空白の長さ以外には違いがない、問題もなさそう。
 
 

"/etc/sysconfg/syslog" の中身、これもデフォルト
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -r enables logging from remote machines
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"
#
SYSLOG_UMASK=077
# set this to a umask value to use for all log files as in umask(1).
# By default, all permissions are removed for "group" and "other".

 

"/etc/sysconfg/rsyslog" の中身、yum でインストールしたまま
# Options to syslogd
# -m 0 disables 'MARK' messages.
# -rPortNumber Enables logging from remote machines. The listener will listen to the specified port.
# -x disables DNS lookups on messages recieved with -r
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-m 0"
# Options to klogd
# -2 prints all kernel oops messages twice; once for klogd to decode, and
# once for processing with 'ksymoops'
# -x disables all klogd processing of oops messages entirely
# See klogd(8) for more details
KLOGD_OPTIONS="-x"

こちらはUMASKの記述がなくなってる、デフォルトで077になっているんだろうか。あとちょっと注釈が丁寧。
UMASKはローテーションが起こったときに分かると思うので後で確認の予定。
 
 

まあ取り立てて大きく違いなしと確認したので、そのままsyslogdを停止してrsyslogd を起動する。
メールなどのログが従来どおりの場所に記録されているのを確認、ちゃんと動作しています。
 
 

自動起動を入れ替えて、 syslogd と rsyslogd の差し替え完了。
chkconfig syslog off
chkconfig rsyslog on

 
 

あとはローテーションかなと "/etc/logrotate.d/syslog" を編集しようと開いてみると、
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}

きっちり先回りで設定済みだった。むむ。。
 
 

念のため"rpm -ql rsyslog" でrpmパッケージを確認すると、ちゃんと "/etc/logrotate.d/syslog" がいてる。
 

結局のところ、ただ差し替えるだけならなんの苦労も無いようですね。

2008年8月20日水曜日

Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)

Monitオフィシャルサイト
 

MonitのWEB管理画面


前回の記事(3)からの続き、一連の投稿はここでいったん区切り。
最後はMonitの運用管理について。
 

Monit動かしたはいいがどうやってメンテをすればよいのか。
WEB管理画面をブラウザで開くと下画像のような感じ。
[caption id="attachment_567" align="alignnone" width="300" caption="画像:MonitのWEB管理画面"]画像:MonitのWEB管理画面[/caption]
 
メイン画面では監視対象としているプロセスの一覧と現在の様子がわかる、プロセス名をクリックすると詳細画面へ遷移。
 

[caption id="attachment_568" align="alignnone" width="300" caption="画像:プロセス詳細画面へ遷移した様子"]画像:プロセス詳細画面へ遷移した様子[/caption]
 

画面下のボタンはそれぞれ、
[Start service] [Stop service] [Restart service] [Disable monitoring]
の4つ、それぞれ文字どおりの機能を提供してます、監視を一時的に無効するためにDisableボタンを押下すると、監視が無効になって、[enable monitoring](だったかな…)ボタンにかわります。
コンフィグ変更などのメンテナンス時はここから監視状況を操作できて楽ちん。
 
 
しかしいくら便利だからと言って、WEBにサービス停止するようなStopボタンをさらしたくない。というひとはコマンドラインで管理するとよいです。
 
 
 

Monitのコマンドラインインターフェース


はじめに断わっておくとmonitの内蔵WEBサーバは止められません。未確認ですがWEBサーバを止める=管理ようのコマンド群も動作しない模様。
使用したくない場合はアクセス制限をかけるほかないみたいです。
 
 

ということを踏まえて管理用コマンド一覧、 基本的には monit + オプション という使い方をします。
 



























表:Monitコマンドライン管理一部抜粋
コマンド機能・説明
monit -h
ヘルプを表示する
ある意味これですべて出てくるんですけどね
monit summary
監視対象一覧表示
ステータス表示
管理WEBの表紙みたいな内容が得られる
monit stop [プロセス定義名]

monit start [プロセス定義名]
対象プロセスの起動・停止
監視対象のプロセスを「監視除外して停止」
または「監視を有効にして起動」する
monit monitor [プロセス定義名]

monit unmonitor [プロセス定義名]
対監視対象のプロセスの監視の有効・無効を切り替える
monit reload
monitの再読み込み
monitの設定変更などを行った場合
これで反映させる

 

これで一通りの操作ができる。
 
 
 


以上、4回にわたってMonit紹介しました。


Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)

OutlookExpress、WindowsMailでプロトコルログを記録する

メモエントリ
 
 

メール送受信のトラブルを調査する場合、メールクライアントのログも重要です。
Thunderbird、Becky! や Sylpheed などWindows標準でないメールクライアントは分かりやすい所にログの設定があるのでまあ分かるだろうとして割愛。
 
この記事ではWindows標準メーラーについて、WindowsXP以前の OutlookExpress 、Vistaから搭載の WindowsMail でプロトコルログを採取する設定をメモ。
設定箇所が分かりにくい上に、ログを気にするような人はWindows標準以外(前出のメーラ達)を使うので意外と知られていない気がする。
 
 

設定箇所


OutlookExpress または WindowsMail を起動して、
・上部のファイルメニューから[ツール] → [オプション]
・オプション設定から [詳細設定] → [メンテナンス]
と進む。
 
下画像のような設定項目が現れる、例は WindowsMail だが OutlookExpress でも見た目以外はほぼ同一。
 

[caption id="attachment_565" align="alignnone" width="500" caption="画像:WindowsMailでの設定箇所"]画像:WindowsMailでの設定箇所[/caption]
 

赤枠の 「□ メール」 チェックボックスを有効にするとロギングが有効になる。
保存先はオレンジ枠の「保存フォルダ(F)」で設定されている場所。
 

POPログ、SMTPログ と別々のファイルでできますが、ローテーションなどはしてくれないので調査が終わったら無効にしておくこと。

Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)

Monitオフィシャルサイト
 

ローカルプロセスの監視をする


前回の記事(2)からの続き
 

とりあえず起動するようになった monit にサービス・プロセスの監視をさせてみる。
監視対象のサービスごとに(2)で作成したディレクトリ、 "/etc/monit.d/conf.d" に "XXXX.conf" ファイルを作っていきます、Monitでインクルード指定しておけばリスタートで監視が始まる。
ではサンプルを
 

Postfixで提供するSMTPを監視、サーバレスポンスをチェックつき


メールは配送も受付も止まるといやなので監視したい。
 
"postfix.conf" とでもして下記内容で保存する。

[sourcecode language='bash']
check process postfix with pidfile /var/spool/postfix/pid/master.pid
group mail
start program = "/etc/init.d/postfix start"
stop program = "/etc/init.d/postfix stop"
if failed port 25 protocol smtp then restart
if 5 restarts within 5 cycles then timeout
[/sourcecode]
 

さてこれでpidファイルの内容から該当のpidプロセスが生きているか監視する、pidが変わった時も教えてくれる。
で、ローカルの TCP/25番 宛にSMTPプロトコルによるサービス状態確認を行う、SMTPのログファイルを見れば繋ぎに来ているのがわかります。
※60秒ごとにmonitの確認が来てログに残るとうっとおしい場合は動作確認したら除外してしまえばよいです。
 

これでPOSTFIXを止めてみるとアラートメールを受け取る頃には勝手に復活している。
一応5回連続でリスタートがかかるようなら、何かしらおかしい ということでその後のリスタートは行わない。
 
 
アプリケーションプロトコルによるサービス状態の確認は HTTP や SSH など主要なプロトコルに対応しているほ他、 OverSSL/TSL 用にポート指定の所で "TYPE TCPSSL" といったオプションが使える。
もっと応用した使い方は公式ドキュメントのサンプルが詳しいです。
 
 

initからの起動


監視対象プロセスの起動がDaemontoolsのようにMonit経由ではないので、Monitプロセス自身がいなくなると監視止まってしまうがな。
ということで monit の起動・動作監視を、全てのプロセスの親である init にやらせます。
起動スクリプトはこれ以降使いません、chkconfig も monit は off です
 
 

まず monit側 で準備、(2)でつくった base.conf をちょっと変更
# set init
↓コメントを外す
set init

 

で、init の設定ファイル "/etc/inittab" を編集、 公式マニュアルに "-I" オプションを使えとあるのでそのように。
###最終行に追記します
mo:2345:respawn:monit -Ic /etc/monit.conf

 
ランレベル2から5で monitを起動、いなければ立ち上げる という設定です。
 

で、monitが停止していることを確認したら、initの再読み込みを下記コマンドで行います。

# telinit q

 
 
これで自動的にmonitが起動したままになります、kill で何度プロセスを停止しても蘇りますので試してみましょう。
 
 
 

次回、monit管理用のWEBとコマンドラインからの管理を記事にしてmonit紹介終わりです。
 
 



Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)

2008年8月17日日曜日

Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)

Monitオフィシャルサイト
 

インストールと基本設定、起動


前回の記事からの続き
 
Monitのインストールします、お手軽さ演出のためRPMから。
RPMパッケージはDAGで配布されているので必要なパッケージをダウンロードして使います。
yumでやりたい場合は「DAG yum」でGoogle検索したらすぐできます、yumが検索するリポジトリとして一時的に追加しましょう。
 


 

あとはrpmコマンド、yum install でインストールできます。
 

以下、monitのバージョンは 4.9-2 を使用しています。原稿書いてる時点では5がベータリリース中で、4系の最も後の版。
 
 

インストールした後は下記をチェックしておくと良。
 



























表:設定など、主だったファイルとディレクトリ
ファイルまたはディレクトリ説明備考
/etc/monit.conf設定ファイルデフォルトではInclude文のみ有効
/etc/monit.d/コンフィグのインクルード先最初は空っぽ
/etc/rc.d/init.d/monit起動スクリプト普通にデーモンとして動かす場合に
/usr/bin/monit本体バイナリinit起動のときにパスが必要

 
 
 

さて、まずはmonit.confファイルに基本設定をしたいところだが、rpmについてくるmonit.confファイルは ほとんどがコメントアウトされたサンプルで、有効なのは下記1行のみとなっている。
include /etc/monit.d/*
 
こういうときは折角なのでディレクトリ別にで役割を決めてコンフィグの収納をしておきたところ。
私は下記のような感じで区切ります。この例ではデフォルトのmonit.confは一切いじらない。
 





















表:コンフィグファイルの目的別収納とインクルード例
ファイルまたはディレクトリ説明
/etc/monit.conf設定ファイル:基本設定ファイルのインクルード文のみ
include /etc/monit.d/*
(新設)/etc/monit.d/base.conf設定ファイル:基本設定の記述とサービス別コンフィグのインクルードを記述
基本設定を記述して、最後にinclude文
include /etc/monit.d/conf.d/*.conf
(新設)/etc/monit.d/conf.d/*.confサービス別のコンフィグ。ファイルマスクを*.confとして、リネームで簡単に無効化できるようにする
ディレクトリは作る
場所は一応どこでもよい
(新設)/etc/monit.d/pem/管理WEBをHTTPSで立てる際の秘密鍵セット、これも場所は別にどこでもよいし既存のセットを流用してもよい

 
 

で、base.conf はどのように書くか。
サンプルのコンフィグファイルをコメント付きで、詳しいオプションなどは公式ドキュメントを見ましょう

[sourcecode language='bash']# 秒単位で監視間隔を指定 これは60秒ごと
set daemon 60


# memo:init起動の時はset init を有効にする
# set init


# ログの設定、syslogを使う場合
set logfile syslog facility log_daemon


# 送信用メールサーバの設定、認証は公式ドキュメント参照
set mailserver [送信用メールサーバ]
set alert [アラート通知先メールアドレス] not on {INSTANCE}
# set alert [メールアドレス複数記述可] not on {INSTANCE}
# memo:not on {INSTANCE}はmonit自身の動作を除外


# アラートメールの内容調整
set mail-format {
subject: monit alert-- $EVENT $SERVICE @$HOST
}

# 内部WEBサーバ設定
set httpd port 2812
# 管理UIをHTTPSで立てる
SSL ENABLE
PEMFILE /etc/monit/pem/monit.pem
use address 0.0.0.0
allow localhost
allow [操作を許可するIPアドレス]
# HTTPの認証を使う ユーザ名とパスワード
allow admin:monit


# ローカルのhda1容量監視
check device rootfs with path /dev/hda1
if space usage > 60% 5 times within 15 cycles
then alert
else if passed for 10 cycles then alert
if space usage > 80% for 5 cycles then alert
else if passed for 10 cycles then alert


# conf.d のインクルード
include /etc/monit.d/conf.d/*.conf

[/sourcecode]

コンフィグ中で指定するpemファイルは 過去記事:「OpenSSLでお手軽に自己証明書(1)」 でつくるとよいです。
 
 
まずMonitを動かすだけならこれでOK、サンプル内の [カッコ部分] は置き換えの必要があります。
このコンフィグでは内部WEBサーバをSSLを使用するように指定、ローカルの hda1 のリソースを監視して、メールサーバからアラートメールを送る設定になっています。

 
起動スクリプトからmonitを起動すれば、WEB管理画面につながるはず。
https://[サーバのIPアドレス]:2812/
をWEBブラウザで開く。
認証が入るので 「ユーザ名:admin / パスワード:monit 」でWEB管理が使えます。
 
 
次は適当なサービス監視と、init起動について。
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
 
 



Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)

Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)

Linuxサーバの話。
シンプルにサーバ上のプロセス監視をしたければ「Monit」が最近のお気に入りです。
 
プロセスの自動再起動とかは、「qmail+FreeBSDでdaemontoolsを使う」といった組み合わせをしたことはありますが、どうにもプロセスの堅牢化まで手順が多くて大変でした。
 
この前CentOS5でちょっと止まりにくい(止まってもすぐわかる)サーバを作らないといかんとなったので、外部監視はNagios、内部リソース情報取得にNRPE、そしてプロセスの死活監視をMonitでやって見たところMonitの使い勝手が思いのほか良かったので使い方を記事にしておく。
 

Monit公式サイトとマニュアルドキュメント
http://www.tildeslash.com/monit/
http://www.tildeslash.com/monit/doc/


 

    Monitによるローカルプロセス監視の特徴のうち、お気に入り&気になるポイント一部抜粋
  • 監視対象プロセスの起動手順に変更の必要がない
    Monitは単体で完結して各監視、アラート通知をしてくれます。メールサーバは適当なものを指定する。

  •  
  • 起動および停止スクリプトの指定をしておき、対象プロセスの起動・停止が可能
    止まっていたらアラートと同時にプロセスの起動ができる、起動したら次の監視タイミングで復帰の通知
    また、指定回数連続して起動失敗したらあきらめてくれるので無限ループにはならない

  •  
  • PIDファイルを指定しておけばPIDとプロセスを紐づけし、変更を検知できる
    監視対象が「プロセス名+PID」の組み合わせになるのでより細かいプロセス監視ができる。
    手動でサービスリスタートが発生した場合などにアラートをあげることができる

  •  
  • 簡易サービスチェックが可能
    HTTPなど代表的なプロトコルはサーバレスポンスも見るほか、SSL可のTCPセッションで監視可能
    結果NGなら再起動などの条件指定

  •  
  • initが監視するプロセスとして、リスポーンオプションを指定した起動が可能
    これのおかげでとにかく固い印象、initがmonit自身を監視してリスポーンする。initの停止=サーバシステムの停止なのでそれの検知は外部監視でやっている。

  •  
  • 依存関係登録可能(試してない)
    公式のドキュメントより、具体的には「oracleリスタートしたらapacheもリスタートする必要があるよね…」という場合にどうぞという機能らしい

  •  
  • 関連するバイナリやコンフィグファイルやの改ざんチェックが可能(試したけど使わなかった)
    依存関係の機能関連として、プロセスが依存する対象にファイルチェックを指定できる。改ざんがあったらプロセスを止めるといった利用ができる
    これは単純に偉いと思うがメンテナンスしにくくなるので使わなかった。


 
 
さてそんなMonit、とりあえずの監視などは簡単に構築できるので公式のドキュメントでもいいが、日本語で見たい時は下記サイトがお勧めです。
内容は少し前のバージョンですがとても詳しい。使うだけでなく理解したい場合はこちらへ。

 
 

このブログではMonitをrpmまたはyumからインストールしてHTTPSのWEB管理画面、メール通知設定と監視設定を記事にします。
しかし長いので記事を3つくらいに分ける。
 

続きはこちら → Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
 
 



Monitでサービス・プロセス監視、止まったら勝手にリスタート(1)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(2)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(3)
Monitでサービス・プロセス監視、止まったら勝手にリスタート(4)

2008年8月14日木曜日

MicrosoftDNSサーバのイベントID4515を解消する

WindowsServer2003で構成されたActiveDirectoryのドメインコントローラで、DNSが起動する際にイベントID4515を記録するときがあります。
関連して色々と調査したので情報エントリ、関連リンク先を一通り理解すればイベントID4515が発生する原因は全部潰せるとおもいます。
 
ActiveDirectoryのスキーマに精通してLDAPの理解があれば苦労しなかったのでしょうがなかなかそうもいかない…
イベント ID : 4515
ソース : DNS
種類 : 警告
説明 : ゾーン example.local はディレクトリ パーティション MicrosoftDNS から既に読み込まれましたが、ディレクトリ パーティション DomainDnsZones.example.local でこのゾーンの別のコピーが見つかりました。DNS サーバーはこのゾーンの新しいコピーを無視します。この競合をできるだけ早く解決してください。
※サーバイベントログより引用

 

あるお客さんの環境で発生したので、これを下記マイクロソフトのKBをを参考に解消しようとするとどうも細部が違う。

Windows Server 2003 の DNS サーバー ログにイベント ID 4515 が記録される
http://support.microsoft.com/kb/867464/ja


 

ADSIEDITを使用して ForestDnsZones と DomainDnsZones を参照したが、重複する情報は特にない。イベントログの文言も今回のケースとは少し違った。
 














表:この環境で確認できた状況
確認先状況
ForestDnsZonesサブドメイン「_msdcs.example.local」のゾーン情報が入っている
DomainDnsZonesexample.localのゾーン情報が入っているが情報が古い

 
結局、MicrosoftKBの解説はあくまで2003仕様のActiveDirectoryの話で、今回のケースでは過去にWindows2000Serverで構築されていたドメインとWindowsServer2003の”新ドメイン”があり、それらを統合する為に色々と相互接続設定をを試した名残があったのだろうということに落ち着いた。
 
 

以下調べたことをつらつらと記述。
 

DNSのActiveDirectory統合ゾーンがカギ


ActiveDirectory(以下AD…)で使うDNSはゾーン情報をAD内に持っています。
DNS(Domain)用のアプリケーションディレクトリパーティションがあって、それが「ForestDnsZones」と「DomainDnsZones」、Domain~ のほうは2003用ADにドメイン構築した際の「名前そのままゾーン」の保管先として、 "example.local" のリソースレコードが並んでいる。
Forest~ のほうは"example.local"ドメイン作成時に自動的に作られる委任サブドメイン"_msdcs.”ゾーンが、これにはSRVレコードが含まれる。
"_msdcs.”はアイランド問題の解消のため設置、フォレスト内のドメインコントローラに一意な識別子を設定する。
 

しかしこれらはWindows2000のADスキーマにはいない、もともと2000のADが抱えていた問題解消+いろいろ拡張性を考慮して改良したから。
 

関連用語のMS公式解説 (※解釈おかしい箇所があるかも知れないので要確認)
アプリケーションディレクトリパーティション(リンク:TechNet)
Windows2000ADのアイランド問題(リンク先の中段くらい)
ゾーン レプリケーション スコープ(リンク:TechNet)

では2000のADでゾーンはどこにいたのか探す。
WindowsでDNSの管理コンソールを立ち上げて、ActiveDirectory統合ゾーンのプロパティを見たらゾーンレプリケーションスコープの選択がある、選択肢は下記のリンク。
 


 

これがADの保管先と対応しているので表にしてみた。

















表:ADスキーマとAD統合ゾーンDNSとの関係
ADエントリゾーン情報のあるDN
/対応するゾーン レプリケーション スコープ
ForestDnsZonesCN=MicrosoftDNS, DC=ForestDNSZones, DC=example, DC=local
/ Active Directory フォレスト内のすべての DNS サーバー
DomainDnsZonesCN=MicrosoftDNS, DC=DomainDNSZones, DC=example, DC=local
/ Active Directory ドメイン内のすべての DNS サーバー
SystemCN=MicrosoftDNS, CN=System, DC=example, DC=local
/ Active Directory ドメイン内のすべてのドメイン コントローラ

 

統合ゾーンDNSの3つ目の保管先、"CN=MicrosoftDNS, CN=System"


SystemのMicrosoftDNSを調べると、ちゃんと "example.local"ゾーンが最新の状態で保管されている。
ちなみに "CN=System" の中身は DNを"DC=example, DC=local" として開く=ADSIEDITのデフォルトで開いているDNから簡単にたどれる。
さらにちょっと寄り道すると、実際のADのレプリケーションでレプリカされるのはこの情報で、ADのDNSはゾーン転送とかするわけでなく、ADのアプリケーションディレクトリパーティションを読み込む・更新を適用する、という動作をしている。
 

ということで上記ディレクトリパーティションはWindowsのDNSサーバが起動する際にゾーン情報を「System」→(「ForestDNSZones」→「DomainDNSZones」※カッコ内は未確認)という順番で読み込んでいるんだろうなと。
 

ほか今回確認した時点ではSystemには「逆引きDNSゾーン」、と「RootDNSサーバ達」のゾーンが格納されていた。
 

DNS管理コンソールで確認すると、正引き、逆引きともに ゾーン レプリケーション スコープ は「Active Directory ドメイン内のすべてのドメイン コントローラ」となっていた、上記対応表どおりだ。
 

なおRootDNSサーバゾーンは各DNSサーバサービス固有のものなのでSystemでいい。
 
 


実際どれを消したらいいのか


ここまでわかれば後は簡単だった。
「DomainDNSZones」の"CN=MicrosoftDNS"から"example.local"ディレクトリを削除してDNSを再起動、DNSイベントログにID:4515の警告はもう出ない。
 

結局はイベントログの "説明:" セクションを読み返してみると、ログ様の仰せのとおりだったと事後になって理解。警告・エラーを調査すると結局はいつもこうなりますね。
 
 

すでに2000Serverを使ったドメインコントローラなくなっていたので、そのあと正引き、逆引きゾーンの ゾーン レプリケーション スコープ を「Active Directory ドメイン内のすべてのドメイン コントローラ」から「Active Directory ドメイン内のすべての DNS サーバー」 に変更した。
※2000Serverが残っている場合もADスキーマ更新で行けるようです。
 

作業後のディレクトリパーティションとゾーン情報は下記になった。

















表:作業後のゾーン格納パーティション
ADエントリ保持しているゾーン情報
ForestDnsZones"_msdcs.example.local"
DomainDnsZones"example.local"
その他逆引きゾーン
System. (ルートDNSサーバの一覧)

 
 

まるまる当てはまる事例は少ないかも知れませんが、ID:4515で「ForestDNSZones」、「DomainDNSZones」、「MicrosftDNS(※このイベントログで出てくる際にはSystemを指す)」のキーワードに迷った人にこのエントリを参考にしてもらえると。

2008年8月12日火曜日

VirtualServer・VirtualPCに仮想COMポート経由でwindbgをアタッチ

Microsoftが配布しているWindowsのデバッガ、windbgというものがある。
どうもよくわからない不具合の出るソフトがあったので、VirtualServer仮想PC上でwindbgを走らせてみようと思ってMicrosoftのKBでwindbgの情報を探してみる。
 
VirtualServer・VirtualPCのホストOSから、ゲストOSのカーネルにアタッチする方法があったので試してみた、多少本筋からずれた気もするがやむなし。
 

How to debug a virtual machine on a host computer(略) part 1 of 2
How to debug a virtual machine on a host computer(略) part 2 of 2


 

Part1では仮想PCのカーネルにアタッチする方法、Part2はVirtualServer自身のデバッグ方法?かな、2はあまり読んでない。
 

詳しくはPart1を見るとわかるので、設定する箇所を画像でメモ。
[caption id="attachment_539" align="alignnone" width="300" caption="画像:ゲストOSのCOM1を名前付きパイプに接続"]画像:ゲストOSのCOM1を名前付きパイプに接続[/caption]
 
ゲストOSの COM1 に「\\.\pipe\com2」という名前付きパイプ(※ややこしくて失礼、com2の部分は名前なので何でもよい)に接続します。
UNCなので途中のピリオドはlocalホストを表し、もちろんUNCパスなら他のPCでもよい(はず)。
 

ゲストOS上での準備としてboot.iniをデバッグオプション有効にしておく必要があります、msconfigコマンドなどを使用して設定。

 

[caption id="attachment_540" align="alignnone" width="399" caption="画像:デバッガも名前付きパイプに接続"]画像:デバッガも名前付きパイプに接続[/caption]
 
ゲストOSのカーネルにアタッチする準備。
画像はwindbgの[File]メニューからカーネルデバッグを選択した後の名前付きパイプへの接続設定。
 

 

[caption id="attachment_541" align="alignnone" width="300" caption="画像:仮想OSのカーネルデバッグ出力が得られている"]画像:仮想OSのカーネルデバッグ出力が得られている[/caption]
 
windbgを待ち状態にした後、ゲストOSを起動したところ。アタッチはいつでもできる模様。
さっそくいろいろ例外を吐いてくれている、とりあえずF5で先に進める。
 
 

[caption id="attachment_542" align="alignnone" width="300" caption="画像:Breakしてレジスタを表示してみる"]画像:Breakしてレジスタを表示してみる[/caption]
 
折角なので「Ctrl+Break」!!カーネルを止めてみる。
普段OSが勝手に止まると色々冷や汗ものだが、自分の意思で止めるというのはなかなかどうして面白い。
 
 


しかしプログラミングの知識があるわけでないので、個人では「!analyze -v」コマンドで自動解析をしてもらうくらいしか使い道がない。
困ったらプログラムがわかる人に聞いてみよう。

2008年8月8日金曜日

WindowsDNSサーバが大量のUDPポートを待ち受けるように実装変更

Windows付属のDNSサーバを使っているサーバに、2008年7月のMicrosoftセキュリティ更新プログラム、MS08-37:DNS の脆弱性により、なりすましが行われる(KB953230)を適用すると、UDPポートの待ち受け状況がすごいことになる。
 
[caption id="attachment_533" align="alignnone" width="450" caption="画像:「netstat -na」の実行結果、笑えるくらい待ち受けている"]画像:\"netstat -na\"の結果、笑えるくらい待ち受けている[/caption]
何気なく"netstat -na"を実行したらUDPの待ち受けがずらずら出てくる、すごく多いのでどうしたことかと思ったら、しっかり公式に解説があったので一安心。
なんとその数2500ポート、DNSの更新情報は重要なのでしっかり読んでおくべきでした。
 
[caption id="attachment_534" align="alignnone" width="450" caption="画像:ついでに「netstat -nba」で待ち受けているプロセスを表示、たしかにDNS"]画像:ついでに「netstat -nba」で待ち受けているプロセスを表示、たしかにDNS[/caption]
WindowsServer2003で確認したが、更新対象に2000と2008も入っているので同様でしょう。
 
※パッチ一覧ではDNS サーバー (KB951746) のほう、クライアントは(KB951748)
 
 
以下関連情報へのリンクとちょっと解説など

2008年8月7日木曜日

Windowsはリソースキット、サポートツールと管理ツールを追加しないと

社内で自分のメモ用に使っていた情報をWEBにあげておく。
このエントリは内容が古くなったらちょくちょく更新する予定、(すでにちょっと古い?あとで追加しないと。)
このほかMS製ツールは沢山あるが、きりがないのでベーシックな範囲で。
 

概要と見出し


Windowsサーバを構築する場合、
標準のコンポーネントに加えて追加するべきツールが配布されている。
 
説明については主にWindowsServer2003のものだが、新旧その他バージョンでも意識してよい内容のはず。(追:末尾にWindowsServer2008の特設場を設置)
 
現在下記カテゴリが登録されています。
  • サポートツール・リソースキット(Windowsサーバ共通)

  • ActiveDirectoryを使うDCサーバに追加
  • InternetInformationServices(IIS)を使うWEBサーバに追加

  • クライアントOSからサーバを管理するツール

 
 

サポートツール・リソースキット(Windowsサーバ共通)


[説明]
主に管理者向けのツール群、必須
詳細はインストールした後にヘルプを読む
 
[注意事項]
各OSバージョン、SPの状況に適合するものを導入すること。
SPのバージョンアップの際も再配布される。
日本語版は無い
 
[追記事項]
パスを通しておくと便利
 
[入手先など]
サポートツールはWindowsServerのCD内にもこっそり同梱されている
--CD の Support\Tools フォルダにある Suptools.msi プログラムを実行します
 
他WEBから、サポートツール// Windows Server 2003 Service Pack 1 32-bit Support Tools
http://www.microsoft.com/downloads/details.aspx?FamilyID=6ec50b78-8be1-4e81-b3be-4e7ac4f0912d&DisplayLang=en
 
// Windows Server 2003 Service Pack 2 32-bit Support Tools
http://www.microsoft.com/downloads/details.aspx?FamilyID=96a35011-fd83-419d-939b-9a772ea2df90&DisplayLang=en
リソースキット// Windows Server 2003 Resource Kit Tools
http://www.microsoft.com/downloads/details.aspx?familyid=9D467A69-57FF-4AE7-96EE-B18C4790CFFD&displaylang=en

 

ActiveDirectoryを使うDCサーバに追加


なしでAD管理はしんどい

★グループポリシー管理コンソール★


最近は最初から入ってるんだっけ…?
[説明]
グループポリシーの管理、適用先などを視覚的に管理できる。
 
WindowsServer2003 かWindowsXP用
グループ ポリシー管理コンソール (GPMC) Service Pack 1
http://www.microsoft.com/downloads/details.aspx?FamilyID=0a6d4c24-8cbd-4b35-9272-dd3cbfc81887&DisplayLang=ja

 

InternetInformationServices(IIS)を使うWEBサーバに追加


IIS6以降はよいですよね。

IISリソースキット


[説明]
テスト用自己証明書の発行やIISのメタベース参照ツールが入っている。
 
[注意事項]
Metabase Explorer は色々強力、使ったら消しといたほうがよいくらい。
 
[追記事項]
Log Parser は最新版を別途入れたほうがよい。
 
Internet Information Services (IIS) 6.0 Resource Kit Tool
http://www.microsoft.com/downloads/details.aspx?FamilyID=56fc92ee-a71a-4c73-b628-ade629c89499&DisplayLang=en

LogParser


[説明]
色々な形式のログを扱って出力できる、入力・出力とも対応形式が多い
 
[注意事項]
操作はSQLライク
 
Log Parser 2.2 日本語版
http://www.microsoft.com/downloads/details.aspx?FamilyID=890CD06B-ABF8-4C25-91B2-F8D975CF8C07&displaylang=ja

 

クライアントOSからサーバを管理するツール


Vista追加しないと。2008でServerCoreなんかをやろうとするなら必携のはず。
 
[説明]
クライアントOSからサーバ管理するツール、特にドメイン環境で威力。
いちいちリモートデスクトップでサーバにログインしなくともいろいろ出来る。
 
Windows Server 2003 Service Pack 2 管理ツール パック (x86 エディション用)
http://www.microsoft.com/downloads/details.aspx?familyid=86B71A4F-4122-44AF-BE79-3F101E533D95&displaylang=ja
 
Windows Server 2003 R2 管理ツール パック (x86)
http://www.microsoft.com/downloads/details.aspx?familyid=9BFB44F5-232A-4FB5-BC14-45BFD81B7AC1&displaylang=ja<

 
 

WindowsServer2008 特設


2008は色々かわってますね。
 

Windows NT バックアップ/復元ユーティリティ


[説明]
Windows XP および WindowsServer2003 上に作成されたバックアップ(NTBackup形式)を、Windows Vista および WindowsServer2008 が稼働しているコンピュータに復元するユーティリティ
復元専用。
Windows NT バックアップ/復元ユーティリティ
 
http://www.microsoft.com/downloads/details.aspx?FamilyID=7da725e2-8b69-4c65-afa3-2a53107d54a7&DisplayLang=ja

 
 

あと、サポートツールとリソースキット込みのコマンドライン活用に詳しい本。
MS-DOSバッチファイルを作るなら持っておくとよいです。

2008年8月6日水曜日

MySQLでデータベース作って専用ユーザ作成

メモエントリ
 
CMSなどを構築するときにMySQLで専用のDBを作成して、そのDBに対するすべての権限を持ったユーザを作成する。
いつもGRANTの所でなんだっけ?となるのでメモ。
 
まずいずれかでmysqlコンソールに接続
  • root@localhost空パス(デフォルト)
    # mysql

  • root@localhostのパスあり
    # mysql -p
    < <(rootのパスワード入力)

  • 別の管理用ユーザ
    # mysql -u {管理用ユーザ} -p
    < <(管理用ユーザのパスワード入力)


 
★mysqlコンソールへ
mysql> CREATE DATABASE hogehogeDB DEFAULT CHARACTER SET utf8;
Query OK, 1 row affected (0.00 sec)
 
mysql> GRANT ALL PRIVILEGES ON hogehogeDB.* TO "hogehoge_user"@"localhost" IDENTIFIED BY "{password}";
Query OK, 0 rows affected (0.00 sec)
DB・ユーザ名とパスワードは任意
 
デフォルトで選択する文字コードがUTF-8の「hogehogeDB」を作成して、管理用ユーザの「hogehoge_user」、パスワードは"password" ができた。
 
 
 
ついでにパスワード変更とGRANTで権限を変更した時の権限テーブルの再読み込み
mysql> SET PASSWORD FOR root@localhost=PASSWORD('wordpass');
 
mysql> FLUSH PRIVILEGES;

2008年8月5日火曜日

IISのログファイルをUTF-8で記録する

IISのログを解析するのにLogParserはとても便利。
IISログのフィールドをカラムに見立ててSQL(っぽい)クエリで解析したり統計を取ることができます。
 
しかしIIS6ではログファイルのエンコードがデフォルトではANSIのため、リファラなどにUTF-8の日本語が突っ込まれて一部が文字化けしたログをLogParserに食わせると該当の行でカラムの区切りがうまくいかずに(※)行単位で無視されてしまいます。
 
(※「ログのロウが予期せず終了しています。」というエラー)
 
 
そういうことで困ったら、IIS6が出力するログのエンコードをUTF-8にしてしまうのがよいです。
 

英語以外の言語とセキュリティのために UTF-8 形式を有効にする
http://technet2.microsoft.com/WindowsServer/ja/library/b5060e4e-8573-4992-830b-98dd368714f11041.mspx?mfr=true


 
上記は文字だけなので変更箇所のスクリーンショットを。
[caption id="attachment_524" align="alignnone" width="469" caption="図:IIS6のログをUTF-8で保存するオプション"]図:IIS6のログをUTF-8で保存するオプション[/caption]
 
ちなみにこのオプションでログのファイル名が変わります。
今まで"exyymmdd.log"だったのが、"u_exyymmdd.log" になる、バッチでの自動化をしている場合は要注意。
 
 
ところでWindowsServer2008で使われるIIS7ではどうなんでしょう。
[caption id="attachment_525" align="alignnone" width="450" caption="図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI"]図:IIS7ではデフォルトでUTF-8、ほかで選べるのはANSI[/caption]
 
こちらはデフォルトでUTF-8、ログファイルも"u_exyymmdd.log" ですね。
 
 
 
LogPaeserはその他、イベントログ・パフォーマンスログをはじめ各種ログ形式に対応しており、組み合わせと工夫でいきなりグラフ画像を出力する事もできるなど有用なツールです。
Windows運用管理では必須といってよいかも。(費用かければまた違うかも知れませんが。)