2008年12月26日金曜日

sendmail で リレーするメールの DATA 部分をログに記録する

sendmail を使っているメールサーバでちょっと調べ物があった。
 

取りあえずメールのヘッダを記録したかったので、 sendmail.cf にてログレベルをデフォルトの9から11 → 15 → デバッグの → 16 → 20くらいまで引き上げたが、エンベロープは記録されるものの、肝心のDATAの中身が記録されなくて困った。
 
 

何か別の手段はと思い、Manpage of sendmail を見たら物騒なオプションを発見

-X logfile
指定された logfile に、メーラに出入りする情報すべてを記録します。メーラをデバッグする際の最後の手段としてのみ使ってください。非常に大量の情報があっという間に記録されます。
Manpage of sendmailより


まあ行儀が良さそうなオプションじゃないな。
 

早速起動スクリプトのsendmail 起動コマンドラインに "-X /var/log/maildata" とでも追加して起動したところ、思い通りDATAの中身が丸ごとログに吐かれた。
 

これで"Message-Id:" や "Subject:" も確認し放題、もちろんメール本文もだ。
悪用厳禁やね。
 
 



追記:2009/4/9
姉妹ネタを作成、ログがでかくて困るという時にはこっちでも。
sendmail の .forward で、メールの任意の行をログに出力
 
 

2008年12月25日木曜日

冬期の長期休暇を控えて:JPCERT/CC が注意喚起

JPCERTコーディネーションセンター(JPCERT/CC) が年末年始長期休暇を控え、管理者向けの注意喚起 冬期の長期休暇を控えて を公開しています。
 

昨年はやったUSBメモリ(外部記憶)の自動実行については、下記のように特に注意するよう呼びかけ。


外部記憶装置を媒介したウイルス感染が増加:

昨今 USB メモリやフラッシュメモリーカード、外付型ハードディスクなどの外部記憶装置を媒介したウイルス感染が増加しています。
休暇中に社外で使用した外部記憶装置を社内の機器に接続する場合は、ウイルスの感染を防ぐためにシフトキーを押しながら PC に外部記憶装置を接続することで自動実行を一時的に無効にすることを推奨いたします。
また、内容を確認する前にウイルス対策ソフトでスキャンを行って下さい。

 

「シフトキーを押しながら PC に外部記憶装置を接続する」
ああ、そんな手があったな。これなら繋いでゆっくりスキャンでもOKだ。
 

ちなみにWindows起動時のスタートアップもシフトキー押してれば回避できる。
 

他、休み明けの心得とかを紹介しているので、会社・自宅問わず管理者な方は目通ししておいては。

2008年12月19日金曜日

Soralis10、ZFSを使ってNFS共有をつくる

Solaris10 でZFSを使ったNFS共有を作ったのでメモ。
 
 


ZFS仕込み、プール用領域の確保


ZFSに使うのは本来RAWデバイスが望ましいらしいんだけど、
HDD一台しかないので仕方なくパーティション分けてブロックデバイスを確保。
では4つに切ってみよう。
 

Partition Status Type Start End Length %
========= ====== ============ ===== === ====== ===
1 Active Solaris2 1 4144 4144 11
2 Solaris2 4145 15429 11285 29
3 Solaris2 15430 26714 11285 29
4 Solaris2 26715 37999 11285 29

これでパーティション2-4の領域を、それぞれZFSのプールに追加できる。
各領域の名称は "c1d1p2","c1d1p3","c1d1p4"。
 
 


ZFS作成


まず "zpool" コマンドで tank というZFS領域を作る。

$ zpool create tank c1d1p2


領域 "tank" が作成され、自動で "/tank" にマウントされた。
 
"zfs list"コマンドで確認する、84.7GBだ。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 108K 84.7G 18K /tank

 
 

"zpool status"コマンドで見ると "デバイス:c1d1p2" が使われていることがわかる。
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

 
 

