容器云平台监控架构设计及优化.docx
《容器云平台监控架构设计及优化.docx》由会员分享,可在线阅读,更多相关《容器云平台监控架构设计及优化.docx(41页珍藏版)》请在三一办公上搜索。
1、1概述随着容器化的大力发展,容器云平台已经基本由Kubernetes作为统一的容器管理方案.当我们使用Kubernetes进行容器化管理时,传统监控工具如Zabbix无法对Kubernetes做到统一有效的全面监控,全面监控Kubernetes也就成为我们需要探索的问题.使用容器云监控,旨在全面监控Kubernetes集群、节点、服务、实例的统计数据,验证集群是否正常运行并创建相应告警.本文旨在于介绍容器云平台监控的架构设计及优化.2价值和意义监控是运维体系中是非常里要的组成部分,通过监控可以实时掌握系统运行状态.对故障提前预警.以及历史状态的回放,还可以通过监控数据为系统的容最规划提供辅助决
2、策,为系统性能优化提供真实的用户行为和体验.为容器云提供良好的监控环境是保证容器服务的高可鸵性、高可用性和高性能的重要部分,通过对本文的学习,能够快速认识当前容器环境下都有哪些监控方案,并对主流的监控方案有一个系统的了解和认识.3监控方案选型3.1容器云监控方案有嘟些(1)ZabbixZabbix是由AlexeiVladishev开源的分布式监控系统,支持多种采集方式和采集客户端,同时支持SNMP、IPM1.JMX、Telnet,SSH等多种协议,它将采集到的数据存放到数据库中,然后对其进行分析整理,如果符合告警规则,则触发相应的告瞥.Zabbix核心组件主要是Agent和Server,其中A
3、gent主要负责采集数据并通过主动或者被动的方式采集数据发送到ServerProy,除此之外,为了扩展监控项,Agent还支持执行自定义脚本.Server主要负责接收Agent发送的监控信息.并进行汇总存储,触发告瞥等。ZabbixSerVer将收集的监控数据存储到ZabbixDatabase中。ZabbiXDatabase支持常用的关系型数据座,如MySQ1.、P。StgreSQ1.、Orade等,默认是MySQ1.并提供ZabbixWeb页面(PHP编写)数据直询.Zabbix由于使用了关系型数据存储时序数据,所以在监控大规模集群时常常在数据存储方面捉襟见肘.所以从Zabbix4.2版本后
4、开始支持TimescaIeDB时序数据库,不过目前成熟度还不高。(2)Open-FalconOpen-Falcon是小米开源的企业级监控工具,用Go语言开发而成,包括小米、滴滴、美团等在内的互联网公司都在使用它,是一款灵活、可扩展并且高性能的监控方案,主要组件包括了:1 )Falcon-agent是用Go语言开发的Daemon程序,运行在每台1.inUX服务器上,用于采集主机上的各种指标数据,主要包括CPU、内存、碳盘、文件系统、内核参数、Socket连接等,目前已经支持200多项监控指标。并且,Agent支持用户自定义的监控脚本.2 )Hearthbeatserver简称HBS心跳服务,每个
5、Agent都会周期性地通过RPC方式将自己的状态上报给HBS,主要包括主机名、主机IP、Agent版本和插件版本,Agent还会从HBS获取自己需要执行的采集任务和自定义插件.3 )Transfer负责接收Agent发送的监控数据,并对数据进行整理,在过混后通过一致性Hash算法发送到JUdge或者Graph.4 )Graph是基于RRD的数据上报、归档、存储组件。Graph在收到数据以后,会以rrdtool的数据归档方式来存储,同时提供RPC方式的监控查询接口.5 JJudge告警模块,Transfer祷发到Judge的数据会发用户设定的告警规则,如果满足,则会触发邮件、微佶或者回调接口。这
6、里为了避免电宣告警引入了Redis哲存告警,从而完成告警的合并和抑制.6 )Dashboard是面向用户的监控数据直询和告警配署界面.(3)NagiosNagiosN名为NetSaint,由EthanGalstad开发并维护。Nagios是一个老牌监控工具,由C语言编写而成,主要针对主机监控(CPU、内存、磁盘等)和网络监控(SMTP、PoP3、HTTP和NNTP等),当然也支持用户自定义的监控脚本.它还支持一种更加通用和安全的采集方式NREP(NagiosRemotePluginExecutor),它首先在远端启动一个NREP守护进程,用于在远端主机上面运行检测命令,在Nagios服务端用c
7、hecknrep的plugin插件通过SS1.对接到NREP守护进程执行相应的监控行为.相比SSH远程执行命令的方式,这种方式更加安全.(4)PrometheusPrometheus是一个很受欢迎的开源监控和警报工具包,继Kubernetes之后成为第二个正式加入CNCF基金会的项目,2017年底发布了基于全新存储层的2.0版本,能更好地与容器云平台配合.能实现dockerstatus.CAdvisor的监控功能,并且Prometheus原生支持Kubernetes监控,具有Kubernetes对象服务发现能力,Kubernetes的核心组件也提供了Prometheus的采集接口.单个Prom
8、etheus可以每秒抓取10万的metrics,能满足一定规模下k8s集群的监控需求,并且具备良好的三11旬能力,提供数据声询语言PromQ1.,PromQ1.提供了大量的数据计凭函数,大部分情况下用户都可以直接通过PromQ1.从Prometheus里直询到需要的聚合数据.3.2方案对比并确定通过以下方面对上述监控方案进行对比:1 )从开发语言上看,为了应对高并发和快速迭代的需求,监控系统的开发语言已经慢慢从C语言转移到G。.不得不说,Go凭借简洁的语法和优雅的并发/Java占据业务开发,C占领底层开发的情况下,准确定位中间件开发需求,在当前开源中间件产品中被广泛应用.2 )从系统成熟度上看
9、,Zabbix和Nagios都是老牌的监控系统,系统功能比较稳定,成熟度较高.而Prometheus和OPen-FaICon都是最近几年才诞生的,虽然功能还在不断迭代更新,但站在巨人的肩膀之上,在架构设计上借鉴了很多老牌监控系统的经脸.3 )从系统扩展性方面看,Zabbix和OPen-FalCon都可以自定义各种监控脚本,并且Zabbix不仅可以做到主动推送,还可以做到被动拉取,Prometheus则定义了一套监控数据规范,并通过各种exporter扩展系统采集能力.4 )从数据存储方面来看,Zabbix采用关系数据库保存,这极大限制了Zabbix采集的性能,Nagios和OPen-FaICO
10、n都采用RDD数据存储,OPen-FaICOn还加入了一致性hash算法分片数据,并且可以对接到OPenTSDB,而Prometheus自研一套高性能的时序数据库,在V3版本可以达到每秒千万级别的数据存储,通过对接第三方时序数据库扩展历史数据的存储.5 )从配置复杂度上看,Prometheus只有一个核心server组件,一条命令便可以启动,相比而言,其他系统配置相对麻烦,尤其是OPen-FaIcon.6 )从社区活跃度上看,目前Zabbix和Nagios的社区活跃度比蛟低,尤其是Nagios,Open-Falcon虽然也比较活跃,但基本都是国内的公司参与,Prometheus在这方面占据绝对
11、优势社区活跃度最高,并且受到CNCF的支持,后期的发展值得期待.7 )从容器支持角度看,由于ZabbiX和Nagi。S出现得比较早,当时容器还没有诞生,自然对容器的支持也比较差。Open-Falcon虽然提供了容器的监控,但支持力度有限.Prometheus的动态发现机制,不仅可以支持swarm原生集群,还支持KUberneteS容器集群的监控,是目前容器监控最好解决方案.Zabbix在传统监控系统中,尤其是在服务器相关监控方面,占据绝对优势。而Nagi。S则在网络监控方面有广泛应用,伴RS若容器的发展,Prometheus开始成为主导及容器监控方面的标配,并且在未来可见的时间内被广泛应用。息
12、体来说,对比各种监控系统的优劣,Prometheus可以说是目前监控领域最律利的“瑞士军刀”了.4基于prometheus的容器云平台监控架构设计4.1 prometheus介绍Prometheus是由SoundCIoud开发的开源监控报警系统和时序列数据库.于2016年加入CloudNativeComputingFoundation,作为继Kubernetes之后的第二个托管项目,具有强大的数据采集、数据存储、数据展示、告警等功能,天生完美支持kubernetes.主要特点:多维数据模型:通过度员名称和键值对标识的时间序列数据PromSQ1.:一种灵活的直询语言,可以利用多睚数据完成复杂的直
13、询不依赖分布式存储,单个服务器节点可直接工作基于HTTP的pull方式采集时间序列数据推送时间序列数据通过PUShGateWay组件支持通过服务发现或饰态配置发现目标多种图形模式及仪表盘支持组件:Prometheus生态包括了很多组件,它们中的一些是可选的Prometheus主服务器,用于抓取和存储时间序列数据用于检测应用程序代码的客户端库用于支持短声明周期的push网关针对HAProxy,StatsD,Graphite,Snmp等服务的特定exporters警告管理器各种支持工具多数PrometheUS组件是Go语言写的,这使得这些组件很容易编译和部罟.4.2 架构设计(1)图片左侧是各种数
14、据源主要是各种符合Prometheus数据格式的exporter,除此之外为了支持推动数据类型的Agent,可以通过Pushgateway组件旃Push转化为Pull.Prometheus甚至可以从其它的Prometheus获取数据,组建联邦集群。Prometheus的基本原理是通过HTTP周期性抓取被监控组件的状态,任意组件只要提供对应的HTTP接口并且符合Prometheus定义的数据格式,就可以接入Prometheus监控.(2)图片上侧是服务发现,Prometheus支持监控对象的自动发现机制,从而可以动态获取监控对象.(3)图片中间是PrometheusServer,Retrieva
15、l模块定时拉取数据,并通过Storage模块保存数据。PromQ1.为Prometheus提供的直询语法,PromQ1.模块通过解析语法树,调用Storage模块迨询接口获取监控数据.(4)图片右侧是告警和页面展现,Prometheus将告警推送到alertmanger,然后通过alertmanger对告警进行处理并执行相应动作.数据展现除了Prometheus自带的webui,还可以通过grafana等组件查询Prometheus监控数据.Prometheus支持使用联邦集群的方式,对Prometheus进行扩展。如图,在每个集群(数据中心)部海单独的Prometheus,用于采集当前集群(
16、数据中心)监控数据,并由上层的PrOmetheUS负责聚合多个集群(数据中心)的监控数据.这里部署多个联邦节点是为了实现高可用.联邦集群的核心在于每一个Prometheus都包含一个用于获取当前实例中监控样本的接口/federate。对于联邦Prometheus而言,无论是从其他的Prometheus实例还是Exporter实例中获取数据实际上并没有任何差异.适用场景:Prometheus在记录纯数字时间序列方面表现非常好.既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现流行的微服务,Prometheus的多维度数据收集和数据筛选迨询语言也是非常的强大.Prome
17、theus是为服务的可靠性而设计的,当服务出现故障时,可以快速定位和诊断问题.搭建过程对硬件和服务没有很强的依赖关系.不适用场景:(1)如果需要100%的准确度(例如按请求计赛).Prometheus不是一个好的选择,因为收集的数据可能不够详细和完整.在这种情况下,最好使用其他系统来收集和分析数据以进行计斐,并使用PrometheUS进行其余监控.(2)PrometheUS只针对性能和可用性监控,默认并不具备日志监控等功能.(3)Prometheus认为只有最近的监控数据才有直询的需要,本地存储的设计初衷只是保持短期(一个月)的数据,并非针对大JS的历史数据的存储.如果需要报表之类的历史数据,
18、则建议使用远端存储.(4)PrometheUS没有定义单位,需要使用者自己去区分或者事先定义好监控数据单位.4.3 监控点有哪些从容器云平台本身的业务需求分析来看,至少应该通过Prometheus获取到以下监控数据:性能指标:(1)容器相关的性能指标数据container.cp.utilization:容器的CPU使用率container.memory.utilization:容器的memory使用率(2)Pod相关的性能指标数据pod.cpu.utilization:pod的CPU使用率pod.memory.utilization:pod的memory使用率(3)主机Node节点相关的性能指
19、标数据node.cpu.utilization:主机的CPU使用率node.memory.utilization:主机的memory使用率node.load.l:主机过去1分钟的负载node.load.5:主机过去5分钟的负载node.load.15:主机过去15分钟的负载node.resource.request.cpu.utilization:主机的kubernetescpuresource使用率node.resource.request.memory.utilization:主机的kubernetesmemoryresource使用率服务健康状态:(1)KUberneteS集群服务的健康
20、状态ControlPlaneUP:G群健康状态(2)KUberneteS服务组件的健康状态APIServerUP:APIServer状态ControllerManagerUP:ControllerManager状态SchedulersUP:Schedulers状态KubeletUP:kubelet状态Kube-proxyUP:KUbe-PrOXy状态(3)主机Node节点的健康状态NodeUP:node节点的状态(4)docker服务进程的健康状态DockerUP:DOCker状态(5)DePIOyment相关的健康状态DeploymentReplicas:deployment副本数(6)Po
21、d的健康状态PodReady:pod的状态下面选取以上指标中的部分进行举例:容器cpu使用率:COntaineJCPU_USeJSeCOndS_totalContaineJname=jenkins”,endpoint=https-metrics,instance=192.168.234.122:10250job=epose-kubelets-metrics,namespace=kube-os,node=nodel,pod-name=jenkins2-696b8fbdbb-hd9hmservice=expose-kubelets-metries主机过去5分钟的负载:node-load5endpo
22、int=metrics,host,ip=192.168.234.121,instance=192.168.234.121:9796,job=expose-node-metrics,namespace=,cattle-prometheus,node=master,pod=exporter-node-cluster-monitoring-b4m72*,service=epose-node-metrics,Deployment副本数:kube_deployment_spec_replicasdeployment=coredns,endpoint=http,host.ip=192.168.234.12
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 容器 平台 监控 架构 设计 优化

链接地址:https://www.31ppt.com/p-7207742.html