1. 程式人生 > >利用Amazon CloudWatch 搭建無人值守的監控預警平臺

利用Amazon CloudWatch 搭建無人值守的監控預警平臺

資源與應用服務層監控

Amazon CloudWatch 監控和預警平臺可以幫助客戶統一管理和運維AWS雲端和本地資源、服務和業務系統;使用 Amazon CloudWatch 可以收集和跟蹤指標,收集和監控日誌檔案,設定警報。您可通過使用 Amazon CloudWatch 全面地瞭解資源使用率、應用程式效能和執行狀況。使用這些分析結果,您可以及時做出反應,保證應用程式順暢執行。

Amazon CloudWatch 的基本概念

請參考AWS 官方文件瞭解 Amazon CloudWatch的核心概念和術語,比如指標、名稱空間、維度、時間戳、單位、統計資料、時間段、聚合、警報等。

基於CloudWatch 的監控預警平臺架構

CloudWatch 提供了一套標準的API介面,使用者可以利用該平臺釋出自定義應用、業務或者更加詳細的系統指標。使用者釋出到Amazon CloudWatch 的指標是按時間排序的資料點集合,資料點本身可以來自於任何應用程式或者業務活動;指標通過名稱、名稱空間和維度進行唯一定義;維度可以幫助你設計資料點的分組特徵或者類別,釋出指標資料點時必須必須指定維度,比如虛機的CPU使用率,使用者可以檢視單獨某個虛機的監控指標也可以按AutoScaling組來檢視,這裡的單個虛機或者AutoScaling組就是同一資料點的不同的維度。使用者可以使用秒級甚至千分之一秒的頻率釋出自定義指標,但是Amazon CloudWatch 還是會將資料聚合到1分鐘為最小粒度。

基於指標資料,使用者可以翻譯業務的波動異常到相應的指標,從而建立警報來和相應的操作來自動化應對各種異常情況,操作包括彈性伸縮(Auto Scaling)機制來應對訪問流量變化或者Amazon SNS 主題訂閱繫結的郵件通知、HTTP請求的呼叫和訊息佇列非同步處理。

指標資料使用者可以直接通過AWS 控制檯進行的圖形化按時間篩選、檢視和分享;同時,使用者也可以通過API介面獲取指標資料進行第三方的處理和展示。CloudWatch預設儲存兩週的指標資料(海外區域部分可以支援免費儲存最多15個月的統計資料,詳情請檢視AWS CloudWatch文件)。

本文的架構中,自定義指標收集不需要自己程式設計而是利用collectd守護程序進行監控和獲取,同時利用CloudWatch Plugin for collectd直接將自定義指標釋出和儲存到CloudWatch中,使用者隨後可以基於自定義指標的進行自動化警報處理從而實現無人值守的統一監控平臺。

什麼是CloudWatch Plugin for collectd

CloudWatch一直支援使用者釋出自定義指標來儲存、監控自己關心的業務、應用和系統健康狀況;AWS最新發布了CloudWatch Plugin for collectd開源專案,該外掛整合了collectd強大的收集各種型別統計資料的能力,幫助客戶簡化了開發收集自定義指標的相關工作,開箱即用地支援釋出Apache、Nginx Web伺服器應用指標,記憶體監控指標等監控資料到CloudWatch進行統一儲存、展示和預警。

什麼是collectd

collectd是一個基於C語言的守護程序,主要任務就是用來收集統計資訊,它提供各種了儲存方式來儲存不同值的機制。它支援超過100種各類外掛,下面大概列出一些比較常見的外掛型別,具體的請參考collectd官方網站

  • Web應用:Apache、nginx
  • 資料庫:MySQL、Oracle、PostgreSQL、memcached
  • 網路:OpenVPN、Ping、TCPConns、
  • 系統:Memory、Disk、FileCount、vmem、uptime、df

安裝配置CloudWatch Plugin for collectd

下面的步驟以BJS區域的EC2為例來說明如何安裝配置和使用CloudWatch Plugin for collectd:

使用者授權