ついでにZFSの領域拡張


ついでにZFSの機能、デバイスの追加による容量増加を試す、いまのプール"tank"に "c1d1p3"を追加してみる。
$zpool add tank c1d1p3

 

するとこうなる、追加した分の容量が増えている。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0

エラー: 既知のデータエラーはありません

うーん便利。
 
 


さらについで、ZFSホットスペア追加


デバイス追加の際、オプション "spare" を指定するとホットスペア扱いでデバイスが追加される。
$zpool add tank spare c1d1p4

既存のデバイスが壊れたら、代わりに使われるんだろう。多分。
 

容量が増えていない代わりに、スペアという項目が追加されてデバイスが確認できる。
$zfs list
NAME USED AVAIL REFER MOUNTPOINT
tank 111K 169G 18K /tank
 
$zpool status tank
プール: tank
状態: ONLINE
スクラブ: 何も要求されませんでした
構成:

NAME STATE READ WRITE CKSUM
tank ONLINE 0 0 0
c1d1p2 ONLINE 0 0 0
c1d1p3 ONLINE 0 0 0
スペア
c1d1p4 AVAIL

エラー: 既知のデータエラーはありません

 


ちなみにホットスペアは取り外せる、やっぱり普通の領域に突っ込みたい時などに便利。
$zpool remove tank c1d1p4

しかし、普通の領域をはずすのは色々手順があるみたい、そこは未調査。
 
 


ZFSの領域をNFS共有する


一応これが目的だった。
では "/tank" を共有しよう、コレだけでOKだ。

$zfs set sharenfs=on tank

 

ZFSは領域ごとにプロパティーを持っていて、ステータスを変えてあげればそれだけでいろいろ出来るようになっている。"on" の変わりに "ro" などで指定もOKだ。
 

"tank" のプロパティを確認してみよう、"sharenfs" が onだね。
$zfs get all tank
NAME PROPERTY VALUE SOURCE
tank type filesystem -
tank creation 金 12月 ** **:** 2008 -
tank used 123K -
tank available 169G -
tank referenced 18K -
tank compressratio 1.00x -
tank mounted yes -
tank quota none default
tank reservation none default
tank recordsize 128K default
tank mountpoint /tank default
tank sharenfs on local
tank checksum on default
tank compression off default
tank atime on default
tank devices on default
tank exec on default
tank setuid on default
tank readonly off default
tank zoned off default
tank snapdir hidden default
tank aclmode groupmask default
tank aclinherit restricted default
tank canmount on default
tank shareiscsi off default
tank xattr on default
tank copies 1 default
tank version 3 -
tank utf8only off -
tank normalization none -
tank casesensitivity sensitive -
tank vscan off default
tank nbmand off default
tank sharesmb off default
tank refquota none default
tank refreservation none default

 

念のため "showmount" コマンドで共有状態を確認するとちゃんと共有している。
$showmount -e
devsol01.seton.private.local がエクスポートしているファイルシステムのリスト:
/tank (すべてのホストへエクスポート)

 
 

あとは好きなホストからマウントしよう。
とりあえずこんなところで。

2008年12月18日木曜日

メモ:日本OSS推進フォーラムによるスケーリング資料

メモエントリ
開発基盤WGの資料リンク
 

先輩エンジニアに教えてもらったんだけど、2005年度「OSS性能・信頼性評価/障害解析ツール開発」の成果 に面白い資料がいっぱいある。
 

とりあえずこのへんから読んでいこう。
「OS層の評価」報告書
「DB層の評価」報告書
「Javaアプリケーション層の評価」報告書

2008年12月15日月曜日

テクニカルエンジニア(ネットワーク)合格

2008年10月に受けた テクニカルエンジニア(ネットワーク) 、今日合格発表だったのでIPAに突撃して結果を拾ってきました。
 

平成20年度 秋期
情報処理技術者試験 成績照会
テクニカルエンジニア(ネットワーク)試験


