歡迎光臨
每天分享高質量文章

使用 Graylog 和 Prometheus 監視 Kubernetes 叢集 | Linux 中國

在本文中,我將使用 Graylog (用於日誌)和 Prometheus (用於指標)去打造一個 Kubernetes 叢集的監視解決方案。
— Kevin Monroe


致謝
編譯自 | https://insights.ubuntu.com/2018/01/16/monitor-your-kubernetes-cluster/ 
 作者 | Kevin Monroe
 譯者 | qhwdw ? ? ? ? ? 共計翻譯:102 篇 貢獻時間:160 天

這篇文章最初發表在 Kevin Monroe 的部落格[1] 上。

監視日誌和指標狀態是叢集管理員的重點工作。它的好處很明顯:指標能幫你設定一個合理的效能標的,而日誌分析可以發現影響你工作負載的問題。然而,困難的是如何找到一個與大量執行的應用程式一起工作的監視解決方案。

在本文中,我將使用 Graylog[2] (用於日誌)和 Prometheus[3] (用於指標)去打造一個 Kubernetes 叢集的監視解決方案。當然了,這不僅是將三個東西連線起來那麼簡單,實現上,最終結果看起來應該如題圖所示:

正如你所瞭解的,Kubernetes 不是一件東西 —— 它由主控節點、工作節點、網路連線、配置管理等等組成。同樣,Graylog 是一個配角(apache2、mongodb、等等),Prometheus 也一樣(telegraf、grafana 等等)。在部署中連線這些點看起來似乎有些讓人恐懼,但是使用合適的工具將不會那麼困難。

我將使用 conjure-up[4] 和 Canonical 版本的 Kubernetes[5] (CDK) 去探索 Kubernetes。我發現 conjure-up 介面對部署大型軟體很有幫助,但是我知道一些人可能不喜歡 GUI、TUI 以及其它使用者介面。對於這些人,我將用命令列再去部署一遍。

在開始之前需要註意的一點是,Graylog 和 Prometheus 是部署在 Kubernetes 外側而不是叢集上。像 Kubernetes 儀錶盤和 Heapster 是執行的叢集的非常好的資訊來源,但是我的標的是為日誌/指標提供一個分析機制,而不管叢集執行與否。

開始探索

如果你的系統上沒有 conjure-up,首先要做的第一件事情是,請先安裝它,在 Linux 上,這很簡單:

  1. sudo snap install conjure-up --classic

對於 macOS 使用者也提供了 brew 包:

  1. brew install conjure-up

你需要最新的 2.5.2 版,它的好處是添加了 CDK spell,因此,如果你的系統上已經安裝了舊的版本,請使用 sudo snap refresh conjure-up 或者 brew update && brew upgrade conjure-up 去更新它。

安裝完成後,執行它:

  1. conjure-up

你將發現有一個 spell 串列。選擇 CDK 然後按下回車。

這個時候,你將看到 CDK spell 可用的附加元件。我們感興趣的是 Graylog 和 Prometheus,因此選擇這兩個,然後點選 “Continue”。

它將引導你選擇各種雲,以決定你的叢集部署的地方。之後,你將看到一些部署的後續步驟,接下來是回顧螢幕,讓你再次確認部署內容:

除了典型的 K8s 相關的應用程式(etcd、flannel、load-balancer、master 以及 workers)之外,你將看到我們選擇的日誌和指標相關的額外應用程式。

Graylog 棧包含如下:

◈ apache2:graylog web 介面的反向代理
◈ elasticsearch:日誌使用的檔案資料庫
◈ filebeat:從 K8s master/workers 轉發日誌到 graylog
◈ graylog:為日誌收集器提供一個 api,以及提供一個日誌分析介面
◈ mongodb:儲存 graylog 元資料的資料庫

Prometheus 棧包含如下:

◈ grafana:指標相關的儀錶板的 web 介面
◈ prometheus:指標收集器以及時序資料庫
◈ telegraf:傳送主機的指標到 prometheus 中

