レンタルサーバー・自宅サーバー設定・構築のヒント
レンタルサーバー・自宅サーバー設定・構築のヒント - レンタルサーバー・自宅サーバーの設定・構築情報を公開しています。

LogWatchを使ってみる ( nginxの設定例 )

2012年11月14日 2015年5月14日
logwatch

LogWatchとは、文字通り、ロギング情報を監視してくれる便利なツールです。一応、LogWatch公式サイトの英文の翻訳は、以下のとおりです。

Logwatchは、
カスタマイズ可能なログ解析システムです。 Logwatchは、システムのログを解析し、指定したログを分析するレポートを作成します。 Logwatchは簡単で、ほとんどのシステム上でパッケージをインストールするとすぐに動作するでしょう。

上記の英文翻訳のとおり簡単で、インストールするだけで、(root宛てにメールで)基本的なシステム状態を毎日レポートしてくれます。

ただ、nginx(Webサーバー)など独自でインストールしたものは、自前で設定しないとLogWatchで監視、レポートしてくれません。

そこで、今回は、LogWatchのインストールからnginx(Webサーバー)のログ情報を LogWatchで監視、レポートするまでを簡単に解説してみます。

LogWatchのインストールを行う

まずは、LogWatchのインストールを行います。

インストール済みか否かは、それぞれ以下のように確認することができます。

CentOS Scientific Linux

$ rpm -qa|grep logwatch
logwatch-7.3.6-49.el6.noarch
上記のようにパッケージ名が表示されればインストールされています。

Debian Ubuntu

$ dpkg --list|grep logwatch
ii  logwatch                            7.3.6.cvs20090906-1squeeze1  log analyser with nice output written in Perl
先頭に ii が表示されるとインストールされています。

既にインストール済みの場合は、次の設定の項へどうぞ。

CentOS Scientific Linux

$ yum install logwatch
...

Debian Ubuntu

$ aptitude install logwatch
...

これだけで、システムログの解析は行ってくれます。
毎日、root宛てに以下のようなメールでレポートしてくれます。

From - Mon Nov 12 04:26:37 2012
X-Account-Key: account5
X-UIDL: 0000126e4fb0b0c0
X-Mozilla-Status: 0001
X-Mozilla-Status2: 00000000
X-Mozilla-Keys:                                                                                 
Return-Path: <root@exmaple.com>
X-Original-To: root
Delivered-To: root@exmaple.com
Received: by mail.exmaple.com (unknown, from userid 0)
	id 1368434E065; Mon, 12 Nov 2012 04:02:14 +0900 (JST)
To: root@exmaple.com
From: root@exmaple.com
Subject: Logwatch for example (Linux)
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Type: text/plain; charset="iso-8859-1"
Message-Id: <20121111190214.1368434E065@exmaple.com>
Date: Mon, 12 Nov 2012 04:02:07 +0900 (JST)


 ################### Logwatch 7.3.6 (05/19/07) #################### 
        Processing Initiated: Mon Nov 12 04:02:07 2012
        Date Range Processed: yesterday
                              ( 2012-Nov-11 )
                              Period is day.
        Detail Level of Output: 0
        Type of Output/Format: mail / text
        Logfiles for Host: example
  ################################################################## 
 
 --------------------- Cron Begin ------------------------ 

 Errors when running cron:
    grandchild #15678 failed with exit status 1: 1 Time(s)
 
 ---------------------- Cron End ------------------------- 

 
 --------------------- Dovecot Begin ------------------------ 

 
 
 Dovecot disconnects:
    Logged out: 3 Time(s) 
 ---------------------- Dovecot End ------------------------- 

 
 --------------------- Postfix Begin ------------------------ 

    3.942K  Bytes accepted                               4,037
    3.942K  Bytes delivered                              4,037
 ========   ==================================================
 
        4   Accepted                                    80.00%
        1   Rejected                                    20.00%
 --------   --------------------------------------------------
        5   Total                                      100.00%
 ========   ==================================================
 
        1   5xx Reject unknown user                    100.00%
 --------   --------------------------------------------------
        1   Total 5xx Rejects                          100.00%
 ========   ==================================================
 
        4   Connections             
        1   Connections lost (inbound) 
        4   Disconnections          
        4   Removed from queue      
        4   Delivered               
        1   Policy SPF              
 
        1   Hostname verification errors 
 
 
 ---------------------- Postfix End ------------------------- 

 
 --------------------- SSHD Begin ------------------------ 

 
 
 Received disconnect:
    2: disconnected by server request : 2 Time(s)
 
 ---------------------- SSHD End ------------------------- 

 
 --------------------- Disk Space Begin ------------------------ 

 Filesystem            Size  Used Avail Use% Mounted on
 /dev/vda1              38G  1.3G   35G   4% /
 /dev/vdb1              60G  9.2G   47G  17% /var
 
 
 ---------------------- Disk Space End ------------------------- 

 
 ###################### Logwatch End ######################### 

