可观测性:监控与日志
Posted 果子哥丶
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了可观测性:监控与日志相关的知识,希望对你有一定的参考价值。
1、监控
监控类型
- 资源监控: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项目出现了很多问题
- Metrics-Server 的核心产生原因是为了实现监控接口的标准化。
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 的方式来去进行部署和运维。
2、日志
日志
- 主机内核的日志
- 网栈的异常: 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展示
以上是关于可观测性:监控与日志的主要内容,如果未能解决你的问题,请参考以下文章
云原生动态周报 | CNCF发布主题为“可观测性”的最终用户技术雷达