前言:
還記得在去年的筆記中提到過(guò)使用python的pysnmp模塊,配合Influxdb,Grafana收集Cisco設(shè)備指標(biāo)。鏈接如下:https://blog.csdn.net/tushanpeipei/article/details/117329794 。在該實(shí)例中,我們通過(guò)python編寫(xiě)腳本收集設(shè)備信息,并將收集的信息格式化后發(fā)送到Influxdb進(jìn)行存儲(chǔ),最后Grfana從Influxdb中讀取數(shù)據(jù)做可視化呈現(xiàn)??偟膩?lái)說(shuō),這種方式需要自己編寫(xiě)python的腳本,雖然靈活性很高,但是相對(duì)來(lái)說(shuō)比較麻煩,并且需要一定的代碼能力。
前段時(shí)間為了進(jìn)一步提升監(jiān)控套件的安全性和好用性,對(duì)之前的部署方案進(jìn)行調(diào)整。使用Telegraf代替python實(shí)現(xiàn)了對(duì)設(shè)備信息的收集,并且進(jìn)一步實(shí)現(xiàn)了Https加密,AD域用戶和告警功能的集成。通過(guò)Telegraf-Influxdb-Grafana完成指標(biāo)監(jiān)控的這套解決方案也被稱為TIG。借著這次機(jī)會(huì),我也重新梳理了一下其中各個(gè)套件的用處以及與其他特性的集成的方式。
一、認(rèn)識(shí)TIG套件
TIG套件是當(dāng)下流行的一套設(shè)備指標(biāo)監(jiān)控解決方案,它由Telegraf-Influxdb-Grafana三個(gè)組件組合而成,它們的關(guān)系如圖1所示:
首先,Telegraf 是一個(gè)基于服務(wù)器的代理,用于從數(shù)據(jù)庫(kù)、系統(tǒng)和物聯(lián)網(wǎng)傳感器收集和發(fā)送所有指標(biāo)和事件。此外,Telegraf 是用 Go 編寫(xiě)的,可以編譯成一個(gè)沒(méi)有外部依賴項(xiàng)的二進(jìn)制文件,并且需要非常小的內(nèi)存占用。進(jìn)一步說(shuō),Telegraf的組件如圖2所示:
上圖顯示,Telegraf從有四種基本插件類型:Input、processor、aggregator 和 Output 。其中功能如下:
- Input:Telegraf 輸入插件從系統(tǒng)、服務(wù)和第三方 API 收集指標(biāo)。
- Processor:處理器插件在發(fā)送指標(biāo)之前轉(zhuǎn)換、修飾和過(guò)濾指標(biāo),允許收集的數(shù)據(jù)在數(shù)據(jù)到達(dá)時(shí)進(jìn)行清理。
- Aggregator:聚合器插件創(chuàng)建聚合指標(biāo),例如收集和處理的指標(biāo)的平均值、最小值和最大值。
- Output:輸出插件寫(xiě)入各種數(shù)據(jù)存儲(chǔ)、服務(wù)和消息隊(duì)列,如 InfluxDB、Graphite、OpenTSDB、Datadog、Kafka、MQTT、NSQ 等。
首先是Input插件(詳情請(qǐng)參考:https://github.com/influxdata/telegraf/tree/master/plugins/inputs/snmp),Telegraf支持多多種Input插件,例如inputs.snmp。此外,Telegraf可以通過(guò)2種方式獲取目標(biāo)設(shè)備的指標(biāo)信息,一種是Pull,另外一種則是Push (Traps)。以SNMP插件為例子,在Pull模型中,監(jiān)控代理會(huì)定期向目標(biāo)設(shè)備上運(yùn)行的 SNMP 代理發(fā)送 SNMP 請(qǐng)求。設(shè)備上的 SNMP 代理使用特定請(qǐng)求的指標(biāo)進(jìn)行響應(yīng)。在Push模式下,通信從另一端開(kāi)始。受監(jiān)控設(shè)備(通過(guò) SNMP 代理)將狀態(tài)消息(Traps)發(fā)送到監(jiān)控系統(tǒng)的Traps接收器。這種模式下沒(méi)有周期性調(diào)度,Traps消息在生成時(shí)發(fā)送,提供系統(tǒng)和網(wǎng)絡(luò)性能問(wèn)題的實(shí)時(shí)視圖。當(dāng)Telegraf收集到信息后,通過(guò)Processor和Aggregator對(duì)輸入信息進(jìn)行處理和聚會(huì),并將最終的數(shù)據(jù)通過(guò)Output插件(詳情請(qǐng)參考:https://github.com/influxdata/telegraf/tree/master/plugins/outputs)輸出到存儲(chǔ)端,例如常見(jiàn)與之配套使用的Influxdb數(shù)據(jù)庫(kù)。
第二個(gè)組件是Influxdb。Influxdb 類似于 SQL 數(shù)據(jù)庫(kù),但在許多方面有所不同。進(jìn)一步說(shuō),Influxdb 專為時(shí)間序列數(shù)據(jù)而構(gòu)建的高性能數(shù)據(jù)庫(kù)。關(guān)系數(shù)據(jù)庫(kù)可以處理時(shí)間序列數(shù)據(jù),但并未針對(duì)常見(jiàn)的時(shí)間序列工作負(fù)載進(jìn)行優(yōu)化。Influxdb 旨在存儲(chǔ)大量時(shí)間序列數(shù)據(jù)并快速對(duì)該數(shù)據(jù)進(jìn)行實(shí)時(shí)分析。具體來(lái)說(shuō),Influxdb會(huì)為在每次收集數(shù)據(jù)時(shí)記錄對(duì)應(yīng)的時(shí)間戳,其記錄的數(shù)據(jù)通常如圖3:
參數(shù)解釋如下:
- InfluxDB 測(cè)量 ( foodships) 類似于 SQL 數(shù)據(jù)庫(kù)表。
- InfluxDB 標(biāo)簽(park_id和planet)就像 SQL 數(shù)據(jù)庫(kù)中的索引列。
- InfluxDB 字段 ( #_foodships) 就像 SQL 數(shù)據(jù)庫(kù)中的未索引列。
- InfluxDB 點(diǎn)(例如,2015-04-16T12:00:00Z 5)類似于 SQL 行。
補(bǔ)充:與Influxdb相似的時(shí)序性監(jiān)控系統(tǒng)叫做Prometheus(普羅米修斯)。它們有一些不同之處。簡(jiǎn)而言之,這兩個(gè)產(chǎn)品都是優(yōu)秀的時(shí)間序列數(shù)據(jù)庫(kù)。它們的默認(rèn)模式不同(InfluxDB 為推送,Prometheus 為拉?。S行┤苏J(rèn)為 PromQL,Prometheus 的語(yǔ)言,比 InfluxDB 使用的語(yǔ)言更簡(jiǎn)單,但總而言之,使用一種工具或另一種工具的決定可能取決于具體的用例。如果監(jiān)控是我們最感興趣的,那么 Prometheus 是最安全的選擇,因?yàn)樗哂性S多集成和可擴(kuò)展模型。如果我們更有可能將時(shí)間序列數(shù)據(jù)庫(kù)用于 IoT、傳感器或分析,那么我們可能希望選擇 InfluxDB。具體請(qǐng)參考:https://logz.io/blog/prometheus-influxdb/#:~:text=InfluxDB is a push-based,and Prometheus fetches them periodically.
最后一個(gè)插件是Grafana,Grafana可謂時(shí)當(dāng)下最受歡迎的開(kāi)源交互式數(shù)據(jù)可視化平臺(tái),由Grafana Labs 開(kāi)發(fā),它允許用戶通過(guò)統(tǒng)一到一個(gè)儀表板(或多個(gè)儀表板)中的圖表和圖形來(lái)查看他們的數(shù)據(jù),以便于解釋和理解。儀表盤示例如圖4所示:
此外,Grafana還可以設(shè)置告警,一旦設(shè)置的告警規(guī)則被觸發(fā),Grafana則可以發(fā)送報(bào)警給運(yùn)維人員。需要注意的是,Grafana僅僅作為數(shù)據(jù)呈現(xiàn)端,它需要連接數(shù)據(jù)庫(kù)并從中提取數(shù)據(jù)。例如,Influxdb,Prometheus都可以作為Grafana的數(shù)據(jù)存儲(chǔ)端。
二、TIG容器化部署
實(shí)驗(yàn)?zāi)康模?/strong>
通過(guò)TIG收集Cisco設(shè)備的指標(biāo)信息,并存放在Influxdb數(shù)據(jù)庫(kù)中,最后通過(guò)Grafana的Dashboard做呈現(xiàn)。此外,考慮到安全性和好用性,本次實(shí)驗(yàn)中集成了Https、AD域以及告警功能。
提前準(zhǔn)備:
- 搭建AD服務(wù)器。
- 搭建CA服務(wù)器。
- 搭建SMTP服務(wù)器。
- 在Cisco ASA設(shè)備上開(kāi)啟SNMP v2c。
TIG套件代碼分析:
圖5展示了TIG容器化部署所需要的代碼和文件。首先是三個(gè)json的模板,這三個(gè)模板其實(shí)是通過(guò)json文件編寫(xiě)的針對(duì)于Cisco設(shè)備指標(biāo)呈現(xiàn)的Dashboard。Dashboard可以自己編寫(xiě),或者在網(wǎng)上搜索別人共享的文件。接下來(lái)Docker-compose.yml,該文件是TIG套件容器化的配置文件。然后是grafana.ini和ldap.toml文件,它們分別是Grafana的配置和AD域集成文件。下一個(gè)重要的文件是telegraf.conf文件,我們可以通過(guò)配置該文件,從目標(biāo)設(shè)備中獲取各種指標(biāo)信息。最后的2文件個(gè)則與Https的證書(shū)相關(guān),分別是Grafana Web頁(yè)面的證書(shū)和私鑰。接下來(lái)是對(duì)一些重要文件的解讀:
telegraf.conf:
該文件記錄了對(duì)Telegraf組件的配置信息,其中值得注意的配置有input和output插件。在本次實(shí)驗(yàn)中,通過(guò)inputs.snmp插件,主動(dòng)拉取目標(biāo)設(shè)備的指標(biāo),如圖6所示:
圖6中的配置顯示了Telegraf通過(guò)snmpv2,對(duì)IP地址為10.1.102.254的ASA設(shè)備的內(nèi)存,CPU,接口速率等信息進(jìn)行采集。具體的參數(shù)和采集指標(biāo)可以自行調(diào)整。第二個(gè)需要配置的是Output插件,由于最終輸出的目標(biāo)是influxdb,所以最終使用的是outputs.influxdb。代碼如圖7所示:
我們需要在此處定義連接的influxdb數(shù)據(jù)庫(kù)地址以及登錄該數(shù)據(jù)庫(kù)的賬號(hào)密碼。
接下來(lái),我們需要對(duì)Grafana進(jìn)行三個(gè)配置,分別是配置Https,AD域以及告警。首先是Grafana Web界面的Https的配置。配置Https需要兩個(gè)關(guān)鍵文件,分別是Grafana Web的證書(shū)和私鑰。具體來(lái)說(shuō),私鑰和證書(shū)都可以通過(guò)openssl工具生成,或者通過(guò)openssl生成私鑰和證書(shū)請(qǐng)求文件,再由現(xiàn)有的CA機(jī)構(gòu)簽發(fā)證書(shū)。獲得2個(gè)文件后,就可以在grafana.ini中開(kāi)啟https并加載上述兩個(gè)文件,如圖8所示:
第二步則是配置集成AD域,首先創(chuàng)建文件ldap.toml定義連接AD域的各種參數(shù),如圖9所示:
由上圖可只,集成AD域的參數(shù)包含AD服務(wù)器地址,端口號(hào),綁定的DN等配置。具體的配置可以根據(jù)自己的AD域配置進(jìn)行修改。緊接著,我們需要將grafana.ini文件中加載AD域配置,如圖10所示:
最后,我們還需要在Grafana中集成告警信息的發(fā)送者。該操作同樣在grafana.ini文件中進(jìn)行配置即可,如圖11所示。這個(gè)SMTP服務(wù)器可以是知名的郵件服務(wù)商,也可以是自己環(huán)境中所搭建的。
到此位置,我們將TIG套件的配置已經(jīng)完成。接下來(lái),需要將其容器化,相關(guān)配置在docker-compose.yml文件中進(jìn)行完成。該文件配置如圖12所示:
具體來(lái)說(shuō),在該文件中定義了三個(gè)套件所用的容器image,influxdb的數(shù)據(jù)庫(kù)名稱,數(shù)據(jù)庫(kù)管理員賬戶,端口映射,以及將三個(gè)套件的配置文件等信息通過(guò)卷掛載的形式映射到了容器中。此外,TIG三個(gè)套件還需要通過(guò)定義的TIG_net橋接網(wǎng)絡(luò)進(jìn)行通信。
完成上述配置后,僅需要在進(jìn)入docker-compose.yml文件所在目錄,輸入命令:docker-compose up -d 即可容器化部署TIG。
代碼下載地址: https://github.com/Prin-Meng/telegraf_influxdb_grafana
三、TIG套件應(yīng)用示例
首先,我們可以使用https://IP地址:3000登錄Grafana的Web界面,如圖13所示:
接下來(lái),在Grafana的Data Source界面添加influxdb,如圖14所示。其中需要配置的是influxdb的url,以及連接該數(shù)據(jù)庫(kù)管理員的賬號(hào)密碼。
添加成功后,我們導(dǎo)入監(jiān)控設(shè)備的Dashboard文件。本次實(shí)驗(yàn)的目的是收集Cisco ASA的指標(biāo),則只需要在圖15的界面導(dǎo)入準(zhǔn)備好的ASA SNMP monitor.json文件即可即可:
完成上述步驟后,即可等待Telegraf收集數(shù)據(jù)并通過(guò)Grafana做呈現(xiàn)了,如圖16所示,可以看到目前收集到的Cisco ASA的內(nèi)存利用率,CPU利用率,接口速率等信息。
最后,我們需要在Grafana的alert界面配置Grafana 的告警信息,配置頁(yè)面如圖17所示。
需要注意的是,Grafana 8以后的告警界面和之前的Grafana有較大的區(qū)別,功能更新強(qiáng)大但相對(duì)復(fù)雜。我們需要設(shè)置的內(nèi)容包括:告警的規(guī)則,告警信息的內(nèi)容,告警的聯(lián)系方式,管理員聯(lián)系地址,通知策略等。進(jìn)一步說(shuō),告警示意圖架構(gòu)如圖18所示:
具體的告警配置步驟可以參考:
https://www.youtube.com/watch?v=UtmmhLraSnE,https://grafana.com/docs/grafana/latest/alerting/文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-404028.html
參考資料
SNMP 代理協(xié)議監(jiān)控: https://www.influxdata.com/integration/snmp/
比較 InfluxDB 和 SQL 數(shù)據(jù)庫(kù): https://docs.influxdata.com/influxdb/v1.8/concepts/crosswalk/
Prometheus 與 InfluxDB:監(jiān)控比較:https://logz.io/blog/prometheus-influxdb/#:~:text=InfluxDB is a push-based,and Prometheus fetches them periodically.
乾頤堂現(xiàn)任明教教主教主技術(shù)進(jìn)化論 2020第21期.InfluxDB Python實(shí)戰(zhàn): https://www.bilibili.com/video/BV1SV41127HU?from=search&seid=13988085653859648559文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-404028.html
到了這里,關(guān)于Telegraf-Influxdb-Grafana容器化部署拓展(Https、AD域、告警集成)并監(jiān)控Cisco設(shè)備指標(biāo)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!