共用方式為


使用彈性堆疊記錄

提示

此內容摘錄自《建構適用於 Azure 的雲端原生 .NET 應用程式》電子書,您可以在 .NET Docs 找到此電子書,或免費下載可離線閱讀的 PDF。

Cloud Native .NET apps for Azure eBook cover thumbnail.

好的集中式記錄工具有很多,而成本也不同,從免費、開放原始碼工具到較昂貴的選項都有。 在許多情況下,免費工具與付費供應項目一樣好或甚至更好。 這類工具的其中一個是三個開放原始碼元件的組合:Elasticsearch、Logstash 和 Kibana。

這些工具統稱為彈性堆疊或 ELK 堆疊。

彈性堆疊

彈性堆疊是一個功能強大的選項,可從 Kubernetes 叢集收集資訊。 Kubernetes 支援將記錄傳送至 Elasticsearch 端點,而且在大部分的情況下,您只需要設定環境變數即可,如圖 7-5 所示:

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

圖 7-5。 Kubernetes 的組態變數

此步驟會在叢集上安裝 Elasticsearch,且目標是將所有叢集記錄傳送到其中。

An example of a Kibana dashboard showing the results of a query against logs ingested from Kubernetes圖 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 即服務供應項目

參考資料