網站訪問日誌統計分析

場景

用戶使用ECS搭建網站,網站的訪問日誌(Nginx,Apache訪問日誌)收集到阿里雲日誌服務中供查詢。爲了從訪問日誌中挖掘出更多價值,日誌服務提供了一個docker鏡像,用於實時統計和展示網站訪問的一系列指標,例如PV,UV,延時,地理,狀態碼,爬蟲,網絡流量等指標。

dashboard

dashboard1

指標

PV

分別以5分鐘、1小時、1天爲統計週期,統計每個週期內的日誌總數。

UV

分別以1小時、1天爲統計週期,統計每個週期內的IP總數。

頁面

以天爲統計週期,統計訪問最多的頁面路徑,以及訪問最多的參數。例如請求/fonts/fontawesome-webfont.woff?v=4.2.0,提取出頁面/fonts/fontawesome-webfont.woff 和參數v = 4.2.0

方法

方法指的是HTTP方法,包括GET,POST,DELETE,PUT等。以小時和天爲統計週期,統計每個週期內每個方法的日誌條數。

地理

統計每個IP所屬的省份,展示所選時間段內每個省份的分佈圖。

狀態碼

狀態碼指的是HTTP狀態碼,包括200,401,403,500等常見狀態碼。以小時和天爲統計週期,統計每個週期內的狀態碼次數。

瀏覽器

瀏覽器分爲多個子指標,分別統計每一個子指標出現的次數。包括

  • 終端類型

    • 移動終端
    • 非移動終端
  • 瀏覽器類型

    • chrome
    • safari
    • IE
    • firefox
  • 操作系統

    • mac
    • window
    • linux
  • 瀏覽器內核

    • webkit
    • gecko

爬蟲

統計常見的爬蟲訪問量,常見爬蟲包括百度、Google、360、今日頭條。

來源頁

根據referer統計的來源域名,統計來源最高的20個域名。

延時

  • 統計每5分鐘內的網絡請求的延時的平均值和最大值。
  • 統計每天分佈最多的延時的分佈情況。出現次數較少的延時區間不會加入統計,比如一天內只有一次延時爲8s,大部分的延時都在0.3s 到 0.5s之間,那麼只會統計0.3->0.4, 0.4->0.5的延時分佈。

流量

以小時爲單位,根據request_length字段和response_length字段,統計訪問的入網流量和出網流量的大小。

使用視頻

必要條件

  • Nginx/Apache訪問日誌必須接入到阿里雲日誌服務
  • 開通日誌服務
  • 開通容器服務(或自己安裝docker鏡像)
  • 有阿里雲AccessKey可以訪問日誌服務(可以是子帳號)

帳號權限

如果您使用子帳號授權,請參考下邊的權限配置,將${your_project}替換成你的Project名稱,${your_logstore}替換成您的訪問日誌所在的Logstore。

{
  "Version": "1",
  "Statement": [
    {
      "Action": [
        "log:Get*",
        "log:List*"
      ],
      "Resource": "acs:log:*:*:project/${your_project}/logstore/${your_logstore}",
      "Effect": "Allow"
    },
    {
      "Action": [
        "log:CreateConsumerGroup",
        "log:ListConsumerGroup",
        "log:ConsumerGroupUpdateCheckPoint",
        "log:ConsumerGroupHeartBeat",
        "log:GetConsumerGroupCheckPoint"
      ],
      "Resource": "acs:log:*:*:project/${your_project}/logstore/${your_logstore}/consumergroup/*",
      "Effect": "Allow"
    }
  ]
}

非必要條件

  • 自建mysql或者RDS(默認使用docker鏡像內的mysql)

實施步驟

實施步驟以ubuntu系統爲例,其他系統請以本文檔做參考

通過容器服務:

  1. 訪問日誌接入到阿里雲日誌服務,具體接入方法請參考阿里雲日誌服務文檔。
  2. 開通容器服務
  3. 在容器服務中創建集羣,操作系統選擇ubuntu。
  4. 在容器服務中創建應用

    1. 應用名稱輸入dashboard(或自定義)。
    2. 部署集羣選擇剛剛創建的集羣。
    3. 點擊「使用鏡像創建」。
    4. 點擊選擇鏡像,選擇阿里雲鏡像,搜索dashboard。選中出現的aliyunlog/dashboard鏡像。
    5. 在【web路由規則】中,容器端口輸入80,域名輸入dashboard,點擊「添加」。
    6. 點擊確定。
  5. 在【服務】中,找到剛剛創建的服務(dashboard,或自定義服務名稱),點擊服務名稱,在出現的基本信息中找到訪問端點,例如訪問端點。

通過ECS安裝鏡像:

docker pull registry.aliyuncs.com/aliyunlog/access_log_stat_dashboard

docker run --dns 223.5.5.5  -p  80:80  -d registry.aliyuncs.com/aliyunlog/access_log_stat_dashboardaccess_log_stat_dashboard
  1. 在瀏覽器中打開上述URL,開始使用。
  2. 首次打開dashboard,需要使用日誌服務的帳號信息登錄,包括包括region,project ,AccessId, AccessKey。
  3. 登錄完成後,首次使用dashboard要求配置:

    1. 日誌信息。包括region,project ,AccessId, AccessKey,LogStore。比登錄信息多了一個LogStore。
    2. 日誌內容字段映射,docker鏡像爲使用一些默認的名稱來描述訪問日誌的一些字段,如果您在接入日誌服務時使用不同的字段名稱,請在這裏做字段映射,保證您的字段的含義能夠被分析程序識別。例如latency字段,假如您接入日誌服務時配置該字段的名稱爲request_time,那麼需要在這裏填寫request_time。一段日誌樣例:
192.168.1.101 - - [17/Mar/2016:10:28:30 +0800] "GET /fonts/fontawesome-webfont.woff?v=4.2.0 HTTP/1.1" 0.021 1207 304 0 "https://sls.console.aliyun.com/css/lib.css" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36"
後臺處理key 字段樣例
ip 192.168.1.101
method GET
path /fonts/fontawesome-webfont.woff?v=4.2.0
latency 0.021
request_length 1207
status 304
response_length 0
referer https://sls.console.aliyun.com/css/lib.css
user_agent Mozilla/5.0 (Macintosh; Intel Mac OS X 10_11_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/49.0.2623.87 Safari/537.36

高級選項

鏡像計算結果的數據保存在鏡像的mysql中,如果您釋放您的容器,那麼歷史計算結果會丟失,爲了保證所有的歷史結果,請您使用自己的mysql:

  • 創建一個mysql用戶,允許這個用戶從docker中訪問這個mysql

    grant all privileges on *.* to [email protected]'%' identified by '123456789';
    flush privileges;
  • 上述用戶名和密碼根據自己的需求自定義
  • 修改/etc/mysql/my.conf ,註釋掉bind-address 0.0.0.0這一行
  • 重啓mysql

    sudo service mysql restart
  • 點擊dashboard頁面上方的『計算結果臨時保存在docker容器中,若需永久保存,請更改數據庫』,進入配置mysql。填寫mysql的地址和賬戶信息,點擊【遷移】。