首頁  >  文章  >  系統教程  >  細說利用Splunk監控Kubernetes運作效能

細說利用Splunk監控Kubernetes運作效能

WBOY
WBOY原創
2024-07-26 17:31:50724瀏覽
部署架構

下圖是此方案的部署架構,主要包括:

利用Heapster收集K8s的效能數據,包含CPU,Memory,Network,File System等

利用Heapster的Statsd Sink,發送資料到Splunk的Metrics Store

利用Splunk的搜尋指令和儀表板功能來監控效能資料
細說利用Splunk監控Kubernetes運作效能

前期準備

前期主要要準備好兩件事:

編譯最新的Heapster的映像,並上傳到某個公共的Docker映像倉庫,例如docker hub

在Splunk中配置Metrics Store和對應的網路輸入(Network Input UDP/TCP)

這裡主要要做的選擇是Statsd的傳輸協定用UDP還是TCP。這裡我推薦使用TCP。 最新的Heapster程式碼支援不同的Backend,包含了log, influxdb, stackdriver, gcp monitoring, gcp logging, statsd, hawkular-metrics, wavefront, openTSDB, kafka, riemann, elasticsearch等等。因為Splunk的Metrics Store支援statsd協議,所以可以很容易的和Heapster整合。

首先我們需要利用最新的heapster程式碼,編譯一個容器映像,因為docker hub上的heapsterd的官方鏡像的版本比較舊,並不支援statsd。所以需要自己編譯。

mkdir myheapster
mkdir myheapster/src
export GOPATH=myheapster
cd myheapster/src
git clone https://github.com/kubernetes/heapster.git
cd heapster
make container

運行以上的命令來編譯最新的heapster鏡像。

注意,heapster缺省使用udp協議,如果想要使用tcp,需要修改代碼

https://github.com/kubernetes/heapster/blob/master/metrics/sinks/statsd/statsd_client.go

func (client *statsdClientImpl) open() error {
	var err error
	client.conn, err = net.Dial("udp", client.host)
	if err != nil {
		glog.Errorf("Failed to open statsd client connection : %v", err)
	} else {
		glog.V(2).Infof("statsd client connection opened : %+v", client.conn)
	}
	return err
}

把udp改成tcp。

我在docker hub上放了兩個映像,分別對應udp版本的tcp版本,大家可以直接用

naughtytao/heapster-amd64:v1.5.0-beta.3 udp

naughtytao/heapster-amd64:v1.5.0-beta.4 tcp

然後需要在Splunk中配置Metrics Store,參考這個文件
細說利用Splunk監控Kubernetes運作效能

安裝配置Heapster

在K8s上部署heapster比較容易,建立對應的yaml設定文件,然後用kubectl命令列建立就好了。

以下是Deployment和Service的設定檔:

deployment.yaml

apiVersion: extensions/v1beta1
kind: Deployment
metadata:
  name: heapster
  namespace: kube-system
spec:
  replicas: 1
  template:
    metadata:
      labels:
        task: monitoring
        k8s-app: heapster
        version: v6
    spec:
      containers:
      - name: heapster
        image: naughtytao/heapster-amd64:v1.5.0-beta.3
        imagePullPolicy: Always
        command:
        - /heapster
        - --source=kubernetes:https://kubernetes.default
        - --sink=statsd:udp://ip:port?numMetricsPerMsg=1

service.yaml

apiVersion: v1
kind: Service
metadata:
  labels:
    task: monitoring
    # For use as a Cluster add-on (https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)
    # If you are NOT using this as an addon, you should comment out this line.
    kubernetes.io/cluster-service: 'true'
    kubernetes.io/name: Heapster
  name: heapster
  namespace: kube-system
spec:
  ports:
  - port: 80
    targetPort: 8082
  selector:
    k8s-app: heapster

注意這裡deployment的--sink的配置,ip是Splunk的IP或主機名,port的對應的Splunk的data input的連接埠號碼。當使用udp協定的時候,需要配置的numMetricsPerMsg的值比較小,當這個值比較大的時候,會出message too long的error。當使用tcp的時候可以配置較大的數值。

運行 kubectl apply -f *.yaml 來部署heapster

如果正常運行,對應的heapster pod的日誌如下

I0117 18:10:56.054746       1 heapster.go:78] /heapster --source=kubernetes:https://kubernetes.default --sink=statsd:udp://ec2-34-203-25-154.compute-1.amazonaws.com:8124?numMetricsPerMsg=10
I0117 18:10:56.054776       1 heapster.go:79] Heapster version v1.5.0-beta.4
I0117 18:10:56.054963       1 configs.go:61] Using Kubernetes client with master "https://kubernetes.default" and version v1
I0117 18:10:56.054978       1 configs.go:62] Using kubelet port 10255
I0117 18:10:56.076200       1 driver.go:104] statsd metrics sink using configuration : {host:ec2-34-203-25-154.compute-1.amazonaws.com:8124 prefix: numMetricsPerMsg:10 protocolType:etsystatsd renameLabels:map[] allowedLabels:map[] customizeLabel:0x15fc8c0}
I0117 18:10:56.076248       1 driver.go:104] statsd metrics sink using configuration : {host:ec2-34-203-25-154.compute-1.amazonaws.com:8124 prefix: numMetricsPerMsg:10 protocolType:etsystatsd renameLabels:map[] allowedLabels:map[] customizeLabel:0x15fc8c0}
I0117 18:10:56.076272       1 heapster.go:202] Starting with StatsD Sink
I0117 18:10:56.076281       1 heapster.go:202] Starting with Metric Sink
I0117 18:10:56.090229       1 heapster.go:112] Starting heapster on port 8082
在Splunk中進行監控

好瞭如果一切正常的化,heapster會用statsd的協定和格式發送metrics到Splunk的metrics store。

接著就可以用利用SPL的mstats和mcatalog指令來分析,監控metrics資料了。

以下搜尋語句列出所有的Metrics

| mcatalog values(metric_name)

細說利用Splunk監控Kubernetes運作效能

以下搜尋語句列出整個cluster的CPU使用,我們可以用Area或Line Chart來視覺化搜尋結果。

| mstats avg(_value) WHERE metric_name=cluster.cpu/usage_rate span=30m

細說利用Splunk監控Kubernetes運作效能

kube-system namespace的對應記憶體使用量

| mstats avg(_value) WHERE metric_name=namespace.kube-system.memory/usage span=30m

細說利用Splunk監控Kubernetes運作效能

大家可以把自己有興趣的分析結果放在Dashboard中,利用Realtime設定進行監控。
細說利用Splunk監控Kubernetes運作效能

好了,更多的分析選項可以參考Splunk文件。

以上是細說利用Splunk監控Kubernetes運作效能的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn