閱讀992 返回首頁    go 阿裏雲 go 技術社區[雲棲]


RedAlert簡介

RA簡介

RedAlert(一下簡稱RA)是神馬搜索引擎團隊打造的一個基於指標的監控服務,它從類似ganglia或graphite這樣的數據源獲取指標,並在指標異常的時候通過郵件發送告警

RA服務由兩部分組成

  1. RAServer: 執行指標檢測,發送告警的服務主體
  2. RAWeb: 本服務提供的web管理端,用於管理配置,更新配置

涉及到告警,必然伴隨到告警的策略,即什麼條件下觸發告警,RA服務提供了五種常用的策略:

  1. 閾值:當前值小於等於下限或大於等於上限時產生告警
  2. 趨勢:當前值與預測值差異過大時產生告警,即出現突增或突降
  3. 可用性:metric的機器數少於閾值時產生告警
  4. 奇異點:metric的機器中,某一機器的值與整體均值差異較大時產生告警
  5. 環比:當前值與曆史同期值(比如前一天當前時刻)差異過大時產生告警

安裝

下麵我們以常見的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服務有三種方法:

  1. 本地調試模式
  2. apache
  3. 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中使用到:

  1. Policy
  2. RedAlert
  3. DataSource
  4. Pairs
  5. 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)

閾值告警一般需要配置如下字段

  1. upBound, 上限
  2. downBound,下限

當前值小於等於下限或大於等於上限時告警

 

趨勢(Trend)

趨勢告警一般需要配置如下字段

  1. maxDiffRatio,當前值和預測值差異比例閾值。可以直觀理解為指標突增/突降maxDiffRatio時告警。如果期望差異比例在20%以下,則配置為2
  2. minDiffValue, 當前值和預測值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警

 

引入minDiffValue的目的是防止上報值很小時,細微的波動都會導致差異比例超過閾值而產生告警,因此這裏需要一個絕對值來約束。比如一台空閑機器的cpu平時在1~5之間波動,細微的波動都會導致100%以上的差異比例

 

可用性(Availability):

可用性告警一般需要配置如下字段

  1. minHostNum, 上報metric的最小機器數

當上報metric的機器數小於minHostNum時告警;

 

奇異點(singularity)

奇異點告警一般需要配置如下字段

  1. maxDiffRatio,當前值和平均值差異比例閾值。可以直觀理解為某台機器的當前值和均值差異比例超過maxDiffRatio時告警。如果期望所有機器當前值和均值差異在10%以下,則配置為1
  2. minDiffValue,當前值和平均值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警

上文中的平均值是同一metric下所有機器的當前值求和除機器數所得

 

環比(Cycle):

  1. maxDiffRatio,當前值和曆史值差異比例閾值。可以直觀理解為當前值和曆史同期值比例超過maxDiffRatio時告警。如果期望每周期的變化差異在05%以下,則配置為0.05
  2. minDiffValue,當前值和平均值差異絕對值閾值。僅當差異比例大於等於maxDiffRatio,且差異絕對值大於等於minDiffValue時才會產生告警

最後更新:2017-04-28 23:21:44

  上一篇:go RecyclerView Prefetch功能探究
  下一篇:go 一個java工程師眼裏的人工智能