該外掛支援IAM Role或者 IAM User兩種方式的授權,按照AWS最佳實踐,我們推薦使用IAM Role的方式進行授權。所以,開始之前,我們先建立一個IAM Role並賦予相應的許可權。

創一個角色名字為role4collectd

然後在該角色的許可權頁面,建立角色策略,賦予該角色擁有釋出指標的許可權。

啟動例項並繫結角色

如果你想在已經啟動的EC2或者你自己的機器上啟用該外掛,可以忽略該步驟並建立一個具備CloudWatch釋出指標許可權的IAM User。

本文啟動一個新的EC2例項並繫結上一步建立好的角色:

安裝外掛

登陸到EC2並更新系統。

[[email protected] ~]$ sudo yum -y install collectd
已載入外掛:priorities, update-motd, upgrade-helper
正在解決依賴關係
--> 正在檢查事務
---> 軟體包 collectd.x86_64.0.5.4.1-1.11.amzn1 將被 安裝
--> 解決依賴關係完成

下載CloudWatch Plugin for collectd 安裝檔案並執行,安裝指令碼會自動讀取EC2的Meta Data,因此選項都可以預設選擇,比如區域,EC2繫結的IAM Role等等。

[[email protected] ~]$ sudo -s
[[email protected] ec2-user]# wget https://raw.githubusercontent.com/awslabs/collectd-cloudwatch/master/src/setup.py
[[email protected] ec2-user]# chmod +x setup.py
[[email protected] ec2-user]# ./setup.py
[[email protected] ec2-user]# ./setup.py
Installing dependencies ... OK
Installing python dependencies ... OK
Downloading plugin ... OK
Extracting plugin ... OK
Moving to collectd plugins directory ... OK
Copying CloudWatch plugin include file ... OK

Choose AWS region for published metrics:
1. Automatic [cn-north-1]
2. Custom
Enter choice [1]:

Choose hostname for published metrics:
1. EC2 instance id [i-cc97bc74]
2. Custom
Enter choice [1]:

Choose authentication method:
1. IAM Role [role4collectd]
2. IAM User
Enter choice [1]:
Choose how to install CloudWatch plugin in collectd:
1. Do not modify existing collectd configuration
2. Add plugin to the existing configuration
Enter choice [2]:
Plugin configuration written successfully.
Stopping collectd process ... NOT OK
Starting collectd process ... OK

collectd和CloudWatch plugin for collectd到此就已經安裝完成了。

定義釋出到CloudWatch的指標

要在CloudWatch中儲存和檢視collectd收集的指標資料,需要完成兩件事情(1)安裝相應的collectd外掛(2)在CloudWatch plugin配置檔案中新增指標白名單。

檢視CloudWatch plugin的指標白名單,版本collectd 5.5以下預設CloudWatch白名單指標是空的,也就是預設不會發布任何collectd的指標到CloudWatch:

[[email protected] ~]$ sudo cat /opt/collectd-plugins/cloudwatch/config/whitelist.conf

對於可用的collectd的指標資料型別,我們可以檢視以下檔案來確認,該檔案包含沒有釋出到CloudWatch的指標型別,該檔案是系統自動維護,不要人為進行修改:

blocked_metrics  plugin.conf      whitelist.conf
[[email protected] ~]$ sudo cat /opt/collectd-plugins/cloudwatch/config/blocked_metrics
# This file is automatically generated - do not modify this file.
# Use this file to find metrics to be added to the whitelist file instead.
cpu-0-cpu-user
cpu-0-cpu-nice
cpu-0-cpu-system
cpu-0-cpu-idle
cpu-0-cpu-wait
cpu-0-cpu-interrupt
cpu-0-cpu-softirq
cpu-0-cpu-steal
interface-lo-if_octets-
interface-lo-if_packets-
interface-lo-if_errors-
interface-eth0-if_octets-
interface-eth0-if_packets-
interface-eth0-if_errors-
load--load-
memory--memory-used
memory--memory-buffered
memory--memory-cached
memory--memory-free

假定我們對於記憶體相關指標比較感興趣,可以將memory開頭的指標型別新增到CloudWatch白名單:

[[email protected] ~]$ sudo vim /opt/collectd-plugins/cloudwatch/config/whitelist.conf
輸入如下資訊:

memory--memory-.*

重啟collectd服務:

注:在BJS區域的EC2上預設安裝和配置後,我們從日誌會發現報錯,主要原因是預設安裝後的指令碼不支援BJS區域,詳細的錯誤識別請參考以下步驟。

開啟debug模式:

重啟collectd服務:

檢視日誌:

從下面的錯誤資訊可以看到,指令碼預設釋出指標到如下的endpoint:https://monitoring.cn-north-1.amazonaws.com/, 但BJS區域的CloudWatch endpoint和海外區域的命名規則有差異,詳細的AWS BJS區域服務的終端節點可以參考:中國(北京)區域

為了解決BJS區域終端節點的支援問題,我們需要更新外掛的Python指令碼檔案使其支援BJS區域:

1.confighelper.py檔案:該檔案預設安裝後的目錄是 /opt/collectd-plugins/cloudwatch/modules/configuration

更新如下函式,

參考修改後的程式碼如下:

2. requestbuilder.py 檔案:該檔案預設安裝後的目錄為/opt/collectd-plugins/cloudwatch/modules/client

該類的主要功能是構建簽名版本4的PutMetricData API請求,因此會使用到endpoint資訊,具體請參考線上文件

更新如下函式,

參考修改後的程式碼如下:

重啟collectd服務:

檢視以 [AmazonCloudWatchPlugin] 開頭的日誌內容,從日誌可以看出,我們新增到白名單的memory相關的日誌包含四個不同的指標,每分鐘釋出一次:

登入AWS 控制檯,開啟到CloudWatch頁面,左側導航最底端有個自定義指標的選擇框,下拉就可以選擇collectd來檢視剛剛釋出的指標內容:

安裝啟用收集Apache監控資料外掛

通過以下命令可以查詢 Amazon Linux AMI帶有的collectd的外掛列表:

apache的狀態資訊來自於自身的mod_status模組,collectd解析出例如傳輸的bytes大小,接受到的請求數量等指標;詳情請參考該外掛介紹頁面;安裝collectd apache 監控外掛:

修改collectd的配置,預設安裝的檔案位置 /etc/collectd.conf:

LoadPlugin apache
<Plugin apache>
  <Instance “local”>
    URL “http://localhost/server-status?auto”
  </Instance>
</Plugin>

以下是針對httpd-2.2版本的參考配置,預設的配置檔案位於/etc/httpd/conf/httpd.conf:

將apache相關狀態指標加入到CloudWatch collectd外掛配置的白名單列表,更新檔案 /opt/collectd-plugins/cloudwatch/config/whitelist.conf :

重新啟動相關服務:

這樣我們就完成了安裝配置新的collectd的apache外掛,同時將apache的相關監控指標新增到CloudWatch的白名單,這樣我們就可以無縫整合collectd的收集資料能力和CloudWatch統一儲存、展示和預警能力,下圖就是apache web應用相關的指標在CloudWatch中展示的結果:

基於CloudWatch指標建立警報

既然我們通過外掛收集了很多系統和應用的指標,那如果發生一些異常或者超過預先定義的閾值的時候,我們如何去應對和處理呢?理想情況我們能夠儘可能自動化來應對這些警報,即搭建“無人”值守的監控預警平臺。下圖是基於某一個採集指標定義警報及處理警報的操作的截圖;當一個警報發生時,你可以定義一個或多個操作來應對和處理;你可以採取的操作型別有,傳送郵件通知,釋出訊息到SNS服務,新增Auto Scaling操作,以及EC2例項操作;這裡的EC2例項操作包含停止、終止、重啟或恢復,任何EC2例項指標(在 AWS/EC2 名稱空間中)或者包含“InstanceId=”維度的任何自定義指標都可以在警報中觸發EC2例項操作。

一些限制

