【阿里云】阿里云日志查询语法

前言 本博客你可以看到什么?

查询语法全文参考官方文档:点击查看

由于阿里的官方文档对查询和分析的案例相当匮乏,导致很多函数只能猜测用法,这种不断试错的过程是在是浪费时间,并且浪费精力!所以我打算写一篇关于阿里云查询的案例,由简入深的案例分析,希望对大家有所帮助。

一、查询语法

1. 查询所有的日志

*:代指所有日志

2. 精确查询

业务:我们想对每条日志中的uuid进行筛选查询,则只需要指定字段
* and uuid:7dfc7e6b-9562-4c8a-9018-f085855f22ae

3. 模糊查询

业务:需要查询同一网段下的ip的日志情况,我们则可以使用模糊查询去匹配
* and ip:172.25.*

4. 查询关键词

常用的关键词andor·、not
业务:查询ip为192.168.1.1,或者ip为192.168.1.0,并且日期不等于2021-08-09
* and ip:116.19.125.98 or ip:1.29.101.106 not time = '2021-06-08'


查询语法其实很简单,只需要对日志进行大的筛选即可,无需对日志进行复杂的分析,阿里云的日志不在于此,精髓就在于分析,分析语法比较诡异,和关系型数据库SQL有点像,但又不完全相同,其实思想是一样的,可以用SQL的思想去分析需要分析的结构。

二、分析语法

1、聚合函数

参考文档:聚合函数
聚合函数相对于传统的数据库丰富不少,使用方法基本一致

  1. count 聚合

    * | SELECT ip, count(*) from log group by ip
    
  2. count_if 聚合
    统计满足指定条件的日志条数

    -- ip 满足这个条件 '192.168.%'  才进行统计
    * | SELECT ip, count_if(ip like '192.168.%') from log group by ip
    
  3. max 聚合

    -- 对每天进行分组,取最后访问的时间 (date_format后续章节会说到)
    * | SELECT max(time) from log group by (date_format(time, '%Y-%m-%d'))
    
  4. max_by 聚合
    max_by(KEY_01,KEY_02) :返回KEY_02为最大值时对应的KEY_01值。

    -- 统计 最后访问的ip
    * | SELECT max_by(ip, time) from log 
    

2、字符串函数

参考文档:字符串函数

  1. split分割字符串
    -- 按照空格拆分,拆分两个attr
    * | SELECT split(time, ' ', 2) as x from log 
    
    在这里插入图片描述
  2. lower 转小写
    * | SELECT lower(source) from log 
    
  3. 去除空格
    trim:删除字符串中开头和结尾的空格。
    ltrim:删除字符串中开头的空格。

3、时间函数

  1. 格式化日期
    date_format(timestamp,format)
    * | SELECT date_format(time, '%Y-%m-%d') from log 
    
    在这里插入图片描述
  2. 计算时间差
    date_diff:一般这个函数主要用于计算两个时间差,一般用于join时比对时间的方法,后续到join章节会有说明,这里不过多赘述

4、JSON函数

本章节是重点,因为日志中最纠结的地方如何拆分json,对json中的数据进行分析。

  1. 步骤一:json_parse(properties)
    转化为阿里可识别的JSON类型

    *  | select json_parse(properties) from log
    

    在这里插入图片描述

  2. 步骤二:使用cast()函数转换数据类型
    转化为map(varchar,varchar)类型,这里必须是同一数据类型,否则无法进行后续查询

    *  | select cast(json_parse(properties) AS map(varchar,varchar)) from log
    

    在这里插入图片描述

  3. 步骤三:unnest(特殊格式的日志字段进行查询分析)

    在复杂的业务场景下,日志数据的某一列可能会是较为复杂的格式,例如数组(array)、对象(map)、JSON等格式。对这种特殊格式的日志字段进行查询分析,可以使用unnest语法。

    -- 将map类型转化为 x,y 列
    筛选条件 | SELECT x,y FROM log, unnest( cast(json_parse(properties) AS map(varchar,varchar)) ) AS t(x,y)
    

    在这里插入图片描述

  4. 步骤四:对x,y,log的进行查询分析,后续分析就是和正常sql一样,x,y中的数据可以随意查询分组,可以满足大部分的负责的查询需求了。

5、unnest语法

参考官方文档:unnest语法 官方讲的比较清楚,具体案例解析json已经讲解了,这里就不过多赘述了

6、窗口函数

参考我之前的博客:开窗函数

  1. rank() OVER 在窗口内,按照某一列排序,返回在窗口内的序号

    日志筛选关键词  |	SELECT 	ip, 
    						time,
    						user_id, 
    						rank() OVER (PARTITION BY user_id ORDER BY time DESC) AS rnk
    				FROM log
    

    关键rank() OVER (PARTITION BY user_id ORDER BY time DESC) AS rnk (表示查询的结果集按照user_id聚合,并且按照time升序进行排序,rnk是分组后的排序序号,同等级rnk一致)
    解析:rank()是一个聚合函数,可以使用分析语法中的任何函数,也可以使用本文档列出的函数。PARTITION BY 是值按照哪些桶进行计算。
    在这里插入图片描述

  2. row_number
    row_number() OVER (PARTITION BY user_id ORDER BY time DESC) AS rnk (返回在窗口内的行号)
    在这里插入图片描述

  3. first_value
    first_value(time) OVER (PARTITION BY user_id ORDER BY time DESC) AS rnk (返回窗口内第一time的值)
    在这里插入图片描述

三、怎么查去哪查

如上就是阿里云存储的基本查询指南,掌握这些,基本可以应对大部分的日志分析查询方法了!
其实大部分的语法和sql十分类似,核心问题就是如何将字段的json展开是个大问题,只要会展开,其他的都是小kiss。
如果是相对复杂的join查询也是可以的,只不过写起来不美观,可以参考官方文档来学习剩下的查询分析语法。

  • 7
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
阿里云提供了一种方便快捷的方法,可以在其云服务器上搭建内网DNS服务。 首先,在阿里云控制台创建一个新的云服务器实例,并选择一个适当的操作系统,例如CentOS。安装完成后,我们需要登录到该服务器。 接下来,安装并配置BIND(或其他DNS服务器软件),它是一种常用的DNS服务器软件。在终端中运行命令`yum install bind bind-utils -y`来安装BIND。 安装完成后,我们需要编辑BIND的配置文件`/etc/named.conf`。在文件中我们可以定义DNS服务器的配置,例如绑定的IP地址、允许的客户端IP地址等。 配置完成后,我们需要创建一个名为zone的文件,用于定义我们要解析的域名和IP地址。在`/var/named/`目录下创建一个新的zone文件,并在`named.conf`文件中指定该zone文件的路径。 然后,我们可以通过终端中运行命令`named-checkconf`来检查配置文件是否有语法错误。如果没有错误,我们可以重新加载BIND服务,使配置文件生效。 现在,我们就可以在内网中将阿里云的DNS服务器的IP地址配置为本地设备的DNS服务器。当内网设备请求域名解析时,阿里云的DNS服务器会响应并提供正确的IP地址。 需要注意的是,内网设备需要配置正确的网关和DNS服务器,以便能够与阿里云的云服务器进行通信。 通过上述步骤,阿里云的云服务器就可以搭建一个内网DNS服务器,用于提供域名解析服务,使内部设备能够方便地与外部互联网进行通信。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鱼小鱼啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值