使用彈性堆疊記錄
好的集中式記錄工具有很多,而成本也不同,從免費、開放原始碼工具到較昂貴的選項都有。 在許多情況下,免費工具與付費供應項目一樣好或甚至更好。 這類工具的其中一個是三個開放原始碼元件的組合:Elasticsearch、Logstash 和 Kibana。
這些工具統稱為彈性堆疊或 ELK 堆疊。
彈性堆疊
彈性堆疊是一個功能強大的選項,可從 Kubernetes 叢集收集資訊。 Kubernetes 支援將記錄傳送至 Elasticsearch 端點,而且在大部分的情況下,您只需要設定環境變數即可,如圖 7-5 所示:
KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true
圖 7-5。 Kubernetes 的組態變數
此步驟會在叢集上安裝 Elasticsearch,且目標是將所有叢集記錄傳送到其中。
圖 7-6。 Kibana 儀表板的範例,顯示從 Kubernetes 擷取記錄的查詢結果圖
彈性堆疊的優點為何?
彈性堆疊會以低成本、可調整且雲端友善的方式提供集中式記錄功能。 其使用者介面可簡化資料分析,讓您將時間花在從資料擷取見解,而不是對抗難用的介面。 其支援各種不同的輸入,因此當您的分散式應用程式跨越更多不同類型的服務時,您應能夠繼續將記錄和計量資料提供給系統。 彈性堆疊也支援大型資料集之間的快速搜尋,甚至可讓大型應用程式記錄詳細資料,而且仍然可以以高效能的方式檢視資料。
Logstash
第一個元件是 Logstash。 此工具可用來收集各種不同來源的記錄資訊。 例如,Logstash 可以從磁碟讀取記錄,也可以接收來自記錄程式庫的訊息,例如 Serilog。 Logstash 可以在記錄送達時對記錄執行一些基本篩選和擴充。 例如,如果您的記錄包含 IP 位址,則 Logstash 可能會設定為執行地理查閱,並取得該訊息的來源國家/地區或甚至是城市。
Serilog 是 .NET 語言的記錄程式庫,可允許參數化記錄。 參數是分開的,而不是產生內嵌欄位的文字記錄訊息。 此程式庫可讓您使用更聰明的篩選和搜尋。 寫入 Logstash 的範例 Serilog 組態如圖 7-7 所示。
var log = new LoggerConfiguration()
.WriteTo.Http("http://localhost:8080")
.CreateLogger();
圖 7-7。 Serilog 組態,可直接將記錄資訊寫入至通過 HTTP 的 logstash
Logstash 會使用類似圖 7-8 所示的組態。
input {
http {
#default host 0.0.0.0:8080
codec => json
}
}
output {
elasticsearch {
hosts => "elasticsearch:9200"
index=>"sales-%{+xxxx.ww}"
}
}
圖 7-8。 從 Serilog 取用記錄的 Logstash 組態
對於不需要大量記錄操作的案例,有一個稱為 Beats 的 Logstash 替代方案可使用。 Beats 是一系列工具,可收集各種資料,從記錄到網路資料和執行時間資訊。 許多應用程式都會同時使用 Logstash 和 Beats。
Logstash 收集記錄之後,需要在某處放置記錄。 雖然 Logstash 支援許多不同的輸出,但其中一個較讓人驚喜的是 Elasticsearch。
Elasticsearch
Elasticsearch 是功能強大的搜尋引擎,可在記錄送達時為記錄編製索引。 而且會加快針對記錄執行的查詢。 Elasticsearch 可以處理大量記錄,而且在極端的情況下,可以跨許多節點進行擴增。
已製作來包含參數或已透過 Logstash 處理來分割參數的記錄訊息,可以直接查詢,因為 Elasticsearch 會保留這項資訊。
搜尋 jill@example.com
瀏覽的前 10 個頁面的查詢如圖 7-9 所示。
"query": {
"match": {
"user": "jill@example.com"
}
},
"aggregations": {
"top_10_pages": {
"terms": {
"field": "page",
"size": 10
}
}
}
圖 7-9。 尋找使用者所瀏覽前 10 個頁面的 Elasticsearch 查詢
使用 Kibana Web 儀表板將資訊視覺化
堆疊的最後一個元件是 Kibana。 此工具可用來在 Web 儀表板中提供互動式視覺效果。 儀表板甚至可由非技術的使用者製作。 大部分位於 Elasticsearch 索引中的資料都可以包含在 Kibana 儀表板中。 個別使用者可能有不同的儀表板需求,Kibana 可透過提供使用者專屬儀表板來啟用此自訂。
在 Azure 上安裝彈性堆疊
彈性堆疊可以透過許多方式安裝在 Azure 上。 一如往常,您可以佈建虛擬機器,並直接在其中安裝彈性堆疊。 某些有經驗的使用者偏好使用此選項,因為可提供最高程度的可自訂性。 在 IaaS 上部署會導致大量管理負荷,這會強制採用該方式的人取得與 IaaS 相關聯之所有工作的所有權,例如保護機器,以及使用修補程式保持在最新狀態。
具有較少額外負荷的選項是使用已設定彈性堆疊的許多 Docker 容器之一。 這些容器可以放入現有的 Kubernetes 叢集中,並與應用程式程式碼一起執行。 sebp/elk 容器是經過記錄完善且經過測試的彈性堆疊容器。
另一個選項是最近宣佈的 ELK 即服務供應項目。