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

Linux日志終極指南

系統(tǒng) Linux 系統(tǒng)運(yùn)維
首先我們會演示,你應(yīng)該如何使用不同的工具在命令行進(jìn)行日志分析;然后,演示一個(gè)日志管理工具,它能夠讓大多數(shù)乏味的工作變得自動化和高效。

Linux 日志分析

雖然提取的時(shí)候,不總是和你想的一樣簡單,但是日志中有大量信息在等著你。在這部分,我們會講一些基本分析示例,你可以馬上拿來處理你的日志(只是搜索里面有什么)。我們還會講一些高級分析方法,開始的時(shí)候可能要花時(shí)間來做配置,但會為以后省很多時(shí)間。你可以把高級分析的示例用在待解析的數(shù)據(jù)上,比如生成摘要計(jì)數(shù),過濾字段值等。

首先我們會演示,你應(yīng)該如何使用不同的工具在命令行進(jìn)行日志分析;然后,演示一個(gè)日志管理工具,它能夠讓大多數(shù)乏味的工作變得自動化和高效。

使用 Grep 搜索

搜索文本是找到你想要的信息的最基本方法。搜索文本最常用的工具是 grep 。這個(gè)命令行工具,大多數(shù) Linux 發(fā)行版上都有,它支持你用正則表達(dá)式來搜索日志。正則表達(dá)式是一種用專門語言寫成的語句,可用來識別匹配文本。最簡單的正則表達(dá)式是把你搜索的字符串加上引號。

正則表達(dá)式

這里有個(gè)例子,它在 Ubuntu 的認(rèn)證日志里搜索 “user hoover”:

  1. $ GREP "USER HOOVER" /VAR/LOG/AUTH.LOG 
  2.  
  3. ACCEPTED PASSWORD FOR HOOVER FROM 10.0.2.2 PORT 4792 SSH2 
  4.  
  5. PAM_UNIX(SSHD:SESSION): SESSION OPENED FOR USER HOOVER BY (UID=0) 
  6.  
  7. PAM_UNIX(SSHD:SESSION): SESSION CLOSED FOR USER HOOVER  

構(gòu)造精確的正則表達(dá)式很難。例如,假設(shè)我們搜索一個(gè)數(shù)字,比如端口號“4792” ,它也可以匹配時(shí)間戳,URLs和其他不需要的數(shù)據(jù)。在下面針對 Ubuntu 的例子里,它匹配了 Apache 日志,但這并不是我們想要的。

  1. $ grep "4792" /var/log/auth.log 
  2.  
  3. Accepted password for hoover from 10.0.2.2 port 4792 ssh2 
  4.  
  5. 74.91.21.46 - - [31/Mar/2015:19:44:32 +0000] "GET /scripts/samples/search?q=4972HTTP/1.0" 404 545 "-" "-”  

延伸搜索

另一個(gè)有用的技巧是你可以用grep 做延伸搜索。它會輸出匹配項(xiàng)的前幾行和后幾行內(nèi)容。它可以幫你調(diào)試是什么導(dǎo)致了錯(cuò)誤或問題。B 選項(xiàng)指定顯示匹配項(xiàng)前面的行數(shù),A 選項(xiàng)指定顯示匹配項(xiàng)后面的行數(shù)。如下所示,我們看到,當(dāng)有人以 admin 身份登陸失敗后, 反向映射也會失敗,這說明他們可能沒有有效的域名。這很可疑!

  1. $ grep -B 3 -A 2 'Invalid user' /var/log/auth.log 
  2.  
  3. Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: reverse mapping checking getaddrinfo for 216-19-2-8.commspeed.net[216.19.2.8] failed - POSSIBLE BREAK-IN ATTEMPT! 
  4.  
  5. Apr 28 17:06:20 ip-172-31-11-241 sshd[12545]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth] 
  6.  
  7. Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: <b>Invalid user</b>; admin from 216.19.2.8 
  8.  
  9. Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: input_userauth_request: invalid user admin [preauth] 
  10.  
  11. Apr 28 17:06:20 ip-172-31-11-241 sshd[12547]: Received disconnect from 216.19.2.8: 11: Bye Bye [preauth]  

Tail命令

你也可以將 tail 和 grep 搭配起來使用,以獲取文件***幾行,或者跟蹤日志并實(shí)時(shí)打印。當(dāng)你在進(jìn)行交互式更改比如架設(shè)服務(wù)器或測試代碼更改的時(shí)候,非常有用。

  1. $ tail -f /var/log/auth.log | grep 'Invalid user' 
  2.  
  3. Apr 30 19:49:48 ip-172-31-11-241 sshd[6512]: Invalid user ubnt from 219.140.64.136 
  4.  
  5. Apr 30 19:49:49 ip-172-31-11-241 sshd[6514]: Invalid user; admin from 219.140.64.136  

全面介紹 grep 和正則表達(dá)式超出了本文的范圍,Ryan 的教程里有更深入的介紹。

日志管理系統(tǒng)中有更高效更強(qiáng)大的搜索工具。它們通常對數(shù)據(jù)建立索引和并行查詢,因此你可以在數(shù)秒之內(nèi)快速查詢高達(dá) G 字節(jié)或 T 字節(jié)的日志。相比之下,用 grep ,可能要花幾分鐘,極端情況下會花費(fèi)數(shù)小時(shí)。日志管理系統(tǒng)也像 Lucene (譯注:一個(gè)開源的全文檢索引擎工具包)一樣使用查詢語言 ,它為數(shù)字,字段等的搜索提供了簡單的語法。

用Cut,AWK 和 Grok 解析日志

命令行工具

Linux 提供了幾種文本解析和分析的命令行工具。如果你想快速解析少量的數(shù)據(jù),它們很強(qiáng)大,但是處理大量數(shù)據(jù)要花很長時(shí)間。

Cut 命令

cut 命令可以從帶分隔符的日志中解析字段。分隔符是類似等號或逗號的字符,用來劃分字段或鍵值對。

比如說,我們想從這個(gè)日志中提取用戶名:

  1. pam_unix(su:auth): authentication failure; logname=hoover uid=1000 euid=0 tty=/dev/pts/0 ruser=hoover rhost=  user=root 

我們可以和下面一樣使用 cut 命令,獲取第八個(gè)等號后邊的文本。這是 Ubuntu 上的例子:

  1. $ grep "authentication failure" /var/log/auth.log | cut -d '=' -f 8 
  2.  
  3. root 
  4.  
  5. hoover 
  6.  
  7. root 
  8.  
  9. nagios 
  10.  
  11. nagios  

AWK 命令

此外,你還可以用 awk,它擁有更強(qiáng)的解析字段的功能。它提供了一個(gè)腳本語言,讓你幾乎可以過濾出任何毫不相關(guān)的信息。

舉個(gè)例子,假設(shè)我們在 Ubuntu 上有如下的日志,我們想提取登陸失敗的用戶名:

  1. Mar 24 08:28:18 ip-172-31-11-241 sshd[32701]: input_userauth_request: invalid user guest [preauth] 

下面是使用 awk 的例子。首先,用一個(gè)正則表達(dá)式 /sshd.*invalid user/ 匹配 sshd 無效用戶的那一行。然后使用 { print $9 } 打印第九個(gè)字段(默認(rèn)的分隔符是空格)。這樣就輸出了用戶名。

  1. $ awk '/sshd.*invalid user/ { print $9 }' /var/log/auth.log 
  2.  
  3. guest 
  4.  
  5. admin 
  6.  
  7. info 
  8.  
  9. test 
  10.  
  11. ubnt  

你可以從 Awk 用戶指南中獲取更多關(guān)于如何使用正則表達(dá)式和打印字段的信息。

日志管理系統(tǒng)

日志管理系統(tǒng)讓解析更容易并且讓用戶可以快速分析大量日志文件。它們可以自動解析標(biāo)準(zhǔn)日志格式,比如公共 Linux 日志或 web 服務(wù)日志。這會節(jié)省很多時(shí)間,因?yàn)槟阍诙ㄎ幌到y(tǒng)問題的時(shí)候不用去想如何寫你的解析邏輯。

這里你可以看一個(gè)來自 sshd 的日志信息,解析出了遠(yuǎn)程主機(jī)和用戶字段。這個(gè)截圖來自 Loggly,一個(gè)基于云計(jì)算的日志管理服務(wù)。 

 

 

來自 sshd 的日志信息 

