对接Grafana

本文介绍如何通过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

2.x

<8.0.0

1.0

注意事项

若配置STS跳转,为权限安全考虑,需要满足以下两个条件:

● 配置DataSource的accessKey对应的用户,需要配置权限策略AliyunRAMReadOnlyAccess

● 配置DataSource的roleArn里面的权限策略,必须有且只配置权限策略AliyunLogReadOnlyAccess,原理请参见控制台内嵌及分享

若配置了免登跳转,需注意数据源是否涉及Grafana仪表盘的公开访问分享。公开访问可能带来流量成本增加和日志内容公开暴露。

说明

系统权限策略请参见日志服务系统权限策略参考

步骤一:安装日志服务插件

  1. 执行以下命令将日志服务插件项目压缩包解压到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
  2. 修改Grafana配置文件。

    1. 打开配置文件。

      • 使用YUM或RPM安装的Grafana:/etc/grafana/grafana.ini

      • 使用.tar.gz文件安装的Grafana:{PATH_TO}/grafana-11.4.0/conf/defaults.ini

    2. 在配置文件的[plugins] 节点中,设置allow_loading_unsigned_plugins参数。

      allow_loading_unsigned_plugins = aliyun-log-service-datasource
  3. 重启Grafana。

    1. 使用kill命令终止Grafana进程。

    2. 执行以下命令启动Grafana。

      • 使用YUM或RPM安装的Grafana:

        systemctl restart grafana-server
      • 使用.tar.gz文件安装的Grafana:

        ./bin/grafana-server web

步骤二:添加数据源

  1. 登录Grafana。

  2. 在左侧菜单栏,选择Connections > Data Sources

  3. Data Sources页签,单击Add data source

  4. Add data source页面,搜索log-service-datasource。找到后单击log-service-datasourceimage

  5. 在打开的aliyun-log-service-datasource页面,配置以下信息。image

    • 必填参数配置说明如下所示:

      参数

      说明

      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 签名,提供更高的安全性。

  6. 配置完成后,单击Save & Test

步骤三:添加仪表盘

为Grafana添加仪表盘的操作步骤如下:

  1. 在左侧导航栏,单击Dashboards

  2. Dashboards面板中,单击+ Created dashboard。然后单击+ Add visualizationimage

  3. Select data source页面,选择数据源为aliyun-log-service-datasource

  4. 添加可视化图表。image

    配置说明如下所示:

    • 数据源类型:数据源类型主要是两种语法区别SQL和 PromQL,再加上存储库的类型不同,有四种类型可选:ALL(SQL)Logstore(SQL)MetricStore(SQL)MetricStore(PromQL)

      • 日志库(Logstore)支持SQL查询与分析

      • 时序库(MetricStore)支持SQL + PromQL查询与分析

      • MetricStore(PromQL)支持添加custom Headers,具体在该数据源的配置界面进行添加。

    • 日志库列表:选择需要查询的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 版本及以上才可使用。

  5. 在右侧Panel options中输入Title,然后右上角单击Save dashboard。然后在弹出的页签中单击Saveimage

配置模板变量

您可以在Grafana中配置模板变量,实现在同一个图表中通过选择不同的变量值,展示不同的结果。

配置时间区间大小的模板变量

  1. New dashboard页面右上角,然后单击Edit > Settings

  2. 单击Variables

  3. 单击New variable

  4. 按照如下参数配置模板变量,然后单击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开关,其他参数保持默认配置。

  5. 效果展示。image

配置域名的模板变量

  1. Variables页面,单击New

  2. 按照如下参数配置模板变量,然后单击Add

    参数

    说明

    Name

    变量名称,例如hostname。该名称是您配置中使用的变量,此处为hostname,则查询条件中需写成$hostname

    Type

    选择Custom

    Label

    输入域名。

    Custom Options

    配置为*,example.com,example.org,example.net,表示可以查看所有域名的访问情况,也可以分别查看example.comexample.orgexample.net的访问情况。

    Selection Options

    保持默认配置。

  3. 效果展示。image

配置变量替换日志库列表

  1. Variables 设置页面选择custom类型。name 字段作为独立标识,必须包含 'logstore' 字符串,不区分大小写。Custom Options手动填写可选变量,以逗号区分。

    image.webp

  2. 编辑界面修改日志库列表选项为自定义 Variable,修改相应变量并刷新仪表盘,即可获得最新结果。image.webp

图表标准写法概览

单值图(Stat / Gauge)

xcol写法:stat

ycol写法:<数值列>, <数值列>

重要

图中要求的数值列若提供的是非数值列,会直接置0。

  • 示例1

    图表类型:Stat

    xcolstat

    ycolPV, 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))image

  • 示例2

    图表类型:Gauge

    xcolstat

    ycolc

    query* | select count(distinct labels['hostname']) as c from (select promql_query('${metricName}{cluster =~ "${cluster}"}') from metrics ) limit 100000

    image

饼图(Pie)

xcol写法:pie

ycol写法:<聚合列>, <数值列>

  • 示例1

    图表类型:Pie

    xcolpie

    ycolrequest_method, c

    queryrequest_method: "$method" | select count(*) as c, request_method group by request_methodimage

  • 示例2

    图表类型:Pie

    xcolpie

    ycolhttp_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 10image

  • 其他场景

    Stat图的写法也适用于饼图,也可以展示出效果。

    图表类型:Pie

    xcolstat

    ycolhostNameNum, 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

    image

线图(TimeSeries)

xcol写法:<时间列>

ycol写法:<数值列> [, <数值列>, ...](日志写法)<labels / 聚合列>#:#<数值列>(时序库写法或日志聚合写法)。

  • 示例1

    图表类型:Time series

    xcoltime

    ycolpv, 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

    image

  • 示例2

    图表类型:Time series

    xcoltime

    ycollabels#:#value

    query* | select time, * from (select promql_query_range('${metricName}') from metrics) limit 1000

    image

  • 示例3

    也可以通过sql对时序labels进行自定义展示。

    图表类型:Time series

    xcoltime

    ycolcustomLabelsExtract#:#value

    query* | select concat(labels['ip'], ' -> ', labels['cluster']) as customLabelsExtract, value from (select promql_query_range('${metricName}') from metrics) limit 1000

    image

柱状图(Bar)

xcol写法:bar

ycol写法:<聚合列>, <数值列> [, <数值列>, ...]

  • 示例1

    图表类型:Bar

    xcolbar

    ycolhost, 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

    image

表格(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

    image

日志(Log)

xcol写法:<空>

ycol写法:<空>

示例

图表类型:Logs

xcol:<空>

ycol:<空>

query: host: www.vt.mock.com

image

Trace(Traces)

图表类型:Traces

xcoltrace

ycol

querytraceID: "f88271003ab7d29ffee1eb8b68c58237"

image

说明

该示例中使用了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

xcolmap

ycolcountry, 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

image

常见问题

  • 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目录执行权限。