阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

细说利用Splunk监控Kubernetes运行性能

38次阅读
没有评论

共计 4101 个字符,预计需要花费 11 分钟才能阅读完成。

导读 Kubernetes 已经成为容器编排的事实上的王者,连 Docker 都已经向 K8s 女王大人低头。对于 Kubernetes 的 cluster 的数据收集和监控已经成为 IT 运维的一个重要话题。我们今天来看一看如何利用 Splunk 最新的 Metrics Store 来对 Kubernetes 的集群进行性能监控。
部署架构

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

利用 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 文档。

阿里云 2 核 2G 服务器 3M 带宽 61 元 1 年,有高配

腾讯云新客低至 82 元 / 年,老客户 99 元 / 年

代金券:在阿里云专用满减优惠券

正文完
星哥说事-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2024-07-27发表,共计4101字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中