Home> SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版)
SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版)
- 2008年5月 5日 21:01
サーバーのログをメールで配信する方法です。
昔作ったこれの改定版です。
前のは、ログローテーションとか関係無しにとりあえずログを引っ張ってくるだけであまり機能的ではなかったのでGW中の時間のあるときに作り直しました。
内容としては前回と同じでシスログ・メールログ・ウェブ鯖のログをメールで毎日配信するってやつです。
昔作った部分の不具合部分を修正しました。
- シスログ・メールログ1日から9日までが出力されない。
- apacheログの検索結果が不完全な状態。
- 月末(30日31日)の出力がされない。
- 月初(1日)が表示されない。
下記スクリプトはログローテーションのタイミングが月単位の場合です。
週/日単位でログローテーションをされている方は変更が必要です。
定期的に実行させる為にcronを使うことになりますが、実行時間はログローテーションの実行後に行ってください。
#!/bin/sh
LANG="en_US" <-- 英語表示
declare -i day
##############################
#月日取得処理
##############################
m_flg="0" <-- 月フラグ
m_mon=$(date "+%b") <-- 今月の月取得
day=$(TZ=JST+15 date "+%e") <-- 前日の日取得(取得形式:2桁)
mon=$(TZ=JST+15 date "+%b") <-- 前日の月取得
a_day=$(TZ=JST+15 date "+%d") <-- 前日日取得(取得形式:1桁)
##############################
#月日形式出力
##############################
if [ $day -gt 9 ]; then
sys_day="$mon $day" <--10日以上であれば月と日の間のスペースは1つ
else
sys_day="$mon $day" <--10日未満であれば月と日の間のスペースは2つ
fi
apa_day="$a_day/$mon" <--apache用月日出力
##############################
ログローテーションの一世代目のファイルを検索するかどうかの判定
検索の条件として当日と前日の月が違う場合は前日は前月の最終日となるので
ログローテーションされ対象日付けは一世代目ファイルに書き込まれる為。
前日が1日の場合は対象となる日付けの一部が一世代目ファイルに書き込まれる為。
※ログローテーションのタイミング:月単位の午前4時
if [ $m_mon = $mon ]; then
m_flg="1" <-- 当日と前日の月が同じであれば検索しない
fi
if [ $day = "1" ];then
m_flg="0" <-- 前日が1日であれば検索する
fi
#以下メールで送信される内容
(echo ""
echo "---Syslog----------------------------------------------------------"
if [ $m_flg = "0" ]; then <-- 一世代ログを検索するかどうかの判定
grep "$sys_day" /var/log/messages.1
fi
grep "$sys_day" /var/log/messages
echo "---Syslog_End------------------------------------------------------"
echo ""
echo "---Maillog---------------------------------------------------------"
if [ $m_flg = "0" ]; then
grep "$sys_day" /var/log/maillog.1
fi
grep "$sys_day" /var/log/maillog
echo "---Maillog_End-----------------------------------------------------"
echo ""
echo "---Apache access_log-----------------------------------------------"
if [ $m_flg = "0" ]; then
grep "$apa_day" /usr/local/apache2/logs/access_log.1
fi
grep "$apa_day" /usr/local/apache2/logs/access_log
echo "---Apache papanda.jp_End-------------------------------------------"
echo "" ) | mail -s ServerLog_Infomation[www.exsmple.jp] info@exsmple.com
サーバーのログをメールで配信する方法です。
昔作ったこれの改定版です。
前のは、ログローテーションとか関係無しにとりあえずログを引っ張ってくるだけであまり機能的ではなかったのでGW中の時間のあるときに作り直しました。
内容としては前回と同じでシスログ・メールログ・ウェブ鯖のログをメールで毎日配信するってやつです。
昔作った部分の不具合部分を修正しました。
- シスログ・メールログ1日から9日までが出力されない。
- apacheログの検索結果が不完全な状態。
- 月末(30日31日)の出力がされない。
- 月初(1日)が表示されない。
下記スクリプトはログローテーションのタイミングが月単位の場合です。
週/日単位でログローテーションをされている方は変更が必要です。
定期的に実行させる為にcronを使うことになりますが、実行時間はログローテーションの実行後に行ってください。
#!/bin/sh
LANG="en_US" <-- 英語表示
declare -i day
##############################
#月日取得処理
##############################
m_flg="0" <-- 月フラグ
m_mon=$(date "+%b") <-- 今月の月取得
day=$(TZ=JST+15 date "+%e") <-- 前日の日取得(取得形式:2桁)
mon=$(TZ=JST+15 date "+%b") <-- 前日の月取得
a_day=$(TZ=JST+15 date "+%d") <-- 前日日取得(取得形式:1桁)
##############################
#月日形式出力
##############################
if [ $day -gt 9 ]; then
sys_day="$mon $day" <--10日以上であれば月と日の間のスペースは1つ
else
sys_day="$mon $day" <--10日未満であれば月と日の間のスペースは2つ
fi
apa_day="$a_day/$mon" <--apache用月日出力
##############################
ログローテーションの一世代目のファイルを検索するかどうかの判定
検索の条件として当日と前日の月が違う場合は前日は前月の最終日となるので
ログローテーションされ対象日付けは一世代目ファイルに書き込まれる為。
前日が1日の場合は対象となる日付けの一部が一世代目ファイルに書き込まれる為。
※ログローテーションのタイミング:月単位の午前4時
if [ $m_mon = $mon ]; then
m_flg="1" <-- 当日と前日の月が同じであれば検索しない
fi
if [ $day = "1" ];then
m_flg="0" <-- 前日が1日であれば検索する
fi
#以下メールで送信される内容
(echo ""
echo "---Syslog----------------------------------------------------------"
if [ $m_flg = "0" ]; then <-- 一世代ログを検索するかどうかの判定
grep "$sys_day" /var/log/messages.1
fi
grep "$sys_day" /var/log/messages
echo "---Syslog_End------------------------------------------------------"
echo ""
echo "---Maillog---------------------------------------------------------"
if [ $m_flg = "0" ]; then
grep "$sys_day" /var/log/maillog.1
fi
grep "$sys_day" /var/log/maillog
echo "---Maillog_End-----------------------------------------------------"
echo ""
echo "---Apache access_log-----------------------------------------------"
if [ $m_flg = "0" ]; then
grep "$apa_day" /usr/local/apache2/logs/access_log.1
fi
grep "$apa_day" /usr/local/apache2/logs/access_log
echo "---Apache papanda.jp_End-------------------------------------------"
echo "" ) | mail -s ServerLog_Infomation[www.exsmple.jp] info@exsmple.com
トラックバック:0
- TrackBack URL for this entry
- http://blog1.papanda.jp/cgi-bin/mt-tb.cgi/8
- Listed below are links to weblogs that reference
- SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版) from Linux備忘録
Home> SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版)
コメント:0