監控即程式碼入門:如何將 Splunk Observability Cloud 與 Terraform 結合使用

發布日期:2022/04/29

管理當今雲端原生基礎架構越來越複雜,對可觀察性的需求持續增加。隨著採用雲端的情形不斷增加,提供更好的客戶體驗、有效率地擴展和增加創新動力的需求變得空前重要。對於想要落實這些原則的許多組織,有兩種技術可以幫助它們更快實現這些目標:監控即程式碼 (Monitoring-as-Code) 和基礎架構即程式碼 (Infrastructure-as-Code)。 

這篇文章將介紹監控即程式碼和基礎架構即程式碼如何協同工作,以及這些技術如何提高持續整合/持續交付 (CI/CD) 開發的效率。我還將引導您完成設定 Splunk 的 Terraform 提供程序 (provider) 的幾個簡單步驟,以便輕鬆地為您的應用程式程式碼提供監控和可觀察性。

什麼是基礎架構即程式碼? 
傳統上,部署 IT 基礎架構是一項艱鉅的工作,涉及多個團隊且需手動佈建。一旦在這個漫長且複雜的過程中發生任何錯誤,都可能導致應用程式部署失敗或出現效能問題,進而影響到客戶的操作。為了解決手動佈建的諸多問題,基礎架構即程式碼應運而生,作法是將大量系統的配置宣告為程式碼。基礎架構即程式碼系統能讓使用者指定想要的最終的基礎架構配置,然後讓工具處理後端的工作,以使基礎架構成為所需的狀態。基礎架構即程式碼平台的最佳範例就是 HashiCorp 的 Terraform。當需要變更時,Terraform 設定中的小異動會迅速反映在目前運作的基礎架構中。

什麼地方適用監控即程式碼? 
當您想要監控基礎架構和應用程式時,可能會遇到許多和手動佈建基礎架構時相同的問題。這些問題通常在您實作基礎架構後才會遇到,並隨著監控部署的複雜性增加而越來越明顯。使用監控即程式碼時,您監控的配置會更接近真實的應用程式和開發工作流程。事實上,它就是在相同的工作流程中。它會檢查版本控制系統,並成為 CI/CD 系統的一部分,隨程式碼部署修改而修改。無論您的基礎架構位於雲端還是本地,應用程式的相關資產都會時時受到監控。

重要的是,要記住監控即程式碼和獨立使用的監控或可觀察性工具之間的區別。雖然 Splunk Observability Cloud 等可觀察性工具可以即時提供跨基礎架構、應用程式和使用者的全保真監控和故障排除,但它們無法自動判斷業務邏輯或哪些特定偵測器對您的業務指標最重要。監控即程式碼可管理如何從應用程式收集資料,以便幫您解決問題。讓我們看下面這個例子。

如何實作監控

HashiCorp 的 Terraform 是一個可以安全且高效率地建立、修改基礎架構,並對其進行版本控制的工具。Terraform 可經由提供程序進行擴展,包括 

即程式碼Splunk-Terraform 提供程序。這個提供程序可與 Splunk Observability Cloud 支援的資源互動並建立一個配置,我們可以將其放在基礎架構配置 HCL 中,或當作 API 驗證權杖,用以驗證個別的 Terraform 部署。


在這個範例中,我們使用 Kubernetes 部署了一個微服務型應用程式。該應用程式是使用四種不同的服務建立的。我們將使用 Terraform 部署一個偵測器,如果四個微服務之一停用,就會進入關鍵狀態並發出警示。 

首先,我們需要一個 API 驗證權杖,以和 Splunk Observability Cloud 進行驗證。前往帳戶設定畫面,並按一下 [Access Tokens]

 

 

按一下 [New Token],為存取權杖命名,並選擇 [API Token] 權限。 

 

 

建立 API 權杖後,您可以按一下「Show Token」連結檢視權杖,並在使用 Terraform 時將其使用在您的程式碼中。

 


使用我們的 API 權杖並安裝 terraform 後,即可使用 Terraform CLI 部署以下程式碼。(注意:SignalFx 是 Splunk Observability Cloud 某些元件舊名稱)

 

terraform {
 required_providers {
   signalfx = {
     source = "splunk-terraform/signalfx"
     version = "6.8.0"
   }
 }
}
provider "signalfx" {
  # It is strongly recommended to use a secret management Terraform Provider such as Vault, but for this example we include the token here.
  auth_token="API TOKEN HAS BEEN OMITTED"
  api_url = "https://api.us1.signalfx.com" #use your custom Splunk Observability realm URL
}
resource "signalfx_detector" "movieappspods_notready" {
name        = "One or more Movie microservice pods are not ready"
description = "This alert will trigger in the event a microservice pod for the movie applications is in a non-ready state."
program_text = <<-EOF
      A = data('k8s.container.ready', filter=filter('metric_source', 'kubernetes') and filter('app', 'movies', 'actors', 'dashboard', 'directors'), rollup='count').count().publish(label='A')
      detect(when(A < threshold(${var.pod_amount}))).publish('Movies Application Microservices Pods') 
  EOF
rule {
  description   = "One or more movie application microservices pods are not ready"
  severity      = "Critical"
  detect_label  = "Movies Application Microservices Pods"
  notifications = ["Email,you@example.com"]
}
}

 

 



檢查程式碼時,您可以看到我們為提供程序提供了所需的欄位 (auth_token、api_url),以和 Splunk Observability Cloud 進行驗證,以及建立偵測器所需的資源 (signalfx_detector)。將 SignalFlow 放在 program_text 欄位中,以宣告偵測器。如需正確的 SignalFlow 語法,請參見《Splunk Observability Cloud 開發人員指南》,或在 Splunk Observability Cloud 使用者介面中,在任何現有偵測器或圖表的省略號功能表中選擇 [Show SignalFlow] (如下所示)。SignalFlow 還支援對資料進行即時操作、彙整或其他作業,因此您的監控即程式碼部署將可如同在 GUI 中建立的偵測器一般,提供強大的即時資料和分析能力。

 


接下來,完成 Terraform 部署,切換到 Splunk Observability Cloud 中的偵測器,此時偵測器已準備好在微服務中斷時向您發出警示。 

 


 

結論
雖然使用者介面讓任何人無需學習新語言即可輕鬆建立圖表和偵測器等可觀察性的工具,但我們知道部分先進的企業希望能夠將監控設定與應用程式程式碼一起儲存。將所有需要的資料儲存在一個真實來源 (您的來源程式碼庫) 中,可以輕鬆地確保必要的監控能始終與您的應用程式一起部署,並且時時保持最新狀態。 

此外,Terraform Cloud 代理程式會發出 OpenTelemetry 格式的資料 (指標和追蹤),因此您甚至可以在 Splunk Observability Cloud 中分析它們的效能並解決問題。當然,您也可以使用 Terraform 來部署 OpenTelemetry 收集器,而且這些操作都能透過一個集中位置進行管理。 

開始使用 Splunk 部署監控即程式碼
您可以到此處註冊開始免費試用產品套件──涵蓋基礎架構監控APM真實使用者監控日誌觀察器。了解 TerraformSplunk Terraform 提供程序 的更多資訊,並立即開始使用監控即程式碼!

 
作者
Johnathan Campos
Johnathan 是 Splunk 可觀察性團隊的一員,致力於為全世界介紹可觀察性。Johnathan 的職業生涯涵蓋 IT 管理到開發營運,再跨足到產品行銷管理。除了可觀察性,Johnathan 的專業興趣還包括培訓、開發營運文化和公開演講。Johnathan 擁有美國西部州長大學網路管理科學學士學位。

 

返回上一頁