一步到位,服務(wù)器監(jiān)控就是這么簡單
對于運(yùn)維的日常工作來說,服務(wù)器監(jiān)控是必須且最基礎(chǔ)的一項(xiàng)內(nèi)容。在企業(yè)基礎(chǔ)設(shè)施運(yùn)維過程中,管理員必須能夠掌握所有服務(wù)器的運(yùn)行狀況,以便及時(shí)發(fā)現(xiàn)問題,盡可能減少故障的發(fā)生。通常我們會借助一些監(jiān)控的軟件來獲取每個服務(wù)器的基礎(chǔ)指標(biāo)并進(jìn)行集中的查看、分析、監(jiān)控。
市面上開源、收費(fèi)的服務(wù)器監(jiān)控系統(tǒng)非常多,例如老牌的zabbix、nagios、NewRelic、CollectD等,近期開始流行的Telegraf、Prometheus。各類系統(tǒng)都有其出彩的點(diǎn),例如Zabbix強(qiáng)大的生態(tài)、NewRelic的服務(wù)、Prometheus的云原生友好等。服務(wù)器監(jiān)控相對中間件、業(yè)務(wù)監(jiān)控更加基礎(chǔ),關(guān)注點(diǎn)主要集中在監(jiān)控的易用性、穩(wěn)定性、實(shí)時(shí)性、報(bào)警豐富度、報(bào)表使用便捷度等。
本期為大家介紹如何使用阿里云SLS來快速構(gòu)建一套完整的服務(wù)器/主機(jī)基礎(chǔ)指標(biāo)實(shí)時(shí)監(jiān)控方案。
SLS時(shí)序存儲簡介

SLS的日志存儲引擎在2016年對外發(fā)布,目前承接阿里內(nèi)部以及眾多企業(yè)的日志數(shù)據(jù)存儲,每天有數(shù)十PB的日志類數(shù)據(jù)寫入。其中有很大一部分屬于時(shí)序類數(shù)據(jù)或者用來計(jì)算時(shí)序指標(biāo),為了讓用戶能夠一站式完成整個DevOps生命周期的數(shù)據(jù)接入、清洗、加工、提取、存儲、可視化、監(jiān)控、問題分析等過程,我們專門推出了時(shí)序存儲的功能,與日志存儲一道為大家解決各類機(jī)器數(shù)據(jù)的存儲問題。
SLS時(shí)序存儲從設(shè)計(jì)之初就是為了解決阿里內(nèi)部與眾多頭部企業(yè)客戶的時(shí)序存儲需求,并借助于阿里內(nèi)部多年的技術(shù)積累,使之可以適應(yīng)絕大部分企業(yè)級時(shí)序監(jiān)控/分析訴求。SLS時(shí)序存儲的特點(diǎn)主要有:
- 豐富上下游:數(shù)據(jù)接入上SLS支持眾多采集方式,包括各類開源Agent以及阿里云內(nèi)部的監(jiān)控?cái)?shù)據(jù)通道;同時(shí)存儲的時(shí)序數(shù)據(jù)支持對接各類的流計(jì)算、離線計(jì)算引擎,數(shù)據(jù)完全開放;
- 高性能:SLS存儲計(jì)算分離架構(gòu)充分發(fā)揮集群能力,尤其在大量數(shù)據(jù)下端對端的速度提升顯著;
- 免運(yùn)維:SLS的時(shí)序存儲完全是服務(wù)化,無需用戶自己去運(yùn)維實(shí)例,而且所有數(shù)據(jù)都是3副本高可靠存儲,不用擔(dān)心數(shù)據(jù)的可靠性問題;
- 開源友好:SLS的時(shí)序存儲原生支持Prometheus的寫入和查詢,并支持SQL92的分析方法,可以原生對接Grafana等可視化方案;
- 智能:SLS提供了各種AIOps算法,例如多周期估算、預(yù)測、異常檢測、時(shí)序分類等各類時(shí)序算法,可以基于這些算法快速構(gòu)建適應(yīng)于公司業(yè)務(wù)的智能報(bào)警、診斷平臺。
服務(wù)器監(jiān)控方案概述

SLS的主機(jī)監(jiān)控方案非常簡單,只需要安裝一個Logtail就可以采集各個主機(jī)的基礎(chǔ)指標(biāo),服務(wù)端都是云化,無需運(yùn)維,默認(rèn)SLS提供了可視化的儀表盤,也可以通過Grafana來進(jìn)行更加專業(yè)的可視化。
目前Logtail采集了主機(jī)常用的基礎(chǔ)指標(biāo),包括CPU、內(nèi)存、網(wǎng)絡(luò)、磁盤等,其中對較為關(guān)鍵的指標(biāo)都做了可視化,便于直接查看。

數(shù)據(jù)接入
數(shù)據(jù)接入的流程非常簡單,只需要在SLS控制臺上操作即可完成(對于非阿里云的服務(wù)器,需要在服務(wù)器上額外執(zhí)行2條命令),具體接入的方法可參見:采集主機(jī)監(jiān)控?cái)?shù)據(jù)。
接入過程中最核心的就是給每臺主機(jī)的Logtail增加一個采集配置,Logtail的采集配置可以完全云化管理,無需登錄每臺服務(wù)器手動配置。
- {
- "inputs": [
- { "detail": {
- "IntervalMs": 30000
- }, "type": "metric_system_v2"
- } ]}
可視化
在運(yùn)維可視化領(lǐng)域Grafana是當(dāng)前大家接受度最高的可視化方案,SLS為主機(jī)監(jiān)控專門增加了2個Dashboard模板,包括一張集群級別的監(jiān)控大盤和單機(jī)的詳細(xì)指標(biāo)大盤。這些大盤可以一鍵導(dǎo)入到Grafana中。
Grafana的配置流程如下:
- 在Grafana中把SLS的時(shí)序庫作為Prometheus的數(shù)據(jù)源,設(shè)置方式可參考:Grafana可視化配置。
- 導(dǎo)入Grafana模板市場中的SLS模板:主機(jī)監(jiān)控集群指標(biāo)、主機(jī)監(jiān)控單機(jī)指標(biāo)。


監(jiān)控?cái)?shù)據(jù)分析與告警配置
作為一個合格的運(yùn)維人員,僅僅配置完炫酷的監(jiān)控儀表盤還不夠,還需要對集群設(shè)置好足夠的告警項(xiàng)并能在需要排查問題的時(shí)候利用監(jiān)控?cái)?shù)據(jù)分析的語法快速定位問題。這些本質(zhì)上都是對集群的指標(biāo)進(jìn)行一些計(jì)算和統(tǒng)計(jì)。

SLS時(shí)序數(shù)據(jù)支持SQL、PromQL以及SQL+PromQL等多種查詢方式,PromQL查詢語言相對更加簡潔,SQL能夠?qū)崿F(xiàn)的語義更加強(qiáng)大。而主機(jī)的監(jiān)控?cái)?shù)據(jù)相對比較簡單,建議使用PromQL或SQL+PromQL的方式。
下面介紹幾個在告警、分析中經(jīng)常會用到的幾個統(tǒng)計(jì)方式:
- 計(jì)算所有機(jī)器的某個指標(biāo)平均值,例如平均CPU
- 查找某個指標(biāo)最高的N臺機(jī)器,比如查找內(nèi)存占用最高的5臺機(jī)器
- 查找某個指標(biāo)超過X的機(jī)器,比如找到1分鐘網(wǎng)絡(luò)流量超過10M的機(jī)器
- 計(jì)算某臺機(jī)器的某個指標(biāo)相對某個時(shí)間點(diǎn)的變化,比如計(jì)算某臺機(jī)器磁盤使用率相比1天前的變化
這些用PromQL實(shí)現(xiàn)起來非常容易,可以在Grafana的Explore頁面直接調(diào)試:
- 平均CPU: avg(cpu_util)
- 查找內(nèi)存占用最高的5臺機(jī)器:topk(5, mem_util)
- 找出1分鐘網(wǎng)絡(luò)流量超過10M的機(jī)器:(sum_over_time(net_in[1m]) + sum_over_time(net_out[1m])) > (10*1024*1024)
- 計(jì)算某臺機(jī)器磁盤使用率相比1天前的變化:disk_util{hostname="iZ2ze06ibdlxtgebgtu4xdZ"} - disk_util{hostname="iZ2ze06ibdlxtgebgtu4xdZ"} offset 1d

而告警也可以直接在Grafana上配置,可以在集群監(jiān)控的Dashboard上直接配置告警,例如下面是配置CPU集群平均CPU超限的告警,告警規(guī)則是:每分鐘計(jì)算最近5分鐘內(nèi)的集群CPU平均利用率,如果連續(xù)5分鐘超過80%則觸發(fā)告警。

總結(jié)
服務(wù)的基礎(chǔ)指標(biāo)監(jiān)控是我們監(jiān)控運(yùn)維領(lǐng)域最基礎(chǔ)的工作之一,構(gòu)造公司IT的全方位監(jiān)控還有很多工作要做,例如中間件監(jiān)控、云產(chǎn)品監(jiān)控、應(yīng)用監(jiān)控、業(yè)務(wù)監(jiān)控等,而這些利用SLS的日志和時(shí)序存儲功能都可以很容易的實(shí)現(xiàn),其他相關(guān)的實(shí)現(xiàn)我們會在后續(xù)文章中給大家呈現(xiàn)。