容器监控与分析实践 | 学习笔记

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 快速学习容器监控与分析实践,介绍了容器监控与分析实践系统机制, 以及在实际应用过程中如何使用。

开发者学堂课程【DevOps 日志分析实战容器监控与分析实践】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/302/detail/3519


容器监控与分析实践


内容介绍:

一、怎样构建全方位 Kubernetes 监控

二、如何构建 Prometheus 监控、开发的实践中心包括 Ingress 还有业务

三、部署Prometheus 监控

四、手动开始事件中心

五、分析 Ingress 日志


一、怎样构建全方位 Kubernetes 监控

Kubernetes 给我们带来了很多的好处,比如:容器的编排、弹性的伸缩、负载均衡等;对于开发运维人员:快速构建、监控、无人值守、高可靠、异常自动恢复、高效运维等等。

1、使用的场景上使用 kubernetes 会遇到的问题

因为 kubernetes 并不是去帮我们把所有的包括监控、运维、各种异常恢复全部都做。更多是提供一个平台,这个平台帮我们更快的去做发布、更快的做弹性。然后让我们更好的、更容易去做可观察性。

(1)开发遇到的各种问题

(2)构建全方位的监控、知道什么地方挂了、为什么挂了,之后怎么去恢复。

(3)第一部分:Kubernetes 监控架构分成好几个层次。

①基础设施/事件主要包括几部分:

一部分包括机器的一些CPU、内存这些机器指标、容器指标、容器的内存消耗、容器的重启、容器的网络磁盘、IO等等。

还有一部分就是 Event 信息,开发已经做好的开发 Events ,开发自带的功能,开发的功能发生了重要的事件、主要依赖于 Metrics 监控:比如CPU曲线、内存曲线等等。

Metrics 主要依赖于 Prometheus 来做监控。

②ServiceMesh*: 分布式链入、业务追踪等数据。

③接入层:主要是用开发的 Ingress ,作为整个开发的流量入口,这部分监控也非常重要。一般情况都是采用 Ingress/Nginx ,更多基于 Nginx 的访问日志去做各种各样的监控,包括监控各种监控的站点、后端的响应延迟。

④业务层:业务的监控更多的是依赖业务日志、包括业务日志中的错误信息、以及从业务日志中提取一些关键性的指标去做异常的检测、判断。

image.png

从业务价值来说:归于业务监控最有效的、从覆盖面来说:从基础设施相对来说会更广,所以从底层到上开始做。


二、如何构建 Prometheus 监控、开发的实践中心包括 Ingress 还有业务

1、DevOps数据中台架构

从 DevOps 数据中台建构的角度,扮演的一个数据中台的架构,这个数据中台的概念就是支持从各种各样的地方把各种类型的 DevOps 需要用到的一些数据,包括日志、链入追踪的数据、指标数据,从各种各样的数据源比如说:容器、移动端、 IOT 把数据采集上来,进行各种数据分析的方式、SQL 92的语法等等都可以支持,而且还能够支持一些智能的算法,比如:智能聚类、智能预测等等。向上提供可视化的组件,然后帮助我们把数据展现出来、提供一些告警通知、 Webhook 去做一些辅助。

image.png

2、基础指标监控- Prometheus 的前世今生

(1)2012年成立,初始成员 Matt、Julius

(2)受谷歌监控系统启发(Borg 监控系统)

(3)主要目标

①监控动态的云上环境

②对现有的监控数据模型、查询、效率等不满意

(4)Prometheus 是CNCF第二大Project

(5)Kubernetes标准化监控方案

(6)开源首选监控方案之一prometheus 架构

3、Prometheus 架构

通过Pull metrics 方式从各个地方去拉数据,相对来说更加的简洁,只需要对应被监控的系统提供一个 HTTP 的端口就能拉取数据,内部就是一个单机的架构,包括数据的接收里面有个服务发现,服务发现里有个重要的模块就是开发的服务发现,能够动态监控一些 Pull metrics 、Server等等。存储依赖于内部的单机的 HDD/SSD 的存储。

PromQL 就是一个查询引擎,后面会对接 Alertmanager 用来做告警,

还有一部分使用来做 UI 的。

(1)Prometheus 架构的特点:

Pull模型、非常强的服务发现、单机的架构、存储依赖的 SSD (HDD标准机械硬盘性能比较差)、Grafana 可视化提供的功能非常少、Alertmanager 用来做告警。

image.png

4、Prometheus 应用过程中发现的问题:

(1)内存占用:近两小时数据保存内存,时间线膨胀

(2)异常恢复:binlog replay 时间过长,无限OOM

(3)不支持长期存储:单机存储受限,无法长期对比指标

(4)单机问题:抓取太慢、计算单点执行,很难大规模扩展

(5)Pull模型:很难覆盖实时场景

(6)PromQL :内部查询引擎,不支持与外部维表关联

5、SLS时序存储-兼容 Prometheus 方案

其中对于时序数据的存储做了一个非常强的扩展,从单机的模式扩展到一个纯分布式的架构,而且提供了默认的 PromQL 执行引擎而且也是分布式的,同时还对时序数据进行 SQL 执行引擎的查询,能够支持对接各种各样的外部的数据语言,关联的分析,也提供一些智能分析的算法,能够帮助我们去做一些智能巡检等等场景。

特点:

(1)丰富上下游:数十种接入方式对接各类下游。

(2)高性能:纯分布是架构存储计算完全分离。

(3)开源友好:对接 Prometheus 、HTTP 、SQL 、Grafana。

(4)智能:时序异常检测根因分析。

image.png

6、充分发挥 Prometheus 数据的价值

Prometheus 默认在单机里面其实是一个死的系统,不支持和外部数据语言做对接或者是进行实时的计算。

进行扩展:能够支持各种各样的数据通过 Prometheus 进来,通过Open Telemetry (未来可观察性、大的Project)支持进入,对接三个不同的引擎,SQL 执行引擎、智能分析引擎、默认的PromQL执行引擎,

还有一个功能数据队列,能够支持用实施计算的方式去订阅做一些实施的分析。image.png

7、Prometheus 接入方式

在开发S 的 Prometheus Operator 配一些 Remote Write 的一些写入方式,然后去配一个 basicAuth 去做鉴权,在写入 SIS 就可以了。

image.png

整体五个步骤:

(1)创建Namespace

(2)配置保密字典

(3)修改安装包参数

(4)配置 Grafana 可视化

(5)配置警告

8、Kubernetes 事件监控中心

在开发 kubernetes 里面会产生各种各样的事件,能够支持包括宿主机、kube-system、应用 pod 产生的事件都能实时采集到日服务,会提供一整套包括实时告警、事件的查询、自定义分析、可视化报表等等。而且方案开通的成本非常低,只需要在创建机群的时候勾选一下就可以开通。image.png
image.pngimage.png

9、接入层监控- Kuberneies Ingress监控

支持直接去 Ingress 这边,把 Ingress 的访问日志拿到,拿到之后会去提取各种各样的指标,包括 PV同比/环比下跌、TOP延迟、失败延迟等。

image.png

10、中间件/ ServiceMesh 监控- Istio 访问日志监控

ServiceMesh 监控主要以 Istio 为代表,主要是兼容 Istio 这边的,访问日志是可以直接对接过来的,如果用 ServiceMesh 可以非常方便把数据接过来,做一些可视化。

image.png

11、业务监控- Kubernetes 标准日志监控

业务监控是需要依赖于我们自己去做日志的产生,日志的采集的配置,定义几个环境变量或者部署一个 crd , 就可以去完成,包括容器文件、标准输出,如果文件数据存在数组集藏都可以支持实施采集上来,采集上来之后可以去做日志查看/ Live Tail、日志查询/上下文、关键词监控、交互式分析/可视化、业务指标监控等。

image.png

 

三、部署 Prometheus 监控

1、在阿里云 Kubernetes 上安装 Prometheus

(1)登录容器服务控制台

(2)创建命名空间。

①在左侧导航栏中,单击命名空间。

