DockOne微信分享(一三七):Kubernetes主机和容器的监控方案

  • 时间:
  • 浏览:3

c、kubelet选项在启动kubelete以前,启动cAdvisor,cAdvisor当前总要只支持http接口法律妙招,被监控的容器应用前要提供http接口,而是能力较弱。在Kubernetes的新版本中随后 集成了cAdvisor,而是在Kubernetes架构下,不前要单独再去安装cAdvisor,还前要直接使用节点的IP加默认端口4194就还前要直接访问cAdvisor的监控面板。UI界面如下:

只需在宿主机上部署cAdvisor容器,用户就可通过Web界面或REST服务访问当前节点和容器的性能数据(CPU、内存、网络、磁盘、文件系统等等),非常全部。它的运行法律妙招总要多种:a、直接下载命令运行下载地址:https://github.com/google/cadvisor/releases/latest格式: nohup /root/cadvisor -port=500&>>/var/log/kubernetes/cadvisor.log &访问: http://ip:500/

以上内容根据2017年07月27日晚微信群分享内容分发。分享人李强,有容云后端开发工程师。有着多年的服务器、网络、容器、虚拟化等云计算技术相关工作经验,现主要负责Kubernetes安装、集群、监控等相关的后台研发工作。 DockOne每周总要组织定向的技术分享,欢迎感兴趣的同学加微信:liyingjiesa,进群参与,您有想听话语题随后 想分享话语题都还前要给村里人 都儿留言。

将所哪些地方地方地方虚拟网卡对应的rx_bytes累加得到该容器的rx_bytes。将所哪些地方地方地方虚拟网卡对应的tx_bytes累加得到该容器的tx_bytes。DockerStats计算Network IO数据的算法:NETI = rx_bytesNETO = tx_bytes

容器的监控方案

单台主机容器监控

1、 Docker Stats

Heapster是一个多多 分发者,将每个Node上的cAdvisor的数据进行汇总,随后 导到InfluxDB。Heapster的前提是使用cAdvisor分发每个Node上主机和容器资源的使用情况报告,再将所有Node上的数据进行聚合,另一个多多 不仅还前要就看Kubernetes集群的资源情况报告,还还前要分别查看每个node/namespace及每个node/namespace下Pod的资源情况报告。另一个多多 就还前要从Cluster、Node、Pod的各个层面提供全部的资源使用情况报告。

Kubernetes中主机监控方案

Prometheus

DockerStats计算CPU Percent的算法:cpu_delta = cpu_total_usage - pre_cpu_total_usage;system_delta = system_usage - pre_system_usage;CPU% = ((cpu_delta / system_delta) * length(per_cpu_usage_array) ) * 50.0。

Memory数据

读取/sys/fs/cgroup/memory/docker/[containerId]/memory.usage_in_bytes的值,作为 mem_usage;随后 容器限制了内存,则读取/sys/fs/cgroup/memory/docker/ [id]/memory.limit_in_bytes作为mem_limit,随后 mem_limit = machine_mem;docker stats计算 Memory数据的算法:

常用的计算公式:real_used = used_mem - buffer - cachereal_free = free_mem + buffer + cachetotal_mem = used_mem + free_mem

Network数据

/proc/net/dev保存着有关网络的数据,如计算一段时间sec秒内的网络平均流量:

还前要根据哪些地方地方数据分别计算出CPU、内存、网络等资源的使用随后 占用情况报告。

Kubernetes上的监控

容器的监控

在Kubernetes监控生态中,一般是如下的搭配使用:

另一个多多 就还前要查看每个容器的CPU利用率、内存的使用量以及可用内存总量。请注意,让我这样 限制容器内存,这样 该命令将显示您的主机的内存总量。但它无须原困你的每个容器都能访问这样 多的内存。另外,还还前要就看容器通过网络发送和接收的数据总量其实 还前要很直观地就看每个容器的资源使用情况报告,随后 显示的随后 一个多多 当前值,无须能就看变化趋势。2、Google的cAdvisor是另一个多多 知名的开源容器监控工具:

原文发布时间为:2017-08-17

MEMUSAGE = mem_usageMEMLIMIT = mem_limitMEM% = (mem_usage / mem_limit) * 50.0

Network Stats数据

获取属于该容器networknamespace veth pairs在主机中对应的veth*虚拟网卡EthInterface数组,随后 循环数组中每个网卡设备,读取/sys/class/net/[device]/statistics/rx_bytes得到rx_bytes, 读取/sys/class/net/[device]/statistics/tx_bytes得到对应的tx_bytes。

运行:

docker run -d --volume=/:/rootfs:ro--volume=/var/run:/var/run:rw –volume=/sys:/sys:ro       --volume=/var/lib/docker/:/var/lib/docker:ro--publish=5050:5050  --name=cadvisor                      index.alauda.cn/googlelib/cadvisor:latest

获取Metrics数据http://ip:950/metrics

本文来自云栖社区商务协作伙伴Dockerone.io,了解相关信息还前要关注Dockerone.io。

使用top命令还前要查看当前CPU使用情况报告,源文件来自/proc/stat采样一个多多 足够短的时间间隔的CPU快照,分别记作t1、t2,其中t1、t2的特性均为:(user、nice、system、idle、iowait、irq、softirq、stealstolen、guest)的9元组;a)计算总的CPU时间片totalCpuTime把第一次的所有CPU使用情况报告求和,得到s1;把第二次的所有CPU使用情况报告求和,得到s2;s2 - s1得到你你这名 时间间隔内的所有时间片,即totalCpuTime = j2 - j1;b)计算空闲时间idleidle对应第四列的数据,用第二次的第四列 - 第一次的第四列即可idle = 第二次的第四列 - 第一次的第四列c)计算CPU使用率PCPU = 50* (total-idle)/total

Linux内存监控

使用free命令还前要查看当前内存使用情况报告,其数据来源是来自/proc/meminfo文件。

首先是容器本身资源使用情况报告:CPU,内存,网络,磁盘物理机的资源使用情况报告:CPU,内存,网络,磁盘物理机上容器镜像情况报告:名字,大小,版本。

主机的监控

1、CPU数据

cAdvisor的API接口返回的数据特性如下:

cAdivsor其实 能分发到监控数据,总要很好的界面展示,随后 无须能显示跨主机的监控数据,当主机多的情况报告,前要有本身集中式的管理法律妙招将数据进行汇总展示,最经典的方案随后 cAdvisor + InfluxDB + Grafana,还前要在每台主机上运行一个多多 cAdvisor容器负责数据分发,再将分发后的数据都存到时序型数据库InfluxDB中,再通过图形展示工具Grafana定制展示面板。在顶端的安装步骤中,先是启动InfluxDB容器,随后 进行到容器内控 配置一个多多 数据库给cAdvisor专用,随后 再启动cAdvisor容器,容器启动的以前指定把数据存储到InfluxDB中,最后启动Grafana容器,在展示页面里配置Grafana的数据源为InfluxDB,再定制要展示的数据,一个多多 简单的跨多主机的监控系统就构建成功了。2、Kubernetes——Heapster + InfluxDB + Grafana:Heapster:在Kubernetes集群中获取Metrics和事件数据,写入InfluxDB,Heapster分发的数据比cAdvisor多,却全,随后 存储在InfluxDB的也少。InfluxDB:时序数据库,提供数据的存储,存储在指定的目录下。Grafana:提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展示。

该法律妙招实际是通过对cgroup中相关数据进行取值从而计算得到。其数据来源是/sys/fs/cgroup。DockerClient相关代码入口可参考:/docker/docker/api/client/stats.go#141DockerDaemon相关代码入口可参考:/docker/docker/daemon/daemon.go#1474

CPU数据

DockerDaemon会记录这次读取/sys/fs/cgroup/cpuacct/docker/ [containerId]/cpuacct.usage的值,作为cpu_total_usage;并记录了上一次读取的该值为pre_cpu_total_usage;读取/proc/stat中cpu field value,并进行累加,得到system_usage;并 记录上一次的值为pre_system_usage;读取/sys/fs/cgroup/cpuacct/docker/ [containerId]/cpuacct.usage_percpu中的记录,组成数组per_cpu_usage_array;

1、cAdvisor + InfluxDB + Grafana:Cadvisor:将数据,写入InfluxDBInfluxDB :时序数据库,提供数据的存储,存储在指定的目录下Grafana :提供了WEB控制台,自定义查询指标,从InfluxDB查询数据,并展示。

