使用 Graylog 和 Prometheus 監視 Kubernetes 集群
正如你所了解的,Kubernetes 不是一件東西 —— 它由主控節點、工作節點、網路連接、配置管理等等組成。同樣,Graylog 是一個配角(apache2、mongodb、等等),Prometheus 也一樣(telegraf、grafana 等等)。在部署中連接這些點看起來似乎有些讓人恐懼,但是使用合適的工具將不會那麼困難。
我將使用 conjure-up 和 Canonical 版本的 Kubernetes (CDK) 去探索 Kubernetes。我發現 conjure-up
介面對部署大型軟體很有幫助,但是我知道一些人可能不喜歡 GUI、TUI 以及其它用戶界面。對於這些人,我將用命令行再去部署一遍。
在開始之前需要注意的一點是,Graylog 和 Prometheus 是部署在 Kubernetes 外側而不是集群上。像 Kubernetes 儀錶盤和 Heapster 是運行的集群的非常好的信息來源,但是我的目標是為日誌/指標提供一個分析機制,而不管集群運行與否。
開始探索
如果你的系統上沒有 conjure-up
,首先要做的第一件事情是,請先安裝它,在 Linux 上,這很簡單:
sudo snap install conjure-up --classic
對於 macOS 用戶也提供了 brew 包:
brew install conjure-up
你需要最新的 2.5.2 版,它的好處是添加了 CDK spell,因此,如果你的系統上已經安裝了舊的版本,請使用 sudo snap refresh conjure-up
或者 brew update && brew upgrade conjure-up
去更新它。
安裝完成後,運行它:
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 密碼:
juju status --format yaml apache2/0 | grep public-address
public-address: <your-apache2-ip>
juju run-action --wait graylog/0 show-admin-password
admin-password: <your-graylog-password>
在瀏覽器中輸入 http://<your-apache2-ip>
,然後以管理員用戶名(admin)和密碼(
注意: 如果這個界面不可用,請等待大約 5 分鐘時間,以便於配置的反向代理生效。
登入後,頂部的 「Sources」 選項卡可以看到從 K8s 的 master 和 workers 中收集日誌的概述:
通過點擊 「System / Inputs」 選項卡深入這些日誌,選擇 「Show received messages」 查看 filebeat 的輸入:
在這裡,你可以應用各種過濾或者設置 Graylog 儀錶板去幫助識別大多數比較重要的事件。查看 Graylog Dashboard 文檔,可以了解如何定製你的視圖的詳細資料。
瀏覽指標
我們的部署通過 grafana 儀錶板提供了兩種類型的指標:系統指標,包括像 K8s master 和 worker 的 CPU /內存/磁碟使用情況,以及集群指標,包括像從 K8s cAdvisor 端點上收集的容器級指標。
記住如下的 grafana 的地址和 admin 密碼:
juju status --format yaml grafana/0 | grep public-address
public-address: <your-grafana-ip>
juju run-action --wait grafana/0 get-admin-password
password: <your-grafana-password>
在瀏覽器中輸入 http://<your-grafana-ip>:3000
,輸入管理員用戶(admin)和密碼(
我們也可以通過下拉框切換到 「Node Metrics (via Telegraf) 」 去查看 K8s 主機的系統指標。
另一種方法
正如在文章開始的介紹中提到的,我喜歡用 conjure-up
的嚮導去完成像 Kubernetes 這種複雜軟體的部署。現在,我們來看一下 conjure-up
的另一種方法,你可能希望去看到實現相同結果的一些命令行的方法。還有其它的可能已經部署了前面的 CDK,並想去擴展使用上述的 Graylog/Prometheus 組件。不管什麼原因你既然看到這了,既來之則安之,繼續向下看吧。
支持 conjure-up
的工具是 Juju。CDK spell 所做的一切,都可以使用 juju
命令行來完成。我們來看一下,如何一步步完成這些工作。
從 Scratch 中啟動
如果你使用的是 Linux,安裝 Juju 很簡單,命令如下:
sudo snap install juju --classic
對於 macOS,Juju 也可以從 brew 中安裝:
brew install juju
現在為你選擇的雲配置一個控制器。你或許會被提示請求一個憑據(用戶名密碼):
juju bootstrap
我們接下來需要基於 CDK 捆綁部署:
juju deploy canonical-kubernetes
從 CDK 開始
使用我們部署的 Kubernetes 集群,我們需要去添加 Graylog 和 Prometheus 所需要的全部應用程序:
## deploy graylog-related applications
juju deploy xenial/apache2
juju deploy xenial/elasticsearch
juju deploy xenial/filebeat
juju deploy xenial/graylog
juju deploy xenial/mongodb
## deploy prometheus-related applications
juju deploy xenial/grafana
juju deploy xenial/prometheus
juju deploy xenial/telegraf
現在軟體已經部署完畢,將它們連接到一起,以便於它們之間可以相互通訊:
## relate graylog applications
juju relate apache2:reverseproxy graylog:website
juju relate graylog:elasticsearch elasticsearch:client
juju relate graylog:mongodb mongodb:database
juju relate filebeat:beats-host kubernetes-master:juju-info
juju relate filebeat:beats-host kubernetes-worker:jujuu-info
## relate prometheus applications
juju relate prometheus:grafana-source grafana:grafana-source
juju relate telegraf:prometheus-client prometheus:target
juju relate kubernetes-master:juju-info telegraf:juju-info
juju relate kubernetes-worker:juju-info telegraf:juju-info
這個時候,所有的應用程序已經可以相互之間進行通訊了,但是我們還需要多做一點配置(比如,配置 apache2 反向代理、告訴 prometheus 如何從 K8s 中取數、導入到 grafana 儀錶板等等):
## configure graylog applications
juju config apache2 enable_modules="headers proxy_html proxy_http"
juju config apache2 vhost_http_template="$(base64 <vhost-tmpl>)"
juju config elasticsearch firewall_enabled="false"
juju config filebeat
logpath="/var/log/*.log /var/log/containers/*.log"
juju config filebeat logstash_hosts="<graylog-ip>:5044"
juju config graylog elasticsearch_cluster_name="<es-cluster>"
## configure prometheus applications
juju config prometheus scrape-jobs="<scraper-yaml>"
juju run-action --wait grafana/0 import-dashboard
dashboard="$(base64 <dashboard-json>)"
以上的步驟需要根據你的部署來指定一些值。你可以用與 conjure-up
相同的方法得到這些:
<vhost-tmpl>
: 從 github 獲取我們的示例 模板<graylog-ip>
:juju run --unit graylog/0 'unit-get private-address'
<es-cluster>
:juju config elasticsearch cluster-name
<scraper-yaml>
: 從 github 獲取我們的示例 scraper ;[K8S_PASSWORD][20]
和[K8S_API_ENDPOINT][21]
substitute 的正確值<dashboard-json>
: 從 github 獲取我們的 主機 和 k8s 儀錶板
最後,發布 apache2 和 grafana 應用程序,以便於可以通過它們的 web 界面訪問:
## expose relevant endpoints
juju expose apache2
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 譯者:qhwdw 校對:wxy
本文轉載來自 Linux 中國: https://github.com/Linux-CN/archive