日志服务支持采集IIS日志,并进行多维度分析。本文通过PV、UV、访问地域分布、错误请求、请求方法等维度分析IIS日志,以评估网站访问情况。

前提条件

已采集IIS日志。具体操作,请参见使用IIS模式采集日志
说明 在采集过程中,日志服务已根据日志内容自动生成索引。如果您要修改索引,请参见配置索引

背景信息

IIS是一款主流的网站服务器,具备简单易用、安全性能高等优势。当您选用IIS搭建网站时,IIS日志是运维网站的重要信息。

日志服务推荐选用W3C日志格式,W3C配置格式如下所示:
logExtFileFlags="Date, Time, ClientIP, UserName, SiteName, ComputerName, ServerIP, Method, UriStem, UriQuery, HttpStatus, Win32Status, BytesSent, BytesRecv, TimeTaken, ServerPort, UserAgent, Cookie, Referer, ProtocolVersion, Host, HttpSubStatus"
IIS日志样例如下所示:
#Software: Microsoft Internet Information Services 7.5
#Version: 1.0
#Date: 2020-09-08 09:30:26
#Fields: date time s-sitename s-ip cs-method cs-uri-stem cs-uri-query s-port cs-username c-ip cs(User-Agent) sc-status sc-substatus sc-win32-status sc-bytes cs-bytes time-taken
2009-11-26 06:14:21 W3SVC692644773 125.67.67.* GET /index.html - 80 - 10.10.10.10 Baiduspider+(+http://www.example.com)200 0 64 185173 296 0
  • 字段前缀说明
    前缀 说明
    s- 服务器操作
    c- 客户端操作
    cs- 客户端到服务器的操作
    sc- 服务器到客户端的操作
  • 各个字段说明
    字段 说明
    date 客户端发送请求的日期。
    time 客户端发送请求的时间。
    s-sitename 客户端所访问的站点的Internet服务和实例的号码。
    s-computername 生成日志的服务器名称。
    s-ip 生成日志的服务器的IP地址。
    cs-method 请求​方法,例如:GET、POST。
    cs-uri-stem ​URI资源,表示请求访问的地址。
    cs-uri-query URI查询,表示查询HTTP请求中半角问号(?)后的信息。
    s-port 服务器端口号。
    cs-username 通过验证的域或用户名。
    • 如果是通过身份验证的用户,格式为域\用户名
    • 如果是匿名用户,显示短划线(-)。
    c-ip 访问服务器的客户端真实IP地址。
    cs-version 协议版本,例如:HTTP 1.0、HTTP 1.1。
    cs(User-Agent) 客户端使用的浏览器。
    Cookie 发送或接受的Cookie内容,如果没有Cookie,则显示短划线(-)。
    referer 表示用户访问的前一个站点。
    cs-host 主机信息。
    sc-status ​HTTP协议返回状态。
    sc-substatus HTTP子协议的状态。
    sc-win32-status ​使用Windows术语表示的操作状态。
    sc-bytes ​服务器发送的字节数。
    cs-bytes ​服务器接收的字节数。
    time-taken ​请求所花费的时间,单位:毫秒。

操作步骤

  1. 登录日志服务控制台
  2. 在Project列表区域,单击目标Project。
  3. 日志存储 > 日志库页签中,单击目标Logstore。
  4. 在搜索框中输入查询分析语句,选择查询的时间范围,然后单击查询/分析

    查询和分析语句由查询语句和分析语句构成,格式为查询语句|分析语句,查询分析语句语法请参见查询语法SQL分析语法

    • 通过IP地址分析访问地域。
      *| select ip_to_geo("c-ip") as country, count(1) as c group by ip_to_geo("c-ip") limit 100
    • 统计PV和UV。
      *| select approx_distinct("c-ip") as uv ,count(1) as pv , date_format(date_trunc('hour', __time__), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', __time__), '%m-%d %H:%i') order by time limit 1000
      pv/uv统计
    • 统计HTTP请求状态码的占比。
      *| select count(1) as pv ,"sc-status" group by "sc-status"
      请求状态占比
    • 统计流量的流入和流出情况。
      *| select sum("sc-bytes") as net_out, sum("cs-bytes") as net_in ,date_format(date_trunc('hour', time), '%m-%d %H:%i') as time group by date_format(date_trunc('hour', time), '%m-%d %H:%i') order by time limit 10000
      出入流量统计
    • 统计各种请求方法的占比。
      *| select count(1) as pv ,"cs-method" group by "cs-method"
      请求方法占比
    • 统计各种浏览器的占比。
      *| select count(1) as pv, case when "user-agent" like '%Chrome%' then 'Chrome' when "user-agent" like '%Firefox%' then 'Firefox' when "user-agent" like '%Safari%' then 'Safari' else 'unKnown' end as "user-agent" group by case when "user-agent" like '%Chrome%' then 'Chrome' when "user-agent" like '%Firefox%' then 'Firefox' when "user-agent" like '%Safari%' then 'Safari' else 'unKnown' end order by pv desc limit 10
      请求UA占比
    • 统计访问数量前十的地址。
      *| select count(1) as pv, split_part("cs-uri-stem",'?',1) as path group by split_part("cs-uri-stem",'?',1) order by pv desc limit 10
      访问前十地址