受験番号 NW*** - **** の方は,合格です。

午前試験のスコアは,660 点です。
午後I試験のスコアは,695 点です。
午後II試験のスコアは,640 点です。

 

OK。
入社時の長期目標であげていた資格を取れたということで結構嬉しい。
 
ただ資格取ったとはいえ、どうしても試験範囲が広くて業務でいじってない事柄も多いので、ペーパードライバー感が漂う。
そこは割り切ってしまっても良いんだが。
 
 

ついでにアイクラフトのボーナス査定でのポイントも高いので一石二鳥?
業務の実績は一番ウェイトの高い評価ポイントだが、技術職中心の会社なので、スキルアップをしてきたかという点や、会社の経営方針に沿った仕事をしているかという点も評価の対象になる。
引用:賞与面談の時期 - アイクラフト社長ブログ

 

これの スキルアップ の裁量が意外とでかい、普段から適当にやってりゃいいので私にとってはよい制度だ。
「適す」「当たる」と書いて適当というのですよ

2008年12月12日金曜日

Google Chrome が正式版になったぞ

GoogleのWEBブラウザ GoogleChrome の配布版からベータが取れた。
 

GoogleChrome ダウンロードページ
http://www.google.com/chrome


ここからダウンロード可だ。
 

リリースにあたっての各種情報は公式ブログにて案内されている。
Google Chrome(BATA) - Official Google Brog
ベータが取れたことを強調しているタイトルだ。
 

Google日本ブログ ではまだだなぁ。
(※追記:Google Chrome(BETA) 日本語訳 来た。この更新されてる方はAdmintechに来てたな…)
 
 

ところでアドオン的な話はどうなったんだろう?タブを縦並びに変更したいんだが。

マネークリップの使い方「Clip this Way!」

マネークリップを使っている。
というのも、お尻のお肉が無さ過ぎて ズボンのうしろポケットに財布を入れると痛くて仕方ないからだ。
 
 

しかしマネークリップという物は、よく見る使い方(挟みかた)では使いづらくてしょうがない。あのお札をまとめて真ん中辺で挟むような方法。
だいぶ前なのでどこで見つけたか忘れたが、自分にとっていい方法があったのでそれを記事にしておく。
 

[caption id="attachment_1121" align="alignnone" width="300" caption="写真:マネークリップ基本形"]写真:マネークリップ基本形[/caption]
 
基本はこういう形でズボンのお尻ポケットに入れている、ほとんど邪魔にならないしお札もそんなに痛むものじゃない。日本のお金はすごく丈夫にできてる気がする。
 
これだと挟み方がよく分からないかも、ちょっとばらしてみよう。
 
 

[caption id="attachment_1122" align="alignnone" width="300" caption="写真:お気に入りマネークリップ"]写真:お気に入りマネークリップ[/caption]
 
愛用のマネークリップ、たしか1000円弱。この可動部があるところが自分の使い方にぴったりマッチ。
くぼみのところに親指がすっと入り、開くときにシャキッと小気味よい音がする。
ららぽーと甲子園文具屋エムズで買った、ここの小物は結構好き。
 
で、どうやって使うのかというと。
 
 

[caption id="attachment_1124" align="alignnone" width="300" caption="写真:「clip this way」(こうやって使うのよ)"]写真:「clip this way」(こうやって使うのよ)[/caption]
 

最初の写真の状態から、お札を横に広げるとこうなっている。一枚づつ折って重ね、それをまとめてクリップしている。
こうすることで幾らあるか瞬時に分かるし、ぱっと開いて必要分を取り出すことも容易だ。
多分この使い方を知らなかったらマネークリップ使い続けてない。
 

クリップの前にお札を折りたたむ必要があるが、まとめて折ってずらすだけなのでそんなに手間でもない。万札を崩した際くらいしかする必要もないし。
 
 

マネークリップ使ってみた(使いたい)けど、不便だよなぁと思った方は是非試してほしい。

2008年12月11日木曜日

FireFox を別プロセスで立ち上げる、プロファイル切り替え必須

Windows版FireFoxの話。(追記:Linux版でもオプション大文字に気をつければOKだそうです。)
FireFoxを複数起動しようとアイコンを叩くも、タスクマネージャではプロセスが一つしか起動しない。
 

[caption id="attachment_1110" align="alignnone" width="500" caption="画像:複数Firefoxも、プロセスは1つ"]画像:複数Firefoxも、プロセスは1つ[/caption]
 

ということでFireFoxを複数のプロセスで起動したい時の使い方を紹介。
副作用としてプロファイルが複数できるので、それだけでも結構使いでがある、複数セッション・ブックマーク・プロキシ使い分けてJmeter録画専用などと用途はいろいろ。
 

ネタ元はMDCのコマンドライン解説ページ
 
 

まずはショートカットを作成


[caption id="attachment_1111" align="alignnone" width="500" caption="画像:FireFoxへのショートカット"]画像:FireFoxへのショートカット[/caption]
プロパティでコマンドラインを確認。
[caption id="attachment_1112" align="alignnone" width="425" caption="画像:FireFoxショートカット(無改造)"]画像:FireFoxショートカット(無改造)[/caption]
 
 

コマンドラインオプションを指定することで複数起動を有効にする


今回使うのは下記2つのオプション、他についてはMDCで
 









-no-remoteアプリケーションを同時に複数起動できるように
-pFireFoxが使うプロファイルを指定する

追記:
Windowsは Pオプション に大文字小文字の区別はないが、Linux版は大文字Pで無いと駄目のようです。この辺のお方に教えてもらいました。
元々公式のオプション開設はPで書いてあるので本来大文字が正しいと言うことでしょう。

 

で、とりあえず "-p" を空っぽの状態にした物を作成、ひとまずの準備完了。
[caption id="attachment_1113" align="alignnone" width="425" caption="画像:Firefoxショートカット、ひな形版"]画像:Firefoxショートカット、ひな形版[/caption]
 
 

プロファイルの作成と用途別のショートカットを作成していく


さっき作ったショートカットを叩いてみよう、見慣れない画面が出てくる。
[caption id="attachment_1114" align="alignnone" width="405" caption="画像:mozillaのプロファイルマネージャ"]画像:mozillaのプロファイルマネージャ[/caption]
 

なんかNetScapeとかでよくみたような感じのプロファイルマネージャが出てくる、新しいプロファイルを作成しよう。
ちなみに「今後このプロファイルを使用する」というオプションは外しておこう、あとで多少面倒になる。
基本的に使われているのは "default" プロファイルなので、ここで作った空っぽのプロファイルがデフォルト(-no-remoteなしの状態)で起動しては困るからだ。
 

ではプロファイルを作ってみよう。
[caption id="attachment_1115" align="alignnone" width="500" caption="画像:プロファイル作成"]画像:プロファイル作成[/caption]
ここで指定した名前は、 "-p" オプションで指定するプロファイル名になる。
今は空っぽで起動したが、 "-p user01" とすれば user01 のプロファイルでFireFoxが起動する。
[caption id="attachment_1116" align="alignnone" width="405" caption="画像:プロファイル作成済み"]画像:プロファイル作成済み[/caption]
さて新しいプロファイルが完成した。
 

使い方1:「"-p" 空っぽのショートカットを叩く」 → 「プロファイル選んで起動」 を繰り返す


"-no-remote" オプションは「複数のアプリケーションを立ち上げることが可能」とあるけど、実は同じプロファイルでのFireFox複数起動はできない。
つまり2つ目以降のFirefoxプロセスの起動には "-p" オプションの指定が必須ということです。
 

