読者です 読者をやめる 読者になる 読者になる

pslaboの日記

はてなダイヤリーからはてなブログに引っ越してきました

この日記は現在実行中の減量記録を含む個人的なメモとして始めましたが、最近はコンピュータやガジェット、ハック、セキュリティネタのほうがメインになっております。

iPad3のSIMロックに関する考察とSIM下駄による解除の試みはSoftbank版iPad3にiPhone用のSIM下駄を履かせてみるにいろいろ書いてます。

ポストした内容のカテゴリー分けがちゃんと出来てないので、過去記事を探したい方はお手数ですが検索で探してみてください。


ウェブサーバのログに色を付けたり、メッセージの内容によって表示タイミングを変えたり...

以下のスクリプトを colorize-log.awk という名前で保存し、"tail -f [Webサーバのログ] | colorize-log.awk" のように実行すると、色がついたり、ヤバいところでは表示スピードが変わったりして割と便利です。

usleep を外部コマンドで実行しているところが無駄なので、perl あたりで書き直すほうがよいかもしれない。


#!/usr/bin/awk -f
#
# colorize-log.awk
# Written by pslabo
#

BEGIN {
RESET="\033[0m"

BOLD="1m"
ITALIC="3m"
UNDERLINE="4m"
BLINK="5m"
REVERSE="7m"

BLACK="\033[30"
RED="\033[31"
GREEN="\033[32"
BROWN="\033[33"
BLUE="\033[34"
PURPLE="\033[35"
CYAN="\033[36"
WHITE="\033[37"

BG_BLACK="40"
BG_RED="41"
BG_GREEN="42"
BG_BROWN="43"
BG_BLUE="44"
BG_PURPLE="45"
BG_CYAN="46"
BG_WHITE="47"

SLOW_WARN=50000
SLOW_FATAL=100000
}

## squid 特有の色付け

# PURGE は緑
$6 ~ /PURGE/ {
gsub( "PURGE", GREEN";"BOLD"PURGE"RESET, $6 )
}

# キャッシュヒットは青
$NF ~ /TCP(.*)HIT/ {
status = $NF

gsub( status, BLUE";"BOLD""status""RESET, $NF )
}

# キャッシュミスはシアン
$NF ~ /TCP(.*)MISS/ {
status = $NF

gsub( status, CYAN";"BOLD""status""RESET, $NF )
}

## apache / squid応答時間の色付け(ログカスタマイズ必要)
# combined 形式のログでは2番目のフィールドが実質的に使われないので
# ここに応答時間を出すようにするとイロイロ便利な気がします。
#
# apache
# LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
# ↓
# LogFormat "%h %D %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

# squid
# logformat combined %>a %ui %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh
# ↓
# logformat combined %>a %6tr %un [%tl] "%rm %ru HTTP/%rv" %Hs %h" "%{User-Agent}>h" %Ss:%Sh

# 1 秒以上 赤
# 500ミリ秒〜1秒 紫
# 100ミリ秒〜500ミリ秒 青
# 〜100ミリ秒 緑
{
response = $2
if ( response <= 100 ) {
gsub( ""status"", GREEN";"BOLD""status""RESET, $2 )
} else if ( response <= 500 ) {
gsub( ""status"", BLUE";"BOLD""status""RESET, $2 )
} else if ( response <= 1000 ) {
gsub( ""status"", PURPLE";"BOLD""status""RESET, $2 )
} else if ( response > 1000 ) {
gsub( ""status"", RED";"BOLD""status""RESET, $2 )
slow=SLOW_FATAL
}
}

# ステータスコードに基づく色付け
{
status=$9

if ( status == 0 || status >= 500 ) {
# ステータスコード 0 または 500 以上は赤にする
gsub( "0", RED";"BOLD"0"RESET, $9 )
slow=SLOW_FATAL
} else if ( status < 400 ) {
# ステータスコード 200 〜 399 は緑で着色
gsub( ""status"", GREEN";"BOLD""status""RESET, $9 )
} else if ( status < 500 ) {
# ステータスコード 400 番台は紫で着色
gsub( ""status"", PURPLE";"BOLD""status""RESET, $9 )
slow=SLOW_WARN
}
}

# ログの出力
{
print

# 変数 sleep の値が 0 以上なら、無条件に指定時間だけ usleep を入れる
# 変数 slow がセットされていたら、指定時間だけ usleep を入れる
if ( sleep > 0 ) {
system( "usleep "sleep )
} else if ( slow > 0 ) {
system( "usleep "slow )
slow=0
}
}