溫馨提示×

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

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

logstash的更多實(shí)用功能

發(fā)布時(shí)間:2020-03-31 23:09:24 來(lái)源:網(wǎng)絡(luò) 閱讀:43212 作者:storysky 欄目:編程語(yǔ)言

1、合并日志
php的錯(cuò)誤日志中常常會(huì)出現(xiàn)這樣的日志

[03-Jun-2013 13:15:29] PHP Fatal error:  Uncaught exception 'Leb_Exception' in /data1/www/bbs.xman.com/htdocs/framework/xbox/ufo.php:68
Stack trace:
#0 /data/www/bbs.xman.com/htdocs/framework/dao/abstract.php(299): Leb_Dao_Pdo->connect(Array, 'read')
#1 /data/www/bbs.xman.com/htdocs/framework/dao/pdo.php(108): Leb_Dao_Abstract->initConnect(false)
#2 /data/www/bbs.xman.com/htdocs/framework/dao/abstract.php(1123): Leb_Dao_Pdo->query('SELECT * FROM `...')
#3 /data/www/bbs.xman.com/htdocs/framework/dao/abstract.php(1217): Leb_Dao_Abstract->select(Array)
#4 /data/www/bbs.xman.com/htdocs/framework/model.php(735): Leb_Dao_Abstract->daoSelect(Array, false)
#5 /data/www/bbs.xman.com/htdocs/app/configure/model/configure.php(40): Leb_Model->find()
#6 /data/www/bbs.xman.com/htdocs/app/search/default.php(131): Configure->get_configure_by_type('news')
#7 /data/www/bbs.xman.com/htdocs/framework/dispatcher.php(291): defaultController->indexAction()
#8 /data/www/bbs.xman.com/htdocs/framework/dispatcher.php(222): Leb_Di in /data1/www/bbs.xman.com/htdocs/framework/dao/pdo.php on line 68

 這個(gè)時(shí)候 logstash一般會(huì)只記錄上面一行,所以這類(lèi)的日志就看不全了。怎么辦呢?logstash提供了一個(gè)功能解決了這個(gè)問(wèn)題就是"multiline"
這個(gè)filter的功能顧名思義就是對(duì)多行的日志進(jìn)行處理 這個(gè)是官網(wǎng)上的說(shuō)明
multiline filter
This filter will collapse multiline messages into a single event.
The multiline filter is for combining multiple events from a single source into the same event.

下面看下格式

filter {
  multiline {
    type => "type"   #類(lèi)型,不多說(shuō)
    pattern => "pattern, a regexp" #參數(shù),也可以認(rèn)為是字符,有點(diǎn)像grep ,如果符合什么字符就交給下面的 what 去處理
    negate => boolean
    what => "previous" or "next" #這個(gè)是符合上面 pattern 的要求后具體怎么處理,處理方法有兩種,合并到上面一條日志或者下面的日志
  }
}

The 'negate' can be "true" or "false" (defaults false). If true, a message not matching the pattern will constitute a match of the multiline filter and the what will be applied. (vice-versa is also true)
這個(gè) negate 有兩種 true 或者 false,默認(rèn)是 true,如果選了false 的話(huà)估計(jì)就是取反的意思。
看看例子

filter {
  multiline {
    pattern => "^[^\[]"
    what => "previous"
  }
  }

這個(gè)例子是針對(duì)我上面的php日志寫(xiě)的,意思就是 如果不是以 "["開(kāi)頭的日志 都跟上一個(gè)日志合并在一起。以此類(lèi)推遇到其他的多行日志也可以按照這個(gè)方法來(lái)做合并。


2、logstash 根據(jù)@message內(nèi)容來(lái)觸發(fā)命令"exec"
 我當(dāng)初的想法是這樣的,如果php日志文件中出現(xiàn) "PHP Fatal error"的時(shí)候?qū)⑾嚓P(guān)的錯(cuò)誤日志發(fā)給相關(guān)開(kāi)發(fā)的負(fù)責(zé)人。一開(kāi)始想到了 output 的 email 功能,但我嘗試
了很多次這個(gè)email功能不太穩(wěn)定,有時(shí)候能發(fā)出來(lái)郵件有的時(shí)候卻發(fā)不出來(lái)。不知道是郵件服務(wù)器的問(wèn)題還是 logstash本身的問(wèn)題,具體配置如下


output {
email {
   match => [ "@message", "aaaaa" ]
   to => "storyskya@gmail.com"
   from => "monitor@mib.com.cn"
   options => [ "smtpIporHost", "smtp.mibnet.com",
                "port", "25",
                "userName", "monitor@mib.com.cn",
                "starttls", "true",
                "password", "opmonitor",
                "authenticationType", "login"
              ]
   subject => "123"
   body => '123'
   via => smtp
}
}

后來(lái)?yè)Q了方法,改用 grep+exec來(lái)做,具體思路就是 grep 過(guò)濾到了 PHP Fatal error 之后根據(jù)域名將郵件發(fā)給具體人員,格式如下

filter {
  grep {
    match => [ "@message", "PHP Fatal error" ]
    drop  => false
    add_tag => [fatal_error]
       }
                                                  
       grep {
       tags => [fatal_error]
       match => [ "@message", ".*(xbox\.com|xbox\.mib\.com\.cn|supports\.game\.mib\.com\.cn)" ]
       drop  => false
       add_tag => [xboxerror]
            }
         }
output {
  exec {
    tags => [xboxerror]
    command => "echo '%{@timestamp} %{@source}: %{@message}' | mail -s xbox_phplog_error_message xboxdev@xman.com"
        }
}

如此這般 先定義一個(gè)grep tag 為fatal_error 先把帶有 PHP Fatal error 的日志過(guò)濾出來(lái),后面的 grep承接上面的 tag fatal_error 過(guò)濾出具體的域名之后再新建一個(gè)
tag 叫 xboxerror,最后的output 調(diào)用 exec(執(zhí)行) 去調(diào)用一個(gè)命令,將時(shí)間,源和錯(cuò)誤信息發(fā)到xboxdev@xman.com 這個(gè)郵箱里。
OK 現(xiàn)在就能做到快速的郵件報(bào)警了。

3、替換
上面做到了郵件實(shí)時(shí)提醒,但有的時(shí)候我發(fā)現(xiàn)并沒(méi)有發(fā)出去郵件,查找原因后發(fā)現(xiàn)如果郵件內(nèi)容中出現(xiàn)很多 單引號(hào) " ' " 的話(huà),mail命令就會(huì)報(bào)錯(cuò)沒(méi)法發(fā)送。
于是就找到了mutate 這個(gè)功能,下面是介紹
The mutate filter allows you to do general mutations to fields. You can rename, remove, replace, and modify fields in your events.
好吧,我現(xiàn)在需要把@message里面的 ' 都給替換成" 這樣就能正常發(fā)郵件了,什么你說(shuō)開(kāi)發(fā)換了個(gè)符號(hào)會(huì)看不懂?我#¥%……&*((&……%¥%
格式如下:

mutate {
    type => "phplog"
    gsub => [ "@message","'", "\"" ]
}

好了,有了這些功能模塊logstash可以工作的比較開(kāi)心了~~~ 希望你們也開(kāi)心

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI