Skip to main content

2 posts tagged with "SRE"

View All Tags

· 7 min read
zaxro

判斷邏輯

網路服務會發生問題狀況有很多,以下會用樹狀圖去做個判斷邏輯,當然這是建立在我目前遇到過的各種各樣情況上,同時也會加上判斷中會使用的方法!

HTTP status 介紹

  • 1xx - 資訊性狀態碼(Informational Status Codes):表示請求已收到,並且伺服器仍在處理中.
  • 2xx - 成功狀態碼(Success Status Codes):表示請求成功被伺服器接受和處理.
  • 3xx - 重新導向狀態碼(Redirection Status Codes):表示需要進行進一步的操作以完成請求.
  • 4xx - 用戶端錯誤 : 常見有 400 請求無效,server 無法理解,404 資源不存在
  • 5xx(Server Error Status Codes)- 伺服器在處理請求時發生錯誤.

4xx 判斷過程及工具

出現 4xx 不一定全是 client 問題,因為這與你 server 端 code 可能有關係,可能今天問題是 RD 的靜態資源放錯路徑,前端拿不到,也有可能是客戶端編碼跟 API 串接方式錯誤等等.

在排查此類問題,客戶端提供的報錯節圖,url,跟網路速度都是重要判斷依據.如果明確知道問題原因,那可以直接跳階段測試,不知道原因的話建議可以以下判斷:

  1. 靜態資源未拿到: 請客戶端檢查網路環境,提供網路速度,ping 跟 traceroute 結果,是否有清 cache,server 端確認是否有此資源,跟有無 purge.
  2. 編碼問題: 這要看 server log,並請開發人員溝通.

順序問題,4xx 的問題可以從 client 端開始查到 server 端.

5xx 判斷過程跟工具

主要跟 code,hardware, app's condition,internet 都有關係,且可能彼此混雜,就 RD 覺得是 IT 設定 waf,IT 覺得是RD的程式問題. 也因此,建立判斷的過程很重要.

  1. hardware 問題,基本上有裝監控項可以看到性能就沒問題

  2. internet 問題,這邊就很複雜了,如果基本的 server 端互相 telnet 都有過,那接下來就要乖乖重投檢查了,這邊先不考慮 ICP 或雲服務商掛掉,這兩個掛掉應該很多網站都會掛,那剩下就是排查 waf.排查 waf 工具有以下

    • /etc/hosts: 綁定 DNS
    • web server 端的 curl.

排查流程

網路發出的流程會是:client請求 -> CDN -> web server轉導-> 後端程式處理

所以排查順序也可以是由外到內,client 端開始查,但通常都是並行的,就是 client 端那邊查網路連線品質,server 端也同時看服務情況跟 log.

  • 情境一: 客戶反應說他的 request 被攔截了,原因是 xxx cors.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋.
    2. web server 看是否有設定 WAF 或者有設定跨域設定,及其阻擋紀錄.
    3. 後端程式規範的跨域跟安全套件.
  • 情境二: 客戶反應說他的 request 被攔截了,原因是 xxx header 的 sameorigin problem.

    檢查流程:

    1. 先去 CDN 看是否被 WAF 阻擋,如無,就綁定/etc/hosts 不走 CDN 直接到 web server ip 做測試
    2. web server 檢查是否有限定 header.
    3. 從 web server 那邊直接 curl 目標 server ip:port,ex.以下指令示範
curl -v http://10.0.0.1:92

去看請求後端時是否就有強迫帶該 header,如有就代表程式端有帶套件去加 header

  1. code 端可能用的套件,例如 js 的helmet套件.

在測試流程中發現限制,也不代表你一定要開放,例如,iframe 的內嵌就會牽涉到點擊劫持,跨站腳本攻擊(Cross-Site Scripting, XSS),內容竊取,會限制就會有他的原因.

非 4xx 或 5xx

這個判斷基本上就是看 F12 報錯項目了,看完之後的判斷,也是依據 4xx 或 5xx 類別去判斷.

小結

基本上,排查流程一定要有個順序,由外到內或內到外(看習慣),客戶端到 server 中間的所有事情都要一個一個查,剛開始可能因為經驗不足,到一半就會放棄了,像我就是XD,但隨著時間增加,看得問題也變多了,就要去紀錄不足之處,以及中間固定要做的事情!

如果排查一遍還是找不到問題,就要去想你過程可能漏掉哪些細項,哪些測試是可以做但你還沒做或不知道怎麼做的!

· 4 min read
zaxro

SRE

使用過的 IaC 工具

使用過的域名、證書管理工具

基本上這邊就看個人回答,工具部分有 certbot 可以做定期 renew 憑證!

DevOps

雲端平台理解

  • IAM:

  • VPC:

  • peering connection

  • cloudwatch

  • cloudtrail

請問心目中理想 pipeline!

理想的 CI/CD pipeline 應該具有自動化、快速、可靠且能快速反饋.

  • 自動化:基本上滿直觀得,跑 CI/CD 就是希望減少手動,所以盡量要讓所有過程自動
  • 快速部分:各家 CI 會有不同配置,主要是透過檢視流程,讓沒有相依性的 jobs 可以平行處理,並適當使用 cache,減小使用的 image size 等等.
  • 可靠: pipline 流程設計要有一致性,部署的環境跟資料源穩定
  • 快速反饋: 將過程成功或失敗,透過 webhook 或其他方式發送到通訊平台

ps: pipline 過程

  • code management: 程式碼依規定建立分支,tag,commit 放入版本控制系統,
  • Build: 將檔案進行編譯
  • 自動測試:包含單元測試,整合測試,確定新開發的 function 功能不會破壞既有功能
  • (optional)建 image 並推到 registry: 這適用於用 container 部署的項目
  • 部署到測試環境: 環境可能有很多個,如果用 ec2 之類是用 ssh 做部署(可以配合 ansible 腳本),如果是 image 就有需要並執行的過程!
  • 驗證: 對於新開發功能進行驗證,確認功能正常,符合需求
  • 部署到 production
  • 監控:這牽涉到硬體跟服務的日誌監控跟分析
  • Rollback: ㄧ旦發現要能進行 rollback

如何提升系統穩定性(ex 證券業),降低伺服器意外故障風險?

雲端部分,的確是會遇到某個 AZ 機器突然掛掉的問題,畢竟他對機器保障的 down time 本來就不是 100%,如果是用 VM 之類起服務,可以在將服務部署在同一 Region 的各 AZ 中,即使一個 VM 掛了,其他的也可以提供服務! 地端機器也是同樣概念!

運維

基本上,他就是全包所有東東(除了開發),著重維護底層,或許會碰到部署,所以基本上要有以下觀念

  • 監控系統建立跟操作: 一般硬體,process 監控,port 監控,常用資源:Zabbix,Grafana,Prometheus
  • 日誌系統: 日誌系統收集跟傳輸資訊:filebeat,日誌系統分析:ELK,Graylog.
  • 資料庫管理: 設計,管理和維護資料庫,包括備份和恢復,性能優化,安全管理等。
  • 網路管理: 維護和管理網絡設備,如交換機,路由器和防火牆。包括設置網絡拓撲,網絡設置和配置,網絡性能優化和維護,包含雲端跟地端.
  • 安全性管理: 確保系統和數據得到妥善保護,防止未經授權的訪問和數據洩漏,包含防毒安裝.
  • 軟體管理: 軟體部署,跟版本管理等
  • 資料備份和災難恢復: 確保所有資料都能夠備份和恢復,並建立計畫並測試.