亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

怎么使用SQL查詢Linux日志

發布時間:2022-02-01 19:00:58 來源:億速云 閱讀:262 作者:小新 欄目:開發技術

小編給大家分享一下怎么使用SQL查詢Linux日志,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

SQL是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用于存取數據以及查詢、更新和管理關系數據庫系統,本篇文章將使用SQL查詢 Linux日志。

怎么使用SQL查詢Linux日志

搭個環境

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 + 參數命令 + “SQL”

q  ""

我要查詢myfile.log文件的內容,直接q “SELECT * FROM myfile.log”。

q "SELECT * FROM myfile.log"

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

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

q -H "SELECT * FROM myfile.log"

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

q  "select c1,c2 from ..."

output輸出命令:作用在查詢輸出的結果集,比如:-O,讓查詢出來的結果顯示列名。

[root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H "select count(UID) from - where UID='root'"104
[root@iZ2zebfzaequ90bdlz820sZ software]# ps -ef | q -H -O "select count(UID) from - where UID='root'"count(UID)
104

還有很多參數就不一一列舉了,感興趣的同學在官網上看下,接下來我們重點演示一下使用SQL如何應對各種查詢日志的場景。圖片 怎么使用SQL查詢Linux日志

玩法賊多

下邊咱們一起看幾個查詢日志的經常場景中,這個SQL該如何寫。

1、關鍵字查詢

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

[root@iZ2zebfzaequ90bdlz820sZ 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 :url=https%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 :url=https%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 :url=https%3A%2F%2Fv.douyin.com%2Fe9pQjBR%2F                                            
2021-06-11 2

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

[root@iZ2zebfzaequ90bdlz820sZ 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 :url=https%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 :url=https%3A%2F%2Fv.douyin.com%2Fe9pdhGP%2F

2、模糊查詢

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

[root@iZ2zebfzaequ90bdlz820sZ software]# cat test.logabc2345232425[root@iZ2zebfzaequ90bdlz820sZ software]# q -H -t "select * from test.log where abc like '%2%'"Warning: column count is one - did you provide the correct delimiter?2232425

3、交集并集

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

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

q -H -t "select * from test.log union select * from test1.log"[root@iZ2zebfzaequ90bdlz820sZ software]# cat test.logabc2345[root@iZ2zebfzaequ90bdlz820sZ software]# cat test1.logabc3456[root@iZ2zebfzaequ90bdlz820sZ 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?23456

4、內容去重

比如統計某個路徑下的./clicks.csv文件中,uuid字段去重后出現的總個數。

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

5、列類型自動檢測

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

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

6、字段運算

讀取系統命令查詢結果,計算/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"[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"www www 8.86311340332
root root 0.207922935486
mysql mysql 4.76837158203e-06

7、數據統計

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

ps -ef | q -H "SELECT UID,COUNT(*) cnt FROM - GROUP BY UID ORDER BY cnt DESC LIMIT 3"[root@iZ2zebfzaequ90bdlz820sZ 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
[root@iZ2zebfzaequ90bdlz820sZ 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,連文件查

一般情況下,我們的日志文件會按天分割成很多個固定容量的子文件,在沒有統一的日志收集服務器的情況下,如果不給個報錯時間區間去查一個關鍵詞,那么無異于大海撈針。 怎么使用SQL查詢Linux日志 圖片如果可以將所有文件內容合并后在查就會省事很多,q支持將文件像數據庫表那樣聯合查詢。

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

以上是“怎么使用SQL查詢Linux日志”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

蒲城县| 平顺县| 陆川县| 哈尔滨市| 台北县| 崇仁县| 正宁县| 临高县| 澄迈县| 湖口县| 富蕴县| 佛冈县| 定兴县| 鲁山县| 通辽市| 夏邑县| 特克斯县| 茂名市| 靖西县| 永平县| 慈利县| 汉寿县| 琼海市| 天长市| 芜湖县| 县级市| 丽江市| 锦屏县| 普定县| 海兴县| 平陆县| 南川市| 宿州市| 邳州市| 额尔古纳市| 施秉县| 固镇县| 蒲江县| 大同县| 汉源县| 襄垣县|