当前位置: 首页 > article >正文

我试了试用 SQL查 Linux日志,好用到飞起

最近发现点好玩的工具迫不及待的想跟大家分享一下。大家平时都怎么查Linux日志呢像我平时会用tail、head、cat、sed、more、less这些经典系统命令或者awk这类三方数据过滤工具配合起来查询效率很高。但在使用过程中有一点让我比较头疼那就是命令参数规则太多了记的人脑壳疼。那查日志有没有一种通用的方式比如用SQL查询毕竟这是程序员都比较熟悉的表达式。今天分享的工具q就实现了以写SQL的方式来查询、统计文本内容一起看看这货到底有什么神奇之处。搭个环境q是一个命令行工具允许我们在任意文件或者查询结果比如可以在ps -ef查询进程命令的结果集上直接执行SQL语句查询。宗旨就是文本即数据库表额当然这句话是我自己理解的哈哈哈它将普通文件或者结果集当作数据库表几乎支持所有的SQL结构如WHERE、GROUP BY、JOINS等支持自动列名和列类型检测支持跨文件连接查询这两个后边详细介绍支持多种编码。安装比较简单在Linux CentOS环境只要如下三步搞定Windows环境更是只需安装个exe就可以用了。wget https://github.com/harelba/q/releases/download/1.7.1/q-text-as-data-1.7.1-1.noarch.rpm #下载版本 sudo rpm -ivh q-text-as-data-1.7.1-1.noarch.rpm # 安装 q --version #查看安装版本“官方文档https://harelba.github.io/q语法q支持所有SQLiteSQL语法标准命令行格式q 参数命令 SQLq 命令 SQL我要查询myfile.log文件的内容直接q SELECT * FROM myfile.log。q SELECT * FROM myfile.logq不附加参数使用是完全没有问题的但利用参数会让显示结果更加美观所以这里简单了解一下它的参数分为 2种。input输入命令指的是对要查询的文件或结果集进行操作比如-H命令表示输入的数据包含标题行。q -H SELECT * FROM myfile.log在这种情况下将自动检测列名并可在查询语句中使用。如果未提供此选项则列将自动命名为cX以c1起始以此类推。q select c1c2 from ...output输出命令作用在查询输出的结果集比如-O让查询出来的结果显示列名。[rootiZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H select count(UID) from - where UIDroot 104 [rootiZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H -O select count(UID) from - where UIDroot count(UID) 104还有很多参数就不一一列举了感兴趣的同学在官网上看下接下来我们重点演示一下使用SQL如何应对各种查询日志的场景。玩法贼多下边咱们一起看几个查询日志的经常场景中这个SQL该如何写。1、关键字查询关键字检索应该是日常开发使用最频繁的操作不过我个人认为这一点q并没有什么优势因为它查询时必须指定某一列。[rootiZ2zebfzaequ90bdlz820sZ software]# q select * from douyin.log where c9 like %待解析% 2021-06-11 14:46:49.323 INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController : 待解析URL :urlhttps%3A%2F%2Fv.douyin.com%2Fe9g9uJ6%2F 2021-06-11 14:57:31.938 INFO 22790 --- [nio-8888-exec-5] c.x.douyin.controller.ParserController : 待解析URL :urlhttps%3A%2F%2Fv.douyin.com%2Fe9pdhGP%2F 2021-06-11 15:23:48.004 INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController : 待解析URL :urlhttps%3A%2F%2Fv.douyin.com%2Fe9pQjBR%2F 2021-06-11 2而用grep命令则是全文检索。[rootiZ2zebfzaequ90bdlz820sZ software]# cat douyin.log | grep 待解析URL 2021-06-11 14:46:49.323 INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController : 待解析URL :urlhttps%3A%2F%2Fv.douyin.com%2Fe9g9uJ6%2F 2021-06-11 14:57:31.938 INFO 22790 --- [nio-8888-exec-5] c.x.douyin.controller.ParserController : 待解析URL :urlhttps%3A%2F%2Fv.douyin.com%2Fe9pdhGP%2F2、模糊查询like模糊搜索如果文本内容列有名字直接用列名检索没有则直接根据列号c1、c2、cN。[rootiZ2zebfzaequ90bdlz820sZ software]# cat test.log abc 2 3 4 5 23 24 25 [rootiZ2zebfzaequ90bdlz820sZ software]# q -H -t select * from test.log where abc like %2% Warning: column count is one - did you provide the correct delimiter? 2 23 24 253、交集并集支持UNION和UNION ALL操作符对多个文件取交集或者并集。如下建了test.log和test1.log两个文件里边的内容有重叠用union进行去重。q -H -t select * from test.log union select * from test1.log [rootiZ2zebfzaequ90bdlz820sZ software]# cat test.log abc 2 3 4 5 [rootiZ2zebfzaequ90bdlz820sZ software]# cat test1.log abc 3 4 5 6 [rootiZ2zebfzaequ90bdlz820sZ software]# q -H -t select * from test.log union select * from test1.log Warning: column count is one - did you provide the correct delimiter? Warning: column count is one - did you provide the correct delimiter? 2 3 4 5 64、内容去重比如统计某个路径下的./clicks.csv文件中uuid字段去重后出现的总个数。q -H -t SELECT COUNT(DISTINCT(uuid)) FROM ./clicks.csv5、列类型自动检测注意q会理解每列是数字还是字符串判断是根据实数值比较还是字符串比较进行过滤这里会用到-t命令。q -H -t SELECT request_id,score FROM ./clicks.csv WHERE score 0.7 ORDER BY score DESC LIMIT 56、字段运算读取系统命令查询结果计算/tmp目录中每个用户和组的总值。可以对字段进行运算处理。sudo find /tmp -ls | q SELECT c5,c6,sum(c7)/1024.0/1024 AS total FROM - GROUP BY c5,c6 ORDER BY total desc [rootiZ2zebfzaequ90bdlz820sZ software]# sudo find /tmp -ls | q SELECT c5,c6,sum(c7)/1024.0/1024 AS total FROM - GROUP BY c5,c6 ORDER BY total desc www www 8.86311340332 root root 0.207922935486 mysql mysql 4.76837158203e-067、数据统计统计系统拥有最多进程数的前 3个用户ID按降序排序这就需要和系统命令配合使用了先查询所有进程再利用SQL筛选这里的q命令就相当grep命令。ps -ef | q -H SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3 [rootiZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3 root 104 www 16 rabbitmq 4 [rootiZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H -O SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3 UID cnt root 110 www 16 rabbitmq 4我们看到加与不加-O命令的区别就是否显示查询结果的标题。8连文件查一般情况下我们的日志文件会按天分割成很多个固定容量的子文件在没有统一的日志收集服务器的情况下如果不给个报错时间区间去查一个关键词那么无异于大海捞针。如果可以将所有文件内容合并后在查就会省事很多q支持将文件像数据库表那样联合查询。q -H select * from douyin.log a join douyin-2021-06-18.0.log b on (a.c2b.c3) where b.c1root总结看完可能会有人抬杠q写这么多代码直接用awk不香吗额 介绍这个工具的初衷并不是说要替换现有哪种工具而是多提供一种更为便捷的查日志方法。我也有在用awk确实很强大没得说但这里边涉及到一个学习成本的问题琳琅满目的命令、匹配规则想玩转还是要下点功夫的。而对于新手程序员稍微有点数据库经验写SQL问题都不大上手q则会容易的多。

相关文章:

我试了试用 SQL查 Linux日志,好用到飞起

最近发现点好玩的工具,迫不及待的想跟大家分享一下。大家平时都怎么查Linux日志呢?像我平时会用tail、head、cat、sed、more、less这些经典系统命令,或者awk这类三方数据过滤工具,配合起来查询效率很高。但在使用过程中有一点让我…...

别再纠结React拖拽库了!2025年实战对比:dnd-kit vs react-dnd vs antd Table

2025年React拖拽库深度选型指南:从垂直列表到复杂交互的全场景决策 在React生态系统中,拖拽功能实现一直是开发者面临的技术选型难题之一。随着2025年React 19的稳定发布和各类库的迭代演进,dnd-kit、react-dnd和antd Table等解决方案各自形成…...

别再为STM32F407+LAN8720以太网通信发愁了,这份CubeMX+FreeRTOS+LWIP的避坑配置指南请收好

STM32F407LAN8720以太网通信实战避坑指南:从CubeMX配置到FreeRTOSLWIP调优 实验室的灯光下,你盯着屏幕上闪烁的Ping请求超时提示,第17次尝试让STM32F407通过LAN8720与主机通信。作为嵌入式开发者,以太网通信本该是基础技能&#x…...

OpenClaw学习总结_II_频道系统_1:WhatsApp集成详解

