いしもち通信

お魚大好き人間の情報交換。旅先の思い出情報交換。
サーバー管理。学校でのAccess利用。PC関連情報。
社会問題。

サーバーのログ管理

2020-01-11 16:42:58 | Weblog

ログを分析することはサーバー管理で大切なことです。
ツールを利用することもあると思いますが、コマンドも便利に使えます。
対象のログは /var/log/apache2/access.logとします。

今回、2つの方法を紹介します。どちらもcronに登録して自動実行させることが前提です。
結果はメールで送信させますが、その部分は割愛します。

自動実行させるタイミングは運用の考え方次第ですが、サンプルとして1時間ごと(毎時0分)にします。

ポイントは「時間範囲の指定」だと思いますが、「範囲」ということで最初に思いつくのが
不等号(>や<)です。

まずログの時間部分を取り出す部分ですが、IPアドレス別の集計をするために

grep "-" /var/log/apache2/access.log | awk '{print $1,substr($4,14,2)}'

15時以降のアクセスにしたければ
grep "-" /var/log/apache2/access.log | awk 'substr($4,14,2)>=15 {print $1}'
ということで、めでたく不等号の登場です。
しかし、自動実行させるシェルスクリプトなので、直接>=15は指定できません。
変数を入れることになります。

TMPTIME="`date --date "1 hour ago" "+%H"`"
という変数を宣言します。毎時0分実行なので、1 hour agoとなります。
しかし、この変数はawkの中では使えません。
awkの変数として宣言をし、最終形として
grep "-" /var/log/apache2/access.log | awk --assign awk_time=${TMPTIME} 'substr($4,14,2)>awk_time {print $1}' | sort | uniq -c
でIPアドレス別の集計がてきます。

まとめたシェルスクリプト

#!/bin/bash
LANG=C
TMPTIME="`date --date "1 hour ago" "+%H"`"
grep "-" /var/log/apache2/access.log | awk --assign awk_time=${TMPTIME} 'substr($4,14,2)>awk_time {print $1}' | sort | uniq -c

結構大変ですが、不等号を使うという発想がこの結果を招いています。
コマンドの勉強にはなりました。

そこで、もう一つ単純な発想で、15時の1時間前は14時、14に等しいものを抽出すればよい。
ログの書式に合わせて変数を定義
TMPTIME="`date --date "1 hour ago" "+%d/%b/%Y:%H"`"
そのまま
grep ${TMPTIME} /var/log/apache2/access.log | awk '{print $1}' | sort | uniq -c
とすればすっきりします。


コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« nanoエディタについて | トップ | 学校日誌用出欠管理システム... »
最新の画像もっと見る

コメントを投稿

Weblog」カテゴリの最新記事