2 minute read

AWS指標監控模塊,類似Prometheus的腳色
可以將各服務的數值作為指標送入CloudWatch

Metrics

  • CloudWatch 對aws提供metrics
  • metrics 簡單說就是一個time series的觀測值, 用於服務監控 (e.g. CPUUtilization)

EC2 Monitoring

  • 每五分鐘一個指標 (免費)
  • 可以開啟 detail monitoring (需要額外費用), 為每一分鐘一個指標, 可用於AutoScaling
  • 免費提供 10種 detail monitoring metrics
  • 無ram 與 disk usage,

Dashboard

  • 可客製化dashboard
  • global level
  • 可以跨帳號與regions建立圖表
  • 可以自動刷新(10s,1m,2m,5m,15m)
  • 可修改timezone , time range
  • 免費額度為 3個dashboard, 最多可以使用50個metrics
  • 付費為 每多一個 3美元/月

Log Group

cloudWatch的log instance, 用於存放log stream

  • Log group: 代表特定application
  • log stream: 特定 application/ log file / containers 的 log instance
  • 可定義log的expiration policy , (never expire, 1 day to 10 day)
  • 日誌預設加密 (類似S3 ) , 也可使用KMS

CloudWatch Logs - Source

這邊是日誌的來源

  • SDK, CloudWatch log agent, CloudWatch Unified Agent, 使用sdk可將自訂的log送入
  • Elastic Beanstalk
  • ECS
  • AWS Lambda
  • VPC Flow logs
  • API Gateway
  • CloudTail base on filter
  • Route53: Log DNS query

CloudWatch Logs - Destination

可將接收到的log 送至其他目標

  • S3
  • kinesis Data Streams
  • kinesis Data Firehose
  • AWS Lambda
  • OpenSearch

metric filter

可將log的訊息過濾出來 轉為 cloudwatch的metric, 用於監控指標 或是 alert

S3 Export

  • 可協助將CloudWatch log 輸出至 S3, 資料導出需要 12hour to become available
  • 該 API 叫做 CreateExportTask
  • 非即時輸出

CloudWatch Logs Subscriptions

  • 可以從 CloudWatch Logs 取得 real-time log event 進行分析處理
  • 可將log 及時輸出至 ElasticSearch, Kinesis Data Stream, Kinesis Data Firehose or Lambda
  • subscription filter: 可將log event進行 條件過濾並 分送至 目的地
graph LR
    CloudWatchLog --> SubscriptionFilter
    SubscriptionFilter --> Lambda
    SubscriptionFilter --> Kinesis_Data_Firehose --> S3
    Kinesis_Data_Firehose --> OpenSearchService
    SubscriptionFilter --> Kinesis_Data_Streams --> KDF --> KDA --> EC2 --> lambda

CloudWatch Logs Aggregation Multi-Account & Multi Region

可將不同帳戶的log event 聚合至同一個目標

graph LR
    Account_A_Region_1_CloudWatch_Log --> SubscriptionFilter1 --> Kinesis_Data_Streams
    Account_B_Region_2_CloudWatch_Log --> SubscriptionFilter2 --> Kinesis_Data_Streams
    Account_B_Region_3_CloudWatch_Log --> SubscriptionFilter3 --> Kinesis_Data_Streams
    Kinesis_Data_Streams --> Kinesis_Data_Firehose --> AWS_S3

跨帳號訂閱


graph LR
    subgraph account_A
        CloudWatch --> SubscriptionFilter
    end

    subgraph account_B
        SubscriptionFilter --> Subscription_Destination --> Kinesis_Data_Streams_RecipientStream
    end


recipient IAM role (Cross-Account)

{
  "Statement": [
    {
      "Effect": "Allow",
      "Action": "kinesis:PutRecord",
      "Resource": "arn:aws:kinesis:region:999999999999:stream/RecipientStream"
    }
  ]
}

destination policy


{
  "Version" : "2012-10-17",
  "Statement" : [
    {
      "Sid" : "",
      "Effect" : "Allow",
      "Principal" : {
        "AWS" : "111111111111"
      },
      "Action" : "logs:PutSubscriptionFilter",
      "Resource" : "arn:aws:logs:region:999999999999:destination:testDestination"
    }
  ]
}

Live Tail

  • 主要用於調適
  • 可設一些條件將進入log group 的log 進行過濾, 並即時串流於畫面上,
  • 需額外費用, 每日有一小時的免費額度

CloudWatch Logs Insights

  • 用於cloudwatch logs group 查詢與分析 e.g. 查找log中特定IP含有ERROR的次數
  • 查詢引擎, 有自己的查詢語法 , 非即時查詢, 而是depend on log
  • 會自動解析出 來自AWS服務的log與JSONlog的 field
  • 可根據條件進行filter, 聚合運算 , 排序, 限制數量
  • 可將查詢條件加入 dashboard
  • 可以跨多個AWS帳號查詢多個 log group

CloudWatch Alarms

  • 可以被任何metric trigger alarms
  • 可定義複雜規則 ( sampling 百分比, max, min, mean ….)
  • 一般用於單個metric trigger, 若需要多個metric trigger, 可用 compose alarms

Alarm States

alarm state 可分為

  • ok: 尚未觸發
  • insufficient data: 表示沒有足夠的data
  • alarm: 已被觸發

Period

  • 評估metric的時間長度(秒) , e.g. CPU 80% 以上 180秒
  • 可設 10s , 30s 或是 60倍數 sec

Datapoint of alarm

這邊是指在 X個評估期中 滿足Y個才會被觸發

e.g. 條件為 CPU 80% 以上持續180秒 , 若設置 2 of 3 , 表示 在540秒中 有兩組持續180秒 才會被觸發

Alarm Target

  • EC2: Stop,Terminate,Reboot or Recover an EC2 instance
  • AutoScaling: Trigger Auto Scaling Action
  • SNS: Send Notification to SNS (SNS可以跟lambda掛勾, 因此可以實現任何操作)

Compose Alarm

  • 可以使用多個metrics作為條件進行trigger, 也可以說是多個alarm trigger
  • AND OR Conditions
  • 多個metrics 可減少 alarm noise e.g. CPU 與 IO 同時高負載 才trigger 發送 SNS

EC2 Instance Recovery

用於 EC2 Instance的狀態監控

StatusCheck 可分

  • Instance Status: 確保 EC2 VM
  • System Status: 確保硬體

一旦損毀, 可觸發 Recovery, 相同的 Private,Public,ElasticIP,Placement group

CloudWatch 補充

  • 可以使用 log group中的 metric filter 創建的metrics 創建 alarm
  • 可以使用 CLI 測試 alarm 與 notification
aws cloudwatch set-alarm-state --alarm-name "MyAlarm" --state-value ALARM --state-reason "Testing alarm state"

CloudWatch Synthetic

  • 簡單說就是 寫一個腳本模仿用戶行為, 用該腳本監控特定application
  • 可確認latency與available, 可儲存loading時間與 browserUI 截圖
  • 可整合CloudWatch Alarm e.g. 用戶 > route53 > app, 我們使用synthetic 監控app, app失效 trigger alarm, 執行lambda, 啟動另一組app, 並將route53指向新機器
  • 腳本script 支援 Node.js 與 Python
  • 可腳本化 headless chrome browser,
  • 可執行一次或 定期執行

參考用途

  • HeartBeat Monitor: Load URL, Screenshot and HTTP archive file (HAR文件記錄了訪問該URL時完整的HTTP請求和響應信息,可用於debug)
  • API Canary: 測試API基本功能
  • Broken link checker: 用於測試所有URL的是否正常
  • visual monitor: 比較 canary 時的 screen shot, 與基準 screen shot 差異
  • Canary Recorder: 這邊是可以錄製UI操作產生script (本用途是錄製後 可以直接於Synthetic作為腳本使用, Synthetic主要是模仿客戶端 驗證server application )
  • GUI workflow builder: 錄製的腳本也可以驗證GUI操作是否正常

Tags:

Categories:

Updated: