自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

我試了試用 SQL查 Linux日志,好用到飛起

系統(tǒng) Linux
今天分享的工具q,就實現(xiàn)了以寫SQL的方式來查詢、統(tǒng)計文本內(nèi)容,一起看看這貨到底有什么神奇之處。

[[411452]]

 最近發(fā)現(xiàn)點好玩的工具,迫不及待的想跟大家分享一下。

大家平時都怎么查Linux日志呢?像我平時會用tail、head、cat、sed、more、less這些經(jīng)典系統(tǒng)命令,或者awk這類三方數(shù)據(jù)過濾工具,配合起來查詢效率很高。但在使用過程中有一點讓我比較頭疼,那就是命令參數(shù)規(guī)則太多了,記的人腦殼疼。

那查日志有沒有一種通用的方式,比如用SQL查詢,畢竟這是程序員都比較熟悉的表達式。

今天分享的工具q,就實現(xiàn)了以寫SQL的方式來查詢、統(tǒng)計文本內(nèi)容,一起看看這貨到底有什么神奇之處。

搭個環(huán)境

q是一個命令行工具,允許我們在任意文件或者查詢結(jié)果,比如可以在ps -ef查詢進程命令的結(jié)果集上,直接執(zhí)行SQL語句查詢。

宗旨就是文本即數(shù)據(jù)庫表,額~,當然這句話是我自己理解的,哈哈哈

它將普通文件或者結(jié)果集當作數(shù)據(jù)庫表,幾乎支持所有的SQL結(jié)構(gòu),如WHERE、GROUP BY、JOINS等,支持自動列名和列類型檢測,支持跨文件連接查詢,這兩個后邊詳細介紹,支持多種編碼。

安裝比較簡單,在Linux CentOS環(huán)境,只要如下三步搞定,Windows環(huán)境更是只需安裝個exe就可以用了。 

  1. wget https://github.com/harelba/q/releases/download/1.7.1/q-text-as-data-1.7.1-1.noarch.rpm #下載版本  
  2. sudo rpm -ivh q-text-as-data-1.7.1-1.noarch.rpm # 安裝  
  3. q --version  #查看安裝版本 

“官方文檔:https://harelba.github.io/q

語法

q支持所有SQLiteSQL語法,標準命令行格式q + 參數(shù)命令 + "SQL"

  1. <命令> "<SQL>

我要查詢myfile.log文件的內(nèi)容,直接q "SELECT * FROM myfile.log"。

  1. q "SELECT * FROM myfile.log" 

q不附加參數(shù)使用是完全沒有問題的,但利用參數(shù)會讓顯示結(jié)果更加美觀,所以這里簡單了解一下,它的參數(shù)分為 2種。

input輸入命令:指的是對要查詢的文件或結(jié)果集進行操作,比如:-H命令,表示輸入的數(shù)據(jù)包含標題行。 

  1. q -H "SELECT * FROM myfile.log" 

在這種情況下,將自動檢測列名,并可在查詢語句中使用。如果未提供此選項,則列將自動命名為cX,以c1起始以此類推。 

  1. q  "select c1,c2 from ..." 
  •  output輸出命令:作用在查詢輸出的結(jié)果集,比如:-O,讓查詢出來的結(jié)果顯示列名。 
  1. [root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H "select count(UID) from - where UID='root' 
  2. 104  
  3. [root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H -O "select count(UID) from - where UID='root' 
  4. count(UID)  
  5. 104 

還有很多參數(shù)就不一一列舉了,感興趣的同學在官網(wǎng)上看下,接下來我們重點演示一下使用SQL如何應(yīng)對各種查詢?nèi)罩镜膱鼍啊?/p>

玩法賊多

下邊咱們一起看幾個查詢?nèi)罩镜慕?jīng)常場景中,這個SQL該如何寫。

1、關(guān)鍵字查詢

關(guān)鍵字檢索,應(yīng)該是日常開發(fā)使用最頻繁的操作,不過我個人認為這一點q并沒有什么優(yōu)勢,因為它查詢時必須指定某一列。 

  1. [root@iZ2zebfzaequ90bdlz820sZ software]# q "select * from douyin.log where c9 like '%待解析%'"  
  2. 2021-06-11 14:46:49.323 INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController : 待解析URL :url=https%3A%2F%2Fv.douyin.com%2Fe9g9uJ6%2F                                            
  3. 2021-06-11 14:57:31.938 INFO 22790 --- [nio-8888-exec-5] c.x.douyin.controller.ParserController : 待解析URL :url=https%3A%2F%2Fv.douyin.com%2Fe9pdhGP%2F                                              
  4. 2021-06-11 15:23:48.004 INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController : 待解析URL :url=https%3A%2F%2Fv.douyin.com%2Fe9pQjBR%2F                                              
  5. 2021-06-11 2 

而用grep命令則是全文檢索。 

  1. [root@iZ2zebfzaequ90bdlz820sZ software]# cat douyin.log | grep '待解析URL'  
  2. 2021-06-11 14:46:49.323  INFO 22790 --- [nio-8888-exec-2] c.x.douyin.controller.ParserController   : 待解析URL :url=https%3A%2F%2Fv.douyin.com%2Fe9g9uJ6%2F  
  3. 2021-06-11 14:57:31.938  INFO 22790 --- [nio-8888-exec-5] c.x.douyin.controller.ParserController   : 待解析URL :url=https%3A%2F%2Fv.douyin.com%2Fe9pdhGP%2F 

2、模糊查詢

like模糊搜索,如果文本內(nèi)容列有名字直接用列名檢索,沒有則直接根據(jù)列號c1、c2、cN。 

  1. [root@iZ2zebfzaequ90bdlz820sZ software]# cat test.log   
  2. abc  
  3.  
  4.  
  5.  
  6.  
  7. 23  
  8. 24  
  9. 25  
  10. [root@iZ2zebfzaequ90bdlz820sZ software]# q -H -t "select * from test.log where abc like '%2%'"  
  11. Warning: column count is one - did you provide the correct delimiter?  
  12.  
  13. 23  
  14. 24  
  15. 25 

3、交集并集

支持UNION和UNION ALL操作符對多個文件取交集或者并集。

如下建了test.log和test1.log兩個文件,里邊的內(nèi)容有重疊,用union進行去重。 

  1. q -H -t "select * from test.log union select * from test1.log"  
  2. [root@iZ2zebfzaequ90bdlz820sZ software]# cat test.log   
  3. abc  
  4.  
  5.  
  6.  
  7.  
  8. [root@iZ2zebfzaequ90bdlz820sZ software]# cat test1.log   
  9. abc  
  10.  
  11.  
  12.  
  13.  
  14. [root@iZ2zebfzaequ90bdlz820sZ software]# q -H -t "select * from test.log union select * from test1.log"  
  15. Warning: column count is one - did you provide the correct delimiter?  
  16. Warning: column count is one - did you provide the correct delimiter?  
  17.  
  18.  
  19.  
  20.  

4、內(nèi)容去重

比如統(tǒng)計某個路徑下的./clicks.csv文件中,uuid字段去重后出現(xiàn)的總個數(shù)。 

  1. q -H -t "SELECT COUNT(DISTINCT(uuid)) FROM ./clicks.csv" 

5、列類型自動檢測

注意:q會理解每列是數(shù)字還是字符串,判斷是根據(jù)實數(shù)值比較,還是字符串比較進行過濾,這里會用到-t命令。 

  1. q -H -t "SELECT request_id,score FROM ./clicks.csv WHERE score > 0.7 ORDER BY score DESC LIMIT 5" 

6、字段運算

讀取系統(tǒng)命令查詢結(jié)果,計算/tmp目錄中每個用戶和組的總值??梢詫ψ侄芜M行運算處理。 

  1. sudo find /tmp -ls | q "SELECT c5,c6,sum(c7)/1024.0/1024 AS total FROM - GROUP BY c5,c6 ORDER BY total desc"  
  2. [root@iZ2zebfzaequ90bdlz820sZ 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"  
  3. www www 8.86311340332  
  4. root root 0.207922935486  
  5. mysql mysql 4.76837158203e-06 

7、數(shù)據(jù)統(tǒng)計

統(tǒng)計系統(tǒng)擁有最多進程數(shù)的前 3個用戶ID,按降序排序,這就需要和系統(tǒng)命令配合使用了,先查詢所有進程再利用SQL篩選,這里的q命令就相當grep命令。 

  1. ps -ef | q -H "SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3"  
  2. [root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H "SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3"  
  3. root 104  
  4. www 16  
  5. rabbitmq 4  
  6. [root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H -O "SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3"  
  7. UID cnt  
  8. root 110  
  9. www 16  
  10. rabbitmq 4 

我們看到加與不加-O命令的區(qū)別就是否顯示查詢結(jié)果的標題。

8,連文件查

一般情況下,我們的日志文件會按天分割成很多個固定容量的子文件,在沒有統(tǒng)一的日志收集服務(wù)器的情況下,如果不給個報錯時間區(qū)間去查一個關(guān)鍵詞,那么無異于大海撈針。

如果可以將所有文件內(nèi)容合并后在查就會省事很多,q支持將文件像數(shù)據(jù)庫表那樣聯(lián)合查詢。 

  1. q -H "select * from douyin.log a join douyin-2021-06-18.0.log b on (a.c2=b.c3) where b.c1='root'

總結(jié)

看完可能會有人抬杠:q寫這么多代碼直接用awk不香嗎?額~ 介紹這個工具的初衷并不是說要替換現(xiàn)有哪種工具,而是多提供一種更為便捷的查日志方法。

我也有在用awk確實很強大沒得說,但這里邊涉及到一個學習成本的問題,琳瑯滿目的命令、匹配規(guī)則想玩轉(zhuǎn)還是要下點功夫的。而對于新手程序員稍微有點數(shù)據(jù)庫經(jīng)驗,寫SQL問題都不大,上手q則會容易的多。 

 

責任編輯:龐桂玉 來源: Hollis
相關(guān)推薦

2020-08-23 09:30:32

jupyter lab插件開發(fā)

2020-09-20 22:04:11

Windows 工具系統(tǒng)

2023-02-09 12:42:40

2023-07-03 08:29:01

2015-11-13 10:42:06

微軟表情包爾康少爺

2022-04-18 07:32:31

Chrome瀏覽器插件

2010-07-07 16:46:52

SQL Server日

2017-08-18 15:54:16

RecyclerVieDiffUtil數(shù)據(jù)

2022-03-06 20:04:16

LinuxMaui Shell

2021-01-21 22:13:40

Windows微軟開發(fā)

2023-04-18 15:22:04

2022-11-04 19:00:00

Python自動化

2025-04-09 12:06:21

AI工具模型

2021-07-19 15:47:45

Python編程語言代碼

2022-04-12 08:43:21

Python內(nèi)置模塊

2018-07-10 09:36:25

2021-10-06 15:58:26

Python工具代碼

2021-11-15 10:02:16

Python命令技巧

2023-04-26 00:34:36

Python技巧程序員

2022-03-29 18:18:07

Kubernetes框架
點贊
收藏

51CTO技術(shù)棧公眾號