天天看點

最佳實踐:基于SLS實作統一告警

阿裡雲解決方案最佳實踐,是基于衆多客戶上雲的成功案例萃取而成的最優化企業上雲指導。每個最佳實踐包括使用場景、多産品部署架構及部署手冊,幫助客戶更好地了解阿裡雲的産品和解決方案,降低企業上雲門檻的同時滿足客戶自服務的需求。感興趣的朋友可以通路最佳實踐官網了解更多内容 bp.aliyun.com

一、概述

1、 場景描述

  1. 客戶現狀

    告警對于企業的開發運維,安全運維,業務運維有着至關重要的作用。然而很多企業在告警運維方面存在着重複建設、監控品質差、告警風暴、觸達不人性化、無法閉環等問題。

  2. 方案目标

    針對企業在告警管理方面存在的痛點問題,SLS 告警提供了一站式雲上告警管理方案,具有彈性易用、穩定可靠、功能持續更新、成本更低、噪音更少等優勢。企業可以将現有的監控方案系統無縫接入到 SLS 告警平台,實作在 SLS 上一站式管理告警。

2、統一告警系統架構

基于以上場景,我們建立了統一告警系統架構。通SLS采集日志或資料庫資訊發送給告警監控,進行分組或評估後發送給告警中心,同時告警系統也支援開源的監控平台,通過開放告警平台,将資料進行過濾和映射,然後推送到告警中心。告警中心将接收到的告警資訊進行加工和存儲,最終通過雲或者短信、郵件等形式,将告警資訊推送給企業運維工程師,及時掌握系統告警情況,以確定業務的穩定。

最佳實踐:基于SLS實作統一告警

3、本次實踐的系統架構

基于統一告警系統架構,我們設計了本次實踐的業務系統架構。

最佳實踐:基于SLS實作統一告警

4、方案優勢

  • 易用彈性:一站式、快速開始、易于複制;
  • 穩定可靠:海量資料、服務3個9,存儲10個9;
  • 功能持續更新:一體化資料、标準文法、AI全面監控、降噪與通知能力;
  • 更低成本:無訂閱費、免運維、管道收費低;
  • 更少噪音:告警全鍊路智能降噪與管理;
  • 更快恢複:更快速的排查根因、解決故障;

5、方案的價值

  • 告警管理是可觀測性平台的重要組成部分,内置了對雲産品的多種監控告警規則,為使用者使用雲産品保駕護航;
  • 一站式智能告警運維平台,開箱即用,内置各場景下監控規則(500+);
  • 雲原生可觀測性平台實時監控告警,免運維,提高開發效率;
  • 開放告警:支援常見的監控系統Zabbix/Promethus/Grafana直接發送告警到SLS,統一進行告警管理;
  • 支援靈活的告警編排,降噪控制,事務管理,通知管理;全面提升IT效率,減少IT成本;

二、操作實踐

前置條件:為了順利完成本實踐,您需要提前完成以下準備工作:

1、資源環境部署

本實踐可使用雲速搭 CADT 快速部署資源環境。

CADT 使用手冊請參見:

https://help.aliyun.com/document_detail/186134.html

說明:請根據環境部署須知中的提示,更新相關資源項的配置項,儲存應用後部署。