②单击创建

③配置名称为 monitoring ,并单击确定

image.png

(3) 创建保密字典。

①在左侧导航栏中,选择应用配置 > 保密字典

②单击创建

③选择 monitoring 这个命名空间,然后创建一个保密字典,名称为:sis-sk。

④配置如下参数,单击确定。

image.png

(4) 创建Project

project 名称:k8s-prom-bj

所属地址:华北2(北京)

点击进去,在时序库里创建 Metricstore 。

④Metricstore 名称:prom 。

⑤调整 prometheusSpec 下的 retention ,建议修改为1d 或12h。

image.png

⑥将 tsdb 下的enable 设置为 true,并增加 remoteWrite 配置。

image.png

⑦remoteWrite 配置中的 uri 为日志服务 Metricstore 的URI,请根据实际值替换。

uri:https://sis-prometheus-test.cn-beijing.log.aliyuncs.com/prometheus/sis-prometheus-test/prometheus-raw/api/vi/write

如果是在内网:

uri:https://k8s-prom-bj.cn-beijing-intranet.log.aliyuncs.com/prometheus/k8s-prom-bj/prom/api/vi/write

然后拷贝过来,贴在参数中就可以创建。

2、使用 Grafana 访问 Prometheus 数据

(1)登录 Grafana

(2)在左侧导航栏,点击设置 > Data Sources。

(3)在 Data Sources 页签,点击 Add data source。

(4)单击 Prometheus区域中的Select。

(5)Name:Prometheus-test-bj

(6)URL:

https://k8s-prom-bj.cn-beijing.log.aliyuncs.com/prometheus/k8s-prom-bj/prom

(7)打开 Baslc auth 开关

(8)User为阿里云账号的AccessKeyID。

(9)Password为阿里云账号AccessKeySecret。

(10)建议使用仅具备日志服务Project 只读权限的RAM用户的Accesskey。

(11)点击 Save & Test 。

image.png

3、导入 Grafana Dashboard 模板

(1)直接去搜索 Grafana Dashoard 的模板

(2)然后再Grafana Dashoard 的左侧直接搜索Kubernetes

(3)选择模板,复制ID  

(4)点击Grafana 左侧加号,把ID粘进去,鼠标脱离控制。

①Name:1. Kubernetes ceployment Statefulset Deemorset metrics bj

②Folder:General

③选择prometheus 的数据源 :prometheus-test-bj

④点击 inport

image.png

4、开通事件中心

(1)点击左侧容器服务 > 集群

(2)创建集群

①集群名称

虚拟交换机勾选

点击下一步:Worker 配置

实例规格 勾选

image.png

设置登录密码和确认密码

image.png

下一步:确认配置

组件配置默认就已经把日志服务、node-probem-detector 勾选了,也可以去勾选 Ingress Dashboard,可以自己去部署。

不勾选不装也可以去组建管理开启

image.png

 

四、手动开启事件中心

1、点击左侧导航栏里的集群 > 运维管理 > 组件管理

2、搜索 node-probem-detector

3、没有安装就点击安装

4、安装好之后就会把事件中心开启


五、分析 Ingress 日志

1、容器控制服务台找到节点池 > 集群 > 连接信息

2、点击通过CloudShell管理集群

3、登录 CloudShell 用命令行进行操作

4、创建 vim ingress-monitoring.yaml ,然后贴上去

5、在保存Kubectl apply -f ingress-monitoring.yaml

image.png

之前创建集群都会有默认的ingress ,现在里面是没有什么数据,大盘里面创建各种ingress监控的大盘,ingress里面有各种类型的指标,左侧可以点一些快速的分析,比如有哪些host、client_ip,当然这些分布都比较均匀,还可以去做一些指定的查询比如说:method : Get、not methed:Get ,可以去分析一些状态码的分布Get | SELECT status,count(1) as tatal graup by statud 。

默认会有一个可视化,一个表个的形式,可以自己选择饼状图、树状图、条形图的形式等等。

(1)比较高级的用法:IP的函数:

not methed : Get | SELECT ip_to_province(x_forward_for) as p, count(1) as total group by p order by total desc

就可以查到各个省份分布的信息,点击中国地图就会帮你按照中国地图上的省份自动可视化,数量越高的省份颜色越深。

(2)世界地图:

not methed : Get | SELECT ip_to_country(x_forward_for) as p, count(1) as total group by p order by total desc 就可以查到国家的分布。

(3)经纬度热地图或高德地图:

not methed : Get | SELECT ip_to_city_geo(x_forward_for) as p, count(1) as total group by p order by total desc。

默认做了很多现有的分析,进去之后就会展示出有哪些访问的PV、流量、移动端iOS的占比、平均的延迟、top的一些指标、延迟、错误等等。可以根据不同的纬度去做过滤,还有其他很多的包括监控中心等等。

监控中心里面的指标会更加的丰富,包括访问PV、出流量比列、各种延迟等等,还有一些统计类型的,会让我们更加的方便的从图层拿到各种各样的指标,这些指标都是基于访问日志去分析的基础来的。

也可以跳转到查询分析、原始数据这边。之前创建的事件中心也可以去查看,它可以帮你把各种各样的告警纬度都列在那里,里面的告警都可以进行配置,各种告警只需要去添加通知方式就可以,可以通知到短信、邮件、语音、钉钉机器人,而且可以多个通道并行通知,配置之后去勾选就可以。

image.png

默认事件也非常多也列出来了,有哪些非常重要的事件需要去关注,比如:Pod OOM事件、Pod驱逐事件这些关键性的事件都会帮你列出一些详细的信息,详情查询里面可以只关心Warning 等级的事件查询、过滤某一种类型的事件,然后去看这些信息的详细信息,这些信息是帮助我们去做查询,但是他背后也是日志的查询方式。 

整体上来说就是基于SIS去构建开发S 的监控,包括我们的Grafana 一些基础的指标、平均CPU的使用率、内存使用率等等。也能够拿到系统内部的一些事件、开发S 的一些事件,比如节点被删除了或者Pod被丢掉了、Pod被销毁了等等这些事件会告诉你方便你直接去做告警。

Ingress 可以根据访问日志去做分析各种各样的服务的指标,自己的业务日志的监控,需要自己去配置一些采集策略。