ということで初めに作った"-p"オプションにプロファイル名を渡していないショートカットを叩いて、起動していないプロファイルを選択するという作業を繰り返すと…
[caption id="attachment_1117" align="alignnone" width="470" caption="画像:複数起動したFirefox"]画像:複数起動したFirefox[/caption]

という感じ、見事別プロセスでのFireFox起動に成功。
 
 

使い方2:「"-p [プロファイル名]" としてショートカットを叩く」


"-p" オプションに直接プロファイル名を指定しておくことで、プロファイルマネージャをすっとばすことが可能です。
用途別に作るプロファイルはこちらが便利、場合によっては "-no-remote" 外してもいい(ハズ)。
[caption id="attachment_1118" align="alignnone" width="425" caption="画像:使用プロファイルを指定する"]画像:使用プロファイルを指定する[/caption]
と、このように指定します。
 
 
 

おわりに


この手順で作ったプロファイル、それまで使っていた "default" とは何から何まで違います、ブックマーク・Cookieはもちろん、アドオンも全部空っぽ。また、それらは別々に管理されるのでものによっては2度手間ですね。
 

しかし、「使える」ように環境構築するにはそれなりに骨が折れるが、たとえばFireBugなど機能多めなアドオンを有効なやつ、入れてないやつを同時に起動したりできる、片方がクラッシュしてももう一方に影響ないのも大きいです、普段の利用にもプロファイル分離は有用でしょう。

WordPressのクォーテーション自動変換を無効化する

WordPressに投降した記事は、表示の段階で少し修正が入る。
シングルクォーテーション・ダブルクォーテーションなどの記号がそれだ。
 
