本文介紹如何通過Grafana可視化分析日志服務所采集到的Nginx日志。為了便于您快速了解及體驗功能,您可以使用免登錄鏈接進行試用Demo - Grafana。
前提條件
您已完成以下配置:
采集Nginx日志數據。更多信息,請參見使用Nginx配置模式采集文本日志。
開啟并配置索引。更多信息,請參見分析Nginx訪問日志。
下載命令為
wget https://github.com/aliyun/aliyun-log-grafana-datasource-plugin/archive/refs/heads/master.zip
。說明本文以 v2.36版本的日志服務插件為例。
安裝Grafana。具體操作,請參見Grafana官方文檔。
說明本文以11.4.0版本的Grafana為例。
如果您是在本機上安裝Grafana,請提前在瀏覽器中打開3000端口。
如果您需要使用餅圖,需執行如下命令安裝Pie Chart插件。
grafana-cli plugins install grafana-piechart-panel
插件兼容性
Grafana和日志服務插件的兼容關系如下表所示:
Grafana版本 | 日志服務插件版本 |
≥8.0.0 | |
<8.0.0 |
注意事項
若配置STS跳轉,為權限安全考慮,需要滿足以下兩個條件:
● 配置DataSource的accessKey對應的用戶,需要配置權限策略AliyunRAMReadOnlyAccess
。
● 配置DataSource的roleArn里面的權限策略,必須有且只配置權限策略AliyunLogReadOnlyAccess
,原理請參見控制臺內嵌及分享。
若配置了免登跳轉,需注意數據源是否涉及Grafana儀表盤的公開訪問分享。公開訪問可能帶來流量成本增加和日志內容公開暴露。
系統權限策略請參見日志服務系統權限策略參考。
步驟一:安裝日志服務插件
執行以下命令將日志服務插件項目壓縮包解壓到Grafana插件目錄。
使用YUM或RPM安裝的Grafana:
unzip aliyun-log-grafana-datasource-plugin-master.zip -d /var/lib/grafana/plugins
使用.tar.gz文件安裝的Grafana:
{PATH_TO}為Grafana的安裝路徑。
unzip aliyun-log-grafana-datasource-plugin-master.zip -d {PATH_TO}/grafana-11.4.0/data/plugins
修改Grafana配置文件。
打開配置文件。
使用YUM或RPM安裝的Grafana:/etc/grafana/grafana.ini
使用.tar.gz文件安裝的Grafana:{PATH_TO}/grafana-11.4.0/conf/defaults.ini
在配置文件的[plugins] 節點中,設置allow_loading_unsigned_plugins參數。
allow_loading_unsigned_plugins = aliyun-log-service-datasource
重啟Grafana。
使用kill命令終止Grafana進程。
執行以下命令啟動Grafana。
使用YUM或RPM安裝的Grafana:
systemctl restart grafana-server
使用.tar.gz文件安裝的Grafana:
./bin/grafana-server web
步驟二:添加數據源
登錄Grafana。
在左側菜單欄,選擇
。在Data Sources頁簽,單擊Add data source。
在Add data source頁面,搜索log-service-datasource。找到后單擊log-service-datasource。
在打開的aliyun-log-service-datasource頁面,配置以下信息。
必填參數配置說明如下所示:
參數
說明
Endpoint
Project的服務入口,例如
http://cn-qingdao.log.aliyuncs.com
。請根據實際情況替換服務入口。更多信息,請參見服務接入點。Project
需要對接的日志服務Project的名稱。
AccessKeyID
AccessKey ID用于標識用戶,更多信息,請參見訪問密鑰。
建議您遵循最小化原則,按需授予RAM用戶必要的權限。關于授權的具體操作,請參見創建RAM用戶及授權、RAM自定義授權示例。
AccessKeySecret
AccessKey Secret是用戶用于加密簽名字符串和日志服務用來驗證簽名字符串的密鑰,必須保密。
可選參數配置說明如下所示:
參數
說明
Name
輸入數據源的名稱。默認為:aliyun-log-service-datasource。
Default
默認打開。
Default Logstore
不強制要求填寫LogStore;如果不填寫 LogStore, 請確保你的填寫的Ak具備當前Project的ListProject權限,
RoleArn
配置STS跳轉時需要填寫對應RAM角色Arn。
HTTP headers
支持自定義Headers,僅在數據源類型為MetricStore(PrmQL)生效。具體配置參考時序存儲FormValue配置項:查詢加速 。Headers參數說明如下所示:
x-sls-parallel-enable:是否開啟并發計算,默認關閉。
x-sls-parallel-time-piece-interval:按照時間區間進行分片的時間段單元,單位秒。支持的范圍為[3600, 86400*30],默認21600(6小時)。
x-sls-parallel-time-piece-count:按照時間區間進行分片的分片數,支持1-16,默認8。
x-sls-parallel-count:全局并發數,支持2-64,默認8。
x-sls-parallel-count-per-host:單機并發數,支持1-8,默認2。
x-sls-global-cache-enable:是否開啟全局緩存,默認關閉。
Region
支持 v4 簽名,提供更高的安全性。
配置完成后,單擊Save & Test。
步驟三:添加儀表盤
為Grafana添加儀表盤的操作步驟如下:
在左側導航欄,單擊Dashboards。
在Dashboards面板中,單擊+ Created dashboard。然后單擊+ Add visualization。
在Select data source頁面,選擇數據源為aliyun-log-service-datasource。
添加可視化圖表。
配置說明如下所示:
數據源類型:數據源類型主要是兩種語法區別SQL和 PromQL,再加上存儲庫的類型不同,有四種類型可選:ALL(SQL)、Logstore(SQL)、MetricStore(SQL)、MetricStore(PromQL)。
日志庫列表:選擇需要查詢的Logstore名稱。
Query:輸入查詢語句,例如:
* | select count(*) as c, __time__-__time__%60 as t group by t
ycol:
空
xcol:選擇TimeSeries / Custom,并輸入
t
。goto SLS:一鍵跳轉SLS控制臺。
您可以在Explore界面和儀表盤界面中,單擊goto SLS,隨時跳轉到SLS控制臺進行比對了,同時也可以使用SLS控制臺更強大的功能和更靈活的日志檢索。跳轉到SLS控制臺,將附帶query、時間信息,無需手動輸入。
此種跳轉方式是直接跳轉到SLS控制臺,不涉及任何配置,但需要您的瀏覽器登錄了SLS控制臺,否則會顯示登錄頁面。
說明此功能在 SLS Grafana Plugin 2.30 版本及以上才可使用。
在右側Panel options中輸入Title,然后右上角單擊Save dashboard。然后在彈出的頁簽中單擊Save。
配置模板變量
您可以在Grafana中配置模板變量,實現在同一個圖表中通過選擇不同的變量值,展示不同的結果。
配置時間區間大小的模板變量
在New dashboard頁面右上角,然后單擊
。單擊Variables。
單擊New variable。
按照如下參數配置模板變量,然后單擊Add。
重要參數說明如下表所示。
參數
說明
Name
變量名稱,例如myinterval。該名稱是您配置中使用的變量,此處為myinterval,則查詢條件中需寫成
$$myinterval
。Type
選擇Interval。
Label
配置為time interval。
Values
配置為1m,10m,30m,1h,6h,12h,1d,7d,14d,30d。
Auto Option
打開Auto Option開關,其他參數保持默認配置。
效果展示。
配置域名的模板變量
在Variables頁面,單擊New。
按照如下參數配置模板變量,然后單擊Add。
參數
說明
Name
變量名稱,例如hostname。該名稱是您配置中使用的變量,此處為hostname,則查詢條件中需寫成
$hostname
。Type
選擇Custom。
Label
輸入域名。
Custom Options
配置為
*,example.com,example.org,example.net
,表示可以查看所有域名的訪問情況,也可以分別查看example.com
、example.org
或example.net
的訪問情況。Selection Options
保持默認配置。
效果展示。
配置變量替換日志庫列表
Variables 設置頁面選擇custom類型。name 字段作為獨立標識,必須包含 'logstore' 字符串,不區分大小寫。Custom Options手動填寫可選變量,以逗號區分。
?
編輯界面修改日志庫列表選項為自定義 Variable,修改相應變量并刷新儀表盤,即可獲得最新結果。
圖表標準寫法概覽
單值圖(Stat / Gauge)
xcol寫法:stat
。
ycol寫法:<數值列>, <數值列>
。
圖中要求的數值列若提供的是非數值列,會直接置0。
示例1
圖表類型:Stat
xcol:
stat
ycol:
PV, deltaPercent
query:
* | select diff[1] as "PV", round((diff[1] - diff[2])/diff[2] * 100, 2) as deltaPercent from (select compare("PV", 86400) as diff from (select count(*) as "PV" from log))
示例2
圖表類型:Gauge
xcol:
stat
ycol:
c
query:
* | select count(distinct labels['hostname']) as c from (select promql_query('${metricName}{cluster =~ "${cluster}"}') from metrics ) limit 100000
餅圖(Pie)
xcol寫法:pie
。
ycol寫法:<聚合列>, <數值列>
。
示例1
圖表類型:Pie
xcol:
pie
ycol:
request_method, c
query:
request_method: "$method" | select count(*) as c, request_method group by request_method
示例2
圖表類型:Pie
xcol:
pie
ycol:
http_user_agent, pv
query:
* | select count(1) as pv, case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end as http_user_agent group by case when http_user_agent like '%Chrome%' then 'Chrome' when http_user_agent like '%Firefox%' then 'Firefox' when http_user_agent like '%Safari%' then 'Safari' else 'unKnown' end order by pv desc limit 10
其他場景
Stat圖的寫法也適用于餅圖,也可以展示出效果。
圖表類型:Pie
xcol:
stat
ycol:
hostNameNum, ipNum
query:
* | select count(distinct labels['hostname']) as hostNameNum, count(distinct labels['ip']) + 20 as ipNum from (select promql_query('${metricName}{cluster =~ ".*"}') from metrics ) limit 100000
線圖(TimeSeries)
xcol寫法:<時間列>
。
ycol寫法:<數值列> [, <數值列>, ...]
(日志寫法)<labels / 聚合列>#:#<數值列>
(時序庫寫法或日志聚合寫法)。
示例1
圖表類型:Time series
xcol:
time
ycol:
pv, uv
query:
* | select __time__ - __time__ % $${myinterval} as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000
示例2
圖表類型:Time series
xcol:
time
ycol:
labels#:#value
query:
* | select time, * from (select promql_query_range('${metricName}') from metrics) limit 1000
示例3
也可以通過sql對時序labels進行自定義展示。
圖表類型:Time series
xcol:
time
ycol:
customLabelsExtract#:#value
query:
* | select concat(labels['ip'], ' -> ', labels['cluster']) as customLabelsExtract, value from (select promql_query_range('${metricName}') from metrics) limit 1000
柱狀圖(Bar)
xcol寫法:bar
。
ycol寫法:<聚合列>, <數值列> [, <數值列>, ...]
。
示例1
圖表類型:Bar
xcol:
bar
ycol:
host, pv, pv2, uv
query:
* | select host, COUNT(*)+10 as pv, COUNT(*)+20 as pv2, approx_distinct(remote_addr) as uv GROUP BY host ORDER BY uv desc LIMIT 5
表格(Table)
支持當存在納秒字段時,time按納秒精度排序。
支持修改總查詢記錄數totalLogs, 默認值為 100,最小值為1,最大值為 5000,僅對 Query 查詢語句生效,分析語句無效。
xcol寫法:<空>
。
ycol寫法:<空> 或者 <展示列> [, <展示列>, ...]
。
示例1
圖表類型:Table
xcol:
Table/Log
ycol:
<空>
query:
* | select __time__ - __time__ % 60 as time, COUNT(*)/ 100 as pv, approx_distinct(remote_addr)/ 60 as uv GROUP BY time order by time limit 2000
日志(Log)
xcol寫法:<空>
。
ycol寫法:<空>
。
示例
圖表類型:Logs
xcol:<空>
ycol:<空>
query: host: www.vt.mock.com
Trace(Traces)
圖表類型:Traces
xcol:trace
ycol:
query:traceID: "f88271003ab7d29ffee1eb8b68c58237"
該示例中使用了Trace的日志庫,需要您在SLS使用Trace服務,日志服務支持OpenTelemetry Trace數據的原生接入,還支持通過其他Trace系統接入Trace數據。更多細節請參見:接入Trace數據概述
在 Grafana 10.0 以上版本,支持Trace數據的span篩選功能,如果您使用的是低版本Grafana,也可以在query篩選中自定義span的篩選。例如:
traceID: "f88271003ab7d29ffee1eb8b68c58237" and resource.deployment.environment : "dev" and service : "web_request" and duration > 10
地圖(Map)
xcol寫法:map
。
ycol寫法:<國家列>, <地理位置列>, <數值列>
。
示例
圖表類型:GeoMap
xcol:map
ycol:country, geo, pv
query:* | select count(1) as pv ,geohash(ip_to_geo(arbitrary(remote_addr))) as geo,ip_to_country(remote_addr) as country from log group by country having geo <>'' limit 1000
常見問題
Grafana日志保存在哪里?
Grafana日志保存在如下文件中:
macOS系統:/usr/local/var/log/grafana
Linux系統:/var/log/grafana
如果日志中提示aliyun-log-plugin_linux_amd64: permission denied,怎么處理?
請授予插件目錄下的dist/aliyun-log-plugin_linux_amd64目錄執行權限。