本文介绍如何通过Grafana可视化分析日志服务所采集到的Nginx日志。

前提条件

  • 已采集Nginx日志数据。更多信息,请参见使用Nginx模式采集日志
  • 已开启并配置索引。更多信息,请参见分析Nginx访问日志
  • 下载数据源插件项目压缩包
    说明 本文以2.9版本的日志服务插件为例。
  • 已安装Grafana。具体操作,请参见Grafana官方文档
    说明
    • 本文以8.0.6版本的Grafana为例。
    • 如果您是在本机上安装Grafana,请提前在浏览器中打开3000端口。
    • 如果您需要使用饼图,需执行如下命令安装Pie Chart插件。
      grafana-cli plugins install grafana-piechart-panel

插件兼容性

Grafana和日志服务插件的兼容关系如下表所示:

Grafana版本 日志服务插件版本
≥8.0.0
<8.0.0 1.0

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

为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-8.0.6/data/plugins
  2. 修改Grafana配置文件。
    1. 打开配置文件。
      • 使用YUM或RPM安装的Grafana:/etc/grafana/grafana.ini
      • 使用.tar.gz文件安装的Grafana:{PATH_TO}/grafana-8.0.6/conf/defaults.ini
    2. 在配置文件中,设置allow_loading_unsigned_plugins参数。
      allow_loading_unsigned_plugins = aliyun-log-service-datasource,grafana-log-service-datasource
  3. 重启Grafana。
    1. 使用kill命令终止Grafana进程。
    2. 执行以下命令启动Grafana。
      • 使用YUM或RPM安装的Grafana:
        systemctl restart grafana-server
      • 使用.tar.gz文件安装的Grafana:
        ./bin/grafana-server web

步骤二:添加数据源

为Grafana添加日志服务的数据源的操作步骤如下:

  1. 登录Grafana。
  2. 在左侧菜单栏,选择G1 > Data Sources
  3. Data Sources页签,单击Add data source
  4. Add data source页面,单击LogService对应的Select
  5. 配置数据源。
    重要参数说明如下表所示。
    参数 说明
    Name 数据源的名称。
    Default 打开Default开关。
    Endpoint Project的服务入口,例如http://cn-qingdao.log.aliyuncs.com。请根据实际情况替换服务入口。更多信息,请参见服务入口
    Project Project的名称。
    Logstore Logstore的名称。
    AccessKeyId 阿里云AccessKey ID,用于标识用户。为保证账号安全,建议您使用RAM用户的AccessKey。如何获取AccessKey,请参见访问密钥
    AccessKeySecret 阿里云AccessKey Secret,用于验证用户的密钥。为保证账号安全,建议您使用RAM用户的AccessKey。如何获取AccessKey,请参见访问密钥
  6. 单击Save & Test

步骤三:添加仪表盘

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

  1. 在左侧导航栏,选择图标1 > Dashboards
  2. New Panel面板中,单击Choose Visualization
  3. 配置模板变量。

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

    1. 配置时间区间大小的模板变量。
      1. New dashboard页面右上角,配置时间区间,然后单击图标2图标。
      2. 单击Variables
      3. 单击Add variable
      4. 按照如下参数配置模板变量,然后单击Add
        重要参数说明如下表所示。
        参数 说明
        Name 变量名称,例如myinterval。该名称是您配置中使用的变量,此处为myinterval,则查询条件中需写成$myinterval
        Type 选择Interval
        Lable 配置为time interval
        Values 配置为1m,10m,30m,1h,6h,12h,1d,7d,14d,30d
        Auto Option 打开Auto Option开关,其他参数保持默认配置。
    2. 配置域名的模板变量。
      1. Variables页面,单击New
      2. 按照如下参数配置模板变量,然后单击Add
        参数 说明
        Name 变量名称,例如hostname。该名称是您配置中使用的变量,此处为hostname,则查询条件中需写成$hostname
        Type 选择Custom
        Lable 输入域名。
        Custom Options 配置为*,www.host.com,www.host0.com,www.host1.com,表示可以查看所有域名的访问情况,也可以分别查看www.host.comwww.host0.comwww.host1.com的访问情况。
        Selection Options 保持默认配置。
    3. 在左侧菜单栏,单击Save
  4. 添加可视化图表。
    • 用于展示PV&UV的图表(Graph)
      1. 单击右上角图标3 图标。
      2. New Panel页面,单击Add Query
      3. 单击G小图标4图标,在Visualization下拉列表中选择Graph
      4. 单击G小图标5图标,在Title文本框输入UV&PV
      5. 单击G小图标6图标,在Query下拉列表中选择Logservice,并完成如下配置。grafana-pv&uv01
        参数 说明
        Query 查询和分析语句示例如下:
        $hostname| select approx_distinct(remote_addr) as uv ,count(1) as pv , __time__ - __time__ % $$myinterval as time group by time order by time limit 1000
        在展示结果中,$hostname会被替换成您选择的域名。$$myinterval会被替换成您选择的时间区间。
        注意 myinterval前有2个美元符号($$),hostname前只有1个美元符号($)。
        X-Column 配置为time
        Y-Column 配置为uv,pv
      6. 如果UV和PV的值相差较大,可配置双Y轴图表。grafana-pv&uv02
      7. 单击右上角保存按钮图标,根据页面提示完成保存。
    • 用于展示流入流出流量的图表(Graph)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      参数 说明
      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
      在展示结果中,$hostname会被替换成您选择的域名。$$myinterval会被替换成您选择的时间区间。
      注意 myinterval前有2个美元符号($$),hostname前只有1个美元符号($)。
      X-Column 配置为time
      Y-Column 配置为net_in,net_out
    • 用于展示HTTP请求方法占比的图表(Pie Chart)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      参数 说明
      Query 查询和分析语句示例如下:
      $hostname | select count(1) as pv ,method group by method

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为pie
      Y-Column 配置为method,pv
    • 用于展示HTTP请求状态码占比的图表(Pie Chart)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      参数 说明
      Query 查询和分析语句示例如下:
      $hostname | select count(1) as pv ,status group by status

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为pie
      Y-Column 配置为status,pv
    • 用于展示热门访问来源的图表(Pie Chart)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      参数 说明
      Query 查询和分析语句示例如下:
      $hostname | select count(1) as pv , referer group by referer order by pv desc

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为pie
      Y-Column 配置为referer,pv
    • 用于展示延时最高页面的图表(Table)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      参数 说明
      Query 查询和分析语句示例如下:
      $hostname | select URL as top_latency_URL ,request_time order by request_time desc limit 10

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 无需配置。
      Y-Column 配置为top_latency_url,request_time
    • 用于展示热门页面的图表(Table)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      配置项 说明
      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

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 无需配置。
      Y-Column 配置为path,pv
    • 用于展示非200请求的Top页面图表(Table)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下表所示。
      配置项 说明
      Query 查询和分析语句示例如下:
      $hostname not status:200| select count(1) as pv , url group by url order by pv desc

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 无需配置。
      Y-Column 配置为url,pv
    • 用于展示平均延时的图表(Singlestat)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下:
      配置项 说明
      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
      在展示结果中,$hostname会被替换成您选择的域名。$$myinterval会被替换成您选择的时间区间。
      注意 myinterval前有2个美元符号($$),hostname前只有1个美元符号($)。
      X-Column 配置为time
      Y-Column 配置为upstream_response_time,response_time
    • 用于展示详细日志的图表(Logs)
      添加步骤请参见添加PV&UV信息图表
      说明 每页最多展示100条,即Logs Per Page最大值为100。
    • 用于展示客户端统计的图表(Pie Chart)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下:
      配置项 说明
      Query 查询和分析语句示例如下:
      $hostname  | select count(1) as pv, case when  regexp_like(http_user_agent , 'okhttp') then 'okhttp' when  regexp_like(http_user_agent ,  'iPhone') then 'iPhone' when regexp_like(http_user_agent ,  'Android')  then 'Android' else 'unKnown' end as http_user_agent group by  http_user_agent order by pv desc limit 10

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为pie
      Y-Column 配置为http_user_agent,pv
    • 用于展示1分钟内各个HTTP请求状态数量的图表(Graph)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下所示。
      配置项 说明
      Query 查询和分析语句示例如下:
      $hostname  | select to_unixtime(time) as time,status,count from (select time_series(__time__, '1m', '%Y-%m-%d %H:%i', '0')  as time,status,count(*) as count from log group by status,time order by time limit 10000)

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为时间列。
      Y-Column 配置为col1#:#col2。其中col1为聚合列,col2为其他列。
    • 用于展示来源IP分布的图表(Worldmap Panel)
      添加步骤请参见添加PV&UV信息图表,相关参数说明如下。
      参数 说明
      Query 查询和分析语句示例如下:
      $hostname  | 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

      在展示结果中,$hostname会被替换成您选择的域名。

      X-Column 配置为map
      Y-Column 配置为country,geo,pv
      参数 说明
      Location Data 配置为geohash
      Location Name Field 配置为country
      geo_point/geohash Field 配置为geo
      Metric Field 配置为pv
  5. 查看结果。

    您可以在Dashboard页面上方选择统计的时间范围,还可以筛选time intervalhostname

常见问题

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