この機能、普通のブログでは特に気になるようなことではないが、こと技術系のブログでは結構邪魔になることがある。
 


  1. コマンドラインを記事にアップ

  2. コピペして使おうとする

  3. 貼り付けたクォーテーションが全角

  4.  
  5. (ノ`皿´)ノ彡┻━┻


 
 

落ち着いてこれを無効化する情報を探る、ひとつのファイルを修正で済む模様。
"/wp-includes/formatting.php" に記事表示の際の変換処理が入っているらしいので該当箇所を変更する。
 

2.6.5で言うと、34行目のこれをコメントアウトだ。
[sourcecode language='php']
// $curl = preg_replace($dynamic_characters, $dynamic_replacements, $curl);

[/sourcecode]
 

バージョンアップのときには注意しないといけないので記事に起こす。
 
追記:2.7.1だと 60行目だ
追記:2.8.4だと 69行目だ
追記:2.9.1だと 82行目だ

 


// 参考にした情報元
WordPressのクォーテーションマークの変換を無効にする - Regen Press

2008年12月4日木曜日

MS-DOSバッチファイルでFizzBuzz

昨日の記事:VBScript で FizzBuzz の続編。
FizzBuzz、今度はDOSバッチファイルで作ってみた。
単純にやってみたかっただけなので、コードを短くする工夫とかはまあ置いておこう。
 
 

FizzBuzzをDOSバッチでやる際に、とりあえず剰余(mod)が取れるのかよく分からなかったので3の倍数、5の倍数を判断するカウンタをつくることにして書いてみた。
記事書く前に、本で算術演算子を調べたら、mod 取れるみたい…
100を3で割った余りなら、
> set /a hoge=100%3
でOKだった。まぁコレはコレでありかな。。

 

ちょっと引っかかったのが遅延展開、forの中で普通に変数 %hoge% って使うと、forの中でいくら中身をいじろうと、for に入る前の変数の中身が展開されちゃう。
setlocalで 遅延展開有効 にして、!hoge! って使えばfor内でもその時点の変数内容が展開される。
あとは特に工夫も無く。
[sourcecode language='sh']
@echo off

REM // 遅延展開有効
setlocal enabledelayedexpansion

REM // ウインドウタイトル変更
TITLE FizzBuzz

REM // カウントダウン用の変数
set SAN=3
set GO=5

REM // 繰り返し
for /l %%I in (1,1,100) do (

rem // 表示用の変数、空っぽ比較用も
set STRING=
set STRING_FLG=

rem // 3と5のカウンターが0ならリセット
if !SAN!==0 (set SAN=3)
if !GO!==0 (set GO=5)

rem // 3と5のカウンターを一つ減らす
set /a SAN=!SAN!-1
set /a GO=!GO!-1

rem // 3のカウンターが0なら表示用にFizz追加
if !SAN!==0 (set STRING=Fizz)

rem // 5のカウンターが0なら表示用にBuzz追加
if !GO!==0 (set STRING=!string!Buzz)

rem // ここでFizzもBuzzも入ってなければループ数字追加
if !STRING!==!STRING_FLG! (set STRING=!STRING!%%I)

rem // 現在の数と、FizzBuzzの結果を出力
echo %%I !STRING!
)
pause
endlocal
[/sourcecode]


実行結果。
[caption id="attachment_1099" align="alignnone" width="428" caption="画像:FizzBuzz"]画像:FizzBuzz[/caption]
 

デキター。
 

剰余の計算処理もちゃんと調べてればもう少しスマートだったが、まあ結果オーライという事にしよう。
set のヘルプに一応ヒントらしきものはあったが見逃した。
setの詳しい解説があった。

VBScript で FizzBuzz

FizzBuzz って言うのがあるというのを知った、 今夜わかるセキュアプログラミング - うさぎ文学日記 を見て。

1から100までの数を表示するプログラムを書け。
ただし3の倍数のときは数の代わりに「Fizz」と表示。
5の倍数のときは「Buzz」と表示。
3と5両方の倍数の場合には「FizzBuzz」と表示すること。

 

VBScriptで書いてみた、前述資料にPerlでの答えが書いてあったからインチキだけど。
[sourcecode language='vb']
for i=1 to 100
'// 文字列初期化
strTemp = ""

'// 3の倍数ならFizzを文字列に追加
if (i mod 3) = 0 Then
strTemp = "Fizz"
End if

'// 5の倍数ならBuzzを文字列に追加
if (i mod 5) = 0Then
strTemp = strTemp & "Buzz"
End if

'// ここで文字列が空っぽなら数字を代入
if strTemp = "" Then
strTemp = i
End if

'// 表示用の一列作成
strResult = strResult & i & VbTab & strTemp & VbCrLf
Next

'// 表示
Msgbox strResult,,"FizzBuzz"

Wscript.Quit
[/sourcecode]
 

実行するとこうなる、スペースの都合で1-30までの表示としてます。
[caption id="attachment_1097" align="alignnone" width="130" caption="画像:FizzBuzz"]画像:FizzBuzz[/caption]
 

うん、アプローチは色々ありそうだけど、まあできてるんでないの。

vmstat の出力に日付と時刻を付与@sh

サーバの稼動状況モニタ、 vmstat の出力には時刻情報がない。
 

標準だとこんな感じ、日付情報を出力したい時もあるよね。
# vmstat 1 3
procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
r b swpd free buff cache si so bi bo in cs us sy id wa st
0 0 33420 41628 45528 92228 0 0 7 47 14 4 1 1 98 0 0
0 0 33420 41628 45528 92228 0 0 0 0 38 35 0 0 100 0 0
0 0 33420 41508 45528 92228 0 0 0 0 67 77 2 0 98 0 0

 

よい方法を探してみたら同じよう流れの記事を見つけた、やはり多くが思うことなんだろう。

vmstatに日時を付ける - いろいろつまみぐい


 

perl だ、 さらにたどれば rubyでの実装 もやってる、なるほど。
 
 

うーん、perlが入ってないlinuxサーバなんか見たこと無いが、ここはシェルでもやってみたい。
 

という事でスクリプトを作ったぞ。
[sourcecode language='sh']
#!/bin/sh

while read -e hoge ; do
echo `date +%Y%m%d' '%H':'%M':'%S` ${hoge}
done
[/sourcecode]
シェルの組み込みコマンド、read で入力を一行ずつ処理するのだ、これを"vmread.sh"とでもして保存。(追記:hoge を省略すると変数名はREPLYになる)
 
 


# vmstat 1 3 | ./vmread.sh

早速実行!
20081202 20:30:01 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------

よい感じで日付情報が付いている…
 

20081202 20:30:01 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:30:01 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:30:01 1 0 33420 35248 46172 92228 0 0 7 47 14 4 1 1 98 0 0
20081202 20:30:02 1 0 33420 34768 46172 92228 0 0 0 0 173 555 6 8 86 0 0
20081202 20:30:03 0 0 33420 34324 46172 92240 0 0 0 0 132 399 2 10 88 0 0

Σ(-д-) ゲッー!左にずれたー
 

どうやら read が 行の内容を hoge に突っ込む時に連続したスペースを一つの区切り文字と認識、詰めちゃってるようだ。
2009/2/17追記:
${hoge} をダブルクォーテーションで囲めば区切られないのでOK

 
 

対策を考えないと、、bashのマニュアル みても有効そうな手立ては無し。
とりあえず最後の出力に対して、trコマンドで スペースをTABに変換 してみる。
# vmstat 1 3 | ./vmread.sh | tr " " "\t"

どうかな?
20081202 20:37:34 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:37:34 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:37:34 1 0 33420 40280 46728 92260 0 0 7 47 14 4 1 1 98 0 0
20081202 20:37:35 0 0 33420 39980 46728 92260 0 0 0 0 53 76 1 1 98 0 0
20081202 20:37:36 0 0 33420 39980 46728 92260 0 0 0 0 49 67 0 1 99 0 0

(予想通り)右に伸びたー...
 
 

困った。
少し考えて、出力をいじるのが無理なので入力をいじってみることに。
 

vmstat の出力からスペースをカンマに変換してreadに渡すと?
# vmstat 1 3 | tr " " "," | ./vmread.sh
20081202 20:42:22 procs,-----------memory----------,---swap--,-----io----,--system--,-----cpu------
20081202 20:42:22 ,r,,b,,,swpd,,,free,,,buff,,cache,,,si,,,so,,,,bi,,,,bo,,,in,,,cs,us,sy,id,wa,st
20081202 20:42:22 ,1,,0,,33420,,39928,,47076,,92268,,,,0,,,,0,,,,,7,,,,47,,,14,,,,4,,1,,1,98,,0,,0
20081202 20:42:22 ,0,,0,,33420,,39928,,47076,,92272,,,,0,,,,0,,,,,0,,,,,0,,,35,,,36,,0,,0,100,,0,,0
20081202 20:42:22 ,0,,0,,33420,,39688,,47076,,92272,,,,0,,,,0,,,,,0,,,,,0,,,95,,146,,0,,1,99,,0,,0

おお。コレはいけるぞ。
 

それでは最後にもう一度 trコマンド を入れて、カンマからスペースに変換。
# vmstat 1 3 | tr " " "," | ./vmread.sh | tr "," " "
20081202 20:46:06 procs -----------memory---------- ---swap-- -----io---- --system-- -----cpu------
20081202 20:46:06 r b swpd free buff cache si so bi bo in cs us sy id wa st
20081202 20:46:06 1 0 33420 39488 47412 92280 0 0 7 47 14 4 1 1 98 0 0
20081202 20:46:06 0 0 33420 39248 47412 92280 0 0 0 0 109 155 0 0 100 0 0
20081202 20:46:06 0 0 33420 39248 47412 92280 0 0 0 0 67 96 1 0 99 0 0

よぅし、完璧だ! …と思う。
 
 
(追記)
vmread.sh の前に trコマンドをはさんでしまうと、出力を全部貰ってからになるので全部同じ時間がくっつくことが判明!
パイプの仕様からしてよく考えたらそうかも…もう一工夫がいるのか。
 
ちょっと保留だなぁ。左に詰められても一応使い物になるし。
※コメントにより解決済み

2008年12月3日水曜日

IIS7でクライアントポート(リクエスト元ポート)をログにとりたいが…(追 記:apacheも)

セキュリティホール memo のキャリアグレード NATに関する記事 を見た。


Internet Week 2008 のキャリアグレード NAT の話で、 「キャリアグレード NAT が導入されると、クライアントのポート番号のログを取っておかないと、アクセス元をたどれなくなるよ (NAT されますから)」という話があったのを思い出した。



なるほどクライアントのポート番号のログを取っておくという事も推奨されるようになりそうです。
個人的にはいまいち必要性の実感に乏しいけど、残さないよりは残したほうがよいでしょう。
 

記事中ではApache2.2でのやり方が紹介されていたので、ほなIISはどうだろうと思って WindowsServer2008 で IIS7 を立ち上げ、ログフォーマットの設定画面を開く。
 

[caption id="attachment_1093" align="alignnone" width="386" caption="画像:IIS7ログフォーマット"]画像:IIS7ログフォーマット[/caption]
あぁ、クライアントポートの項目無いねぇ。IIS6 も内容は一緒。
 

仕方が無いのでメタベースとかに直接書けばいけるかな、と思って情報をあさってみたが、
IInetLogInformation - MSDN
この辺見るに、標準では明らかに無理っぽい(※ログモジュールごと完全自作なら取得可?)
マイクロソフト 何とかしてくれー どこに要望出したら良いんだろう。IIS.NETか?
 
 

では折角なので セキュリティホール memo の Apache 用設定を試してみようとやってみた。

「もしや……」と思って、 英語版のドキュメントを見たら、ありました。



%{format}p
The canonical port of the server serving the request or the server's actual port or the client's actual port. Valid formats are canonical, local, or remote.

引用:セキュリティホール memo のキャリアグレード NATに関する記事

 

それではapacheのコンフィグファイルを編集、デフォルト combined の Logformat にクライアントポートを出力しそうなフォーマット文字列を加えて試してみる。
%p %{remote}p %{local}p %{canonical}p↓で、出力されたログ↓
*.*.*.* - - [02/Dec/2008:**:**:** +0900] "GET / HTTP/1.1" 304
- "-" "Mozilla/5.0(略)Firefox/3.0.4" 80 80 80 80


…全部 80 がログに記録される、、いやいやリクエスト元3000番台だったぞ、{remote}じゃないのか?何か間違ってるんかな。
 

apacheのバージョンはコレ。
# apachectl -v
Server version: Apache/2.2.3
Server built: Jan 15 2008 20:33:30

 

うーむ、本当に取れるんだろうか…

2008年12月1日月曜日

clip.exe でコマンドプロンプトの出力をクリップボードに送る@WindowsServer

サーバで作業中によく使うコマンド、「clip.exe」について。WindowsServer2003以降(vista含む)は標準で利用できる。
 
 

コマンドプロンプトで作業中に、長い出力結果をゆっくり見たいことがある。ファイルにリダイレクトして開いても良いが、パイプを利用して clip.exe に渡すと手間が省ける。
 

例えば for コマンドのヘルプ、コレはやたらと長くて 実に142行にわたる。
これをコマンドプロンプトのウィンドウを遡って読むのは非常に疲れるので、クリップボードに送ってメモ帳などに貼り付ける。
> for /? | clip

 

で、メモ帳にぺたっと。
[caption id="attachment_1088" align="alignnone" width="500" caption="画像:クリップボードからメモ帳へ"]画像:クリップボードからメモ帳へ[/caption]
 

これでゆっくり読める。