在我之前的一篇文章《Cloudformation與其背后的“基礎設施即代碼”》中,我提到了利用Cloudformation實現“基礎設施即代碼”,
可觀測性即代碼
“可觀測性即代碼”(Observability as Code)這一詞條第一次出現在ThoughtWorks《技術雷達》19期:
可觀測性是運轉分布式系統與微服務架構必不可少的一部分。我們依賴不同的系統輸出來推斷分布式組件的內部狀態,比如分布式追蹤、日志聚合、系統指標等,進而診斷問題所在,并找到根本原因。
可觀測性生態系統的一個重要方面就是監控——可視化以及分析系統的輸出——并且在檢測到異常時報警。傳統的監控報警配置,都是通過圖形界面的操作完成。這種方法導致控制面板頁的配置不可重復,從而無法持續測試和調整報警,來避免報警疲勞或錯過重要的報警,進而偏離組織的最佳實踐。我們強烈建議使用代碼來配置可觀測性生態系統,稱為可觀測性即代碼,并且采取基礎設施即代碼的方式搭建其基礎設施。
因此,在選擇提供可觀測性的工具時,要選擇支持通過代碼版本控制進行配置,并能通過基礎設施持續交付流水線執行 API 或命令行的產品。
實戰:利用Terraform配置Datadog
resource "datadog_monitor" "high_cpu_usage_of_docker" {
name = "High CPU Usage of Docker"
type = "metric alert"
message = <<EOT
High CPU Usage of Docker @bywang@thoughtworks.com
EOT
escalation_message = ""
query = "max(last_5m):avg:docker.cpu.usage{*} > 20"
notify_no_data = false
renotify_interval = 0
notify_audit = false
timeout_h = 0
include_tags = true
require_full_window = false
new_host_delay = 300
thresholds {
warning = 10.0
critical = 20.0
}
}
Datadog Monitor
遷移:代碼化原有手動配置的Datadog
通過一個d2tf工具可以實現將已有的Datadog配置轉換成Terraform代碼
Github倉庫:https://github.com/geekeren/terraform-datadog-demos