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

不少公司已經開發了監控解決方案,解決了指標收集、展現、預警發送等一系列問題。web

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

1、開發環境

經過三臺本地虛機還原監控對象:一臺爲監控服務器(monitor),另兩臺爲可接入監控服務的服務器(server1和server2)。json

使用Vagrant管理開發環境,執行vagrant up monitor命令,經過下方Vagrantfile開啓並配置監控服務器。若是須要把server1和server2接入監控服務中,能夠稍後啓動這兩臺虛機服務器。瀏覽器

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

2、監控服務配置

監控服務配置步驟以下方monitoring-configuration.yml文件所示。首先,建立monitor數據庫,生成API,用於完成各項數據庫操做。經過Ansible URI與網頁服務交互。從監控對象服務器中提取的全部指標均存儲在監控數據庫中。less

接下來建立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配置,每分鐘執行一次:每分鐘採集、存儲、顯示一次指標數據;如發現問題,則發送預警。

3、採集指標數據

下方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格式,可以使用點符號訪問值。

4、在監控服務中接入服務器

執行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的各項指標數據。

5、結論

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

  • Ansible不須要在全部監控對象中安裝agent;
  • 全部指標數據存儲在高性能時序數據庫InfluxDB中;
  • 利用Grafana統一展現數據,並支持配置預警。

做者:Gustavo Carmo

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

相關文章
相關標籤/搜索