相关实践学习
容器服务Serverless版ACK Serverless 快速入门:在线魔方应用部署和监控
通过本实验,您将了解到容器服务Serverless版ACK Serverless 的基本产品能力,即可以实现快速部署一个在线魔方应用,并借助阿里云容器服务成熟的产品生态,实现在线应用的企业级监控,提升应用稳定性。
云原生实践公开课
课程大纲 开篇:如何学习并实践云原生技术 基础篇: 5 步上手 Kubernetes 进阶篇:生产环境下的 K8s 实践 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
30天前
|
运维 安全 Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在数字化转型的浪潮中,企业对于IT基础设施的要求越来越高,不仅需要快速响应市场变化,还要确保系统的稳定与安全。本文深入探讨了如何通过融合DevOps文化和容器化技术来构建一个高效、稳定且易于管理的云基础设施。通过实际案例分析,阐述了持续集成/持续部署(CI/CD)流程的优化、自动化测试、监控以及日志管理等关键环节的实施策略,旨在为运维专业人员提供一套切实可行的解决方案。
27 3
|
3月前
|
Docker 容器
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
Docker学习笔记三:如何运行一个容器?
|
3月前
|
存储 Prometheus 监控
Prometheus vs. ELK Stack:容器监控与日志管理工具的较量
随着容器化技术的广泛应用,容器监控与日志管理成为了关键任务。本文将对两种常用工具进行比较与选择,分别是Prometheus和ELK Stack。Prometheus是一款开源的监控系统,专注于时序数据的收集和告警。而ELK Stack则是一套完整的日志管理解决方案,由Elasticsearch、Logstash和Kibana三个组件组成。通过比较它们的特点、优势和适用场景,读者可以更好地了解如何选择适合自己需求的工具。
|
1月前
|
运维 Kubernetes Devops
构建高效可靠的云基础设施:DevOps与容器化技术融合实践
【2月更文挑战第30天】 在当今快速迭代和竞争激烈的软件开发领域,传统的IT运维模式已难以满足业务发展的需要。本文将探讨如何通过整合DevOps文化和容器化技术,构建一个既高效又可靠的云基础设施。文章首先回顾了DevOps的核心理念及其对运维工作流的影响,接着深入讨论了容器化技术的优势和挑战,并提出了一套结合两者的实施方案。最后,通过案例分析展示了该方案在实际环境中的应用效果和潜在益处。
|
5天前
|
存储 运维 监控
构建高效稳定的Docker容器监控体系
【4月更文挑战第18天】 在现代微服务架构中,Docker容器已成为部署和运行应用的标准环境。随之而来的挑战是如何有效监控这些容器的性能与健康状况,确保系统的稳定性和可靠性。本文将探讨构建一个高效稳定的Docker容器监控体系的关键技术和方法,包括日志管理、性能指标收集以及异常检测机制,旨在为运维人员提供实用的指导和建议。
10 0
|
8天前
|
运维 Kubernetes Devops
构建高效自动化运维体系:DevOps与容器技术融合实践
【4月更文挑战第15天】 在当今快速发展的信息技术时代,传统的IT运维模式已难以满足业务敏捷性的需求。本文旨在探讨如何通过整合DevOps理念和容器技术来构建一个高效的自动化运维体系。文章将详细阐述DevOps的核心原则、容器技术的基础知识,以及两者结合的优势。此外,文中还将分享一系列实践经验,包括持续集成/持续部署(CI/CD)流程的搭建、微服务架构的应用,以及监控和日志管理策略的优化,以期帮助企业实现快速、可靠且安全的软件交付过程。
|
10天前
|
运维 Devops 持续交付
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
【4月更文挑战第13天】 在当今快速迭代和持续部署的软件开发环境中,传统的IT运维模式已难以满足业务发展的需求。本文聚焦于如何通过融合DevOps理念与容器化技术,构建一个高效、稳定且易于管理的云基础设施。文章将探讨持续集成/持续交付(CI/CD)流程的优化、容器化技术的最佳实践、以及微服务架构下的应用管理,以期为企业提供一种改进运维效率、加速产品上市时间,同时保障系统稳定性的解决方案。
|
26天前
|
运维 Kubernetes Devops
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
随着企业数字化转型的不断深入,传统的IT运维模式已经难以满足快速迭代和持续交付的需求。本文将探讨如何通过结合DevOps文化与容器化技术,构建一个既高效又稳定的云基础设施。文章首先概述了DevOps的核心理念及其在现代运维中的重要性,然后详细介绍了容器化技术,特别是Docker和Kubernetes在实现微服务架构中的应用。最后,文中通过案例分析展示了这一融合实践如何在真实环境中提升运维效率和系统稳定性。
21 7
|
27天前
|
运维 监控 云计算
构建高效稳定的Docker容器监控体系
随着微服务架构的普及,Docker容器作为其核心承载单元,在系统运维中扮演着日益重要的角色。本文旨在探讨如何构建一个高效且稳定的Docker容器监控体系,以确保容器运行的可靠性和系统的高可用性。文章首先分析了容器监控的必要性,接着详细介绍了监控体系的设计理念和组件选择,最后提供了实施过程中的关键步骤与最佳实践。通过本文,读者将掌握构建和维护Docker容器监控体系的有效方法。
|
28天前
|
运维 Kubernetes 监控
构建高效稳定的云基础设施:DevOps与容器化技术融合实践
在当今云计算时代,企业追求敏捷性、可扩展性以及成本效益的云基础设施。本文将探讨如何通过DevOps文化与容器化技术的融合,打造一个既高效又稳定的运维环境。文章不仅阐述了DevOps和容器化技术各自的优势,还提供了一个具体的实施案例,展示了这种结合如何优化资源利用、提高部署速度并降低运维复杂性。