エックスサーバーのアクセスログ:リアルタイムや過去ログの確認

by

in

エックスサーバーはアクセスログをダウンロードする機能があります。

https://www.xserver.ne.jp/manual/man_server_log.php

しかし、ダウンロードではなくて、リアルタイムで確認する方法もあります。アクセスログが出力されているファイルにアクセスする事ができるので、SSHして対象ファイルを tail -f する事で確認できます。

具体的には以下のコマンドで実現できます。

# アクセスログ
tail -f /home/userlog/httpd/<ユーザー名>/<ドメイン名>.access_log

# エラーログ
tail -f /home/userlog/httpd/<ユーザー名>/<ドメイン名>.error_log

アクセスログ以外にも、apacheのエラーログも確認できます。

対象のファイルでは1日分のログが出力されており、同じディレクトリ内には gzファイルとしてログファイルが圧縮されており、35日分残っているのを確認することができました。

これを利用して前日分のログを確認することも可能です。

cronで前日のアクセス数をメール通知

ここでは前日のアクセスログを活用してアクセス数(画像やcssなど全てのアクセス数)を把握し、crontabによって 深夜にメール通知するスクリプトを設定します。

前日のアクセス数を取得するためには gz ファイルを確認することで把握できます。例えば当ブログのアクセスログであればこのようになっています (現時点 2024年5月25日 での確認)

$ cd /home/userlog/httpd/<ユーザー名>/ && ls -1 renpro.muchuu.net.access_log_*.gz
renpro.muchuu.net.access_log_20240420.gz
renpro.muchuu.net.access_log_20240421.gz
renpro.muchuu.net.access_log_20240422.gz
renpro.muchuu.net.access_log_20240423.gz
renpro.muchuu.net.access_log_20240424.gz
renpro.muchuu.net.access_log_20240425.gz
renpro.muchuu.net.access_log_20240426.gz
renpro.muchuu.net.access_log_20240427.gz
renpro.muchuu.net.access_log_20240428.gz
renpro.muchuu.net.access_log_20240429.gz
renpro.muchuu.net.access_log_20240430.gz
renpro.muchuu.net.access_log_20240501.gz
renpro.muchuu.net.access_log_20240502.gz
renpro.muchuu.net.access_log_20240503.gz
renpro.muchuu.net.access_log_20240504.gz
renpro.muchuu.net.access_log_20240505.gz
renpro.muchuu.net.access_log_20240506.gz
renpro.muchuu.net.access_log_20240507.gz
renpro.muchuu.net.access_log_20240508.gz
renpro.muchuu.net.access_log_20240509.gz
renpro.muchuu.net.access_log_20240510.gz
renpro.muchuu.net.access_log_20240511.gz
renpro.muchuu.net.access_log_20240512.gz
renpro.muchuu.net.access_log_20240513.gz
renpro.muchuu.net.access_log_20240514.gz
renpro.muchuu.net.access_log_20240515.gz
renpro.muchuu.net.access_log_20240516.gz
renpro.muchuu.net.access_log_20240517.gz
renpro.muchuu.net.access_log_20240518.gz
renpro.muchuu.net.access_log_20240519.gz
renpro.muchuu.net.access_log_20240520.gz
renpro.muchuu.net.access_log_20240521.gz
renpro.muchuu.net.access_log_20240522.gz
renpro.muchuu.net.access_log_20240523.gz
renpro.muchuu.net.access_log_20240524.gz

gz形式でログが残っているので、まずは以下のbashスクリプトを作成します。

#!/bin/bash

yesterday=`date "+%Y%m%d" -d "-1 day"`
path=/home/userlog/httpd/`whoami`/*.access_log_${yesterday}.gz

for f in $(ls $path); do
  COUNT=`zcat $f | wc -l`
  if [ $COUNT == 0 ]; then
    continue
  fi
  echo "$COUNT `basename $f`"
done | sort -n --reverse

実行内容としては

  1. 昨日の日付を取得
  2. 前日分のアクセスログのパスを解決
  3. ホスティングされているドメイン分の一覧を取得
  4. zcatwc -lコマンドでアクセスログの行数を取得
  5. 0回のアクセスは除外
  6. アクセス数とファイル名を表示してアクセス数が多い順に並び替える

結果は以下のようになります。

$ bash bin/access_log_count.sh 
123456789 renpro.muchuu.net.access_log_20240524.gz
12345678 〇〇〇〇.jp.access_log_20240524.gz
1234567 〇〇〇〇.jp.access_log_20240524.gz

続いてcronに設定します。エックスサーバーでの管理画面や以下のコマンドでcrontabを設定できます。

crontab -e

設定する内容は以下

MAILTO=<結果を通知したいメールアドレス>

37 5 * * * /bin/bash /home/<ユーザー名>/bin/access_log_count.sh

これによって指定時間(上記では5時37分)に「(Cron Daemon)」からメールが届くようになります。

レンタルサーバーを最大限使いこなすための方法

Laravelの記事を厳選して紹介

投稿者


Comments

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA