在我之前的一篇文章《Cloudformation與其背后的“基礎(chǔ)設(shè)施即代碼”》中把夸,我提到了利用Cloudformation實(shí)現(xiàn)“基礎(chǔ)設(shè)施即代碼”扎即,
可觀測性即代碼
“可觀測性即代碼”(Observability as Code)這一詞條第一次出現(xiàn)在ThoughtWorks《技術(shù)雷達(dá)》19期:
可觀測性是運(yùn)轉(zhuǎn)分布式系統(tǒng)與微服務(wù)架構(gòu)必不可少的一部分。我們依賴不同的系統(tǒng)輸出來推斷分布式組件的內(nèi)部狀態(tài)各拷,比如分布式追蹤闷营、日志聚合、系統(tǒng)指標(biāo)等速蕊,進(jìn)而診斷問題所在娘赴,并找到根本原因。
可觀測性生態(tài)系統(tǒng)的一個(gè)重要方面就是監(jiān)控——可視化以及分析系統(tǒng)的輸出——并且在檢測到異常時(shí)報(bào)警唉锌。傳統(tǒng)的監(jiān)控報(bào)警配置竿奏,都是通過圖形界面的操作完成泛啸。這種方法導(dǎo)致控制面板頁的配置不可重復(fù),從而無法持續(xù)測試和調(diào)整報(bào)警候址,來避免報(bào)警疲勞或錯(cuò)過重要的報(bào)警岗仑,進(jìn)而偏離組織的最佳實(shí)踐。我們強(qiáng)烈建議使用代碼來配置可觀測性生態(tài)系統(tǒng),稱為可觀測性即代碼,并且采取基礎(chǔ)設(shè)施即代碼的方式搭建其基礎(chǔ)設(shè)施欢际。
因此矾兜,在選擇提供可觀測性的工具時(shí),要選擇支持通過代碼版本控制進(jìn)行配置浑槽,并能通過基礎(chǔ)設(shè)施持續(xù)交付流水線執(zhí)行 API 或命令行的產(chǎn)品返帕。
實(shí)戰(zhàn):利用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
通過一個(gè)d2tf工具可以實(shí)現(xiàn)將已有的Datadog配置轉(zhuǎn)換成Terraform代碼
Github倉庫:https://github.com/geekeren/terraform-datadog-demos