你可以在回顧螢幕上微調部署,但是預設元件是必選 的。點選 “Deploy all Remaining Applications” 繼續。

部署工作將花費一些時間,它將部署你的機器和配置你的雲。完成後,conjure-up 將展示一個摘要螢幕,它包含一些連結,你可以用你的終端去瀏覽各種感興趣的內容:

瀏覽日誌

現在,Graylog 已經部署和配置完成,我們可以看一下採集到的一些資料。預設情況下,filebeat 應用程式將從 Kubernetes 的 master 和 worker 中轉發系統日誌( /var/log/*.log )和容器日誌(/var/log/containers/*.log)到 graylog 中。

記住如下的 apache2 的地址和 graylog 的 admin 密碼:

  1. juju status --format yaml apache2/0 | grep public-address

  2. public-address: <your-apache2-ip>

  3. juju run-action --wait graylog/0 show-admin-password

  4. admin-password: <your-graylog-password>

在瀏覽器中輸入 http:// ,然後以管理員使用者名稱(admin)和密碼()登入。

註意: 如果這個介面不可用,請等待大約 5 分鐘時間,以便於配置的反向代理生效。

登入後,頂部的 “Sources” 選項卡可以看到從 K8s 的 master 和 workers 中收集日誌的概述:

透過點選 “System / Inputs” 選項卡深入這些日誌,選擇 “Show received messages” 檢視 filebeat 的輸入:

在這裡,你可以應用各種過濾或者設定 Graylog 儀錶板去幫助識別大多數比較重要的事件。檢視 Graylog Dashboard[6] 檔案,可以瞭解如何定製你的檢視的詳細資料。

瀏覽指標

我們的部署透過 grafana 儀錶板提供了兩種型別的指標:系統指標,包括像 K8s master 和 worker 的 CPU /記憶體/磁碟使用情況,以及叢集指標,包括像從 K8s cAdvisor 端點上收集的容器級指標。

記住如下的 grafana 的地址和 admin 密碼:

  1. juju status --format yaml grafana/0 | grep public-address

  2. public-address: <your-grafana-ip>

  3. juju run-action --wait grafana/0 get-admin-password

  4. password: <your-grafana-password>

在瀏覽器中輸入 http://:3000,輸入管理員使用者(admin)和密碼()登入。成功登入後,點選 “Home” 下拉框,選取 “Kubernetes Metrics (via Prometheus)” 去檢視叢集指標儀錶板:

我們也可以透過下拉框切換到 “Node Metrics (via Telegraf) ” 去檢視 K8s 主機的系統指標。

另一種方法

正如在文章開始的介紹中提到的,我喜歡用 conjure-up 的嚮導去完成像 Kubernetes 這種複雜軟體的部署。現在,我們來看一下 conjure-up 的另一種方法,你可能希望去看到實現相同結果的一些命令列的方法。還有其它的可能已經部署了前面的 CDK,並想去擴充套件使用上述的 Graylog/Prometheus 元件。不管什麼原因你既然看到這了,既來之則安之,繼續向下看吧。

支援 conjure-up 的工具是 Juju[7]。CDK spell 所做的一切,都可以使用 juju 命令列來完成。我們來看一下,如何一步步完成這些工作。

從 Scratch 中啟動

如果你使用的是 Linux,安裝 Juju 很簡單,命令如下:

  1. sudo snap install juju --classic

對於 macOS,Juju 也可以從 brew 中安裝:

  1. brew install juju

現在為你選擇的雲配置一個控制器。你或許會被提示請求一個憑據(使用者名稱密碼):

  1. juju bootstrap

我們接下來需要基於 CDK 捆綁部署:

  1. juju deploy canonical-kubernetes

從 CDK 開始

使用我們部署的 Kubernetes 叢集,我們需要去新增 Graylog 和 Prometheus 所需要的全部應用程式:

  1. ## deploy graylog-related applications

  2. juju deploy xenial/apache2

  3. juju deploy xenial/elasticsearch

  4. juju deploy xenial/filebeat

  5. juju deploy xenial/graylog

  6. juju deploy xenial/mongodb

  1. ## deploy prometheus-related applications

  2. juju deploy xenial/grafana

  3. juju deploy xenial/prometheus

  4. juju deploy xenial/telegraf

現在軟體已經部署完畢,將它們連線到一起,以便於它們之間可以相互通訊:

  1. ## relate graylog applications

  2. juju relate apache2:reverseproxy graylog:website

  3. juju relate graylog:elasticsearch elasticsearch:client

  4. juju relate graylog:mongodb mongodb:database

  5. juju relate filebeat:beats-host kubernetes-master:juju-info

  6. juju relate filebeat:beats-host kubernetes-worker:jujuu-info

  1. ## relate prometheus applications

  2. juju relate prometheus:grafana-source grafana:grafana-source

  3. juju relate telegraf:prometheus-client prometheus:target

  4. juju relate kubernetes-master:juju-info telegraf:juju-info

  5. juju relate kubernetes-worker:juju-info telegraf:juju-info

這個時候,所有的應用程式已經可以相互之間進行通訊了,但是我們還需要多做一點配置(比如,配置 apache2 反向代理、告訴 prometheus 如何從 K8s 中取數、匯入到 grafana 儀錶板等等):

  1. ## configure graylog applications

  2. juju config apache2 enable_modules="essay-headers proxy_html proxy_http"

  3. juju config apache2 vhost_http_template="$(base64 )"

  4. juju config elasticsearch firewall_enabled="false"

  5. juju config filebeat \

  6. logpath="/var/log/*.log /var/log/containers/*.log"

  7. juju config filebeat logstash_hosts=":5044"

  8. juju config graylog elasticsearch_cluster_name=""

  1. ## configure prometheus applications

  2. juju config prometheus scrape-jobs=""

  3. juju run-action --wait grafana/0 import-dashboard \

  4. dashboard="$(base64 )"

以上的步驟需要根據你的部署來指定一些值。你可以用與 conjure-up 相同的方法得到這些:

◈ : 從 github 獲取我們的示例 模板[8]
◈ : juju run --unit graylog/0 'unit-get private-address'
◈ : juju config elasticsearch cluster-name
◈ : 從 github 獲取我們的示例 scraper[9] ;[K8S_PASSWORD][20] 和 [K8S_API_ENDPOINT][21] substitute[10] 的正確值
◈ : 從 github 獲取我們的 主機[11] 和 k8s[12] 儀錶板

最後,釋出 apache2 和 grafana 應用程式,以便於可以透過它們的 web 介面訪問:

  1. ## expose relevant endpoints

  2. juju expose apache2

  3. juju expose grafana

現在我們已經完成了所有的部署、配置、和釋出工作,你可以使用與上面的瀏覽日誌瀏覽指標部分相同的方法去檢視它們。

總結

我的標的是向你展示如何去部署一個 Kubernetes 叢集,很方便地去監視它的日誌和指標。無論你是喜歡嚮導的方式還是命令列的方式,我希望你清楚地看到部署一個監視系統並不複雜。關鍵是要搞清楚所有部分是如何工作的,並將它們連線到一起工作,透過斷開/修複/重覆的方式,直到它們每一個都能正常工作。

這裡有一些像 conjure-up 和 Juju 一樣非常好的工具。充分發揮這個生態系統貢獻者的專長讓管理大型軟體變得更容易。從一套可靠的應用程式開始,按需定製,然後投入到工作中!

大膽去嘗試吧,然後告訴我你用的如何。你可以在 Freenode IRC 的 #conjure-up 和 #juju 中找到像我這樣的愛好者。感謝閱讀!

關於作者

Kevin 在 2014 年加入 Canonical 公司,他專註於複雜軟體建模。他在 Juju 大型軟體團隊中找到了自己的位置,他的任務是將大資料和機器學習應用程式轉化成可重覆的(可靠的)解決方案。


via: https://insights.ubuntu.com/2018/01/16/monitor-your-kubernetes-cluster/

作者:Kevin Monroe[14] 譯者:qhwdw 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出

贊(0)

分享創造快樂