テックブログ

apache-loggenでログを作成してみる

はじめに

こんにちは。kkです。

皆さんはふと、「好き勝手にできるApacheのログが欲しい…」となったことはないでしょうか。
例えば、「Apacheのログをもとに解析をしてみたい」や「awkコマンドやsedコマンドの練習としてサンプルログがほしい」などなど、様々な場面でApacheのログが欲しくなりませんか?

ただ、急に欲しいとなってもコンテンツが乗っている本番サーバのログを
使用するわけにはいかないですよね。
はたまた自分のサーバへApacheを導入してログを収集するにしても、
多くの種類のログを収集しようには外部からのアクセスを許可しないといけないので
セキュリティ的に不安が残ります。

前置きが長くなりましたが、そんなときに役立つのが「apache-loggen」です。
こいつはApacheのサンプルログを作成してくれる優れものです。

今回は「apache-loggen」の導入や使い方についてお話していきます。

apache-loggenを導入しよう

それでは早速、「apache-loggen」をインストールしていきましょう。
apache-loggenはRubyで作成されており「gem」コマンドにてインストール可能です。

それではインストールしてみます。

$ sudo gem install apache-loggen
Building native extensions. This could take a while...
ERROR:  Error installing apache-loggen:
        ERROR: Failed to build gem native extension.

    current directory: /usr/local/share/gems/gems/json-2.6.3/ext/json/ext/generator
/usr/bin/ruby -r ./siteconf20230702-22089-1cvgg17.rb extconf.rb
mkmf.rb can't find header files for ruby at /usr/share/include/ruby.h

extconf failed, exit code 1

Gem files will remain installed in /usr/local/share/gems/gems/json-2.6.3 for inspection.
Results logged to /usr/local/lib64/gems/ruby/json-2.6.3/gem_make.out

早々にこけてしまいました。
「ruby-devel」が必要みたいです。

$ sudo yum install ruby-devel
~略~
インストール済み:
  ruby-devel-2.5.9-110.module_el8.6.0+3074+4b08f9d4.x86_64
完了しました!

再度インストールしてみましょう。

$ sudo gem install apache-loggen
Building native extensions. This could take a while...
Successfully installed json-2.6.3
Fetching: apache-loggen-0.0.5.gem (100%)
Successfully installed apache-loggen-0.0.5
2 gems installed

今度は成功しましたね。
インストールはこれだけです。

それでは実際にサンプルログを作成していきたいと思います。

サンプルログの作成しよう

まずは500行分のログを作成してみます。

$ apache-loggen --limit=500 test1.log
$

「limit」で最大件数を指定できます。

$ wc -l test1.log
500 test1.log

確かに500行のログが出力されています。

$ head -3 test1.log
84.123.218.144 - - [02/Jul/2023:19:34:55 +0900] "POST /search/?c=Software HTTP/1.1" 200 41 "/item/books/4393" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
196.195.122.212 - - [02/Jul/2023:19:34:55 +0900] "GET /category/music HTTP/1.1" 200 50 "/item/electronics/781" "Mozilla/5.0 (Windows NT 6.0) AppleWebKit/535.11 (KHTML, like Gecko) Chrome/17.0.963.56 Safari/535.11"
152.141.120.134 - - [02/Jul/2023:19:34:55 +0900] "GET /item/books/4538 HTTP/1.1" 200 49 "http://www.google.com/search?ie=UTF-8&q=google&sclient=psy-ab&q=Books&oq=Books&aq=f&aqi=g-vL1&aql=&pbx=1&bav=on.2,or.r_gc.r_pw.r_qf.,cf.osb&biw=3834&bih=512" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 6.1; WOW64; Trident/4.0; YTB730; GTB7.2; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E; Media Center PC 6.0)"

$ tail -3 test1.log
132.150.154.152 - - [02/Jul/2023:19:34:55 +0900] "GET /item/office/2664 HTTP/1.1" 200 100 "/category/books?from=10" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.6; rv:9.0.1) Gecko/20100101 Firefox/9.0.1"
24.204.80.23 - - [02/Jul/2023:19:34:55 +0900] "GET /item/electronics/4447 HTTP/1.1" 200 112 "/category/games" "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)"
196.93.51.84 - - [02/Jul/2023:19:34:55 +0900] "GET /category/books HTTP/1.1" 200 106 "-" "Mozilla/5.0 (compatible; Googlebot/2.1; +http://www.google.com/bot.html)"

様々なIPからアクセスが来ていますね

$ grep '02/Jul/2023:19:34:55' test1.log -c
500

しかし既にお気づきの方もおられるかもしれませんが上記のログの時間が、
全て同一になってしまっています。
これでは少し使いにくいですね。

次は時間をばらけさせてみましょう。

$ apache-loggen --rate=50 test2.log

「rate」を使用することで1秒ごとに出力する件数を指定できます。
1分程度放置しておきました。

$ head -1 test2.log
148.63.117.101 - - [02/Jul/2023:19:47:24 +0900] "POST /search/?c=Software+Electronics HTTP/1.1" 200 56 "/search/?c=Software" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:10.0.1) Gecko/20100101 Firefox/10.0.1"

$ tail -1 test2.log
64.33.186.114 - - [02/Jul/2023:19:48:24 +0900] "GET /item/software/3415 HTTP/1.1" 200 58 "-" "Mozilla/5.0 (Windows NT 6.0; rv:10.0.1) Gecko/20100101 Firefox/10.0.1"

最初と最後で時間も変わっています。
このような形でサンプルログの取得が可能となります。

ログを分析しよう

それではせっかくなので作成したログを分析してみましょう。
awkコマンドやsortコマンドを用いて、分析する方が多いかと思います。今回はかなり古いツールになりますが「ApacheLogViewer」を用いてGUIで分析していきたいと思います。

使用するログファイルは上記で作成したtest2.logになります。
下記はtest2.logを読み込ませた初期画面です。
ここから様々な分析を行っていきます。

はじめに、どのIPからのアクセスが多いのか見ていきましょう。

ここでは「132.42.95.133」や「192.222.164.215」が多いみたいですね。

次にリファラを見ていきましょう。

こちらは「/search/」や「/category/electronics」が多いようです。

最後にエラーを見ていきましょう。

「500」エラーが3件出ていました。

ちなみにコマンドで確認しましたが、「500」以外のステータスコードは「200」でした。

$ awk '{print $9}' test2.log | sort | uniq -c
  14767 200
      3 500

最後に

いかがだったでしょうか。
今回はログ分析に「ApacheLogViewer」を使用しましたが、慣れている人なら同様の情報を
コマンドラインにて集計、精査できる為、スピードが求められる際はその方がいいかもしれません。

しかし「ApacheLogViewer」を含めGUIの分析ツールを利用すると、
視覚的に捉えることができ理解がスムーズに進む場合もあります。

私はスムーズにコマンドラインにても必要な情報を取得できるようにするために、
awkコマンドなどの勉強をしておこうと思います。

ここまで読んでくださりありがとうございました。
それではまた。

この記事をシェアする

  • facebook
  • twitter
  • hatena
  • line
URLとタイトルをコピーする

実績数30,000件!
サーバーやネットワークなど
ITインフラのことならネットアシストへ、
お気軽にご相談ください