监控类型
- 资源监控:cpu、内存、网络等。
- 性能监控:apm监控,一般是通过一些 Hook 的机制在,在虚拟机层、字节码执行层通过隐式调用,或者是在应用层显示注入,获取更深层次的一个监控指标,一般是用来应用的调优和诊断的。
- 安全监控:对安全进行的一系列的监控策略,类似像越权管理、安全漏洞扫描等。
- 事件监控:normal的事件变成-warning事件
Heapster
- 每一个 Kubernetes 节点上有一个 cadvisor,是负责数据采集的组件。当 cadvisor 把数据采集完成,Kubernetes 会把 cadvisor 采集到的数据进行包裹,暴露成相应的 API。以下是三种API接口
- summary接口
- kubelet接口
- Prometheus接口
- Heapster支持summary和kubelet接口,定期去节点拉取数据,然后暴露成service。
- k8s的dashboard或者hpa-controller获取到监控数据,实现相对应的弹性收缩等。
metrics-service取代了Heapster
- 需要采集更多其他的资源信息,但Heapster的可扩展性有限
- Heapster为了保证数据的离线能力,提供了很多sink,后期这些缺乏维护,导致Heapster项目出现了很多问题
Heapster架构
- core:上层是http和https向外暴露的API接口
- source:采集数据暴露的不同接口
- processor:数据转换及数据聚合
- sink:数据离线【influxdb、socket、factory、manager…】
Metrics-Service内部组成
- core
- source
- API
- API Registration:将相应的数据接口注册到k8s的API Server。用户通过API server访问API注册层,再到metrics-server
k8s监控接口标准
- resource metrice:资源监控,包含节点、pod、namespace、class,通过metrics.k8s.io接口获取到
- custom metrics:通过custom.metrics.k8s.io接口获取到,主要实现的Prometheus,提供的是资源监控和自定义监控(应用层自己定义,然后通过标准的Prometheus的client,暴露出相应的metrics,且被Prometheus采集)
- External metrics:获取云产品的监控指标
Promethues
- 很多开源项目以Prometheus作为监控标准
- 针对数据库和中间件,有对应的Prometheus采集客户端,比如说etcd、zookeeper、mysql和postgresql
- 数据采集链路
- push到gateway,Prometheus通过pull拉取数据,防止短时间数据业务漏采。因为pull有周期,如果周期时间大于任务运行时间,单纯直接从任务上pull会遗失数据
- 标准pull,直接去对应的数据任务上拉取数据
- Prometheus之间的数据同步
- 数据源配置
- 标准的静态配置
- 支持service discovery【配置annotation】
- Operator:Prometheus Operator 可能是目前所有 Operator 里面做的最复杂的,但是它里面也是把 Prometheus 这种动态能力做到淋漓尽致的一个 Operator,如果在 K8s 里面使用 Prometheus,比较推荐使用 Prometheus Operator 的方式来去进行部署和运维。
阿里的事件离线工具kube-events
日志
-
主机内核的日志
- 网栈的异常: iptables mark
- 驱动异常的日志
- 文件系统异常日志
- 节点异常,kernel panic 或者oom(out of memory)
-
Runtime的日志
- Docker的一些日志,排查类似像删除pod hang的问题
-
核心组件的日志
- 外置的中间件:数据库etcd、网络Ingress
- 内置的组件:API server、kube-scheduler、controller-manager、kubelet
-
应用日志
- 宿主机文件:日志文件写到宿主机,通过宿主机的日志轮转的策略进行日志的轮转,通过宿主机的agent进行采集
- 容器内文件:通过sidecar的streaming的container,转写到stdout,通过stdout写到相应的log-file,然后通过本地的日志轮转,以及外部的agent采集
- 容器标准/错误输出:agent采集stdout或者API获取数据
-
举例
- Fluentd在每个节点上起一个agent,agent会将数据汇聚到fluentd的server,server可以把数据离线到es,通过kibana展示
监控日志相关的四个产品
- sls:阿里云日志服务(数据采集LogHub、查询分析Search、数据仓库LogShipper)
- arms:应用性能监控(诊断和调优)
- ahas:架构感知监控
- cloud monitor:node和pod等监控指标的展现和告警
https://edu.aliyun.com/roadmap/cloudnative?spm=5176.13345299.1392477.3.641af1531kkPWm
测试题目
以下哪些是 Kubernetes 中常见的监控场景?(多选题)ABCD
- A. 资源监控
- B. 性能监控
- C. 安全监控
- D. 事件监控
从功能性的角度而言,Heapster 的 Sink 机制比 Metrics-Server 更强大。(单选题)A
- A. TRUE
- B. FALSE
Metrics-Server 的核心产生原因是为了实现监控接口的标准化。(单选题)A
- A. TRUE
- B. FALSE
以下哪个不是 Kubernetes 中的监控接口标准?(单选题)D
- A. Resource Metrics API
- B. Custom Metrics API
- C. External Metrics API
- D. Event Metrics API
kube-eventer 是一个开源的 Kubernetes 事件告警的工具,主要面向的场景是报警通道。(单选题) B
- A. TRUE
- B. FALSE
以下哪个不是 Prometheus 的优势?(单选题) A
- A. Prometheus 的采集性能优越
- B. Prometheus 的采集方式丰富
- C. Prometheus 的接入方式简单
- D. Prometheus的插件丰富
以下哪些是 Kubernetes 中日志的来源?(多选题)ABCD
- A. 核心组件
- B. Docker Engine
- C. 业务 Pod
- D. 系统内核日志
以下哪些是阿里云容器服务的监控方案内容?(多选题)ABCD
- A. 云监控
- B. ARMS 性能监控
- C. AHAS 架构感知监控
- D. 托管 Prometheus 资源监控
以下哪些是阿里云容器服务的日志方案的优势?(多选题)ABCD
- A. 丰富的数据采集方式
- B. 多种的数据展现与集成能力
- C. 数据分析与增值服务
- D. 开源场景的整合
监控和日志是大型分布式系统的基础设施,可以帮助开发者快速定位应用问题,调优性能。(单选题)A
- A. TRUE
- B. FALSE
相关概念:Hook
https://blog.csdn.net/qq_36381855/article/details/79962673
- 钩子(Hook):是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。
- 钩子的种类很多,每种钩子可以截获相应的消息,如键盘钩子可以截获键盘消息,外壳钩子可以截取、启动和关闭应用程序的消息等。钩子可以分为线程钩子和系统钩子,线程钩子可以监视指定线程的事件消息,系统钩子监视系统中的所有线程的事件消息。因为系统钩子会影响系统中所有的应用程序,所以钩子函数必须放在独立的动态链接库(DLL) 中。
相关概念:JVM GC
- JVM的内存空间,从大的层面上来分析包含:新生代空间(Young)和老年代空间(Old)。新生代空间(Young)又被分为2个部分(Eden区域、Survivous区域)和3个板块(1个Eden区域和2个Survivous区域)