web-dev-qa-db-ja.com

nginxログからユーザーエージェントのリストを取得する

Nginxのログファイルがあり、ブラウザのメジャーバージョンごとの市場シェアを知りたい。マイナーバージョンやオペレーティングシステムには興味がありません。私はこのようなものを手に入れたいです:

100 IE6
 99 IE7
 20 IE8
200 FF2
300 FF3

ファイルからユーザーエージェントのリストを取得する方法は知っていますが、リストを集約してブラウザーのメジャーバージョンのみを表示したいと思います。それを行うツールはありますか?

6
Željko Filipin
_awk -F'"' '/GET/ {print $6}' /var/log/nginx-access.log | cut -d' ' -f1 | sort | uniq -c | sort -rn
_
  • awk(1)-GETリクエストの完全なユーザーエージェント文字列を選択する
  • cut(1)-最初のWordを使用する
  • sort(1)-並べ替え
  • uniq(1)-カウント
  • sort(1)-カウントによるソート、逆順

PS。もちろん、1つのawk/sed/Perl/python/etcスクリプトで置き換えることができます。 unix-wayがいかに豊かであるかを示したかっただけです。

19
SaveTheRbtz

SaveTheRbtzによる1つのライナー がこの作業を行いますが、nginxアクセスログを解析するのに数時間かかりました。

これは彼に基づくより高速なバージョンで、100 MBのログファイル(約100万行に相当)あたり1分もかかりません。

sed -n 's!.* "GET.* "\([[:alnum:].]\+/*[[:digit:].]*\)[^"]*"$!\1!p' /var/log/nginx/access.log | sort | uniq -c | sort -rfg

これは、Apacheのnginxcombined形式と同じであり、User-Agentで区切られた最後のフィールドとして"を持つhttpdのデフォルトアクセスログ形式で動作します。

6
simonair

これは、fgrepcutを使用した、受け入れられた回答のわずかなバリエーションです。

cat your_file.log | fgrep '"GET ' | cut -d'"' -f6 | cut -d' ' -f1 | sort | uniq -c | sort -rn

可能であれば、「弱い」コマンドを使用することに魅力的な点があります。

3
solidsnack

Awstats トリックを実行する必要がありますが、はるかに多くの情報を提供します。これがお役に立てば幸いです...

2

Webalizer で実行できます。

例:

webalizer -o reports_folder -M 5 log_file
  • -o reports_folderは、レポートが生成されるフォルダーを指定します
  • -M 5は、ブラウザ名とメジャーバージョン番号のみを表示します
  • log_fileはログファイル名を指定します
  • ソース: ftp://ftp.mrunix.net/pub/webalizer/README
2
Željko Filipin

ユーザーエージェントを取得するには

Sudo awk -F"\"" '{print $6}' /var/log/nginx/access.log | sort | uniq -dc
1
Arun

そのためにシェルスクリプトを使用します。猫、awkパイプ、並べ替え、uniqが機能します

0
alexus