全部產品
Search
文件中心

:接入Kubernetes Go程式效能資料

更新時間:Dec 31, 2025

Pprof是Go語言提供的效能分析工具之一,用於分析和最佳化Go程式的效能。您可通過Simple Log Service全棧可觀測中的Kubernetes Golang拉取功能,為Kubernetes中所有基於Go語言啟動並執行服務提供靈活且一站式的效能指標採集方案。

說明

可觀測針對Golang語言提供了商業化版本的自研探針,提供了無侵入的埋點能力,擁有更加豐富的功能和更高的穩定性。詳細資料,請參見開始監控 Go 應用

前提條件

  • 已建立全棧可觀測執行個體。具體操作,請參見建立執行個體

  • 已安裝監控組件。具體操作,請參見安裝監控組件

    說明

    需要通過Kubernetes組件安裝特殊版Logtail鏡像,Logtail鏡像Tag需為v1.7.1.0-monitor-aliyun及以上版本。

採集原理

在Kubernetes中,Go程式效能指標採集組件的部署模型與日誌採集組件的部署模型相同,都為Daemonset。依託於日誌採集組件多維度Kubernetes資源選擇能力,採集Go程式的效能指標資料時,也支援通過環境變數、Kubernetes Labels、Namespace、Pod名稱、容器名稱過濾資料。另外,Go程式的效能指標涉及Go進程之間的通訊,Kubernetes資源選擇可能命中大量非相關進程,因此Logtail增加了一個特殊的環境變數ILOGTAIL_PROFILE_PORT,用於進一步精確指定採集目標。

Go語言已內建Pprof效能資料暴露機制。在Go程式中啟動內建的Pprof效能資料暴露機制後,Logtail會通過HTTP介面擷取Pprof資料。

image.png

準備工作

  1. 開啟效能資料暴露。

    在接入Go Pprof效能資料前,您需要先啟動Go程式效能資料的暴露機制。您可以通過如下方式啟動內建的暴露機制,也可以自訂暴露機制,但需保證Pprof資料暴露於{host}:{port}/debug/pprof/連接埠。下述樣本表示將Pprof效能資料暴露於8080連接埠。

    package main
    
    import (
    	"net/http"
    	_ "net/http/pprof"
    )
    
    func main() {
    
    	// do something...
    
    	_ = http.ListenAndServe(":8080", nil)
    }
  2. 配置環境變數ILOGTAIL_PROFILE_PORT。

    其中,環境變數ILOGTAIL_PROFILE_PORT的值為具體暴露的連接埠,例如ILOGTAIL_PROFILE_PORT=8080。

建立Logtail採集配置

  1. 登入Log Service控制台

  2. 日誌應用地區的智能營運頁簽下,單擊全棧可觀測

  3. SLS全棧可觀測頁面,單擊目標執行個體。

  4. 在左側導覽列中,單擊效能監控

    首次在該執行個體中使用效能監控時,請單擊立即開啟

  5. 在左側導覽列中,單擊資料接入,然後在資料接入配置頁面,找到Kubernetes Golang拉取

    首次建立目標監控項的接入配置時,開啟建立開關,可進入配置頁面。如果您已建立過接入配置,則單擊建立表徵圖,可進入配置頁面。

  6. 單擊使用現有機器組

    安裝監控組件後,Simple Log Service自動建立名為{instanceID}-{clusterID}-k8s-nodes的機器組,您可以直接使用該機器組。

  7. 選中目標機器組({instanceID}-{clusterID}-k8s-nodes),將該機器組從源機器組移動到應用機器組,單擊下一步

    重要

    如果機器組心跳為FAIL,您可單擊自動重試。如果還未解決,請參見Logtail機器組無心跳進行排查。

  8. 資料來源設定設定精靈中,配置如下參數,然後單擊完成

    參數

    說明

    一般配置

    配置名稱

    設定Logtail採集配置的名稱。

    叢集

    設定Kubernetes叢集的名稱。

    設定該參數後,Simple Log Service會為通過該Logtail採集配置採集到的Kubernetes Go Pprof效能資料添加cluster=叢集名稱的標籤。

    重要

    請確保該叢集名稱唯一,否則可能出現資料衝突。

    Profile白名單

    選擇要採集的效能資料類別。

    採集間隔

    設定採集資料間隔時間,單位:秒。

    逾時時間

    設定採集資料逾時時間,單位:秒。

    最大Body大小

    設定採集資料的最大採集Body大小,單位:KB。

    K8s選取器配置

    Namespace

    輸入匹配Namespace名稱的Regex,用於指定待採集的命名空間。

    Pod名稱

    輸入匹配Pod名稱的Regex,用於指定待採集的Pod。

    容器名稱

    輸入匹配容器名稱的Regex,用於指定待採集的容器。

    環境變數白名單

    環境變數白名單,用於指定待採集的容器。預設為空白,表示採集所有容器的Kubernetes Go程式效能資料。如果您要設定環境變數白名單,那麼key必填,value可選填。

    • 如果value為空白,則容器環境變數中包含key的容器都匹配。

    • 如果value不為空白,則容器環境變數中包含key=value的容器才匹配。

      value預設為字串匹配,即只有value和環境變數的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配,例如:設定keyNGINX_SERVICE_PORT,設定value^(80|6379)$,表示可匹配服務連接埠為80、6379的容器。

    多個白名單之間為或關係,即只要容器的環境變數滿足任一索引值對即可被匹配。

    環境變數黑名單

    環境變數黑名單,用於排除不採集的容器。預設為空白,表示不排除任何容器。如果您要設定環境變數黑名單,那麼key必填,value可選填。

    • 如果value為空白,則容器環境變數中包含key的容器的日誌都將被排除。

    • 如果value不為空白,則容器環境變數中包含key=value的容器才會被排除。

      value預設為字串匹配,即只有value和環境變數的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配,例如:設定keyNGINX_SERVICE_PORT,設定value^(80|6379)$,表示可匹配服務連接埠為80、6379的容器。

    多個黑名單之間為或關係,即只要容器的環境變數滿足任一索引值對即可被排除。

    K8s Label白名單

    通過Kubernetes Label白名單指定待採集的容器。如果您要設定Kubernetes Label白名單,那麼key必填,value可選填。

    • 如果value為空白,則Kubernetes Label中包含key的容器都匹配。

    • value不為空白,則Kubernetes Label中包含key=value的容器才匹配。

      value預設為字串匹配,即只有value和Kubernetes Label的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配。例如設定keyapp,設定value^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

    多個白名單之間為或關係,即只要Kubernetes Label滿足任一白名單即可被匹配。

    K8s Label黑名單

    通過Kubernetes Label黑名單排除不採集的容器。如果您要設定Kubernetes Label黑名單,那麼key必填,value可選填。

    • 如果value為空白,則Kubernetes Label中包含key的容器都被排除。

    • 如果value不為空白,則Kubernetes Label中包含key=value的容器才會被排除。

      value預設為字串匹配,即只有value和Kubernetes Label的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配。例如設定keyapp,設定value^(test1|test2)$,表示匹配Kubernetes Label中包含app:test1、app:test2的容器。

    多個黑名單之間為或關係,即只要Kubernetes Label滿足任一黑名單對即可被排除。

    容器Label白名單

    容器Label白名單,用於指定待採集的容器。預設為空白,表示採集所有容器的Kubernetes Go程式效能資料。如果您要設定容器Label白名單,那麼key必填,value可選填。

    • 如果value為空白,則容器Label中包含key的容器都匹配。

    • 如果value不為空白,則容器Label中包含key=value的容器才匹配。

      value預設為字串匹配,即只有value和容器Label的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配。例如:配置keyio.kubernetes.container.name,配置value^(nginx|cube)$,表示可匹配名為nginx、cube的容器。

    多個白名單之間為或關係,即只要容器Label滿足任一白名單即可被匹配。

    容器Label黑名單

    容器Label黑名單,用於排除不採集的容器。預設為空白,表示不排除任何容器。如果您要設定容器Label黑名單,那麼key必填,value可選填。

    • 如果value為空白,則容器Label中包含key的容器都將被排除。

    • 如果value不為空白,則容器Label中包含key=value的容器才會被排除。

      value預設為字串匹配,即只有value和容器Label的值完全相同才會匹配。如果該值以^開頭並且以$結尾,則為正則匹配。例如:設定keyio.kubernetes.container.name,設定value^(nginx|cube)$,表示可匹配名為nginx、cube的容器。

    多個黑名單之間為或關係,即只要容器Label滿足任一黑名單對即可被排除。

    設定完成後,Simple Log Service將自動產生Metricstore等資產。更多資訊,請參見資產說明

後續步驟

接入Go Pprof效能資料後,您可以通過效能監控探索功能進行效能問題排查。具體操作,請參見資料查詢資料對比