Kubernetes 监控与日志记录实战指南
1. 监控基础设施
在考虑应用程序的运行环境以及它与其他组件和用户的交互方式时,我们需要监控的主要对象是应用程序主机和连接网络。
对于主机监控,通常由监控框架提供的代理来执行收集任务。这些代理会提取并发送有关主机的综合指标,如负载、磁盘、连接或其他进程统计信息,帮助我们确定主机的健康状况。
网络方面,可能涉及同一主机上的 Web 服务器软件和网络接口,也许还有负载均衡器,甚至是像 Istio 这样的平台。一般来说,我们要测量的网络指标包括流量、延迟和错误。
2. 监控外部依赖
除了主机和网络,我们还需要检查依赖组件的状态,例如外部存储的利用率或队列的消费率。以一个订阅队列作为输入并执行任务的应用程序为例,我们需要关注队列长度和消费率等指标。如果消费率低且队列长度持续增长,应用程序可能会出现问题。
对于 Kubernetes 上的容器,虽然在主机上运行容器类似于运行进程,但由于 Kubernetes 上的容器与传统主机上的容器在资源利用方式上存在细微差别,我们需要调整监控策略。不能仅以主机为中心进行监控,还应在监控栈中添加容器层,同时也要考虑 Kubernetes 这个基础设施本身。
3. 监控容器
容器本质上是程序和依赖运行时库的轻量级包装,因此在容器级别收集的指标与容器主机上的指标相似,特别是在系统资源使用方面。虽然从容器和主机收集这些指标看似冗余,但实际上可以帮助我们解决监控移动容器的问题。我们可以为指标附加逻辑信息,如 Pod 标签或控制器名称,这样来自不同主机的容器指标就可以有意义地分组。
另外,与