RedAlert简介
RA簡介
RedAlert(一下簡稱RA)是神馬搜索引擎團隊打造的一個基于指標的監控服務,它從類似ganglia或graphite這樣的數據源獲取指標,并在指標異常的時候通過郵件發送告警
RA服務由兩部分組成
涉及到告警,必然伴隨到告警的策略,即什么條件下觸發告警,RA服務提供了五種常用的策略:
安裝
下面我們以常見的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服務有三種方法:
下面我們以本地調試模式為例子,介紹一下啟動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中使用到:
RedAlertWebAuxPath是數據庫文件的絕對路徑
RedAlertWebJsonPath是raweb.json配置文件的絕對路徑,該文件是RAWeb內部使用的配置,用于校驗用戶輸入
RedAlertWebVersionDir用于記錄每次告警策略的發布
runPort僅在本地調試時有用,是RAWeb的服務端口
MaxRaBackEnd表示該web服務支持多少個RAServer
RedAlertStoragePath是RAWeb發布告警策略的存儲路徑,目前僅支持本地磁盤,用戶也可以擴展其他的分布式文件系統,比如hdfs
?
static/ra_conf.js
var ra_conf = {????
??? "api_url": "http://localhost:5011",??
??? "current_url": "http://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成功后,就可以從瀏覽器訪問http://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)
閾值告警一般需要配置如下字段
當前值小于等于下限或大于等于上限時告警
?
趨勢(Trend)
趨勢告警一般需要配置如下字段
?
引入minDiffValue的目的是防止上報值很小時,細微的波動都會導致差異比例超過閾值而產生告警,因此這里需要一個絕對值來約束。比如一臺空閑機器的cpu平時在1~5之間波動,細微的波動都會導致100%以上的差異比例
?
可用性(Availability):
可用性告警一般需要配置如下字段
當上報metric的機器數小于minHostNum時告警;
?
奇異點(singularity)
奇異點告警一般需要配置如下字段
上文中的平均值是同一metric下所有機器的當前值求和除機器數所得
?
環比(Cycle):
總結
以上是生活随笔為你收集整理的RedAlert简介的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 互联网企业安全高级指南3.5 选择在不同
- 下一篇: non-overlapping-inte