【公开课】Kubernetes 日志采集与监控告警

【百度云原生导读】本节课是 Kubernetes 入门课程的最后一课,关注『云原生计算』公众号,回复"k8s",获取课程配套pdf。html

本节课主要分为如下四个部分:docker

1.  容器日志采集与管理后端

     Kubernetes 日志处理方案api

2. 容器监控指标的采集与管理安全

    以Prometheus 为核心的统一监控方案微信

3. Demo网络

   演示云原生环境日志采集与指标监控架构

4. 总结运维

    总结日志采集与指标监控要点ide

 

1. 容器日志采集与管理

 

日志采集场景

 

日志采集场景主要分为如下四种:

 

集群核心组件日志:
审计须要 kube-apiserver 日志,诊断调度须要 kube-scheduler 日志,接入层流量分析须要 Ingress 日志。

 

主机内核日志:

内核日志能够用于帮助开发及运维同窗诊断影响节点稳定的异常,如:文件系统异常,网络栈异常,设备驱动异常等。

 

应用运行时日志:

Docker 是最多见的容器运行时,能够利用 Docker 和 Kubelet 日志排查 Pod 建立和启动失败等问题。

 

业务应用日志:

经过分析业务的运行日志分析和观察业务状态,诊断异常。

 

日志采集指标

 

Kubernetes 对容器日志的指望处理方式为:集群级日志处理(cluster-level-logging)

即:与容器、Pod、节点生命周期彻底无关。

 

对于一个容器,当应用将日志输出到 stdout 和 stderr 后,docker 默认将这些日志输出到宿主机上一个 JSON 文件中。

日志采集方式

 

Kubernetes 自己并不会对用户进行任何的日志搜集工做。为了实现集群级日志处理,须要在集群前,提早对日志采集管理进行方案规划。

 

Kubernetes 自己推荐3种日志方案。

 

日志采集方式1:使用节点级日志代理

核心是 logging-agent (fluentd,etc );

Logging-agent 以 DaemonSet 方式运行在节点上;

挂载宿主机上的容器日志目录;

转发日志至后端存储(ElasticSearch, etc);

 

优势:对应用和Pod彻底无侵入,一个节点仅需部署一个 agent。

缺点:要求应用日志直接输出至容器的 stdout 和 stderr。

 

日志采集方式2:使用 sidecar 容器和日志代理

容器所有或部分日志输出到文件

一个或多个 sidecar 容器将应用程序日志传送到本身的 stdout 和 stderr。

 

优势:可以继续使用日志采集方式1。

缺点:成倍增长磁盘占用,形成浪费。(应用和sidecar容器写入两份相同日志文件)

 

日志采集方式3:使用具备日志代理功能的 sidecar 容器

至关于将 logging-agent 直接集成进 Pod。

应用和输出日志至 stdout&stderr 或文件。

Logging-agent 的输入源为应用日志文件。

 

 

优势:部署简单,对宿主机友好。

缺点:1. Sidecar 容器可能消耗较多资源,甚至拖挂应用容器。

           2. 没法使用 kubectl logs 命令查看容器日志。

 

总结:

实现集群级日志采集的三种方式:

  1. 使用节点级日志代理。

  2. 使用 sidecar 容器和日志代理。

  3. 使用具备日志代理功能的 sidecar 容器。

 

建议:使用方案1,将应用日志输出到 stdout&stderr,经过宿主机上直接部署logging-agent 的方式集中处理日志。

  1. 管理简单。

  2. 可使用 kubectl logs 命令查看日志。

  3. 宿主机自己可能已有 rstlogd 等成熟日志收集组件可以使用。

     

选型推荐

 

 

2. 容器监控指标的采集与管理

 

监控场景

 

从监控类型划分,可分为如下几个场景:

 

资源监控:

CPU,内存,网络等资源类指标,常以数值,百分比为单位进行统计,是最多见的资源监控方式。

 

性能监控:

应用的内部监控。一般是 Hock 机制在虚拟机层,字节码执行层隐式回调,或者在应用层显式注入,获取更深层次的监控指标,经常使用来应用诊断与调优。

 

好比 Jvm 经过 Hock 机制,拿到相似 Jvm 里面的垃圾回收的次数,各类内存带的分布以及网络链接数的一些指标。经过这样的方式来进行应用的诊断与调优。

 

安全监控:

针对安全进行一系列监控策略,例如越权管理,安全漏洞扫描等。

 

事件监控:

Kubernetes 中特有的监控方式,贴合 Kubernetes 设计理念,做为常规监控方案的补充。

 

为何说事件监控贴合 Kubernetes 设计理念呢?这是由于 Kubernetes 其中一个设计理念就是基于状态机的状态转换。从正常状态转换成另外一个状态的时候,会发生一个 Normal 级别的事件(也就是正常的事件)而从一个正常状态转换成异常状态时,平台会触发一个 Warning 级别(也就是警告级别的事件)一般,Warning 级别的事件是咱们关心的事件。

 

而事件监控就能够把 Normal 级别的事件或 Warning 级别的事件离线存储到数据中心,而后经过数据中心的分析与报警,将相应的异常经过短信,邮件的方式暴露,弥补常规监控的弊端。

 

Prometheus 的起源及现状

 

Prometheus 与 Kubernetes 同样,来自于 Borg 体系。原型叫作 BorgMon,是与Borg同时诞生的内部监控系统。而Prometheus项目发起的缘由也与Kubernetes 相似,但愿经过对用户更友好的方式,将 Google 内部系统的设计理念传递给开发者和用户。

 

Kubernetes 监控体系曾经很是繁杂,但今天已经演变成了以 Prometheus 为核心的一套统一的方案。

 

Prometheus 的架构与工做方式

 

Prometheus 指标来源

 

  1. 宿主机的监控数据:须要借助 Node Exporter 向外暴露; Exporter 代替被监控对象来向 Prometheus 暴露能够被抓取的指标信息。

  2. Kubernetes 组件如 APIServer, kubelet 等的/metrics AP:除CPU,内存外,还包括各个组件的核心监控指标。

  3. Kubernetes 核心的监控数据:包括Pod、Node、容器、Service等主要核心概念的 metrics,其中容器相关的指标来源于 kubectl 内置的 cAdvisor 服务。

 

Prometheus 特色

 

  1. 简洁强大的接入标准。只要实现 Promethus Client 接口,就能够直接实现数据的采集。

  2. 多种数据采集方式。包括:在线,离线,push, pull 联邦的方式进行数据采集。

  3. 和 Kubernetes完 全兼容。

  4. 丰富的插件机制和生态。

  5. Prometheus Operator 助力。使 Prometheus 的运维实现自动化。

 

 

3. Demo 演示

 

讲师最后演示了 Kubernetes 环境下日志采集与指标监控的一个 Demo。感兴趣的同窗能够点击视频观看。https://cloud.baidu.com/video-center/video.html?id=610

 

相关阅读:

【公开课】Kubernetes 入门——深刻浅出讲 Docker

【公开课】Kubernetes工做原理及使用

【公开课】Kubernetes 应用部署

【公开课】Kubernetes 实现应用的高可用

 


 

重磅!云原生计算交流群成立

 

扫码添加小助手便可申请加入,必定要备注:名字-公司/学校-地区,根据格式备注,才能经过且邀请进群。

了解更多微服务、云原生技术的相关信息,请关注咱们的微信公众号【云原生计算】

相关文章
相关标签/搜索