RedAlert簡介
RA簡介
RedAlert(一下簡稱RA)是神馬搜索引擎團隊打造的一個基於指標的監控服務,它從類似ganglia或graphite這樣的數據源獲取指標,並在指標異常的時候通過郵件發送告警
RA服務由兩部分組成
- RAServer: 執行指標檢測,發送告警的服務主體
- RAWeb: 本服務提供的web管理端,用於管理配置,更新配置
涉及到告警,必然伴隨到告警的策略,即什麼條件下觸發告警,RA服務提供了五種常用的策略:
- 閾值:當前值小於等於下限或大於等於上限時產生告警
- 趨勢:當前值與預測值差異過大時產生告警,即出現突增或突降
- 可用性:metric的機器數少於閾值時產生告警
- 奇異點:metric的機器中,某一機器的值與整體均值差異較大時產生告警
- 環比:當前值與曆史同期值(比如前一天當前時刻)差異過大時產生告警
安裝
下麵我們以常見的ubuntu作為實驗環境,來看看如何從源碼安裝RA。
編譯前的準備
RA源碼使用scons編譯
Sudo apt-get install scons
RA運行時依賴一些第三方庫
sudo apt-get install librrd-dev libssl-dev libldap-dev libidn11-dev libglib2.0-dev libsqlite3-dev libcppunit-dev
某些依賴的模塊源碼在RAServer/deps目錄下,也需要預先編譯
Cd RAServer/deps
Sh ./compileDepdend.sh
該腳本編譯出的文件會被安裝在RAServer/_external目錄下
好了,萬事俱備隻欠東風,下麵我們來編譯RAServer
Git clone git@github.com:alibaba/RedAlert.git
Scons –j 8
如果編譯成功,scons最後應該輸出scons: done building targets.
如果想運行一下RA的單元測試,可以執行scons –j 8 test
最後,我們為部署單獨準備了一個tar.gz的壓縮包,它裏麵包含了RA依賴的所有文件,可以通過scons –j 8 package得到,壓縮包在RAServer/build/release/packages/red_alert.tar.gz
啟動
啟動Web服務
RAWeb位於上節clone下來的項目中RAWeb目錄下,啟動Web服務有三種方法:
- 本地調試模式
- apache
- uwsgi
下麵我們以本地調試模式為例子,介紹一下啟動Web服務所涉及到的配置文件
conf/red_alert_web.conf
[DEFAULT]
projectRoot = /var/www/html/red_alert_web
workspace = /var/www/html/red_alert_web
[PathConfig]
RedAlertWebWorkRoot = %(workspace)s/work
RedAlertWebConfDir = %(RedAlertWebWorkRoot)s/current
RedAlertWebTablePath = %(RedAlertWebConfDir)s/sqlite
RedAlertWebAuxPath = %(RedAlertWebWorkRoot)s/raweb.aux.db
RedAlertWebJsonPath = %(RedAlertWebWorkRoot)s/raweb.json
RedAlertWebVersionDir = %(RedAlertWebWorkRoot)s/tmp
[Parameter]
runPort = 5011
MaxRaBackEnd = 3
RedAlertStoragePath = file://var/www/html/foo
[fsLib]
fsUtil = %(projectRoot)s/fs_lib/bin/fs_util
projectRoot即RAWeb代碼所在的目錄, workspace是指RAWeb服務運行的目錄,注意如果使用apache啟動RAWeb的話,需要保證apache用戶對workspace目錄有讀寫權限.
RedAlertWebWorkRoot是RAWeb的工作目錄
RedAlertWebConfDir是RAWeb保存sqlite的目錄
RedAlertWebTablePath是sqlite的絕對路徑,它包含了如下幾張表,將會在RAServer中使用到:
- Policy
- RedAlert
- DataSource
- Pairs
- Shield
RedAlertWebAuxPath是數據庫文件的絕對路徑
RedAlertWebJsonPath是raweb.json配置文件的絕對路徑,該文件是RAWeb內部使用的配置,用於校驗用戶輸入
RedAlertWebVersionDir用於記錄每次告警策略的發布
runPort僅在本地調試時有用,是RAWeb的服務端口
MaxRaBackEnd表示該web服務支持多少個RAServer
RedAlertStoragePath是RAWeb發布告警策略的存儲路徑,目前僅支持本地磁盤,用戶也可以擴展其他的分布式文件係統,比如hdfs
static/ra_conf.js
var ra_conf = {
"api_url": "https://localhost:5011",
"current_url": "https://0.0.0.0:5011/index.html",
"buc_sso_url": "",
"api_timeout": 3000,
"admin_timeout": 10000,
"disable_account": true
};
這裏僅需修改api_url為你實際的web部署ip和端口
啟動Web服務
運行python raweb/main.py成功後,就可以從瀏覽器訪問https://127.0.0.1:5011/index.html來訪問RAweb
啟動RA服務
上節最後我們得到了一個RA服務的tar.gz壓縮包,現在我們準備部署RA服務,比如我們打算將RA安裝在/home/admin/ra/目錄下:
mkdir /home/admin/ra/
tar xzf RAServer/build/release/packages/red_alert.tar.gz –C /home/admin/ra
解壓後,安裝目錄結構大概如下圖所示:
usr/local/bin目錄下有一個red_alert.sh的腳本,我們就用它來啟動RA服務,不過在啟動之前,我們先要準備一下RA服務的配置,完整的配置如下
{
"aliMonitorUrl":"", // 內部使用,開源版本無需關心
"alarmThreadNum": 1, //發送告警的線程數
"checkerThreadNum":2, // 檢查指標的線程數
"fetcherThreadNum":2, // 從數據源拉取指標的線程數
"alarmQueueSize": 1024, // 告警線程的隊列大小
"checkerQueueSize": 1024, // 檢查線程的隊列大小
"fetcherQueueSize": 1024, // 拉取源數據線程的隊列大小
"retrieveMetricsPointCount": 5, // 每次拉取幾個點的源數據
"maxRandomLastRetriveTimeValueSec": 60, //每次拉取數據的最大(隨機)間隔,單位秒
"reloadTreeIntervalSec": 60, // 隔多少秒從數據源獲取一次指標結構
"mailUser": "", // 發送告警的郵件用戶
"mailPassword": "", // 發送告警的郵件密碼
"mailServerUrl": "", // 發送告警的郵件服務器,比如smtps://smtp.example.com
"heartbeatHost": "", // RA web的服務器地址
"heartbeatPort": "" // RA web端口
}
一般情況下,我們隻需要修改mailUser, mailPassword, mailServerUrl, heartbeatHost, heartbeatPort即可。準備好配置文件後,用上文介紹的腳本red_alert.sh啟動服務:
red_alert.sh –p 8000 –c ra.json
使用RAWeb配置告警
訪問Web服務後,按下圖點擊新增策略按鈕
按下圖配置一個閾值告警(cpu_user超過40,或者低於5發送告警給foo@bar.com)

