这篇文章主要介绍如何通过Splunk监控Kubernetes运行性能,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

Splunk是业界领先的机器数据收集、处理、分析和管理平台。机器数据是指那些能够为企业业务发展提供动力的应用、服务器、存储、网络设备、安全设备以及其他相关设备制造出来的数据。机器数据可以反映客户、交易、应用、服务器、网络等的行为或活动。机器数据的范围远远超越了日志。

部署架构

下图是该方案的部署架构,主要包括:

利用Heapster收集K8s的性能数据,包含CPU,Memory,Network,File System等

利用Heapster的Statsd Sink,发送数据到Splunk的Metrics Store

利用Splunk的搜索命令和仪表盘功能对性能数据进行监控

前期准备

前期主要要准备好两件事:

编译最新的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。所以需要自己编译。

mkdirmyheapstermkdirmyheapster/srcexportGOPATH=myheapstercdmyheapster/srcgitclonehttps://github.com/kubernetes/heapster.gitcdheapstermakecontainer

运行以上的命令来编译最新的heapster镜像。

注意,heapster缺省使用udp协议,如果想要使用tcp,需要修改代码

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

func(client*statsdClientImpl)open()error{varerrerrorclient.conn,err=net.Dial("udp",client.host)iferr!=nil{glog.Errorf("Failedtoopenstatsdclientconnection:%v",err)}else{glog.V(2).Infof("statsdclientconnectionopened:%+v",client.conn)}returnerr}

把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,参考这个文档

安装配置Heapster

在K8s上部署heapster比较容易,创建对应的yaml配置文件,然后用kubectl命令行创建就好了。

以下是Deployment和Service的配置文件:

deployment.yaml

apiVersion:extensions/v1beta1kind:Deploymentmetadata:name:heapsternamespace:kube-systemspec:replicas:1template:metadata:labels:task:monitoringk8s-app:heapsterversion:v6spec:containers:-name:heapsterimage:naughtytao/heapster-amd64:v1.5.0-beta.3imagePullPolicy:Alwayscommand:-/heapster---source=kubernetes:https://kubernetes.default---sink=statsd:udp://ip:port?numMetricsPerMsg=1

service.yaml

apiVersion:v1kind:Servicemetadata:labels:task:monitoring#ForuseasaClusteradd-on(https://github.com/kubernetes/kubernetes/tree/master/cluster/addons)#IfyouareNOTusingthisasanaddon,youshouldcommentoutthisline.kubernetes.io/cluster-service:'true'kubernetes.io/name:Heapstername:heapsternamespace:kube-systemspec:ports:-port:80targetPort:8082selector: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的日志如下

I011718:10:56.0547461heapster.go:78]/heapster--source=kubernetes:https://kubernetes.default--sink=statsd:udp://ec2-34-203-25-154.compute-1.amazonaws.com:8124?numMetricsPerMsg=10I011718:10:56.0547761heapster.go:79]Heapsterversionv1.5.0-beta.4I011718:10:56.0549631configs.go:61]UsingKubernetesclientwithmaster"https://kubernetes.default"andversionv1I011718:10:56.0549781configs.go:62]Usingkubeletport10255I011718:10:56.0762001driver.go:104]statsdmetricssinkusingconfiguration:{host:ec2-34-203-25-154.compute-1.amazonaws.com:8124prefix:numMetricsPerMsg:10protocolType:etsystatsdrenameLabels:map[]allowedLabels:map[]customizeLabel:0x15fc8c0}I011718:10:56.0762481driver.go:104]statsdmetricssinkusingconfiguration:{host:ec2-34-203-25-154.compute-1.amazonaws.com:8124prefix:numMetricsPerMsg:10protocolType:etsystatsdrenameLabels:map[]allowedLabels:map[]customizeLabel:0x15fc8c0}I011718:10:56.0762721heapster.go:202]StartingwithStatsDSinkI011718:10:56.0762811heapster.go:202]StartingwithMetricSinkI011718:10:56.0902291heapster.go:112]Startingheapsteronport8082在Splunk中进行监控

好了如果一切正常的化,heapster会用statsd的协议和格式发送metrics到Splunk的metrics store。

然后就可以用利用SPL的mstats和mcatalog命令来分析,监控metrics数据了。

以下搜索语句列出所有的Metrics

|mcatalogvalues(metric_name)

以下搜索语句列出整个cluster的CPU使用,我们可以用Area或者Line Chart来可视化搜索结果。

|mstatsavg(_value)WHEREmetric_name=cluster.cpu/usage_ratespan=30m

kube-system namespace的对应内存使用情况

|mstatsavg(_value)WHEREmetric_name=namespace.kube-system.memory/usagespan=30m

大家可以把自己感兴趣的分析结果放在Dashboard中,利用Realtime设置进行监控。


以上是“如何通过Splunk监控Kubernetes运行性能”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注亿速云行业资讯频道!