返回的数据特性总要Json格式,随后 要使用该接口返回的数据,还前要通过正则匹配,匹配出前要的数据,随后 在保存到数据库中。2、部署Prometheus和GrafanaPrometheus通过配置文件发现新的节点,文件路径是/sd/*.json,还前要通过修改已有的配置文件,打上去新的节点纳入监控,命令如下:

#kubectl create -f prometheus-file-sd.yaml

Prometheus是个集DB、Graph、Statistics、Alert 于一体的监控工具,安装也非常简单,下载包后做些参数的配置,比如监控的对象就还前要运行了,默认通过9090端口访问。1、部署node-exporter容器node-exporter要在集群的每台主机上部署,使用主机网络,端口是950 随后 有多个Kubernetes集群,则要在多个集群上部署,部署node-exporter的命令如下:

#kubectl create -f node-exporter-deamonset.yaml

本文作者:李强

随后 cAdvisor默认是将数据缓处于内存中,在显示界面上要能显示1分钟左右的趋势,而是历史的数据还是要能就看,但它也提供不同的持久化存储后端,比如InfluxDB等,一同也还前要根据业务的需求,只利用cAdvisor提供的API接口,定时去获取数据存储到数据库中,随后 定制你这名 人的界面。如前要通过cAdvisor查看某台主机上某个容器的性能数据只前要调用:

http://<host_ip>:4194/v1.3/subcontainers/docker/<container_id>

单台主机上容器的监控实现最简单的法律妙招随后 使用命令Docker Stats,就还前要显示所有容器的资源使用情况报告。

4、 另外还前要配置Grafana展示Prometheus输出的监控数据,配置仪表盘等。Grafana访问地址是:http://192.168.xxx.xxx:31331,账号:admin 密码:admin。:系统预置了几次常用监控仪表盘配置,更多的配置还前要到官方网站下载。

监控工具的对比

以上从几次典型的架构上介绍了你这名 监控,但都总要最优实践。前要根据生产环境的特点结合每个监控产品的优势来达到监控的目的。比如Grafana的图表展示能力强,随后 这样 告警的功能,这样 还前要结合Prometheus在数据出理 能力改善数据分析的展示。下面列了你这名 监控产品,但并总要严格按表格进行分类,比如Prometheus和Zabbix总要分发,展示,告警的功能。都还前要了解一下,各取所长。

今天分享的内容主要随后 哪些地方地方,有不懂的地方随后 有讲错的地方欢迎村里人 都儿提出,谢谢村里人 都儿。

Q&A

Q:容器监控和主机监控为什么会么会要能用同一套方案,比如Prometheus?

infirst = $(awk'/'$eth'/{print $1 }' /proc/net/dev |sed 's/'$eth'://')outfirst = $(awk'/'$eth'/{print $10 }' /proc/net/dev)sumfirst = $(($infirst+$outfirst))sleep$sec"s"inend = $(awk'/'$eth'/{print $1 }' /proc/net/dev |sed 's/'$eth'://')outend = $(awk'/'$eth'/{print $10 }' /proc/net/dev)sumend = $(($inend+$outend))sum = $(($sumend-$sumfirst))aver = $(($sum/$sec))

Docker的监控

Docker自身提供了本身内存监控的法律妙招,即还前要通过docker stats对容器内存进行监控。

b、以容器法律妙招运行

docker pullindex.alauda.cn/googlelib/cadvisor

A:cAdvisor还前要对Pod进行监控,随后 想查原困,还前要对日志进行监控和分析。Q6:Grafana 4.0以上也支持告警了,请问Kubernetes告警方案哪些地方地方推荐?

A:还前要使用Prometheus、Icinga、Zabbix的告警功能。
Q:cAdvisor的分发粒度是多长时间?当前要分发秒级的性能数据时cAdvisor算不算能满足要求?

原文标题:DockOne微信分享(一三七):Kubernetes主机和容器的监控方案

【3 天烧脑式基于Docker的CI/CD实战训练营 | 北京站】本次培训围绕基于Docker的CI/CD实战展开,具体内容包括:持续集成与持续交付(CI/CD)概览;持续集成系统介绍;客户端与服务端的 CI/CD 实践;开发流程中引入 CI、CD;Gitlab 和 CI、CD 工具;Gitlab CI、Drone 的使用以及实践经验分享等。今天很高兴能和村里人 都儿一同交流和分享在工作中的你这名 经验和总结。都知道监控在运维体系乃至产品的整个生命中期总要重要的一个多多 环节,针对不同的应用场景,监控方案也会有很大的不同。本次就和村里人 都儿分享一下我在开发村里人 都儿公司新产品ufleet的监控模块时的你这名 技术总结,随后 有错误的地方,欢迎村里人 都儿指出。一个多多 全部的监控体系包括:分发数据、分析存储数据、展示数据、告警以及自动化出理 、监控工具自身的安全机制,接下来会对数据的分发和监控原理深入讲解,你这名 每种会在你这名 架构中穿插讲解。

数据的分发法律妙招

命令行法律妙招

比如在Linux系统上使用top,vmstat,netstat写你这名 shell脚本进行数据的分发,再把数据存储在文本文件中进行出理 。

3、查看Prometheus监控的节点Prometheus的访问地址是:http://192.168.xxx.xxx:31350,通过网页查看监控的节点Status --> Targets