美文网首页Kubernetes
6 监控与日志

6 监控与日志

作者: AgileHouse | 来源:发表于2022-01-24 14:12 被阅读0次

    容器检查

    kubectl get 和kubectl describe 查询部署状态

    kubectl logs将容器的标准输出重定向到终端

    kubectl top查看CPU和内存使用情况

    kubectl exec 可在容器内运行shell

    K8s仪表盘

    整合上述数据,web可视化展示

    监控k8s

    应用程序:关注内部状态数据,可用分析profiling工具或跟踪tracking工具诊断

    主机:监控框架提供的代理完成主机数据采集,如负载、磁盘、网络连接

    外部资源:检查其他依赖组件的状态

    容器:将容器相关逻辑附加到度量指标,如Pod标签、控制器名称

    k8s:负责管理、调度、编排应用程序,关注k8s状态

    k8s监控要点:监控栈的每层,找到对应的采集器,如cAdvisor来满足容器级别指标收集需求,聚合主机上每个运行的容器的资源使用情况和性能统计信息(cAdviser部署在主机而非容器,嵌入在kubelet中);监控栈另一个重要组件Heapster,从每个节点检索监控统计信息,主要是节点上的kubelet然后写入外部接收器;通过restfull api公开聚合度量指标

    cAdvisor和Heapster专注于监控物理指标,kube-state-metrics关注逻辑状态,监控Kubernetes master节点,并将监控内容转换为Prometheus格式的指标

    监控实践

    Prometheus介绍

    Prometheus框架包含若干组件

    依靠代理从系统组件中收集统计信息,采用pull拉取模型的方式收集数据,不被动接收指标而是主动从exporter拉数据

    存储后端是内嵌的LevelDB,可以切换到其他存储如InfluxDB或Graphite

    Prometheus服务器负责根据预先配置的规则向警报管理器Alert Manager发送警报,警报管理器处理警报并发送作业,将警报分组并发送到消息推送工具,如电子邮件、Slack、Pagerduty

    使用PromQL

    三种数据类型

    即时向量instant vector:数据采样的时间序列

    范围向量range vector:包含特定时间范围内的数据的一组时间序列

    标量scalar:具体的数值

    Kubernetes目标发现

    Prometheus只从它知道的端点中提取指标,要明确告诉他从哪里收集数据

    路径/config是当前已配置目标的列表,默认情况下,会有一项作业(job)收集Prometheus自身的指标,位于路径/metrics下

    Prometheus的默认作业被配置为静态目标,但Kubernetes中的容器是动态创建和销毁的,Prometheus通过k8s内部服务发现功能,查询运行服务的信息,并相应的将目标配置添加或删除

    四种发现机制

    节点发现模式:为每个节点创建一个目标,默认情况下,目标端口是kubelet的端口

    服务发现模式:为每个服务对象创建目标,并且服务中的所有已定义端口将成为抓取目标

    Pod发现模式:为每个pod创建目标,为每个pod保留所有已定义的容器端口

    端口发现模式:发现服务创建的端口对象

    Prometheus只获取集群中被标记的资源,如pod注解格式如下:

    prometheus.io/scrape:true 表示应拉取这个pod

    prometheus.io/path:公开指标路径,只有目标pod使用/metrics之外路径才需要配置

    prometheus.io/port:如定义的端口和实际端口不同,注释覆盖

    从Kubernetes收集数据

    Prometheus监控步骤:

    安装exporter、适当标记进行注解、自动发现端点上收集数据

    Kubernetes组件其他指标

    Kubernetes API服务器:在/metrics处显示其状态,默认情况此目标会启动

    kube-controller-manager:端口10252

    kube-scheduler:端口10251

    kube-dns:两个容器dnsmasq、sky-dns,端口10054、10055

    etcd:端口4001

    nginx Ingress控制器:端口10254

    使用Grafana查看指标

    Grafana查看Prometheus指标,必须先添加数据源,连接到Prometheus服务器

    配置参数:

    示例:

    日志

    日志系统主要组件

    日志代理:程序的抽象层,收集、转换、分发日志到后端

    日志后端:存储接收到的日志

    三种日志记录方式

    将所有内容发送到stdout/stderr

    写入日志文件

    将日志发送到日志代理或直接记录到后端

    日志聚合模式

    节点代理方式收集日志

    kubectl logs查看的消息是从容器stdout/stderr重定向输出的

    kubectl log从kubelet获取日志,kubelet将日志从容器引擎聚合到主机的/var/log/containers.

    配置日志代理从系统、Kubernetes、Master和节点上的/var/log下的各组件收集日志

    如kube-proxy.log、kube-apiserver.log、kube-scheduler.log、kube-controller-manager.log、etcd.long

    Sidecar容器方式转发日志

    每个应用程序的pod都有两个容器共享相同的emptyDir卷,Sidecar容器可以跟踪应用程序容器中的日志并将它们发送到Pod之外,利用Sidecar容器将日志输出到标准流

    获取Kubernetes事件

    Eventer可以帮助观察k8s API服务器并将事件聚合到日志记录接收器中

    Eventer是Heapster的一部分,支持ES、InfluxDB、Riemann、Google Cloud Logging作为接收器

    Fluentd和Elasticsearch日志

    日志系统和监控系统架构:采集器、存储、用户界面

    相应组件:Fluentd\Eventer、ES、Kibana

    ES:文本搜索和分析引擎,是数据存储、处理和分析的理想选择

    Fluentd:较低内存占用空间,满足日志代理选项,FluentBit 可资源利用最小化

    从日志中提取指标

    构建针对Kubernetes上应用程序的监控和日志系统

    Prometheus善于处理时间序列数据,但没法提取文本

    mtail、GrokExporter等工具会计算日志条目,并将这些数字组织到指标中,以便可以在Prometheus中处理它们

    总结

    kubectl获取容器运行状态

    Prometheus为核心构建监控系统,通过Exporter收集Kubernetes指标,Grafana可视化监控数据

    EFK堆栈来处理日志,ES存储日志,Kibana可视化日志

    相关文章

      网友评论

        本文标题:6 监控与日志

        本文链接:https://www.haomeiwen.com/subject/qdmacrtx.html