操作步驟

  1. 登入雲速搭 CADT 控制台。( https://bpstudio.console.aliyun.com
  2. 選擇建立 > 官方模版庫建立進入接官方模闆庫;
  3. 在官方模闆庫,輸入搜尋關鍵字找到SLS 統一日志監控模版,選擇基于方案建立;
  4. 在架構編輯界面,根據架構部署提示,修改 OSS、SLS 名稱(保持唯一);修改4個ECS執行個體登入密碼;
  5. 配置完成後,單擊右上角的儲存,設定應用名稱後并單擊确認;
  6. 應用儲存成功後,單擊部署應用;
  7. 資源校驗成功後,單擊下一步:價格清單;
  8. 計價完成後,确認各資源價格情況,确認無誤,單擊下一步:确認訂單;

    說明:可以單擊檢視報告,會實時生成一個應用架構成本分析報告。

  9. 勾選《雲速搭服務條款》,單擊下一步:支付并建立;
  10. 部署完成後,還可以下載下傳雲速搭CADT輸出的部署報告。

2、建立告警通知政策

2.1.告警通知政策簡介

告警通知政策是 SLS 告警提供的告警管理的核心功能子產品,主要包括告警政策和行動政策。

  • 告警政策:主要包括告警合并、靜默、抑制等降噪功能;
  • 行動政策:主要是通知管道的設定、分派,除了支援非常豐富的通知管道如:短信、語音、郵件、Webhook、企業微信、釘釘、Slack、飛書等,還支援強大的使用者組、值班組、輪崗代班等功能;

2.2.添加使用者

  1. 登入SLS控制台( https://sls.console.aliyun.com/lognext/profile ),單擊用 CADT 建立好的SLS執行個體:sls-bp235(示例名稱);
  2. 單擊左側告警圖示,進入告警中心,找到告警管理 > 使用者管理;
  3. 添加使用者test-xiaozhang,test-xiaoqian,test-xiaosun,test-xiaoli分别填入手機号和郵箱;
  4. 添加完成;

2.3.添加使用者組

  1. 單擊使用者管理 > 使用者組管理;
  2. 添加電商使用者組和社群使用者組,分别将之前建立的使用者添加到使用者組;

2.4.添加值班組

  1. 單擊值班組管理,添加值班組;
  2. 單擊建立,在彈出框輸入值班組相關資訊;
  3. 切換到值班表标簽,選擇值班輪崗;
  4. 添加值班輪崗;
  5. 切換到最終排班,檢視排班效果;
  6. 單擊儲存;
  7. 儲存成功;

2.5.添加行動政策

  1. 添加行動政策;
  2. 添加行動政策,填入 ID 和名稱,然後單擊全屏圖示;
  3. 單擊條件圖示,添加條件;
  4. 條件對象選擇嚴重度;
  5. 設定嚴重度為嚴重時,發送語音通知給值班組;然後條件單擊确認,右側單擊結束圖示;
  6. 嚴重度非嚴重的情況下,添加行動組;
  7. 添加行動組,增加短信和郵件管道,分别發送給電商組和社群組,然後單擊結束圖示;
  8. 配置完成,單擊退出全屏;
  9. 單擊确認;
  10. 添加政策完成;

3、配置自定義告警

3.1.配置 Nginx 日志告警

3.1.1.采集 Nginx 真實日志

  1. 登入 ECS 控制台( https://ecs.console.aliyun.com/#/server/region/cn-beijing ),選擇用 CADT 建立好的 ECS 執行個體:ecs-bp235,進入遠端連接配接;
  2. 在彈出的遠端連接配接頁面,單擊立即登入;
  3. 在遠端登入頁面,輸入 CADT 上對 ECS 設定的密碼,單擊确定;
  4. 安裝 Nginx 元件并啟動 nginx 服務;
    1. 執行以下指令

      yum install yum-utils -y

      touch /etc/yum.repos.d/nginx.repo

    2. 修改 nginx.repo

      vim /etc/yum.repos.d/nginx.repo

    3. 配置内容

      [nginx-stable]

      name=nginx stable repo

      baseurl=

      http://nginx.org/packages/centos/

      $releasever/$basearch/

      gpgcheck=1

      enabled=1

      gpgkey=

      https://nginx.org/keys/nginx_signing.key

      module_hotfixes=true

      [nginx-mainline]

      name=nginx mainline repo

      http://nginx.org/packages/mainline/centos/ enabled=0
    4. 執行指令

      yum install nginx -y

      systemctl start nginx.service

  5. 用浏覽器打開 ECS 的公網 IP,去通路 nginx,産生日志資料;
  6. 登入 SLS 控制台,選擇用 CADT 建立好的 SLS 執行個體:sls-bp235,進入詳情頁;
  7. 在詳情頁中,單擊接入資料;
  8. 在彈出框的快速資料接入中,選擇 NGINX-文本日志;
  9. 進入 Nginx 日志接入頁面,按下面的配置,選擇用 CADT 建立的 ECS 機器,單擊立即執行;
  10. 執行需要等待一定的時間,請耐心等待,直到狀态為成功;
  11. 輸入名稱,建立機器組,單擊下一步;
  12. 對機器組進行配置;
  13. 配置 Logtail,部分關鍵字段配置如下:
    • 配置名稱:logconfig
    • 日志路徑:/var/log/nginx 和 *.log
    • NGINX 日志配置:

      log_format main

      '$remote_addr - $remote_user [$time_local] "$request" '

      '$request_time $request_length '

      '$status $body_bytes_sent "$http_referer" '

      '"$http_user_agent"';

    • 日是樣例

      106.11.31.2 - - [23/Sep/2021:16:15:29 +0800] "GET /nginx-logo.png

      HTTP/1.1" 200 368 "http://123.56.121.18/abc.test" "Mozilla/5.0

      (Macintosh; Intel Mac OS X 11_1_0) AppleWebKit/537.36 (KHTML, like Gecko)

      Chrome/87.0.4280.88 Safari/537.36" "-"

  14. 檢查日志導入後的資料(可能需要等 1 分鐘左右,可單擊重新整理按鈕),單擊下一步;
  15. 配置完成,點選查詢日志;
  16. 傳回到日志首頁,檢查日志資料;

3.1.2.使用 Nginx 模拟日志

  1. 打開建立好的日志庫執行個體 logstore-bp235,展開資料接入,單擊模拟接入;
  2. 在彈出框的快速資料接入中,選擇 NGINX 通路日志,單擊“模拟”,進入模拟頁面;

    注意:這裡要單擊“模拟”按鈕,不要直接點整個方框。

  3. 進入 Nginx 日志模拟接入頁面,直接使用預設的配置,單擊開始導入;
  4. 導入過程需要等待一定的時間,請耐心等待進度條;
  5. 導入完成後,單擊開始使用;
  6. 可以檢視到 SLS 産生了大量的模拟資料;

3.1.3.對 Nginx 日志進行告警配置

上兩步的操作,我們分别通過安裝 nginx 産生真實資料和通過模拟的方式産生了大量的 nginx 日志,接下來我們将對日志進行告警分析處理。

  1. 輸入查詢分析語句:

    status >= 500 | SELECT count(1) as err_cnt

  2. 單擊右上角的另存為告警 > 新版告警;
  3. 填寫告警名稱和動态告警嚴重度的配置;
  4. 修改标注描述;
  5. 選擇告警政策,選擇普通模式,在行動政策下拉框選擇之前配置的“測試行動政策”;
  6. 然後單擊确定按鈕,告警建立成功;

3.1.4.檢視 Nginx 告警統計

  1. 在告警中心,選擇上述步驟建立的監控規則,單擊規則名稱;
  2. 檢視本規則下,具體的告警統計資訊;
  3. 手機和郵箱也會收到相應的告警資訊;

3.2.配置 OSS 日志告警

3.2.1.配置 OSS 通路日志

開通 OSS 通路日志,阿裡雲對象存儲(OSS)聯合日志服務推出 OSS 通路日志實時查詢功能。

  1. 登入 OSS 管理控制台( https://oss.console.aliyun.com/bucket ),找到用 CADT 建立的 OSS 執行個體(本實踐是 oss-bp235);
  2. 在 Bucket 清單中,單擊目标 Bucket 名稱(本實踐是 oss-bp235),再單擊日志管理 >實時查詢;
  3. 單擊立即開通。開通後,日志服務立即開始采集日志,并預設為您建立專屬 Project、Logstore 以及配置索引;
  4. 登入 SLS 控制台,搜尋到資源環境部署中配置的 oss 通路日志 project,單擊進入;
  5. 檢視告警規則清單;
  6. 找到 OSS 通路 PV 同比昨日變化率過高告警,單擊右側的添加按鈕,在彈出框中其他值都保持預設,行動政策修改為之前建立的測試行動政策,最後單擊設定并開啟;
  7. 在告警中心的狀态欄,選擇已開啟,下面告警規則清單會顯示已經開啟的告警規則,即為上述步驟開啟的告警規則;

3.2.2.使用 OSS 模拟日志

  1. 在彈出框的快速資料接入中,選擇 OSS 通路日志,單擊“模拟”,進入模拟頁面;
  2. 配置可以預設,單擊開始導入,等待 2 分鐘;
  3. 可以檢視到 OSS 産生了大量的模拟資料;

3.2.3.檢視 OSS 告警統計

  1. 打開 OSS 自動生成的 SLS Project,單擊告警,進入告警中心;
  2. 找到“OSS 通路 PV 同比昨日變化率過高告警”,單擊進入詳情頁;
  3. 可以檢視告警的統計資訊;

3.3.配置 Prometheus 開放告警

日志服務支援通過 Webhook 方式接收外部監控系統中的告警消息(例如 Grafana告警、Prometheus告警)。您可以通過日志服務告警中的告警管理系統管理告警(降噪、事務管理等),然後通過通知管理系統發送告警通知給目标使用者。

3.3.1.搭建 Prometheus 環境

  1. ),選擇用 CADT 建立好的 ECS 執行個體:ecs-prometheus,進入遠端連接配接;
  2. 在遠端登入頁面,輸入CADT上對ECS設定的密碼,單擊确定;
  3. 下載下傳并解壓二進制安裝包;

    下載下傳、解壓、建立軟連結:

    wget

    https://code.aliyun.com/best-practice/235/raw/master/prometheus-2.13.0.linux-amd64.tar.gz

    tar -xf prometheus-2.13.0.linux-amd64.tar.gz

    mv prometheus-2.13.0.linux-amd64 /usr/local/

    ln -s /usr/local/prometheus-2.13.0.linux-amd64/ /usr/local/prometheus

  4. 建立 prometheus 的使用者及資料存儲目錄;

    useradd -s /sbin/nologin -M prometheus

    mkdir /data/prometheus -p

    修改目錄屬主

    chown -R prometheus:prometheus /usr/local/prometheus/

    chown -R prometheus:prometheus /data/prometheus/

  5. 建立 Systemd 服務啟動 prometheus;

    vim /etc/systemd/system/prometheus.service

    複制下列代碼

    [Unit]

    Description=Prometheus

    Documentation=

    https://prometheus.io/

    After=network.target

    [Service]

    Type=simple

    User=prometheus

    ExecStart=/usr/local/prometheus/prometheus --

    config.file=/usr/local/prometheus/prometheus.yml -- storage.tsdb.path=/data/prometheus

    Restart=on-failure

    [Install]

    WantedBy=multi-user.target

  6. 啟動 prometheus;

    systemctl start prometheus

    systemctl status prometheus

    systemctl enable prometheus

  7. 為ECS安全組配置端口以開放prometheus通路;

    在配置規則中,入方向增加 9090、9100、3000、10050 端口開放;

3.3.2.配置開放告警對外接口

  1. 登入 SLS 控制台,單擊 sls-bp235 進入;
  2. 單擊開放告警;
  3. 建立開放告警服務;
  4. 建立完告警服務,單擊菜單中的應用按鈕;
  5. 建立應用;
  6. 填寫應用資訊及行動政策,單擊儲存;
  7. 應用建立成功;
  8. 建立 RAM 使用者接入告警;

    說明:為保證賬号安全,強烈建議您使用 RAM 使用者進行告警接入操作,不要直接使用阿裡雲賬号。用于告警接入的 RAM 使用者需具備AliyunLogPutOpenEventPolicy權限,具體操作如下:

    1. 建立RAM使用者。具體操作,請參見建立RAM使用者( https://help.aliyun.com/document_detail/93720.htm );
    2. 授予RAM使用者AliyunLogPutOpenEventPolicy權限。具體操作,請參見為RAM使用者授權( https://help.aliyun.com/document_detail/116146.htm
    3. 為RAM使用者建立通路密鑰(AccessKey ID)。具體操作,請參見為RAM使用者建立通路密鑰( https://help.aliyun.com/document_detail/116401.htm
  9. 單擊步驟7的接口按鈕,彈出接口資訊,接口資訊中的{ACCESS_KEY_ID}為阿裡雲通路密鑰中的 AccessKey ID,請根據步驟8中的AccessKey ID替換;

3.3.3.接入 Prometheus 告警到 SLS

在Prometheus中,将日志服務開放告警系統配置為一個Alertmanager元件。配置完成後,Prometheus 會将告警消息發送到日志服務告警系統中,由日志服務告警系統完成告警降噪、通知等處理。

  1. 重新登入搭建Prometheus環境中打開的 ECS 控制台(ecs-prometheus);
  2. 修改 Prometheus 配置;

    cd /usr/local/prometheus

    vim prometheus.yml

  3. 在Prometheus配置檔案中,替換原有的alertmanagers配置,即配置完成;
    最佳實踐:基于SLS實作統一告警
    說明:
    • path_prefix:配置路徑資訊,此處配置為您在日志服務中建立開放告警服務和應用後生成的接口資訊(子路徑部分)。可從3.3.2的步驟9中擷取公網位址;

      參考:/event/webhook/RAMAK_LTAI5tHxvGh4vPbS/test-promethus_test-1

    • targets:告警消息的接收端,此處配置為日志服務的通路域名;

      參考:cn-heyuan.log.aliyuncs.com

      最佳實踐:基于SLS實作統一告警
  4. 配置告警規則; https://code.aliyun.com/best-practice/235/raw/master/linux-rules.yml
  5. 重新開機 Prometheus 服務;

    systemctl restart prometheus

  6. 檢視Prometheus的Alerts頁面,規則配置完成;

    URL:

    http://123.56.102.189 :9090/alerts(IP 位址為 ecs-prometheus 的公網位址)

3.3.4.配置增加監控對象

為了能夠體驗到真實的告警資料通過Prometheus推送到 SLS 中,我們特定用一台ECS去産生告警的資料,讓Prometheus捕獲。

  1. 在ECS管理控制台,打開通過CADT建立的被監控ECS(名稱為:ecs-monitored)的控制台;
  2. 下載下傳并安裝node_exporter服務,接入到prometheus中; https://code.aliyun.com/best-practice/235/raw/master/node_exporter-1.2.2.linux-amd64.tar.gz

    tar -zxf node_exporter-1.2.2.linux-amd64.tar.gz -C /usr/local/

    cd /usr/local/

    mv node_exporter-1.2.2.linux-amd64/ node_exporter

  3. 建立系統服務并啟動;

    touch /usr/lib/systemd/system/node_exporter.service

    vi /usr/lib/systemd/system/node_exporter.service

    檔案中加入以下配置資訊:

    最佳實踐:基于SLS實作統一告警

    啟動 node_exporter 并設定為開啟自啟動:

    systemctl enable node_exporter.service

    systemctl start node_exporter.service

    systemctl status node_exporter.service

  4. 啟動成功,測試node_exporter運作情況。本執行個體中用ECS(ecs-monitored)的公網IP位址加端口9100通路,即可。

    本執行個體:

    http://101.200.74.60 :9100/metrics
  5. 将ecs-monitored節點加入到prometheus監控對象中。打開prometheus所在ECS(主機名:ecs-prometheus)的遠端控制台;

    vim /usr/local/prometheus/prometheus.yml

    追加以下列代碼:

    -job_name: 'CentOS7_VMServer'

    static_configs:

    -targets: ['101.200.74.60:9100']

    其中這裡的 IP 位址為 ECS(ecs-monitored)的公網 IP 位址。

    修改完儲存,并重新開機 prometheus 服務

    systemctl restart prometheus.service

    systemctl status prometheus.service

  6. 再登入 prometheus 的 Web 界面可以看到新增的這個 Target;

3.3.5.生産告警資料

  1. 在ECS的管控控制台,打開通過CADT建立的被監控ECS(名稱為:ecs-monitored)的控制台。
  2. 安裝壓測工具将該ECS的CPU使用率提高到 100%;

    yum install -y stress sysstat

  3. 執行壓測腳本;

    stress --cpu 1 --timeout 600

3.3.6.檢視 Prometheus 告警

  1. 在 SLS 告警中心打開開放告警中心日志庫;
  2. 單擊中心日志庫,可跳轉到開放告警的SLS的Project中檢視日志;
  3. 檢視Prometheus的告警;

    說明:在日志中可以看到大量的“CPU 使用率過高”的日志資料。

  4. 收到短信和郵件告警資訊;

3.4.配置 Zabbix 開放告警

Zabbix作為常用的開源監控系統,提供了豐富的告警規則用于系統監控,同時支援多種告警通知管道。日志服務告警系統可以設為Zabbix的一個通知管道,由日志服務告警系統完成告警降噪、通知等處理。本節适用于Zabbix 4.4及以上版本。

3.4.1.搭建 Zabbix 環境

  1. ),選擇用CADT建立好的ECS執行個體:ecs-zabbix,進入遠端連接配接;
  2. 在彈出的遠端連接配接頁,單擊立即登入;
  3. 線上安裝 zabbix;

    請參見

    《基于SLS實作統一告警最佳實踐》 3.4.1章節
  4. 用浏覽器打開zabbix控制台(用zabbix的ECS配置的EIP打開): http://39.107.226.142/EIP/zabbix
  5. 完成配置進行zabbix管理背景 http://39.107.226.142/zabbix/index.php ,輸入管理者使用者名 Admin(區分大小寫),預設密碼 zabbix,單擊登入即可;

3.4.2.配置開放告警對外接口

  1. 登入SLS控制台,單擊 sls-bp235 進入;
  2. 最佳實踐:基于SLS實作統一告警
  3. 點選步驟7的接口按鈕,彈出接口資訊,接口資訊中的{ACCESS_KEY_ID}為阿裡雲通路密鑰中的AccessKey ID,請根據實際值的AccessKey ID替換。

3.4.3.接入 Zabbix 告警

  1. 下載下傳配置檔案(zabbix-4.4.xml) https://code.aliyun.com/best-practice/235/blob/master/zabbix-4.4.xml 儲存到本地為zabbix-4.4.xml檔案;
  2. 添加Alibaba Cloud SLS (Log Service)通知管道;

    (1)在zabbix控制台導航欄中,選擇Administration > Media types;

    (2)在Media types頁面的右上角,單擊Import;

    (3)在 Import 對話框中,選擇您已下載下傳的zabbix-4.4.xml檔案,選中 Create new,然後單擊 Import;

    (4)在Media types頁面中,單擊Alibaba Cloud SLS (Log Service);

    (5)在Parameters配置項中,修改hook_url字段的值,然後單擊Update;

    Hook_url 參考:

    http://cn-heyuan.log.aliyuncs.com/event/webhook/RAMAK_LTAI5tH xvGh4vPbS/test-zabbix_test-1
  3. 為目标使用者設定通知管道;

    (1)在zabbix控制台導航欄中,選擇Administration > Users;

    (2)在使用者清單中,可以單擊Create user,建立一個新使用者;

    (3)在Media頁簽中,建立一個新的Media;

    (4)儲存後,單擊Update;

  4. 配置觸發器;

    (1)在左側導航欄中,選擇Configuration > Actions,Event source選中預設的Trigger類型,單擊“Report problems to Zabbix administrators”;

    (2)在Operations頁簽中,單擊Operations區域中的New;

    (3)在Operations details對話框中,選擇目标使用者或使用者組,以及配置 Send only to為Alibaba Cloud SLS (Log Service),最後點選 Update;

3.4.4.配置 zabbix agent

為了能夠體驗到真實的告警資料通過Zabbix推送到SLS中,我們用一台ECS去産生的告警資料,讓Zabbix捕獲。

  1. 在ECS的管控控制台,打開通過CADT建立的被監控ECS(名稱為:ecs-monitored)的控制台;
  2. 安裝zabbix agent服務,接入到zabbox server中; 3.4.4章節
  3. 停止3.3章節中prometheus的監控,以免引起資料的幹擾;

    systemctl stop node_exporter

  4. stress --cpu 1 --timeout 6000

3.4.5.配置zabbix服務端

本小節将在zabbix服務端增加用戶端,将安裝了zabbix agent的雲主機納入到伺服器的監控管控中。

  1. 在Zabbix服務端的面闆中依次單擊:Configuration——>Hosts——>Create host(即ecs-monitored這台ECS);
    最佳實踐:基于SLS實作統一告警
    最佳實踐:基于SLS實作統一告警
    最佳實踐:基于SLS實作統一告警
    最佳實踐:基于SLS實作統一告警
  2. 添加完後點選Add,稍等一會兒狀态變為綠色。至此,用戶端主機添加完成!此時如果記錄不是綠色,請注意在ECS的安全組中,入口端口10050是否沒有添加(步驟 3.3.1 的步驟 8)。

3.4.6.檢視Zabbix告警

  1. 在SLS告警中心打開開放告警中心日志庫;
  2. 檢視zabbix的告警;

    告警内容為:alert_name:"Load average is too high (per CPU load over 1.5 for 5m)"

  3. 收到短信和郵件告警資訊。

附加說明:

如果您已經完成了本實踐,可以通過CADT的資源釋放功能,可以一鍵将本次實踐建立的雲資源全部釋放。

繼續閱讀