做者:董文啓mysql
應用程序日誌是由軟件應用程序記錄的事件文件, 它通常包含錯誤,信息事件和警告。一個良好的日誌系統有助於快速發現問題,定位問題,同時也爲業務分析起到必定的做用。nginx
ELK系統是目前比較流行的日誌解決方案,由Elasticsearch、Logstash、Kibana組成,目前三個組件都歸屬於Elastic。git
Elasticsearch是一個基於Lucene庫的搜索引擎。它提供了一個分佈式、支持多租戶的全文搜索引擎,具備HTTP Web接口和無模式JSON文檔。Elasticsearch是用Java開發的,並在Apache許可證下做爲開源軟件發佈。github
自2010年發佈以來,Elasticsearch已迅速成爲最受歡迎的搜索引擎,經常使用於日誌分析,全文搜索和業務分析等業務場景。spring
Logstash 將日誌收集後發送到Elasticsearch中進行存儲,用戶訪問Kibana提供的UI界面查詢數據。sql
和ELK相似,Choerodon選用了Elasticsearch存儲日誌數據,並由Kibana展現數據。Choerodon平臺運行在Kubernetes平臺之上,同時也管理多個Kubernetes集羣,爲了讓日誌系統儘量的不影響業務系統,Choerodon使用了比Logstash更輕量的由C語言編寫的fluent bit替代採集端工具Logstash。fluent bit經過Deamonset的方式運行在Kubernetes集羣中的每個可調度的節點上,實時採集日誌,發送到Elasticsearch中,通常狀況下,從日誌產生到Kibana中能夠查看到的延遲不超過1秒鐘。精簡結構圖以下:docker
先看一下查看界面:數據庫
經過搜索關鍵字error查詢含有該關鍵字的日誌,界面顯示最近15分鐘gateway-helper服務出現了三次error的日誌信息,列表中爲該日誌的縮略信息,能夠點擊日誌前面的小箭頭展開查看完整的信息。json
展開以後就能夠看到更加詳細的信息了。後端
PS:多行展現官方的fluent bit截止目前暫未良好的支持docker中的json-file日誌,建議使用Choerodon定製fluent bit。
Fluentd和Fluent Bit項目均由Treasure Data建立和贊助,旨在解決日誌的收集,處理和交付問題。
兩個項目都有不少類似之處,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拉取。改造步驟分爲如下幾個部分:
引入prometheusSDK:prometheus提供了Python的SDK,簡單的引入以後應用就具備了能夠被監控的特性,能夠選擇監聽指定端口已提供監控數據。
埋點:將更新監控數據的操做置於elastalert每次執行查詢完成後已更新監控數據便可。
目前Choerodon正在用Golang開發新的日誌監控工具,得益於Golang的特性,新的日誌監控工具將以更低的內存消耗,更低的cpu佔用和更穩定的運行狀態爲日誌監控提供支持。
如上所示,Kibana做爲日誌查看界面,若是使用社區版Kibana是沒有權限校驗的,會存在必定風險,但願受權用戶才能訪問日誌查詢界面。爲此Choerodon設計開發了一個認證代理服務,將無權限控制的Kibana放置於認證代理的後端,只有經過了認證,才能訪問到Kibana的界面。以下圖所示:
效果圖:
如今,你已經瞭解Choerodon的日誌方案,接下來就能夠跟隨着Choerodon官網部署嘗試一下吧。
參考文獻:
Choerodon豬齒魚開源多雲技術平臺,是基於開源技術Kubernetes,Istio,knative,Gitlab,Spring Cloud來實現本地和雲端環境的集成,實現企業多雲/混合雲應用環境的一致性。平臺經過提供精益敏捷、持續交付、容器環境、微服務、DevOps等能力來幫助組織團隊來完成軟件的生命週期管理,從而更快、更頻繁地交付更穩定的軟件。
你們也能夠經過如下社區途徑瞭解豬齒魚的最新動態、產品特性,以及參與社區貢獻: