使用Grafana對阿裏雲日誌服務進行可視化
阿裏雲日誌服務是針對日誌類數據一站式服務,用戶隻需要將精力集中在分析上,過程中數據采集、對接各種存儲計算、數據索引和查詢等瑣碎工作等都可以交給服務。2017年9月日誌服務加強日誌實時分析功能(LogSearch/Analytics),可以使用查詢+SQL92語法對日誌進行實時分析。
在結果分析可視化上,除了使用自帶Dashboard外,還支持DataV、Grafana、Tableua、QuickBI等對接方式。本文主要通過一個例子,演示如何通過日誌服務對Nginx日誌進行分析與可視化。
整體架構
日誌從收集到分析的架構如下圖:
主要分3個步驟:
我們主要演示步驟3,在做完1、2步驟後,在查詢頁麵可以看到原始日誌:
對接Grafana
1. 安裝grafana
grafana的詳細安裝文檔參見grafana官方文檔
以ubuntu為例,安裝命令為:
wget https://s3-us-west-2.amazonaws.com/grafana-releases/release/grafana_4.5.2_amd64.deb
sudo apt-get install -y adduser libfontconfig
sudo dpkg -i grafana_4.5.2_amd64.deb
為了使用餅狀圖,我們需要安裝Pie chart插件,官方文檔,安裝命令如下:
grafana-cli plugins install grafana-piechart-panel
2. 安裝日誌服務插件
首先確認grafana的插件目錄在哪裏, ubuntu的插件地址在 /var/lib/grafana/plugins/
,安裝好插件後重啟grafana-server。
執行一下命令:
cd /var/lib/grafana/plugins/
git clone https://github.com/aliyun/aliyun-log-grafana-datasource-plugin
service grafana-server restart
3. 配置日誌數據源
假設是在本機部署,默認是安裝在3000端口,在瀏覽器打開3000端口。
在左上角點擊grafana的logo,在彈出窗口上選擇Data Sources:
點擊添加新的DataSource 使用grafana和阿裏雲日誌服務進行日誌可視化分析
各部分配置分別按照如下配置:
- datasource名稱可以自定義,類型選擇[LogService] 。
- Http Setting部分,url輸入樣例:https://dashboard-demo.cn-hangzhou.log.aliyuncs.com 。dashboard-demo是project名稱,cn-hangzhou.log.aliyuncs.com是project所在地域的endpoint,在配置自己的數據源時,需要特別的替換成自己的project和region地址。Access可以選擇Direct,也可以選擇Proxy。
- Http Auth部分,采用默認配置即可。
- log service details,日誌服務詳細配置,分別填寫project,logstore,以及具備讀取權限的accessKey,accessKey可以是主賬號的accessKey,也可以是子帳號的accessKey。
配置完成後點擊Add,即可完成添加dataSource。接下來添加dashboard。
4. 添加dashboard
在左上角菜單中新加一個dashboard:點擊左上角菜單,依次點擊Dashboards, New:
4.1 配置模板變量
在grafana中可以配置模板變量,在同一個視圖中,通過選擇不同的變量值,展示不同的視圖,在本文中,我們配置每個時間區間的大小,以及不同域名的訪問情況。
點擊頁麵上方設置圖標,然後點擊Templating,
在當前頁麵,會顯示出已經配置的模板變量,點擊New
, 創建新的模板
我們首先配置一個時間區間,變量的名稱是我們在配置中使用的變量,在這裏起名為myinterval, 在查詢條件中,要寫成$myinterval
,會自動替換成頁麵選擇的模板值。
我們再配置一個域名模板,通常我們在一個vps上可以掛載多個域名,那麼我們需要查看不同域名的訪問情況,在模板值中,我們輸入 *,www.host.com,www.host0.com,www.host1.com
, 表示我們可以查看所有域名,也可以分別隻查看www.host.com或者www.host0.com或者www.host1.com的訪問情況。
配置完成後,可以在dashboard頁麵上方看到剛才配置的模板變量,通過下拉框可以選擇任何一個值。例如time interval,所有可選的值如下:
4.2 配置PV,UV
點擊左側ADD ROW,新建一行圖表:
如果已經有一行row了,可以在左側的彈出式菜單裏選擇Add Panel:
grafana可以支持多重類型的視圖,對於PV,UV數據,在這裏我們創建一個Graph視圖:
點擊Pannel Title,在彈出的窗口中點擊Edit:
在Metrics配置中,選擇datasource為logservice
,輸入Query,Y軸和X軸:
dataSource下拉框中選擇之前配置的:logService
。
Query輸入:
$hostname| select approx_distinct(remote_addr) as uv ,count(1) as pv , __time__ - __time__%$$myinterval as time group by __time__ - __time__%$$myinterval order by time limit 1000
上述query中的$hostname,在實際展示時,會替換成用戶選擇的域名。$$myinterval,則會替換成時間區間,注意myinterval前有兩個$符號,而hostname有一個。
Y-Column輸入:
uv,pv
X-Column輸入:
time
UV PV的值相差比較大,我們需要用兩個Y軸來展示,在圖標下方,點擊uv左側有顏色的線,可以選擇uv是在左Y軸顯示,還是在右Y軸顯示:
標題需要視圖,默認是Panel Title,點擊General, 可以修改Title:
4.3 配置出入網帶寬
同樣的方法,我們添加出入網帶寬的流量:
輸入 query:
$hostname | select sum(body_byte_sent) as net_out, sum(request_length) as net_in ,__time__ - __time__ % $$myinterval as time group by __time__ - __time__ % $$myinterval limit 10000
輸入Y-Column:
net_in,net_out
輸入X-column:
Time
4.4 不同HTTP方法的占比
新建一個Row,視圖選擇Pie Chart
:
Query輸入:
$hostname | select count(1) as pv ,method group by method
Y-column輸入:
method,pv
對於所有的餅狀圖,X-column輸入固定值:
pie
4.5 不同HTTP狀態碼占比
同上,新建一個Row,視圖選擇Pie Chart
:
Query輸入:
$hostname | select count(1) as pv ,status group by status
Y-column輸入:
status,pv
X-column輸入:
pie
4.6 熱門來源頁麵
同上,新建一個Row,視圖選擇Pie Chart
:
Query輸入:
$hostname | select count(1) as pv , referer group by referer order by pv desc
Y-column輸入:
referer,pv
X-column輸入:
pie
4.7 延時最高頁麵
為了以表格形式展示url和對應的延時,我們創建時,指定Table
這種視圖:
Query 輸入:
$hostname | select url as top_latency_url ,request_time order by request_time desc limit 10
Y-column輸入:
top_latency_url,request_time
X-column不填寫內容。
4.8 熱門頁麵
同上,新加一個表格視圖:
Query輸入:
$hostname | select count(1) as pv, split_part(url,'?',1) as path group by split_part(url,'?',1) order by pv desc limit 20
Y-column輸入:
path,pv
X-column保留空
4.9 非200請求top頁麵
同上,新建一個表格視圖:
Query輸入:
$hostname not status:200| select count(1) as pv , url group by url order by pv desc
Y-column輸入:
url,pv
X-column保留空
4.10 前後端平均延時
新建一個Graph視圖:
Query輸入:
$hostname | select avg(request_time) as response_time, avg(upstream_response_time) as upstream_response_time ,__time__ - __time__ % $$myinterval as time group by __time__ - __time__ % $$myinterval limit 10000
Y-column輸入:
upstream_response_time,response_time
X-column輸入:
time
4.11 客戶端統計
新建一個餅圖:
Query輸入:
$hostname | select count(1) as pv, case when http_user_agent like '%Android%' then 'Android' when http_user_agent like '%iPhone%' then 'iOS' else 'unKnown' end as http_user_agent group by case when http_user_agent like '%Android%' then 'Android' when http_user_agent like '%iPhone%' then 'iOS' else 'unKnown' end order by pv desc limit 10
Y-column輸入:
http_user_agent,pv
X-column輸入:
pie
4.12 保存和發布dashboard
點擊頁麵上方的保存按鈕,發布dashboard:
大功告成
打開dashboard首頁查看效果,demo地址
在頁麵上方,可以選擇統計的時間範圍,也可以選擇統計的時間粒度,或者選擇不同的域名。
這樣整個nginx訪問統計的dashboard就完成了,我們可以從視圖中挖掘有價值的信息。
更多精彩內容
自建ELK和日誌服務全方位對比
通過jdbc查詢和可視化日誌
10.11杭州Clouder lab 十分鍾搭建共享應用 2:如何通過日誌服務實現用戶的日誌收集與分析
10分鍾精通Nginx訪問日誌分析統計
最後更新:2017-10-26 10:03:47