1. 程式人生 > >Choerodon如何進行日誌收集與告警

Choerodon如何進行日誌收集與告警

作者:董文啟

應用程式日誌是由軟體應用程式記錄的事件檔案, 它一般包含錯誤,資訊事件和警告。一個良好的日誌系統有助於快速發現問題,定位問題,同時也為業務分析起到一定的作用。

傳統ELK系統

ELK系統是目前比較流行的日誌解決方案,由Elasticsearch、Logstash、Kibana組成,目前三個元件都歸屬於Elastic。

Elasticsearch是一個基於Lucene庫的搜尋引擎。它提供了一個分散式、支援多租戶的全文搜尋引擎,具有HTTP Web介面和無模式JSON文件。Elasticsearch是用Java開發的,並在Apache許可證下作為開源軟體釋出。

自2010年釋出以來,Elasticsearch已迅速成為最受歡迎的搜尋引擎,常用於日誌分析,全文搜尋和業務分析等業務場景。

Logstash 將日誌收集後傳送到Elasticsearch中進行儲存,使用者訪問Kibana提供的UI介面查詢資料。

Choerodon中的日誌系統

總覽

和ELK類似,Choerodon選用了Elasticsearch儲存日誌資料,並由Kibana展示資料。Choerodon平臺執行在Kubernetes平臺之上,同時也管理多個Kubernetes叢集,為了讓日誌系統儘可能的不影響業務系統,Choerodon使用了比Logstash更輕量的由C語言編寫的fluent bit替代採集端工具Logstash。fluent bit通過Deamonset的方式執行在Kubernetes叢集中的每一個可排程的節點上,實時採集日誌,傳送到Elasticsearch中,一般情況下,從日誌產生到Kibana中可以檢視到的延遲不超過1秒鐘。精簡結構圖如下:

先看一下檢視介面:

通過搜尋關鍵字error查詢含有該關鍵字的日誌,介面顯示最近15分鐘gateway-helper服務出現了三次error的日誌資訊,列表中為該日誌的縮略資訊,可以點選日誌前面的小箭頭展開檢視完整的資訊。

展開之後就可以看到更加詳細的資訊了。

PS:多行展示官方的fluent bit截止目前暫未良好的支援docker中的json-file日誌,建議使用Choerodon定製fluent bit。

Fluent bit vs Fluentd

Fluentd和Fluent Bit專案均由Treasure Data建立和贊助,旨在解決日誌的收集,處理和交付問題。

兩個專案都有很多相似之處,Fluent Bit完全基於Fluentd架構和一般設計的設計和經驗。選擇使用哪一個取決於最終需求,從架構角度可以考慮:

  • Fluentd是日誌收集器,處理器和聚合器,使用Ruby和C構建。
  • Fluent Bit是一個日誌收集器和處理器,它沒有像Fluentd一樣強大的聚合功能。在Choerodon日誌方案聚合功能由Elasticsearch提供。Fluent bit一般情況下佔用記憶體要僅為fluentd十分之一以下。

類似於Fluent bit的元件還有很多如Filebeat等,Choerodon也在關注各主流元件的更新,選擇最合適的日誌採集端工具。

如何自動收集日誌

一般在採集日誌的時候,為了更容易分析日誌,需要將日誌進行解析。下面的這個圖中將Java應用的一條日誌解析為level,class,processid和msg四個部分:

解析日誌需要指定解析規則,Choerodon部署介面可以為應用配置解析規則,當配置瞭解析規則後即表示該應用的日誌需要按照配置的規則收集,部署介面如下圖所示:

通過mysql這個解析規則解析該應用的日誌,目前Choerodon日誌解決方案中預設提供了docker、mysql、tomcat、springboot和nginx的日誌解析規則,如果你認為需要新增其他通用的日誌解析規則歡迎到Choerodon社群中建議。

在Fluent-bit中可以配置萬用字元"*”來收集匹配規則的日誌,但是很多時候開發者希望在部署應用時指定是否收集日誌。在Choerodon平臺中,應用是執行在Kubernetes平臺之上的,所以開發者可以通過給應用的部署集新增標籤來表示需不要收集日誌,再通過一個程式去讀取標籤的內容,自動修改Fluent-bit的配置就可以隨心的控制是否需要收集日誌了。如果需要預設收集所有應用的日誌,排除部分日誌可以使用Fluent-bit提供的 fluentbit.io/exclude註解。

在日誌中新增叢集相關的資訊

Choerodon的服務執行在Kubernetes叢集中,如果能夠在檢視日誌的時候也能看到日誌來自哪個伺服器,屬於哪個Pod就能夠更快的定位和查詢問題。

Fluent bit提供了Kubernetes的filter,通過賦予Fluent bit查詢許可權,它就能夠自動的為每條日誌附加叢集的相關資訊。

如上圖所示,你可以看到每一條日誌來源的主機,名稱空間,所屬Pod名稱等資訊,大大提高了開發者定位的能力。

如何告警

收集日誌之後開發者需要對某個關鍵字出現的次數進行告警,如Exception這個關鍵字在某服務中一分鐘出現了5次以上,需要將這個訊息通知給特定的人員。

在這之前大家先來了解一下Choerodon中的監控方案:

應用監控資料經Prometheus採集處理之後展示在Grafana中,告警資訊通過Alertmanager傳送給使用者。因為在監控方案中已經有可用的告警機制,開發者只需要將日誌系統中的內容轉換為Prometheus可以採集的指標資料即可使用監控方案中的告警機制。

Elastalert是用Python編寫的Elasticsearch告警工具,通過配置一定時間間隔查詢elasticsearch資料庫,對比預設規則達到告警的目的,Choerodon可以通過簡單的改造elastalert實現將elastalert查詢的結果轉換為Prometheus的資料格式供Prometheus拉取。改造步驟分為以下幾個部分:

  1. 引入prometheusSDK:prometheus提供了Python的SDK,簡單的引入之後應用就具有了可以被監控的特性,可以選擇監聽指定埠已提供監控資料。

  2. 埋點:將更新監控資料的操作置於elastalert每次執行查詢完成後已更新監控資料即可。

目前Choerodon正在用Golang開發新的日誌監控工具,得益於Golang的特性,新的日誌監控工具將以更低的記憶體消耗,更低的cpu佔用和更穩定的執行狀態為日誌監控提供支援。

使用Choerodon認證登入Kibana

如上所示,Kibana作為日誌檢視介面,如果使用社群版Kibana是沒有許可權校驗的,會存在一定風險,希望授權使用者才能訪問日誌查詢介面。為此Choerodon設計開發了一個認證代理服務,將無許可權控制的Kibana放置於認證代理的後端,只有通過了認證,才能訪問到Kibana的介面。如下圖所示:

效果圖:

現在,你已經瞭解Choerodon的日誌方案,接下來就可以跟隨著Choerodon官網部署嘗試一下吧。

參考文獻:

關於Choerodon豬齒魚

Choerodon豬齒魚開源多雲技術平臺,是基於開源技術Kubernetes,Istio,knative,Gitlab,Spring Cloud來實現本地和雲端環境的整合,實現企業多雲/混合雲應用環境的一致性。平臺通過提供精益敏捷、持續交付、容器環境、微服務、DevOps等能力來幫助組織團隊來完成軟體的生命週期管理,從而更快、更頻繁地交付更穩定的軟體。

大家也可以通過以下社群途徑瞭解豬齒魚的最新動態、產品特性,以及參與社群貢獻: