使用 Shell - 分析日志文件
如果您正在运行 Apache(您很可能正在运行),您的服务器上会有一个名为 access_log 的文件,可能位于 /etc/httpd 或类似的目录中。找到它(您可以使用locate或find如果需要)。
首先,让我们看看您收到了多少次点击——也就是说,有多少个单独的文件被提供过。 使用 wc 程序来执行此操作
$ wc -l access_log 83764 access_log
很有趣,但这是一个小时还是一个月的数据? 找出答案的方法是查看 access_log 本身的第一行和最后一行,这很容易通过 head 和 tail 命令完成
$ head -1 access_log 140.192.64.26 - - [11/Jul/2006:16:00:59 -0600] ↪"GET /favicon.ico HTTP/1.1" 404 36717 "-" "-" $ tail -1 access_log 72.82.44.66 - - [11/Jul/2006:22:15:14 -0600] ↪"GET /individual-entry-javascript.js HTTP/1.1" ↪200 2374 "http://www.askdavetaylor.com/ ↪sync_motorola_razr_v3c_with_windows_xp_via_bluetooth.html" ↪"Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; ↪.NET CLR 1.1.4322; .NET CLR 2.0.50727)"
这些日志文件行可能会令人困惑,所以如果您看到它们并完全困惑,请不要惊慌。 好消息是,没有必要了解每个字段的详细信息。 事实上,我们只关心方括号中的日期和时间,以及“GET”行之后请求的单个文件的名称。
在这里,您可以看到访问日志中的第一行来自 7 月 11 日 16:00:59,最后一行来自 7 月 11 日 22:15:14。 计算一下,我们讨论的是大约 6 小时 15 分钟或 375 分钟的窗口。 将总点击数除以这段时间,我们看到每分钟 223 次点击,或者每秒 3.7 次点击的相当可观的流量水平。
第二个常见的查询是确定哪些文件被请求的频率最高,我们可以通过快速调用 awk 从日志文件行中拆分该字段来确定,然后将 sort 和 uniq 及其非常有用的 -c 选项组合起来。
让我们一次完成一步。
如果您回到上面显示的日志文件行,您会发现包含该值的是第七个字段,这意味着我们可以像这样提取它
$ head access_log | awk '{print $7}' /favicon.ico /0-blog-pics/itunes-pc-advanced-importing-prefs.png /0-blog-pics/itunes-pc-importing-song.png /styles-site.css /individual-entry-javascript.js /motorola_razr_v3c_and_mac_os_x_transfer_pictures_and_wallpaper.html /Graphics/header-paper2.jpg /Graphics/pinstripebg.gif /0-blog-pics/bluetooth-razr-configured.png /0-blog-pics/itunes-pc-library-sting.png
当您有一个长长的数据列表时,您可以通过对所有内容进行排序,然后使用 uniq 命令来找出每一行发生的频率,从而找出最受欢迎的单个事件。 然后再次使用 sort,这次从该数据中排序数据,并以最大数值到最小数值为前缀。
这是一个中间结果,可以帮助您了解正在发生的事情
$ awk '{print $7}' access_log | sort | uniq -c | head 535 / 26 //favicon.ico 6 //signup.cgi 1 /0-blog-pics/MVP-Combo_picture.jpg 2 /0-blog-pics/address-book-import.jpg 4 /0-blog-pics/adwords-psp-bids.png 28 /0-blog-pics/aim-congrats-account.png 28 /0-blog-pics/aim-create-screen-name.png 38 /0-blog-pics/aim-delete-screenname-mac.png 29 /0-blog-pics/aim-forget-password.png
剩下的就是按最受欢迎程度排序,然后删除除最匹配的几个之外的所有匹配项
$ awk '{print $7}' access_log | sort | uniq -c | sort -rn | head 6176 /favicon.ico 5807 /styles-site.css 5733 /Graphics/header-paper2.jpg 5655 /Graphics/pinstripebg.gif 5512 /individual-entry-javascript.js 5458 /Graphics/marker-tray.gif 5366 /Graphics/help-button.jpg 5363 /Graphics/digman.gif 5359 /Graphics/delicious.gif 5323 /0-blog-pics/starbucks-hot-coffee.jpg
您首先会注意到这与页面无关,而是与图形有关。 这并不奇怪,因为就像大多数网站一样,我自己的 AskDaveTaylor.com 的图形在所有页面上共享,这使得图形的请求频率高于任何给定的 HTML 页面。
幸运的是,我们可以通过简单地使用 grep 程序来过滤过滤器序列的最终结果来强制结果为 HTML 页面
$ awk '{print $7}' access_log | sort | uniq -c | sort -rn ↪| grep "\.html" | head 446 /motorola_razr_v3c_and_mac_os_x_transfer_pictures_and_wallpaper.html 355 /how_to_create_new_screen_names_on_aol_america_online.html 346 /how_do_i_cancel_my_america_online_aol_account.html 293 /pc_to_sony_psp_how_do_i_download_music.html 206 /how_do_i_get_photos_and_music_onto_my_sony_psp.html 198 /how_do_i_get_my_wireless_wep_password_for_my_sony_psp.html 195 /cant_get_standalone_music_player_to_work_on_myspace.html 172 /convert_wma_from_windows_media_player_into_mp3_files.html 166 /sync_motorola_razr_v3c_with_windows_xp_via_bluetooth.html 123 /how_do_i_create_a_new_screen_name_in_aol_america_online_90.html
Dave Taylor 是一位拥有 26 年经验的 UNIX 老手,Elm 邮件系统的创建者,也是最近畅销的 Wicked Cool Shell Scripts 和 Teach Yourself Unix in 24 Hours 的作者,他著有 16 本技术书籍。 他的主要网站是 www.intuitive.com。