II. 频道系统 - 1. WhatsApp 📍 课程位置 阶段:II. 频道系统 课序:第 1 课 前置知识:I. 核心架构(Gateway/Session/Tools) 后续课程:II-2. Telegram🎯 本课核心问题(你不…...

Java笔记2(修改)

一、Java变量1、定义:变量是程序中最基础的存储单元,运行时值是可以改变的,本质上就是在内衬纸开辟的一块空间使用变量访问这块空间2、数据类型:变量名值public static void main(String[ ] args){int age 20;}System.out.println("age…...

失信被执行人查询小工具 | 在线快速查询入口

📌 工具介绍 本失信被执行人查询小工具,无需下载 APP、无需注册、无需付费,打开就能用,实时查询全国失信名单、限制消费人员、被执行人信息。 适合: ・合作做生意前查对方信用 ・交友、相亲、招聘背调 ・查自己是否被误…...

【VLM】HopChain视觉语言推理多跳数据合成框架

note 【数据合成方案进展】讲得是多跳视觉语言推理数据合成框架,用于应对视觉语言模型(VLMs)在长思维链(CoT)推理中的错误累积以及大多数 RLVR 视觉语言训练数据缺乏全程依赖视觉证据的复杂推理链的问题。工作在《Hop…...

Vibe Coding实战:如何用AI生成你的第一个React天气应用(附完整Prompt模板)

Vibe Coding实战:用AI构建React天气应用的完整指南 从零开始的AI编程体验 去年夏天,我尝试用传统方式开发一个天气应用,花了整整三周时间调试API接口和React组件状态管理。而今年,借助Vibe Coding技术,同样的项目我只用…...

【前端知识】React生态你了解多少?

React生态你了解多少? React 常见生态组件**一、React 生态系统整体结构图示****二、核心生态组件详解 可执行示例****1. React Router(路由管理)****2. Ant Design(UI 组件库)****3. Zustand(轻量状态管理…...

CSS3文字闪烁效果实战:3种方法让你的网页标题更吸睛(附完整代码)

CSS3文字闪烁效果实战:3种方法让你的网页标题更吸睛 在电商促销页面或活动公告栏中,一个醒目的标题往往能瞬间抓住用户的注意力。文字闪烁效果作为一种经典的视觉设计手法,通过动态变化的光影和色彩,能够有效提升关键信息的传达效…...

避坑指南:Windows搭建Turn服务器常见问题及解决方案

Windows平台Turn服务器部署避坑实战手册 在实时音视频通信领域,Turn服务器扮演着关键的中继角色,特别是在NAT穿透场景中。Windows平台因其广泛的用户基础,成为不少开发团队的首选部署环境。然而,从源码编译到服务配置的每一步都可…...

vxe-table列头合并避坑指南:从基础配置到高级动态调整

vxe-table列头合并实战指南:从基础配置到动态策略优化 在企业级前端开发中,数据表格的展示需求往往超出基础功能范畴。当我们需要将多个逻辑相关的列头合并为一个视觉单元时,vxe-table的merge-header-cells功能便成为解决这一痛点的利器。本文…...

避坑指南:从EXT151安装包解压到QRC成功集成Cadence的全流程复盘

避坑指南:从EXT151安装包解压到QRC成功集成Cadence的全流程复盘 在集成电路设计领域,寄生参数提取是确保芯片性能准确模拟的关键环节。Cadence的QRC工具作为行业标准解决方案,其安装配置过程却常常成为工程师的"拦路虎"。本文将基于…...

AtCoder Beginner Contest 450 复盘

总结这是第一次打Atcode Beginner的网赛,以前一直打codeforce的网赛,总体来说题目比codeforce的难度梯度还是明显,比codeforce的题目相对还是有点难,恐怕是看不懂题目,题目描述和codeforce有比较大的区别,第…...

egoShieldTimeLapse:基于STM32的延时摄影运动控制库

1. 项目概述egoShieldTimeLapse 是专为 uStepper egoShield 硬件平台设计的开源时间 lapse(延时摄影)控制库,由 ON Development 开发并维护。该库并非通用型电机控制中间件,而是面向特定工业级运动控制场景的垂直解决方案——将高…...

威联通NAS iSCSI实战:如何将NAS硬盘变成电脑的‘第二块硬盘’(附速度测试对比)

威联通NAS iSCSI深度应用指南:解锁专业级存储扩展方案 对于创意工作者和重度数据用户而言,本地存储空间不足是个永恒痛点。想象一下,当你正在处理4K视频项目时,突然弹出"磁盘空间不足"的警告;或是下载了最新…...

YOLO26-Pose端到端部署:告别NMS!人体与工业部件关键点检测实战

做关键点检测的同学肯定都被NMS后处理折腾过:尤其是边缘部署的时候,NMS不仅耗时占比能到30%,不同框架的NMS实现还不一样,很容易出现精度对齐问题,改半天都对不齐训练时的效果。 上个月做消费电子厂的连接器引脚平整度检…...

Gazebo仿真环境下的SLAM建图实战:从模型导入到地图保存全流程

Gazebo仿真环境下的SLAM建图实战:从模型导入到地图保存全流程 在机器人开发领域,仿真环境的重要性不言而喻。Gazebo作为一款功能强大的3D机器人仿真平台,为开发者提供了测试SLAM算法的理想沙盒。本文将带你从零开始,在Gazebo中搭建…...

拉普拉斯反变换避坑指南:当ROC区域遇到部分分式展开时的5个易错点

拉普拉斯反变换避坑指南:当ROC区域遇到部分分式展开时的5个易错点 在信号与系统领域,拉普拉斯反变换是连接复频域与时域的关键桥梁。许多工程师和学生在处理部分分式展开与收敛域(ROC)的交叉问题时,常因细微疏忽导致结…...

Qwen3-4B-Thinking模型软件测试应用:自动化测试用例与缺陷报告生成

Qwen3-4B-Thinking模型软件测试应用:自动化测试用例与缺陷报告生成 1. 引言:当测试工程师遇上AI助手 想象一下这个场景:产品经理刚刚发来一份长达50页的新功能需求文档,要求在下周完成测试覆盖。你看着密密麻麻的文字&#xff0…...

Git误删急救指南:30秒挽救代码

Git误操作急救手册大纲常见误操作场景分类文件误删或未暂存就撤销修改 提交信息错误或漏提交文件 分支误删或错误合并 远程仓库操作失误&#xff08;如强制推送覆盖历史&#xff09;撤销本地修改的紧急措施恢复工作区未暂存的修改&#xff1a;git checkout -- <file> 撤销…...

【路径规划】在二维和三维空间中实现RRT_算法,根据障碍物位置和尺寸实现的避障功能附matlab代码

✅作者简介&#xff1a;热爱科研的Matlab仿真开发者&#xff0c;擅长毕业设计辅导、数学建模、数据处理、建模仿真、程序设计、完整代码获取、论文复现及科研仿真。&#x1f34e; 往期回顾关注个人主页&#xff1a;Matlab科研工作室&#x1f447; 关注我领取海量matlab电子书和…...

MATLAB/Simulink 两相交错并联Buck电路仿真:电压闭环控制之旅

MATLAB/Simulink&#xff0c;两相交错并联Buck&#xff08;降压斩波&#xff09;电路仿真模型&#xff0c;电压闭环控制&#xff0c;仿真电路以及部分波形如图所示&#xff0c;可定制模型。 2022b版本&#xff0c;可转其他版本最近在研究电源管理相关的项目&#xff0c;和大家分…...

在Java中如何理解方法访问修饰符的作用

方法访问修饰符决定了类中方法的可见性和可访问范围&#xff0c;是Java封装特性的重要体现。合理使用访问修饰符不仅能保护数据安全&#xff0c;还能提升代码的可维护性和设计清晰度。理解它们的作用&#xff0c;关键在于掌握每种修饰符的具体访问权限以及在实际开发中的最佳实…...

3.22 OJ

一、题目&#xff1a;8皇后改作者: turbo时间限制: 1s章节: 深度优先搜索问题描述规则同8皇后问题&#xff0c;但是棋盘上每格都有一个数字&#xff0c;要求八皇后所在格子数字之和最大。输入说明一个8*8的棋盘。数据规模和约定棋盘上的数字范围0~99输出说明所能得到的最大数字…...

无人船、AUV与无人车编队路径跟踪的奇妙探索

无人船&#xff0c;AUV&#xff0c;无人车 编队路径跟踪 领航跟随los制导反步控制 路径可调&#xff0c;模型可调 MATLAB程序在自动化载具的领域中&#xff0c;无人船、AUV&#xff08;自主水下航行器&#xff09;以及无人车的编队路径跟踪是一个极富挑战与魅力的研究方向。今天…...

三菱PLC恒定张力收卷机控制程序解析

三菱plc恒定张力收卷机控制程序 结构化编程&#xff0c;逻辑清晰 包含三菱触摸屏程序&#xff0c;电路接线图&#xff0c;bom&#xff0c;程序有注释&#xff0c;值得学习和借鉴。 最近在做一个三菱PLC恒定张力收卷机的项目&#xff0c;感觉收获挺多的。整个项目从程序设计到硬…...

用PHP搞定TikTok搜索数据抓取:手把手教你绕过x-bogus签名验证(附完整Node.js联动代码)

PHP与Node.js协同破解TikTok搜索数据抓取难题&#xff1a;x-bogus签名实战指南 当后端开发者需要处理前端加密算法时&#xff0c;技术栈的边界往往变得模糊。本文将带你深入探索如何用PHP作为主力语言&#xff0c;巧妙整合Node.js的JavaScript执行能力&#xff0c;构建一个稳定…...

从‘玩具‘到‘武器库‘:如何将本地Pikachu靶场升级为团队共享的实战训练平台?

从个人实验到团队赋能&#xff1a;构建企业级网络安全训练平台的实战指南 在网络安全领域&#xff0c;靶场训练早已从个人技能打磨的工具&#xff0c;演变为团队能力建设的核心基础设施。许多安全从业者都曾搭建过Pikachu这类经典漏洞靶场&#xff0c;但将其局限在本地环境使用…...

基于Matlab的单侧电源三段式距离保护控制系统

基于matlab的单侧电源三段式距离保护控制系统。 有详细的原理说明&#xff0c;和仿真程序介绍&#xff0c;同时附有详细的仿真结果分析。 可直接用做课程设计报告。一、引言 在电力系统中&#xff0c;保护装置对于保障系统的安全稳定运行至关重要。单侧电源三段式距离保护作为一…...