共用方式為


使用彈性堆疊進行記錄

小提示

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

Azure 電子書的雲端原生 .NET 應用程式封面縮圖。

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

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

彈性堆疊

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

KUBE_LOGGING_DESTINATION=elasticsearch
KUBE_ENABLE_NODE_LOGGING=true

圖 7-5。 Kubernetes 的組態變數

此步驟會在叢集上安裝 Elasticsearch,並旨在將所有叢集日誌傳送至其。

Kibana 儀錶板範例,顯示從 Kubernetes 擷取的日誌查詢結果 圖 7-6。 Kibana 儀錶板的範例,顯示從 Kubernetes 擷取的記錄查詢結果

如需設定的詳細資訊,請參閱 設定記錄 (Kibana)

彈性堆疊有哪些優點?

彈性堆疊會以低成本、可調整、方便雲端的方式提供集中式記錄。 其使用者介面可簡化數據分析,讓您可以花時間從數據中擷取見解,而不是與笨拙的介面作鬥爭。 它支援各種不同的輸入,因此,隨著分散式應用程式跨越更多和不同類型的服務,您可以預期能夠繼續將記錄和計量數據饋送至系統。 彈性堆疊也支援跨大型數據集進行快速搜尋,甚至讓大型應用程式能夠記錄詳細數據,而且仍能夠以高效能的方式檢視它。

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。 使用 Logstash 處理來自 Serilog 記錄的組態

在不需要進行大量日誌操作的情況下,有一個名為 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。 Elasticsearch 查詢,用於尋找用戶流覽的前 10 頁

使用 Kibana Web 儀錶板可視化資訊

堆疊的最後一個元件是Kibana。 此工具可用來在 Web 儀錶板中提供互動式視覺效果。 即使是非技術性的用戶也可以製作儀錶板。 大部分位於 Elasticsearch 索引中的數據都可以包含在 Kibana 儀錶板中。 個別使用者可能有不同的儀錶板需求,Kibana 可透過允許使用者特定的儀錶板來啟用此自定義。

在 Azure 上安裝彈性堆疊

彈性堆疊可以透過許多方式安裝在 Azure 上。 一如既往地,可以 布建虛擬機,並直接在它們上安裝彈性堆疊。 某些有經驗的使用者偏好使用此選項,因為它提供最高程度的可自定義性。 在基礎結構即服務上部署會導致大量管理額外負荷,迫使那些採取該路徑來取得與基礎結構即服務相關聯之所有工作的擁有權,例如保護機器,以及使用修補程式保持 up-to日期。

負擔較少的選項是使用已經配置在許多 Docker 容器上的 Elastic Stack。 這些容器可以放入現有的 Kubernetes 叢集,並與應用程式程式代碼一起執行。 sebp/elk 容器是經過記載且經過測試的彈性堆棧容器。

另一個選項是 最近宣佈的 ELK 即服務供應專案

參考資料