很多使用者在開始接觸CloudWatch的時候就非常關心效能問題,目前釋出指標API PutMetricData 每秒可處理 150 個事務 (TPS),這是您每秒可以發出而不會受到限制的操作請求的最大數量,但可以線上請求提高限制;PutMetricData 同時支援GET和POST操作,請求最大大小分別為8KB和40KB。每個指標最多可以有10個維度;

總結

本文和大家一起學習瞭如何基於CloudWatch及collectd相關外掛構建無人值守的監控預警平臺;CloudWatch預設提供了AWS資源的基本監控資料,同時提供了CLI和REST API的方式供使用者自行擴充套件自定義業務和系統指標資料; CloudWatch plugin for collectd 是AWS最新發布的一個開源外掛,大家可以進一步通過學習該專案的原始碼掌握如何基於Python擴充套件和整合AWS的服務。

作者介紹:

薛軍

AWS 解決方案架構師,獲得AWS解決方案架構師專業級認證和DevOps工程師專業級認證。負責基於AWS的雲端計算方案架構的諮詢和設計,同時致力於AWS雲服務在國內的應用和推廣,在網際網路金融、保險、企業混合IT、微服務等方面有著豐富的實踐經驗。在加入AWS之前已有接近10年的軟體開發管理、企業IT諮詢和實施工作經驗。

相關推薦

利用Amazon CloudWatch 搭建無人值守監控預警平臺

資源與應用服務層監控 Amazon CloudWatch 監控和預警平臺可以幫助客戶統一管理和運維AWS雲端和本地資源、服務和業務系統;使用 Amazon CloudWatch 可以收集和跟蹤指標,收集和監控日誌檔案,設定警報。您可通過使用 Amazon CloudWatch

利用 Amazon CloudWatch 監控 GPU 利用率

深度學習需要進行大量的矩陣相乘和向量運算,而 GPU (圖形處理單元) 可以並行處理這些運算,因為 GPU 擁有數以千計的核心。Amazon Web Services 為您提供的 P2 或 P3 例項非常適用於執行深度學習框架,如 MXNet,該框架強調加速部署大型深度神經網路。

搭建無人值守安裝服務器

安裝 系統 搭建無人值守安裝服務器方法:FTP+TFTP+DHCP+Kickstart+PXE一、原理和概念1、PXE PXE並不是一種安裝方式,而是一種引導方式。進行PXE安裝的必要條件是要安裝的計算機中包含一個PXE支持的網卡(NIC),即網卡中必須要有PXE Client。PXE

從零開始搭建ELK+GPE監控預警系統

elasticsearch logstash kibana redis grafana prometheus exporter consul前言本文可能不會詳細記錄每一步實現的過程,但一定程度上可以引領小夥伴走向更開闊的視野,串聯每個環節,呈現予你不一樣的效果。業務規模8個平臺100+臺服務器10+個集群分

利用Code::Blocks搭建64位C++開發平臺

0.前言 隨著64位計算機的普及,編寫64位程式成為程式設計師基本的要求。我在《體驗Code::Blocks下的C++程式設計》中描述了利用Code::Blocks官方提供的封裝了編譯器的安裝包(codeblocks-17.12mingw-setup.exe)搭建開發環境編寫C++程式的方法。但是,官方提供的

百曉生帶你玩轉linux系統服務搭建系列----pxe遠程安裝服務器的搭建無人值守安裝

conf fig ces sys 鏡像文件 mount size set blog 實驗環境系統環境:centos6.5:程安裝服務器WIN7:客戶端一、pxe遠程安裝服務器的搭建 安裝並開啟需要的服務,tftp,ftp,dhcp。1) yum -y install t

linux 搭建kickstart 無人值守安裝詳解

一、概念 1.1 PXE PXE(Pre-boot Execution Environment,預啟動執行環境)是由Intel公司開發的最新技術,工作於Client/Server的網路模式,支援工作站通過網路從遠端伺服器下載映像(載入程式,如mbr),並由此支援通過網路啟動作業系統,在啟動過

利用OK6410與OV9650搭建的在yeelink平臺搭建的視訊監控平臺

硬體環境: 飛凌OK6410開發板 OV9650攝像頭 目標要求: 通過開發板平臺,上傳攝像頭採集的影象。 步驟: 1.開發板驅動攝像頭顯示; 2.搭建web伺服器,通過瀏覽器檢視攝像頭影象; 3.抓取網頁影象 4.上傳至yeelink 5.通過motion軟體包實現影象

Amazon CloudWatch監控_雲監控服務

Amazon CloudWatch 是一種面向開發人員、系統操作員、網站可靠性工程師 (SRE) 和 IT 經理的監控和管理服務。CloudWatch 為您提供相關資料和切實見解,以監控應用程式、瞭解和響應系統範圍的效能變化、優化資源利用率,並在統一檢視中檢視運營狀況。CloudWatch

Amazon CloudWatch監控服務價格_亞馬遜雲監控

包括自定義指標。 EC2 詳細監控的價格為每月每個例項 2.10 USD,在價格最低的套餐中低至每個例項 0.14 USD。  EC2 詳細監控定價是根據每個例項有 7 個自定義指標計費的(按 1 分鐘頻率),按比例分配到每小時,並且僅在例項向 Cloud

Amazon CloudWatch監控常見問題_亞馬遜雲監控

問:為什麼我在 2017 年 7 月的 AWS CloudWatch 每月賬單與之前幾個月的不同? 在 2017 年 7 月之前,CloudWatch 費用分開顯示在 AWS 賬單與成本和使用率報告中的兩個不同部分。由於歷史原因,CloudWatch 警報、

【自動駕駛】如何利用深度學習搭建一個最簡單的無人駕駛系統

新智駕按:本文為新智駕獨家專欄,作者系佐思產研研究總監周彥武,新智駕經授權釋出。 國內最牛的無人駕駛廠家的運算平臺是這樣的: 一個英特爾至強 E5 的 CPU,擁有 12 核心,30MB 的二級快取,運算能力為 400GOPS/s,功率消耗為 400 瓦(應該是第一代至強 E5,目前 E5 最高功率消

IIS7下php運行環境的搭建(巧妙利用phpmanger來搭建php)

msvc png 環境 php5.6 eight php .dll 新的 過程   最近在window server2008上開發php項目,web服務器就用了win上內置的IIS服務器來搭建,可是一路坑,搭了幾次都不成功。翻閱網上資料,原來IIS 上可以利用phpmang

通過位於http服務器上的ks文件無人值守安裝CentOS 6.9

kickstart ks CentOS 6.x創建kickstart文件的方式:依據某模板直接手動編輯:可根據系統安裝完成後生成的/root/anaconda-ks.cfg配置文件進行修改依據某模板通過system-config-kickstart命令創建(需要圖形界面支持)配置Xmanager使用圖

CentOS搭建lepus3.8監控MySQL

centos搭建lepus3.8監控mysqlCentOS搭建lepus3.8監控MySQLyum -y install gcc libffi-devel python-devel openssl-devel mysql-devel zlib-devel監控端安裝數據庫連接Python的驅動包1).安裝 My

Kickstart無人值守安裝CentOS

centos kickstart pxe 一、準備工作[[email protected]/* */ ~]# iptables -nL Chain INPUT (policy ACCEPT) target prot opt source destin

PXE+Kickstart無人值守安裝操作系統

單位 flag 而且 desktop centos6.7 情況 系統 同時 tftpd 1.PXE的工作過程: 1. PXE Client 從自己的PXE網卡啟動,向本網絡中的DHCP服務器索取IP; 2. DHCP 服務器返回分配給客戶機的IP 以及PXE文件的放置位

部署kickstart無人值守

con devel html span rgs div config pxelinux bug 部署kickstart無人值守 環境介紹:使用一臺虛擬機模擬DHCP/TFTP/HTTP服務器,虛擬機ip地址為172.16.1.61,網卡為eth0 1.準備

cobbler無人值守批量安裝Linux系統

base ted 安裝完成 macro fail 0.10 amp med api 本文目錄: 1.1 pxe安裝系統 1.2 cobbler基本介紹 1.3 安裝和配置cobbler 1.3.1 安裝cobbler 1.3.2 配置dhcp和tftp 1.4 cobbl