上記のように何も設定しなくてもSSH, Postfix(メールサーバー), Dovecot(POP3/IMAPサーバ) などは、デフォルトで出力してくれます。 ( あくまでログ情報をデフォルトで出力している場合です。 )

httpdサーバーとしてapacheには対応しているようですが、残念ながら、nginxは対応していません。
次に、そのnginxに対応してみます。


nginx の LogWatch 設定を行う

先にも書きましたが、nginx は、 LogWatch のデフォルトの設定の中にありません。

ログ情報をapacheのそれと全く同じに設定していれば、httpd としてLogWatchに出力されると思います。 ただ、nginx のデフォルトの設定では、ログの内容こそ同じように設定されていますが、出力先は別になっています。

そのため、デフォルトの設定では、LogWatch はnginxのログを拾いきれずにレポートできない・・というのが真相です。

この最初は、先の本来の原因から、2つの方法で対処できます。

  • nginxのログの設定をapacheのデフォルトと全く同じにする
  • apacheのLogWatchの設定を真似て、nginx用を作成する

ここでは、後者で対応してみます。

http(apache) の LogWatchのデフォルトファイルをコピーする

http(apache) のLogWatchのスクリプトファイルが1つ、デフォルト設定ファイルが2つの計 3つのファイルをコピーします。
この際、httpnginx へ名前に変更している点に注意してください。

  • /usr/share/logwatch/scripts/services/http

    – LogWatchのサービス毎のスクリプトファイルになります。(perlで記述)

    $ cp /usr/share/logwatch/scripts/services/http /etc/logwatch/scripts/services/nginx

    – /etc/logwatch/conf/logfiles/ : 個別のLogWatchのサービス毎のスクリプトファイルのディレクトリになります。


  • /usr/share/logwatch/default.conf/services/http.conf

    – LogWatchのサービス毎の設定ファイルになります。

    $ cp /usr/share/logwatch/default.conf/services/http.conf /etc/logwatch/conf/services/nginx.conf

    – /etc/logwatch/conf/services/ : 個別のLogWatchのサービス毎の設定ファイルのディレクトリになります。


  • /usr/share/logwatch/default.conf/logfiles/http.conf

    – LogWatchのサービス毎のログファイル設定ファイルになります。

    $ cp /usr/share/logwatch/default.conf/logfiles/http.conf /etc/logwatch/conf/logfiles/nginx.conf

    – /etc/logwatch/conf/logfiles/ : 個別のLogWatchのサービス毎のログファイル設定ファイルのディレクトリになります。


http(apache) の LogWatchの設定ファイルを編集する

http(apache) のLogWatchのスクリプトファイルは、ログの出力情報が同じなので、そのまま使えます。
2つのデフォルト設定ファイルについては、若干の編集が必要です。
その編集箇所について下記に記載します。

/etc/logwatch/conf/services/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
###########################################################################
# Configuration file for http filter
###########################################################################

# **** LogWatchのレポートに出力されるタイトル名を変更します。
# Title = "httpd"
Title = "nginx"

# Which logfile group...
# **** LogWatchで参照するログファイルの設定ファイル名を変更します。
# LogFile = http
LogFile = nginx

# **** LogWatchで認識するログのフォーマットが異なる場合は、ここで設定します。今回は、デフォルトのままです。
# Define the log file format
#
# This is now the same as the LogFormat parameter in the configuration file
# for httpd.  Multiple instances of declared LogFormats in the httpd
# configuration file can be declared here by concatenating them with the
# '|' character.  The default, shown below, includes the Combined Log Format,
# the Common Log Format, and the default SSL log format.
#$LogFormat = "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"|%h %l %u %t \"%r\" %>s %b|%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x \"%r\" %b"

# **** これもフォーマットの定義ですが、下位互換のために残されているだけです。使わないようにしましょう。
# The following is supported for backwards compatibility, but deprecated:
# Define the log file format
#
#   the only currently supported fields are:
#                       client_ip
#                       request
#                       http_rc
#                       bytes_transfered
#                       agent
#
#$HTTP_FIELDS = "client_ip ident userid timestamp request http_rc bytes_transfered referrer agent"
#$HTTP_FORMAT = "space     space space    brace    quote   space        space       quote   quote"
# Define the field formats
#
#   the only currently supported formats are:
#                       space = space delimited field
#                       quote = quoted ("..") space delimited field
#                       brace = braced ([..]) space delimited field

# **** エラー(4xx 5xx)メッセージを無視するかどうか (1:無視, 0:無視しない)
# Flag to ignore 4xx and 5xx error messages as possible hack attempts
#
# Set flag to 1 to enable ignore
# or set to 0 to disable
$HTTP_IGNORE_ERROR_HACKS = 0

# **** 無視するURL
# Ignore requests
# Note - will not do ANY processing, counts, etc... just skip it and go to
# the next entry in the log file.
# Examples:
# 1. Ignore all URLs starting with /model/ and ending with 1 to 10 digits
#   $HTTP_IGNORE_URLS = ^/model/\d{1,10}$
#
# 2. Ignore all URLs starting with /model/ and ending with 1 to 10 digits and
#   all URLS starting with /photographer and ending with 1 to 10 digits
#   $HTTP_IGNORE_URLS = ^/model/\d{1,10}$|^/photographer/\d{1,10}$
#   or simply:
#   $HTTP_IGNORE_URLS = ^/(model|photographer)/\d{1,10}$

# **** 無視するIPアドレス
# To ignore a range of IP addresses completely from the log analysis,
# set $HTTP_IGNORE_IPS. For example, to ignore all local IP addresses:
#
#   $HTTP_IGNORE_IPS = ^10\.|^172\.(1[6-9]|2[0-9]|3[01])\.|^192\.168\.|^127\.
#

# **** ユーザ情報を出力するかどうか (1:出力する,0:出力しない)
# **** 要は、ユーザ認証が必要なページへアクセスした際に、アクセスしたユーザ情報を出力するかどうかという意味。
# The variable $HTTP_USER_DISPLAY defines which user accesses are displayed.
# The default is not to display user accesses:
$HTTP_USER_DISPLAY = 0
# To display access failures:
# $HTTP_USER_DISPLAY = "$field{http_rc} >= 400"
# To display all user accesses except "Unauthorized":
# $HTTP_USER_DISPLAY = "$field{http_rc} != 401"


# vi: shiftwidth=3 tabstop=3 et
  • 7行目:タイトルを変更しています。

    これで、LogWatchのレポートには、nginx として出力されます。

  • 12行目:ログファイルの設定ファイル名を変更しています。

    これで、上記にコピーしたファイルを参照しに行ってくれます。
    スクリプトファイルは、
    /usr/share/logwatch/scripts/services/nginx or
    /etc/logwatch/scripts/services/nginx
    を探します。

    サービス毎の設定ファイルは、
    /usr/share/logwatch/default.conf/services/nginx.conf or
    /etc/logwatch/conf/services/nginx.conf
    を探します。

    サービス毎のログファイル設定ファイルは、
    /usr/share/logwatch/default.conf/logfiles/nginx.conf or
    /etc/logwatch/conf/logfiles/nginx.conf
    を探します。


/etc/logwatch/conf/logfiles/nginx.conf

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
########################################################
#   Define log file group for httpd
########################################################

# What actual file?  Defaults to LogPath if not absolute path....
# **** LogWatchでログファイルを探すファイル名(ワイルドカード使用可)を変更します。
#LogFile = httpd/*access_log
#LogFile = apache/*access.log.1
#LogFile = apache/*access.log
#LogFile = apache2/*access.log.1
#LogFile = apache2/*access.log
#LogFile = apache2/*access_log
#LogFile = apache-ssl/*access.log.1
#LogFile = apache-ssl/*access.log
LogFile = /var/log/nginx/*access.log


# If the archives are searched, here is one or more line
# (optionally containing wildcards) that tell where they are...
#If you use a "-" in naming add that as well -mgt
# **** LogWatchでアーカイブログファイルを探すファイル名(ワイルドカード使用可)を変更します。
#Archive = archiv/httpd/*access_log.*
#Archive = httpd/*access_log.*
#Archive = apache/*access.log.*.gz
#Archive = apache2/*access.log.*.gz
#Archive = apache2/*access_log.*.gz
#Archive = apache-ssl/*access.log.*.gz
Archive = /var/log/nginx/*access.log.*.gz


# Expand the repeats (actually just removes them now)
*ExpandRepeats


# Keep only the lines in the proper date range...
*ApplyhttpDate

# vi: shiftwidth=3 tabstop=3 et
  • 15行目:ログファイル名を変更しています。

    ここでは、絶対パス(先頭 “/” )を指定しています。
    先頭 “/“がない場合は、デフォルトルートログディレクトリの配下と認識します。

    デフォルトルートログディレクトリは、LogWatchの設定ファイルに指定されています。
    /usr/share/logwatch/default.conf/logwatch.conf

    LogDir = /var/log

    で指定しているディレクトリがデフォルトルートログディレクトリになります。

  • 28行目:アーカイブログファイル名を変更しています。

    ここでも先と同様に絶対パス(先頭 “/” )を指定しています。同様に先頭 “/“を省略して記述することもできます。

    ここでの指定は、logrotateによるログファイルの保存の仕方に依存します。
    ( 参照 : ログローテーション(logrotate)を使ってみる ( httpd(apache)の設定例 ) )

    LogWatchの基本動作は、昨日のログを解析してレポートします。 昨日のログが15行目で指定した最新のログファイルより前にある可能性が場合は、ここで指定しているアーカイブログファイルを探しに行きます。



nginx の LogWatch をテストしてみる

LogWatch の動作確認は、コマンドで確認することができます。

# 出力先の指定方法が各ディストリビューションで異なります。
CentOS Scientific Linux
$ logwatch --print --service nginx --range today

Debian Ubuntu
$ logwatch --output stdout --service nginx --range today


 ################### Logwatch 7.3.6 (05/19/07) ####################
        Processing Initiated: Tue Nov 13 11:53:47 2012
        Date Range Processed: today
                              ( 2012-Nov-13 )
                              Period is day.
        Detail Level of Output: 0
        Type of Output/Format: stdout / text
        Logfiles for Host: example
  ##################################################################

 --------------------- nginx Begin ------------------------

 A total of 52 sites probed the server
    101.1.104.116
    110.164.252.2
    ....

 A total of 1 possible successful probes were detected (the following URLs
 contain strings that match one or more of a listing of strings that
 indicate a possible exploit):

    //index.php?option=com_phocadownload&controller=../../../ ... HTTP Response 301

 Requests with error response codes
    400 Bad Request
       null: 183 Time(s)
    401 Unauthorized
       /test/sasa/: 1 Time(s)
    404 Not Found
       /MyAdmin/scripts/setup.php: 1 Time(s)
       /apple-touch-icon-precomposed.png: 3 Time(s)
       /apple-touch-icon.png: 3 Time(s)
       ...
    499 (undefined)
       /apple-touch-icon-precomposed.png: 1 Time(s)
       /categories/rakuten/index.php?id=552710: 1 Time(s)
    500 Internal Server Error
       /wp-comments-post.php: 14 Time(s)
       /wp-comments-post.php?lang=en: 19 Time(s)
       /wp-comments-post.php?lang=ja: 1 Time(s)

 ---------------------- nginx End -------------------------


 ###################### Logwatch End #########################

こんな感じで出力されればOKです。
一応、コマンドについて解説しておきます。

$ logwatch --help

Usage: /usr/sbin/logwatch [--detail <level>] [--logfile <name>] [--output <output_type>]
   [--format <format_type>] [--encode <enconding>] [--numeric]
   [--mailto <addr>] [--archives] [--range <range>] [--debug <level>]
   [--filename <filename>] [--help|--usage] [--version] [--service <name>]
   [--hostformat <host_format type>] [--hostlimit <host1,host2>] [--html_wrap <num_characters>]

--detail <level>: Report Detail Level - High, Med, Low or any #.
--logfile <name>: *Name of a logfile definition to report on.
--logdir <name>: Name of default directory where logs are stored.
# ****  --service : サービス名を指定します。
--service <name>: *Name of a service definition to report on.
# ****  --output : 出力先を指定します。CentOSでは、--print で --output stdout と同じ結果(標準出力先指定)を得ます。
--output <output type>: Report Output - stdout [default], mail, file.
--format <formatting>: Report Format - text [default], html.
--encode <encoding>: Enconding to use - none [default], base64.
--mailto <addr>: Mail report to <addr>.
--archives: Use archived log files too.
--filename <filename>: Used to specify they filename to save to. --filename <filename> [Forces output to file].
# ****  --range : ログを解析する時間範囲を指定します。デフォルト:昨日です。
--range <range>: Date range: Yesterday, Today, All, Help
                             where help will describe additional options
--numeric: Display addresses numerically rather than symbolically and numerically
           (saves  a  nameserver address-to-name lookup).
--debug <level>: Debug Level - High, Med, Low or any #.
--hostformat: Host Based Report Options - none [default], split, splitmail.
--hostlimit: Limit report to hostname - host1,host2.
--html_wrap <num_characters>: Default is 80.
--version: Displays current version.
--help: This message.
--usage: Same as --help.
* = Switch can be specified multiple times...

とりあえずテストなので、最小限のオプションを指定しています。

しかし、この出力結果は、省略していますが、かなり、アタックされた形跡がありますね。ほとんどはJoomla!系のアタックのようですが、ちゃんと確認しておかないと、あぶないですね。

httpd(apache or nginx)のログは、非常に大事です。参考記事:アクセスログの活用
このLogWatchでは、その中で重要な部分だけを切り出してくれる非常に便利なツールです。

上記出力例を簡単に解説すると、

  • A total of 52 sites probed the server : アタックしたかもしれないIPアドレスが52件あります。
  • A total of 1 possible successful probes … : 以下のURLでは、アタックが突破されたかもしれないURLアドレスが1件あります。
  • Requests with error response codes : エラーコードを出力した要求URLの一覧です。
こんな感じの意味になります。

上記のログは、非常に危険ですね。ちゃんと確認しておきましょう。

人気のサイトであればあるほど、アタックは多くなります。
LogWatchを確認しておけばOKというわけではありませんが、少なくとも、これぐらいのチェックは行っておきましょう。
ご利用のブラウザは、広告ブロック(AdBlockなど) が適用となっていませんか?
このサイトでは、コンテンツの一部が非表示、あるいは、コメント、お問い合わせの投稿ができない検索ができないことがあります。


関連記事 :

php-fpm のLogWatchの設定を行ってみる

LogWatchを使ってみる ( nginxの設定例 ) でLogWatchのインストールとnginxのLogWatchの設定を行ってみました。 ...

LogWatchで独自のログを収集させるには

LogWatchを使ってみる ( nginxの設定例 ) や php-fpm のLogWatchの設定を行ってみる では、LogWatchの設定 ...

CentOS 7 でLAMP(Nginx+MariaDB(MySQL)+PHP)インストールからWordPressを動かすまで(Nginx編)

今回は、CentOS,ScientificLinuxでLAMP(Nginx+MySQL+PHP)インストールからWordPressを ...

Squidをリバースプロキシとして使ってみた

このサイトでは、リバースプロキシに関して、Nginxを使って実現する Nginx をリバースプロキシ(キャッシュ) として使ってみた という記事 ...

Nginx でログファイルの再オープンで失敗する場合の対応は

以前に、「Nginx のログをログローテーションに対応させるには」で ログローテーション ( logrotate ) のnginx 対応につ ...



コメントを投稿 :

お名前 *

メールアドレス *
( メールアドレスが公開されることはありません。)

サイトアドレス

コメント *

* 印の項目は、入力が必要な項目です。




最近投稿の記事

[ 画像提供元 : Amazon ] 先日、1TBのディスクの入れ替え時にバックアップをとろうとディスクコピーを行いました。 その際 ...

Windows で Linux ファイルシステム Ext4 のディスクをマウントするには? Ext3Fsd が、おそらく、最も簡単なツール ...

今回は、Windows で Compass を使ってみました。 Compass とは、 Sass(サス、Syntactica ...

今回は、Anti Adblock を使ってみました。 Anti Adblock とは、 そもそも Adblock という ウェブ ...

デスクトップ環境でない サーバーで、Webページのキャプチャー画像をコマンドで撮る には、wkhtmltoimage, CutyCapt ...


さくらのVPS 全プラン リニューアルです。(石狩(北海道)も選択可)


root権限ありで ¥685 / 月 ~ と非常にリーズナブルな CPU 1(core)の 512 プランから、 最高 CPU 10(core), メモリ 32(GB), SSD容量 800(GB) までとプランが充実。
ディスクは、SSDとHDDの選択が可能になった他、データセンターは人気の東京、石狩(北海道)となりました。

また、どのプランでも好きなOSが選べます
( CentOS, Fedora, Scientific Linux, FreeBSD, Ubutu, Debian )

管理人もおすすめのVPSです。
試用期間がありますから、一度、お試しを!!

詳しくは、http://vps.sakura.ad.jp/さくらのVPSのサイトへ へどうぞ!!

カテゴリ


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。


Serverman@VPS 完全1ヶ月無料 キャンペーン実施中です。
最近、スワップにも対応した Serverman@VPS は、かなりリーズナブルかもです。

  • メモリ1GB~2GBのEntryプラン :月額:490円
  • メモリ2MB~4GBのStandardプラン :月額:980円
  • メモリ4GB~8GBのProプラン :月額:1,980円

新規申し込みで1ヶ月間完全無料となるキャンペーンを実施中です。
Serverman@VPSの特徴は、安さとIPv6対応です。また、初期設定費0円もポイントです。

IPv6でちょっと遊んでみたい方には、おすすめかもしれませんね。最低利用期間もありませんから、気に入らないときは即解約もできます。

Serverman@VPSの詳細については、 http://dream.jp/vps/ Serverman@VPSのサイトへへどうぞ。



KVM採用 ConoHa VPSは、時間単位で借りれる便利なVPSです。


ConoHa VPS は、初期設定費0円最低利用期間無し時間単位で清算可能、 さらに、Web APIを使って自動化を図ることもできる便利なVPSです。

海外サーバー設置も可能で、ローカル接続にも対応と、かなり、機能豊富なサーバーです。

新規ユーザ登録で、クーポンもらえますから、まずは、お試しですね。

ConoHa VPSの詳細については、
http://www.conoha.jp/ へどうぞ。

KVM採用 お名前.com VPS(KVM) 2G プラン 初期設定費無料 キャンペーン 実施です。


メモリ2GBプラン CPU:3core、Disk:200GB
月額:1,153円から (初期設定:1,680円0円)

さくらのVPSがリニューアルされてもなんのその。
1GBメモリ / 2Core を ¥834 – の格安価格で提供中です!
間違いなくスペックからすると割安感ありです。
年間割引時の途中解約で返金がないのは、 ちょっと残念ですが、それでもこの割安感は魅力です。

まずは、お試しですね。

お名前.com VPS(KVM)の詳細については、
http://www.onamae-server.com/vps/ へどうぞ。(お試し期間が15日あります。)



  • ソーシャルブックマーク

  • はてなブックマークへ追加するはてな登録数
ページトップへ
Time : 0.2727 [s]