1. 程式人生 > 程式設計 >Agentless監控實踐中的預警指標採集

Agentless監控實踐中的預警指標採集

很多公司已經開發了監控解決方案,解決了指標收集、展示、預警傳送等一系列問題。

本文介紹的監控解決方案由高效能時序資料庫InfluxDB、時序分析監控工具Grafana及Agentless自動化工具Ansible構成:Ansible負責不間斷抓取伺服器硬體指標資料,並將資料儲存在資料庫InfluxDB中;時序分析監控工具Grafana負責從InfluxDB中讀取並展示指標資料,設定閾值,配置預警。

一、開發環境

通過三臺本地虛機還原監控物件:一臺為監控伺服器(monitor),另兩臺為可接入監控服務的伺服器(server1和server2)。

使用Vagrant管理開發環境,執行vagrant up monitor命令,通過下方Vagrantfile開啟並配置監控伺服器。如果需要把server1和server2接入監控服務中,可以稍後啟動這兩臺虛機伺服器。

Ansible負責配置監控伺服器,包括安裝InfluxDB、Grafana及Ansible以及配置監控服務。為了保證程式碼整潔,結構清晰,每個工具的安裝任務都儲存在單獨的YML資料夾中。include_tasks可動態地將分組後的任務納入整個流程中。

二、監控服務配置

監控服務配置步驟如下方monitoring-configuration.yml檔案所示。首先,建立monitor資料庫,生成API,用於完成各項資料庫操作。通過Ansible URI與網頁服務互動。從監控物件伺服器中提取的所有指標均儲存在監控資料庫中。

接下來建立Grafana資料來源,對接資料庫InfluxDB,讀取全部指標資料。Grafana提供API,支援通過json格式的內容最大限度地利用配置。除資料來源外,還建立了Slack通知渠道和第一個面板。

Slack通知渠道指向測試版Slack工作區。使用者可建立自己的工作區,並邀請運維人員加入。同時建立傳入webhook,取代json URL欄位值。

初始面板會顯示已使用記憶體百分比。使用者可以新增其他指標或建立新面板。可將閾值設定為95%,這樣便能直觀地檢視展示結果;同時配置預警:當最後五個指標值大於等於95%時,則向Slack渠道傳送通知。

Ansible支援在多個伺服器上同時執行任務。此外,Ansible可通過清單檔案(/etc/ansible/hosts)瞭解目標伺服器的分組情況。在監控服務配置期間,在庫存檔案中建立 monitored_servers分組。該組內的所有伺服器會被自動監控。

伺服器接入監控服務後,為防止Ansible核驗SSH金鑰,需禁用Ansible配置檔案(/etc/ansible/ansible.cfg)中的預設功能,以便採集新增伺服器的指標。

通過Ansible playbook(playbook-get-metrics.yml)連線所有監控物件,提取所有相關指標。Ansible playbook位於 /etc/ansible/playbooks目錄下,通過CRON配置,每分鐘執行一次:每分鐘採集、儲存、顯示一次指標資料;如發現問題,則傳送預警。

三、採集指標資料

下方playbook-get-metrics.yml檔案負責從monitored_servers中提取所有重要指標,並將採集到的資料儲存在monitor資料庫中。初始面板僅採集記憶體佔用比例。使用者可在playbook中新增任務,採集其他指標。

InfluxDB資料儲存API用於儲存監控資料庫中的指標資料。192.168.33.10為監控伺服器的IP地址,8086為InfluxDB埠號。資料庫中,已使用記憶體的key為used_mem_pct。使用者需為每個指標配置合適的key。

Ansible預設會採集目標主機資訊,用於執行任務。例如,根據主機名稱(ansible_hostname)可以判斷指標從哪個伺服器上採集的。

此外,通過Ansible採集到的實際使用記憶體(ansible_memory_mb.real.used)和累計實際使用記憶體(ansible_memory_mb.real.total)可以計算出記憶體消耗百分比。掌握這些資料後,可以執行ansible monitor -m setup -uvagrant -k -i hosts命令。彈出SSH密碼時,輸入vagrant。前述資訊均為json格式,可使用點符號訪問值。

四、在監控服務中接入伺服器

執行vagrant up monitor命令,啟動監控伺服器。

然後在瀏覽器中輸入http://192.168.33.10:3000,訪問Grafana。使用者名稱和密碼均為admin。點選used_mem_pct面板連結,檢視折線圖中監控伺服器的數值。

接入其他伺服器,檢視折線圖中的數值。啟動接入其他伺服器,檢視折線圖中的數值。啟動server1,執行vagrant up server1命令,繼續執行ansible-playbookplaybook-add-server.yml -u vagrant -k -i hosts命令。-u引數用於定義SSH使用者,-k引數提示輸入密碼,-i用於定義監控伺服器。

獲取新伺服器IP地址和SSH證書後,便可實現Ansible與伺服器對接。在監控伺服器/etc/ansible/hosts檔案中插入一行程式碼後,便可將伺服器接入監控服務中。CRON再次執行playbook-get-metrics.yml時,server1便會成為監控物件。這樣就可以採集、儲存、展示server1的各項指標資料。

五、結論

本文介紹的監控解決方案成本較低且易於實施,具有以下優勢:

  • Ansible不需要在所有監控物件中安裝agent;
  • 所有指標資料儲存在高效能時序資料庫InfluxDB中;
  • 利用Grafana統一展示資料,並支援配置預警。

作者:Gustavo Carmo

編譯自:How to Get Metrics for Advance Alerting to Prevent Trouble