Grafana、Prometheus、mtail-日誌監控 Grafana、Prometheus-監控平臺 Grafana、Prometheus-監控平臺

一:日誌如何監控

在上一篇博客Grafana、Prometheus-監控平臺中,簡單瞭解了Grafana與Prometheus對項目做特定的監控打點,可視化的配置操作。

但是對於沒有設置監控或者不容易進行監控的遺留應用程序,有時重寫、修補或重構該應用程序以暴露內部狀態的成本絕對不是一項有利的工程投資,

或者還可能存在監控上的技術限制。但是你仍然需要了解應用程序內部發生的情況,最簡單的方法之一是調整日誌輸出。

就例如在我的另一篇博客 分佈式調度任務-ElasticJob 中遇到的bug,com.dangdangelastic-job中間件會出現一直在選主,導致業務程序執行不下去的問題,

日誌會一直在打印 LeaderElectionService [traceId=] - Elastic job: leader node is electing, waiting for 100 ms at server '192.168.0.6',

像這種問題就很難通過業務打點去監控,因此就需要監控業務系統的日誌文件,進而去監控系統是否出問題。

網上對於業務日誌的監控,我比較過這三個

1:ELK-“ELK”是三個開源項目的首字母縮寫,這三個項目分別是:Elasticsearch、Logstash 和 Kibana。

  Elasticsearch 是一個搜索和分析引擎。

  Logstash 是服務器端數據處理管道,能夠同時從多個來源採集數據,轉換數據,然後將數據發送到諸如 Elasticsearch 等“存儲庫”中。

  Kibana 則可以讓用戶在 Elasticsearch 中使用圖形和圖表對數據進行可視化。

2:Loki,Grafana Labs 團隊最新的開源項目,是一個水平可擴展,高可用性,多租戶的日誌聚合系統。

3:mtail :它是一個google開發的日誌提取工具,從應用程序日誌中提取指標以導出到時間序列數據庫或時間序列計算器,

用途就是: 實時讀取應用程序的日誌、 再通過自己編寫的腳本進行分析、 最終生成時間序列指標。

 

工具適合自己的纔是最好的,無論是ELK還是Loki都是功能齊全的日誌採集系統,當然它們也有各自的優勢,

但是因爲本人當前只是爲了採集生產日誌中的一個error,所有並不想去安裝配置多個基建,因爲才採用最簡單的mtail。

 

二:mtail 安裝啓動

下載地址:https://github.com/google/mtail/releases

安裝:

chmod 0755 mtail
sudo cp mtail /usr/local/bin

編寫監控腳本

touch /etc/mtail/Elastic_job_electing_count.mtail
內容如下:
counter elastic_job_electing_count
 
/leader node is electing, waiting for 100 ms at server/ {
    elastic_job_electing_count ++
}

統計 “leader node is electing, waiting for 100 ms at server” 出現的次數。

當然mtail支持的腳本語法還是比較全的,可以參考:https://github.com/google/mtail/blob/main/docs/Programming-Guide.md

 

運行:

sudo mtail --progs /etc/mtail --logs '/var/log/*.log'

第一個參數--progs告訴mtail在哪裏找到我們的程序,第二個參數--logs告訴mtail在哪裏找到要解析的日誌文件。

我們使用glob模式(https://godoc.org/path/filepath#Match)來匹配/var/log目錄中的所有日誌文件。

你可以指定以逗號分隔的文件列表,也可以多次指定--logs參數。

 

參數詳解:控制檯運行 mtail --help 

下面列舉幾個簡單的參數

參數       描述
-address     綁定HTTP監聽器的主機或IP地址
-alsologtostderr   記錄標準錯誤和文件
-emit_metric_timestamp   發出metric的記錄時間戳。如果禁用(默認設置),則不會向收集器發送顯式時間戳。
-expired_metrics_gc_interval   metric的垃圾收集器運行間隔(默認爲1h0m0s)
-ignore_filename_regex_pattern   需要忽略的日誌文件名字,支持正則表達式。
-log_dir   mtail程序的日誌文件的目錄,與logtostderr作用類似,如果同時配置了logtostderr參數,則log_dir參數無效
-logs   監控的日誌文件列表,可以使用,分隔多個文件,也可以多次使用-logs參數,也可以指定一個文件目錄,支持通配符*,指定文件目錄時需要對目錄使用單引號。如:
      -logs a.log,b.log
      -logs a.log -logs b.log
      -logs ‘/export/logs/*.log’
-logtostderr   直接輸出標準錯誤信息,編譯問題也直接輸出
-override_timezone   設置時區,如果使用此參數,將在時間戳轉換中使用指定的時區來替代UTC
-port   監聽的http端口,默認3903
-progs   mtail腳本程序所在路徑
-trace_sample_period   用於設置跟蹤的採樣頻率和發送到收集器的頻率。將其設置爲100,則100條收集一條追蹤。
-v   v日誌的日誌級別,該設置可能被 vmodule標誌給覆蓋.默認爲0.
-version   打印mtail版本

 

程序啓動後默認監聽3903端口,可以通過http://ip:3903訪問,metrics可以通過http://ip:3903/metrics訪問

 

三:配置Prometheus數據源

Prometheus的安裝部署見:Grafana、Prometheus-監控平臺

vim prometheus-config.yml

# 全局配置
global:
  scrape_interval:     15s
  evaluation_interval: 15s

scrape_configs:
  # 監控mtail日誌
  - job_name: 'mtail'  
    static_configs:
    - targets: ['內網ip:3903']

重啓Prometheus後,在grafana大盤裏新增一個新的panel,再爲其配置已經設置好的datasource

至此,一個簡單去監控業務系統日誌中,出現某段日誌的統計就實現了, 然後再爲其配置一個告警規則,併發送釘釘或郵件,就可以方便及時的處理線上的問題了。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章