保存完畢後,進入控製台頁麵,這裏我們可以看到後端RAServer運行的情況.點擊發布配置可以將剛才保存的策略發布到RAServer上去. 如果發生誤操作,還可以點擊撤銷修改或者回滾配置

當某台cpu_user出問題的時候,就可以收到告警郵件啦!
策略配置詳解
- 策略組:策略所屬的組,方便對多個策略分組統一操作,比如對策略組整體或者部分進行屏蔽
- 觸發類型:觸發告警的方式,目前支持:閾值,趨勢、周期、可用性、奇異點五中類型
- 采集間隔:數據拉取的間隔(單位秒),間隔越小告警越及時,同時也越容易受偶發波動影響導致誤報
- 指標名:要監控的指標名稱,必須和數據源上的指標名字匹配
-
檢查類型:目前支持“單個”,“組合”,“機器組合”三種,其中“機器組合”是此版本新增類型。
- “單個”:對該策略配匹配到的所有metric的每個host值,單獨檢查,隻要有一台host有異常,即觸發告警
- “組合”:對該策略配匹配到的所有metric的所有host值的總和值,進行檢查,若總和值有異常,即觸發告警
- “機器組合”對該策略配匹配到的每個metric下的所有host進行求和,對每個metric的求和值進行檢查,若某metric的總和值有異常,即觸發告警
- 告警方式:開源版本僅支持curlmail的告警方式
- 告警接收組:告警方式是curlmail,這裏填接收者的郵箱地址
- 生效時間:該配置項是此版本新增配置,表示該策略的生效時間,默認為當前時間,即立即生效。
- 最短告警間隔:該策略兩次告警之間的最短間隔,這個值必須大於采集間隔,否則無意義
- 有效時間段:在當天有效時間段,在有效時間之外將不產生告警,不配置表示有效期為全天。比如上圖配置,該配置僅在每天的上午九點到晚上七點生效
- 過濾項:該配置項是此版本新增配置,表示該策略配匹配到的所有metric的所有host中要過濾掉的host或者 metric,分別填寫要過濾的metric和host即可,兩者都支持通配符,後者還支持逗號分割。對於過濾掉的host不會進行檢查,也不參與組合值 的計算。此配置支持通配符
閾值(Threshold)
閾值告警一般需要配置如下字段
- upBound, 上限
- downBound,下限
當前值小於等於下限或大於等於上限時告警
趨勢(Trend)
趨勢告警一般需要配置如下字段
- maxDiffRatio,當前值和預測值差異比例閾值。可以直觀理解為指標突增/突降maxDiffRatio時告警。如果期望差異比例在20%以下,則配置為2
- minDiffValue, 當前值和預測值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警
引入minDiffValue的目的是防止上報值很小時,細微的波動都會導致差異比例超過閾值而產生告警,因此這裏需要一個絕對值來約束。比如一台空閑機器的cpu平時在1~5之間波動,細微的波動都會導致100%以上的差異比例
可用性(Availability):
可用性告警一般需要配置如下字段
- minHostNum, 上報metric的最小機器數
當上報metric的機器數小於minHostNum時告警;
奇異點(singularity)
奇異點告警一般需要配置如下字段
- maxDiffRatio,當前值和平均值差異比例閾值。可以直觀理解為某台機器的當前值和均值差異比例超過maxDiffRatio時告警。如果期望所有機器當前值和均值差異在10%以下,則配置為1
- minDiffValue,當前值和平均值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警
上文中的平均值是同一metric下所有機器的當前值求和除機器數所得
環比(Cycle):
- maxDiffRatio,當前值和曆史值差異比例閾值。可以直觀理解為當前值和曆史同期值比例超過maxDiffRatio時告警。如果期望每周期的變化差異在05%以下,則配置為0.05
- minDiffValue,當前值和平均值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警
最後更新:2017-04-28 23:21:44