0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何利用Splunk最新的Metrics Store来对Kubernetes的集群进行性能监控

马哥Linux运维 来源:未知 作者:李倩 2018-04-28 09:28 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

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

部署架构

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

利用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。所以需要自己编译。

mkdir myheapstermkdir myheapster/srcexport GOPATH=myheapstercd myheapster/srcgit clone https://github.com/kubernetes/heapster.gitcd heapstermake 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,参考这个文档

安装配置Heapster

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

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

deployment.yaml

apiVersion: extensions/v1beta1kind: Deploymentmetadata: name: heapster namespace: kube-systemspec: 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: v1kind: Servicemetadata: 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-systemspec: 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=10I0117 18:10:56.054776 1 heapster.go:79] Heapster version v1.5.0-beta.4I0117 18:10:56.054963 1 configs.go:61] Using Kubernetes client with master "https://kubernetes.default" and version v1I0117 18:10:56.054978 1 configs.go:62] Using kubelet port 10255I0117 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 SinkI0117 18:10:56.076281 1 heapster.go:202] Starting with Metric SinkI0117 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)

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

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

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

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

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

好了,更多的分析选项可以参考Splunk文档。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222913
  • 数据收集
    +关注

    关注

    0

    文章

    73

    浏览量

    11679
  • kubernetes
    +关注

    关注

    0

    文章

    256

    浏览量

    9408

原文标题:使用Heapster和Splunk监控Kubernetes运行性能

文章出处:【微信号:magedu-Linux,微信公众号:马哥Linux运维】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    借助京东AI言犀提升Kubernetes集群巡检的效率和准确性

    介绍 目前k8s-cluster-inspector组件可以自动化完成Kubernetes集群巡检,并在巡检结果中给出当前集群存在的问题,问题分级,问题类型,问题解决方法。 示例巡检数据结构如下
    的头像 发表于 09-15 16:56 428次阅读
    借助京东AI言犀提升<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>巡检的效率和准确性

    Kubernetes安全加固的核心技术

    在生产环境中,Kubernetes集群的安全性直接关系到企业数据安全和业务稳定性。本文将从实战角度,带你掌握K8s安全加固的核心技术。
    的头像 发表于 08-18 11:18 498次阅读

    高效管理Kubernetes集群的实用技巧

    作为一名经验丰富的运维工程师,我深知在日常的Kubernetes集群管理中,熟练掌握kubectl命令是提升工作效率的关键。今天,我将分享15个经过实战检验的kubectl实用技巧,帮助你像艺术家一样优雅地管理K8s集群
    的头像 发表于 08-13 15:57 601次阅读

    基于eBPF的Kubernetes网络异常检测系统

    作为一名在云原生领域深耕多年的运维工程师,我见过太多因为网络问题导致的生产事故。传统的监控手段往往是事后诸葛亮,当你发现问题时,用户已经在抱怨了。今天,我将分享如何利用 eBPF 这一革命性技术,构建一套能够实时检测 Kubernete
    的头像 发表于 07-24 14:09 497次阅读

    Redis集群部署与性能优化实战

    Redis作为高性能的内存数据库,在现代互联网架构中扮演着关键角色。作为运维工程师,掌握Redis的部署、配置和优化技能至关重要。本文将从实战角度出发,详细介绍Redis集群的搭建、性能优化以及
    的头像 发表于 07-08 17:56 621次阅读

    性能计算集群在AI领域的应用前景

    的融合基础高性能计算是指使用超级计算机和计算集群进行高效的数据处理与分析。它可以处理大规模的数据集,并提供快速的计算能力,使得科学家和工程师能够在短时间内完成复杂的计
    的头像 发表于 06-23 13:07 1035次阅读
    高<b class='flag-5'>性能</b>计算<b class='flag-5'>集群</b>在AI领域的应用前景

    使用树莓派构建 Slurm 高性能计算集群:分步指南!

    在这篇文章中,我将分享我尝试使用树莓派构建Slurm高性能计算集群的经历。一段时间前,我开始使用这个集群作为测试平台,创建一个更大的、支持GPU计算的高
    的头像 发表于 06-17 16:27 1341次阅读
    使用树莓派构建 Slurm 高<b class='flag-5'>性能</b>计算<b class='flag-5'>集群</b>:分步指南!

    k8s网络的基本介绍

    Kubernetes网络是指在Kubernetes集群中不同组件之间进行通信和交互的网络架构。
    的头像 发表于 06-16 13:42 617次阅读

    MYSQL集群高可用和数据监控平台实现方案

    该项目共分为2个子项目,由MYSQL集群高可用和数据监控平台两部分组成。
    的头像 发表于 05-28 10:10 1081次阅读
    MYSQL<b class='flag-5'>集群</b>高可用和数据<b class='flag-5'>监控</b>平台实现方案

    Ubuntu K8s集群安全加固方案

    面,构建安全的Kubernetes环境。安全防护不应仅停留在单点措施,而应形成纵深防御体系,从物理主机到集群控制面再到应用层进行全面保护。在生产环境中,需确保所有安全配置均符合最小权限原则,并定期
    的头像 发表于 05-12 16:17 617次阅读

    Kubernetes Helm入门指南

    Helm 是 Kubernetes 的包管理工具,它允许开发者和系统管理员通过定义、打包和部署应用程序简化 Kubernetes 应用的管理工作。Helm 的出现是为了解决在 Kuberne
    的头像 发表于 04-30 13:42 2897次阅读
    <b class='flag-5'>Kubernetes</b> Helm入门指南

    k8s集群安全机制说明

    Kubernetes 作为一个分布式集群的管理工具,保证集群的安全性是其一个重要的任务。API Server 是集群内部各个组件通信的中介, 也是外部控制的入口。所以
    的头像 发表于 04-03 14:09 599次阅读

    如何在基于Arm Neoverse平台的CPU上构建分布式Kubernetes集群

    在本文中,我们将以 X(原 Twitter)为例,演示如何在基于 Arm Neoverse 平台的 CPU 上构建分布式 Kubernetes 集群,以根据推文实时监控情绪变化。如此一
    的头像 发表于 03-25 15:58 640次阅读
    如何在基于Arm Neoverse平台的CPU上构建分布式<b class='flag-5'>Kubernetes</b><b class='flag-5'>集群</b>

    Kubernetes中部署MySQL集群

    一般情况下 Kubernetes 可以通过 ReplicaSet 以一个 Pod 模板创建多个 pod 副本,但是它们都是无状态的,任何时候它们都可以被一个全新的 pod 替换。
    的头像 发表于 03-18 16:22 615次阅读
    <b class='flag-5'>Kubernetes</b>中部署MySQL<b class='flag-5'>集群</b>

    Kubernetes:构建高效的容器化应用平台

    Kubernetes 作为容器编排的事实标准,在容器化应用部署中发挥着关键作用。 搭建 Kubernetes 集群是应用的基础。可以使用kubeadm工具快速搭建。在主节点执行kubeadm
    的头像 发表于 01-23 15:22 575次阅读