Blog ブログ

アクセスログからAPIの呼び出された回数を調べる

どうも、CCS田中でございます。
漢字タイプしなくて良いように、CCSTNKにしてしまいましょうか。

今回、CUIの基礎編です。

サーバ運用している際に
この1時間でどのAPIにどれだけアクセスがあったのか、算出する事ができますか?

本日、そういった基本的な内容になります。

アクセス情報を見てみる

それでは、早速アクセスログを利用して見ていきましょう。
今回、Apacheのアクセスログを利用したいと思います。

まず初めに、アクセスログを普通に見てみましょう。

  • >less /var/log/httpd/access_log
  • xxx.xxx.xxx.xxx - - [19/Apr/2015:06:46:41 +0900] "GET / HTTP/1.1" 403 5039 "-" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/41.0.2251.0 Safari/537.36"

ちゃんと中身みれます。
それでは、これを解析していきましょう。

整形結果を見る

先に整形した結果を見てしまいましょう。
こんな感じになります。

  • 1 http://sample.net
  • 2 /sample/hoge/
  • 1 /sample/fuga/

順番に絞っていきましょう。

必要な情報だけ取得する

  • cat /var/log/httpd/access_log | cut -d ' ' -f 7 | uniq -c

先ほどのアクセスログにいくつか情報が含まれている事がわかります。
よく見てみると、情報毎にスペースで区切られています。

そんな時、cutコマンドの登場です。
-d (delimiter) にスペースを指定する事で、情報を抜き出す事が可能です。
-f に何番目の要素を抜き出すか指定です。

これで、アクセスログからアクセス先を取得が可能です。
(uniqコマンドで重複した結果をまとめております)

時間を絞る

こうなれば残りが時間絞りだけです。
そこで登場、grepです。

  • # 2015/04/24 12:00 ~ 12:59のログ取得
  • cat /var/log/httpd/access_log | grep "24/Apr/2015:12:[0-9][0-9]" | cut -d ' ' -f 7 | uniq -c

これで時間単位の内容を取得する事が出来ました。
フィルタ条件変更するだけなので、他の時間や日付も絞れます。

応用編

cutの取得箇所を変更すれば、ユーザ毎のアクセス数を調べる事も可能です。
明らかにアクセスしすぎているか調べてみましょう。

順番変更するだけですね。

  • >cat /var/log/access_log | cut-d ' ' -f 1 | unique -c
  • 2 xxx.xxx.xxx.xxx
  • 2 xxx.xxx.xxx.xxx
  • 1 xxx.xxx.xxx.xxx

最後に

フォーマットさえ決めてしまえば、アクセスログ限らず必要な情報を取得する事が可能です。
前々回利用した、ネットワークパケットキャプチャしたログにも、使ってみると色々遊べると思います。

採用情報

クラウドクリエイティブスタジオでは絶賛エンジニア募集中でございます。
ご興味ございます方。募集中、募集中でございます。
採用情報