CLI使用案例3:轻松跨库查询数据并下载到本地

本文涉及的产品
对象存储 OSS,20GB 3个月
日志服务 SLS,月写入数据量 50GB 1个月
对象存储 OSS,恶意文件检测 1000次 1年
简介: 使用日志服务想要跨库查询? 网页控制台下载数据一页一页十分痛苦? SDK分页加格式化有些复杂? 不想写代码就可以查询数据并下载到本地? 日志服务CLI可以帮助你轻松解决这些问题.

当你需要查询数据或者下载到本地时, 是否遇到一些困难:

  • Web查询不支持跨多个logstore查询?
  • 现在的Web控制台只能一页一页的下载?
  • SDK提供的接口需要用起来有些复杂, 例如大数据量分页如何控制, 调整数据的输出格式化? 需要重试不精确查询.

如果是的, 你可以使用日志服务的CLI轻松解决这些问题.

查询日志

介绍

查询数据(GetLog)指的是针对索引数据, 在特定时间范围内搜索特定的日志.

查询日志的特点是:

  1. 针对获取索引的数据
  2. 按照索引获取, 跨分区, 支持跨多个logstore查询
  3. 可以按照主题, 全文分词, 特定索引域等查询条件获取.
  4. 按照日志资深时间查询, 而不是服务器接收.

参考查询语法以了解如何打开索引以及查询的相关语法.

查询日志

根据设定好的查询语句查询数据, 即可通过CLI轻松查询数据. 下面例子查询某个时间范围, 某台服务器响应速度大于5秒的访问日志.

aliyunlog log get_log_all --project_name="p1" --logstore_name="l1" --query="host:test.com and response_time>5000" --from_time="2018-01-24 16:00:00+8:00" --to_time="2018-01-24 17:00:00 +8:00"
AI 代码解读

这里拉取从时间2018-01-24 16:00:00+8:002018-01-24 17:00:00+8:00在内满足条件host:test.com and response_time>5000的日志, 例如:

{"count": 101, "logs": [{"k1":"a1", "k2":"a2"}, {"k1":"b1", "k2":"b2"}, ... ]}
AI 代码解读

注意:

  • 这里也可以使用子命令get_log(s)并传入size=-1, 但如果数据量特别多时, 例如总行数100万行的时候, 推荐使用get_log_all.

转换格式并存储到文件

如果期望将数据按照一行一条的形式存储下来, 一般需要加入jmes-filter进行处理. 如果期望存储到文件, 这直接使用>>重定向到文件即可.

例如:

aliyunlog log get_log_all --project_name="p1" --logstore_name="l1" --query="host:test.com and response_time>5000" --from_time="2018-01-24 16:00:00+8:00" --to_time="2018-01-24 17:00:00 +8:00" --jmes-filter="join('\n', map(&to_string(@), @))" >> ~/Desktop/test.data
AI 代码解读

输出将被存储在文件test.data中, 格式为:

{"k1":"a1", "k2":"a2"}
{"k1":"b1", "k2":"b2"}
...
AI 代码解读

时间格式

时间格式推荐是%Y-%m-%d %H:%M:%S %Z, 如2018-01-24 17:00:00+8:00, 但也支持其他合法的时间格式, 例如:Jan 01 2018 10:10:10+8:00

时间范围

命令get_log(s)get_log_all传入的时间范围, 需要注意几点:

  1. 这里的时间指的是解析出的日志时间(日志配置没有指定的情况下, 服务器接收日志的时间会设为这个时间).
  2. 时间的范围是左闭右闭[], 上面例子中16:00:0017:00:00时间的日志都会获得.

跨库查询

使用接口get_project_logs可以跨库查询日志. 例如:

aliyunlog log get_project_logs --request="{\"project\":\"p1\", \"query\":\"select count(1) from logstore1, logstore2, logstore3 where __date__ >'2017-11-10 00:00:00' and __date__ < '2017-11-13 00:00:00'\"}"
AI 代码解读

具体细节可以参考跨库查询.

进一步参考

相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
打赏
0
0
0
0
3963
分享
相关文章
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
PHP高级开发案例(1):使用MYSQL语句跨表查询无法导出全部记录的解决方案
102 0
MongoDB存储过程实战:聚合框架、脚本、最佳实践,一文全掌握!
【8月更文挑战第24天】MongoDB是一款备受欢迎的文档型NoSQL数据库,以灵活的数据模型和强大功能著称。尽管其存储过程支持不如传统关系型数据库,本文深入探讨了MongoDB在此方面的最佳实践。包括利用聚合框架处理复杂业务逻辑、封装业务逻辑提高复用性、运用JavaScript脚本实现类似存储过程的功能以及考虑集成其他工具提升数据处理能力。通过示例代码展示如何创建订单处理集合并定义验证规则,虽未直接实现存储过程,但有效地演示了如何借助JavaScript脚本处理业务逻辑,为开发者提供更多实用指导。
135 2
NodeJs操作MongoDB之分页功能与常见问题
NodeJs操作MongoDB之分页功能与常见问题一,方法介绍 1,聚合操作之count count()方法可以查询统计符合条件的集合的总数 1 db.User.count() // 此方法等价于 db.User.find().count()在分布式集合中,会出现计算错误的情况,这个时候推荐使用aggregate; 2,find() 方法以非结构化的方式来显示所有文档。
1775 0
快速入门—PolarDB-X首次使用流程—执行SQL基本操作
本文介绍如何在PolarDB-X中执行常用的SQL语句。
554 0
数据库学习-查询数据作业示例【带源码】
MySQL数据库 “查询数据 ” 习题示例,包含源码,能建立起对于查询数据 的基本概念
263 0
数据库学习-查询数据作业示例【带源码】
Python批量删除mysql中千万级大量数据
线上mysql数据库里面有张表保存有每天的统计结果,每天有1千多万条,这是我们意想不到的,统计结果咋有这么多。运维找过来,磁盘占了200G,最后问了运营,可以只保留最近3天的,前面的数据,只能删了。删,怎么删?
562 0
如何用SQL命令行工具删除dedecms指定id文章
  用dedecms采集时标题字段设置错了,出现了注释符号,导致后台的文章列表出现错误,也无法直接从列表中删除,可以远程登录数据库去操作,这个相对比较麻烦,想着直接从后台的SQL命令行工具删除。修改前先做好备份,以防万一。
1087 0
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。
127 0
以 MySQL 为例我们来聊聊,索引创建原则和执行计划分析。

云存储

+关注

相关课程

更多
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等