對非標(biāo)準(zhǔn)格式的日志,你也可以自定義解析規(guī)則。最常用的工具是 Grok,它用通用正則表達(dá)式庫把純文本解析成 JSON 格式。這是 Grok 的配置示例,用來解析 Logstash 的內(nèi)核日志 :

  1. filter{ 
  2.  
  3. grok { 
  4.  
  5. match => {"message" => "%{CISCOTIMESTAMP:timestamp} %{HOST:host} %{WORD:program}%{NOTSPACE} %{NOTSPACE}%{NUMBER:duration}%{NOTSPACE} %{GREEDYDATA:kernel_logs}" 
  6.  
  7.  
  8.  

這是用 Grok 解析后輸出的結(jié)果: 

 

 

用 Grok 解析后輸出的結(jié)果 

使用 Rsyslog 和 AWK 過濾

過濾是搜索特定的字段,而不是全部文本。這讓你的日志分析更精確,因?yàn)樗鼤雎云渌恍枰娜罩拘畔?。為了搜索一個(gè)字段值,你需要先解析你的日志或者至少有一種基于事件結(jié)構(gòu)的搜索方法。

如何篩選出同一個(gè)應(yīng)用的日志

通常,你只想看來自同一個(gè)應(yīng)用的日志。如果你的應(yīng)用總是把日志記錄在單個(gè)文件中,這樣很容易分析。如果你要從聚合或集中起來的日志里篩選出和某個(gè)程序相關(guān)的日志,會很復(fù)雜。這里有幾種解決的辦法。

用 Rsyslog 服務(wù)解析和過濾日志。這個(gè)例子是將 sshd 應(yīng)用程序的日志寫入名為 sshd-messages 的文件中,然后丟棄事件,所以它不會在其他日志里重復(fù)出現(xiàn)。你可以把它加到你的 Rsyslog.conf 文件里試一下。

  1. :programname, isequal, “sshd” /var/log/sshd-messages 
  2.  
  3. &~  

使用命令行工具比如 awk ,提取特定字段的值,比如取 sshd 用戶名。這是 Ubuntu 上的例子。

  1. $ awk '/sshd.*invalid user/ { print $9 }' /var/log/auth.log 
  2.  
  3. guestadmin 
  4.  
  5. info 
  6.  
  7. test 
  8.  
  9. ubnt  

使用日志管理系統(tǒng)自動解析你的日志,然后點(diǎn)擊目標(biāo)應(yīng)用的名字進(jìn)行過濾。這個(gè)截圖顯示了 syslog 的各個(gè)字段,在一個(gè)叫做 Loggly 的日志管理服務(wù)中。如圖中文氏圖所示,當(dāng)前正在過濾 sshd 這個(gè)應(yīng)用。 

 

 

 

如何篩選出錯(cuò)誤信息

最常見的事情是,人們想看到日志中的錯(cuò)誤。不巧的是,默認(rèn)的 syslog 配置不會直接輸出錯(cuò)誤的級別,這使得錯(cuò)誤信息很難被篩選。

這里有兩種方案來解決這個(gè)問題。首先,你可以修改 rsyslog 配置,讓它輸出級別到日志文件中,使得錯(cuò)誤信息容易被讀取和搜索。在你的 Rsyslog 配置中你可以加一個(gè)pri-text 模版,如下所示:

  1. "<%pri-text%> : %timegenerated%,%HOSTNAME%,%syslogtag%,%msg%n" 

這個(gè)例子的輸出如下,可以看到級別是 err。

  1. <authpriv.err> : Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure 

你可以用 awk 或grep 篩選出錯(cuò)誤信息。這是 Ubuntu 下的例子,我們加了開始結(jié)束標(biāo)志 . 和 > ,這樣它就只匹配這個(gè)字段。

  1. $ grep '.err>' /var/log/auth.log 
  2.  
  3. <authpriv.err> : Mar 11 18:18:00,hoover-VirtualBox,su[5026]:, pam_authenticate: Authentication failure  

第二種選擇是使用日志管理系統(tǒng)。好的日志管理系統(tǒng)會自動解析 syslog 消息并提取出級別字段。只需點(diǎn)一下,就會按指定的級別篩選日志。

這是 Loggly 的截圖。顯示了 syslog 各個(gè)字段, Error 級別高亮顯示了,說明正在按級別 Error 過濾 

 

責(zé)任編輯:龐桂玉 來源: 數(shù)據(jù)庫開發(fā)
相關(guān)推薦

2015-07-20 09:39:41

Java日志終極指南

2015-03-05 11:28:51

Linux桌面環(huán)境終極指南

2015-11-08 14:44:48

2023-05-05 17:20:04

2012-08-21 06:53:00

測試軟件測試

2025-03-11 00:54:42

2022-06-16 10:14:51

LinuxEmacs編輯器

2022-02-09 09:00:00

云計(jì)算BigQuerySnowflake

2022-03-28 09:52:42

JavaScript語言

2025-01-14 00:00:00

2020-07-19 08:15:41

PythonDebug

2022-09-05 15:36:39

Linux日志記錄syslogd

2013-12-18 09:36:08

企業(yè)移動指南

2024-05-17 10:59:25

云計(jì)算谷歌云

2022-07-22 13:14:57

TypeScript指南

2023-05-23 18:31:14

Rust編程

2011-07-14 11:24:23

2021-07-07 05:50:06

SD-WAN軟件定義廣域網(wǎng)網(wǎng)絡(luò)

2022-06-06 07:24:09

Caddy開源Ubuntu

2022-06-30 08:00:00

MySQL關(guān)系數(shù)據(jù)庫開發(fā)
點(diǎn)贊
收藏

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