Home > linux Archive
linux Archive
UVC対応 オートフォーカスWEBカメラ CMS-V24SETSV

- Comments (Close): 0
- TrackBacks: 0
SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。(改訂版)
- 2008年5月 5日 22:55
- linux
サーバーのログをメールで配信する方法です。
昔作ったこれの改定版です。
前のは、ログローテーションとか関係無しにとりあえずログを引っ張ってくるだけであまり機能的ではなかったので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
- Comments (Close): 0
- TrackBacks: 0
SyslogやMaillogを毎日定期的にもっと簡単に監視できるようにしてみましょう。
- 2004年6月21日 00:00
- linux
毎日記録されるさまざまなログをメールで配信されるようにシェルスクリプトを組みます。
自宅サーバといえどもセキュリティー確保には毎日ログチェックをしたほうがいいに決まってる。でも、いちいちサーバに接続してコマンドを打つのも面倒くさい。もっといい方法ないかなぁって思いログをメールで配信することを思いつきました。
動作内容はSyslog/Maillogの中から当日のログを切り出し指定するメールアドレスへ配信としました。
【2008/05/05更新】まともに動くやつを作りました。http://blog1.papanda.jp/2008/05/syslogmaillog-1.html
#!/bin/sh
#Syslogの取得設定
( echo "---Syslog-----------------------------------------------"
grep "$(date +"%b %d")" /var/log/messages
echo "---Syslog_End-------------------------------------------"
echo ""
#Maillogの取得設定
echo "---Maillog---------------------------------------------"
grep "$(date +"%b %d")" /var/log/maillog
echo "---Maillog_End------------------------------------------"
#ログをメール配信する。
echo "" ) | mail -s ServerLog_Infomation info@exsmple.jp
Apacheのログを取得する場合はSyslogの取得設定の下に追加します。
#Apacheの取得設定
echo ""
echo "---Apache papanda.jp------------------------------------"
grep "$(date +"%d/%b")" /usr/local/apache/logs/access_log
echo "---Apache papanda.jp_End--------------------------------"
あとはCronで定期的に実行するように設定します。
これで設定は終わりですが、問題があります。それはログローテーションを行う時間によっては対象となるログを切り出せないことです。
この問題に関しては後々、解決したいと思います^^;
- Comments (Close): 0
- TrackBacks: 0
Home > linux Archive