新聞中心
Splunk是業(yè)界領(lǐng)先的機器數(shù)據(jù)收集、處理、分析和管理平臺。機器數(shù)據(jù)是指那些能夠為企業(yè)業(yè)務(wù)發(fā)展提供動力的應(yīng)用、服務(wù)器、存儲、網(wǎng)絡(luò)設(shè)備、安全設(shè)備以及其他相關(guān)設(shè)備制造出來的數(shù)據(jù)。機器數(shù)據(jù)可以反映客戶、交易、應(yīng)用、服務(wù)器、網(wǎng)絡(luò)等的行為或活動。機器數(shù)據(jù)的范圍遠遠超越了日志。

成都創(chuàng)新互聯(lián)自2013年起,先為南縣等服務(wù)建站,南縣等地企業(yè),進行企業(yè)商務(wù)咨詢服務(wù)。為南縣企業(yè)網(wǎng)站制作PC+手機+微官網(wǎng)三網(wǎng)同步一站式服務(wù)解決您的所有建站問題。
部署架構(gòu)
下圖是該方案的部署架構(gòu),主要包括:
利用Heapster收集K8s的性能數(shù)據(jù),包含CPU,Memory,Network,F(xiàn)ile System等
利用Heapster的Statsd Sink,發(fā)送數(shù)據(jù)到Splunk的Metrics Store
利用Splunk的搜索命令和儀表盤功能對性能數(shù)據(jù)進行監(jiān)控
前期準備
前期主要要準備好兩件事:
編譯最新的Heapster的鏡像,并上傳到某個公共的Docker鏡像倉庫,例如docker hub
在Splunk中配置Metrics Store和對應(yīng)的網(wǎng)絡(luò)輸入(Network Input UDP/TCP)
這里主要要做的選擇是Statsd的傳輸協(xié)議用UDP還是TCP。這里我推薦使用TCP。 最新的Heapster代碼支持不同的Backend,包含了log, influxdb, stackdriver, gcp monitoring, gcp logging, statsd, hawkular-metrics, wavefront, openTSDB, kafka, riemann, elasticsearch等等。因為Splunk的Metrics Store支持statsd協(xié)議,所以可以很容易的和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協(xié)議,如果想要使用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上放了兩個鏡像,分別對應(yīng)udp版本的tcp版本,大家可以直接使用
naughtytao/heapster-amd64:v1.5.0-beta.3 udp
naughtytao/heapster-amd64:v1.5.0-beta.4 tcp
然后需要在Splunk中配置Metrics Store,參考這個文檔
安裝配置Heapster
在K8s上部署heapster比較容易,創(chuàng)建對應(yīng)的yaml配置文件,然后用kubectl命令行創(chuàng)建就好了。
以下是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的對應(yīng)的Splunk的data input的端口號。當使用udp協(xié)議的時候,需要配置的numMetricsPerMsg的值比較小,當這個值比較大的時候,會出message too long的error。當使用tcp的時候可以配置較大的數(shù)值。
運行 kubectl apply -f *.yaml 來部署heapster
如果正常運行,對應(yīng)的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中進行監(jiān)控
好了如果一切正常的化,heapster會用statsd的協(xié)議和格式發(fā)送metrics到Splunk的metrics store。
然后就可以用利用SPL的mstats和mcatalog命令來分析,監(jiān)控metrics數(shù)據(jù)了。
以下搜索語句列出所有的Metrics
| mcatalog values(metric_name)
以下搜索語句列出整個cluster的CPU使用,我們可以用Area或者Line Chart來可視化搜索結(jié)果。
| mstats avg(_value) WHERE metric_name=cluster.cpu/usage_rate span=30m
kube-system namespace的對應(yīng)內(nèi)存使用情況
| mstats avg(_value) WHERE metric_name=namespace.kube-system.memory/usage span=30m
大家可以把自己感興趣的分析結(jié)果放在Dashboard中,利用Realtime設(shè)置進行監(jiān)控。
好了,更多的分析選項可以參考Splunk文檔。
名稱欄目:通過Splunk監(jiān)控Kubernetes運行性能實施方案
URL鏈接:http://m.fisionsoft.com.cn/article/dhpjiph.html


咨詢
建站咨詢
