K8s上的监控系统(Grafana)使用和理解说明

Grafana (集成Prometheus On K8s集成)主要步骤说明

客户端指标收集 —— K8s 集群资源等 —— Prometheus 监控数据收集 —— Grafana —— 通过PromQL 进行数据查询 —— 预警告警等通知

  1. Kubernetes集群资源:这包括了CPU、内存、磁盘、网络等各种类型的资源。这些资源被用于运行容器化的应用程序和服务。
  2. Prometheus:Prometheus是一个开源的监控和警报工具,它可以收集、存储和分析时间序列数据。在Kubernetes集群中,Prometheus可以用于收集各种资源的监控数据。
  3. Grafana:Grafana是一个开源的数据可视化工具,它可以将Prometheus收集的数据以图表的形式展示出来。通过Grafana,我们可以更方便地查看和分析监控数据。
  4. PromQL(Prometheus Query Language):PromQL是一种用于查询Prometheus数据的语言。通过PromQL,我们可以更灵活地对监控数据进行查询和分析。
  5. 预警告警等通知:当监控数据达到预设的阈值时,可以通过多种方式发送预警或告警通知。

K8s的Service主要资源清单说明

  • grafana-exporter: Grafana Exporter是一个Prometheus的exporter,用于将Grafana的监控指标导出到Prometheus中,以便进行集中的监控和报警。

  • kube-state-metrics: kube-state-metrics是一个用于收集Kubernetes集群状态指标的服务。它将Kubernetes的API对象转化为Prometheus可用的指标。

  • metrics-server: Metrics Server是一个用于收集和聚合Kubernetes集群内部资源使用情况的组件。它提供了对CPU、内存等资源使用情况的实时监控和查询。

  • prometheus: Prometheus是一个开源的监控系统,用于收集、存储和查询时间序列数据。在Kubernetes中,Prometheus通常用于收集和监控Kubernetes集群的性能指标和应用程序指标。

  • prometheus-prometheus-node-exporter: Prometheus Node Exporter是一个用于监控主机的Prometheus的exporter。它采集和暴露与主机相关的指标,如CPU使用率、内存使用率、磁盘空间等。

Prometheus在K8s上集成说明

K8s 集群资源:

  • 在Kubernetes集群中,我们有多个节点(Node),每个节点都有一定的资源可用。这些资源包括CPU、内存、磁盘和网络等。在监控方面,我们需要了解每个节点的资源使用情况以及集群的整体资源状况。

Prometheus 监控数据收集:

  • Prometheus是一款开源的监控系统,可以收集和存储各种类型的监控数据。在Kubernetes中,我们可以使用Prometheus来收集节点的资源使用情况以及其他相关的指标。

Grafana:

  • Grafana是一款开源的可视化监控工具,可以将数据以直观的方式展示出来。通过连接Prometheus,我们可以在Grafana中创建仪表盘,以便查看和分析收集的监控数据。

通过PromQL 进行数据查询:

  • PromQL是Prometheus的查询语言,可以用来从收集的监控数据中提取有用的信息。使用PromQL,我们可以根据需求进行数据查询、过滤、聚合和计算等操作。

预警告警等通知:

  • 在监控中,我们需要设置预警规则来监测集群资源的使用情况。一旦某个指标达到预先设定的阈值,系统将触发警报通知管理员或其他相关人员,以便及时采取行动。

任务完成过程:

  1. 配置Prometheus: 首先,我们需要在Kubernetes集群中部署和配置Prometheus来收集监控数据。
  2. 配置Grafana: 接下来,我们需要配置Grafana,使其能够连接到Prometheus并展示监控数据。
  3. 创建仪表盘: 在Grafana中创建一个仪表盘,并选择展示我们关心的节点资源等指标。
  4. 使用PromQL查询数据: 根据需求,在Grafana的查询编辑器中使用PromQL进行数据查询和分析。
  5. 设置预警规则: 在Grafana中设置预警规则,定义阈值和触发条件,以便在资源达到警戒线时发送警报通知。
  6. 监控和预警: 监控Prometheus收集的数据,检查节点资源使用情况,当达到预警条件时,系统将触发警报通知管理员或其他相关人员。
  7. 反馈和优化: 不断观察监控数据,根据情况进行优化和调整,以提高集群的性能和稳定性。

通过以上步骤,我们可以完成对Kubernetes集群资源的监控和预警工作,并且能够根据需要查询和分析监控数据,从而保障集群的正常运行。监控和预警的过程将帮助我们在集群出现问题之前及时发现并解决,提供更好的可用性和稳定性。

PromQL 常用说明

PromQL(Prometheus Query Language)是一种用于查询和分析Prometheus监控系统中的数据的查询语言。以下是一些常见的PromQL查询语句说明:

  1. 基本指标查询:使用<metric_name>来查询指定指标的时间序列数据。例如,http_requests_total表示查询http_requests_total指标的时间序列数据。
  2. 指标筛选:可以使用{<label_name>=<label_value>}来筛选具有特定标签值的时间序列。例如,http_requests_total{job="api-server"}表示筛选出标签job值为api-serverhttp_requests_total指标的时间序列数据。
  3. 范围查询:可以使用[<start_time>:<end_time>]来指定查询的时间范围。时间可以使用Unix时间戳或时间表达式表示。例如,http_requests_total[1618168800:1618172400]表示查询在2021年4月12日10:00到11:00之间的http_requests_total指标的时间序列数据。
  4. 聚合函数:可以使用聚合函数对时间序列数据进行聚合计算。例如,sum(http_requests_total)计算所有时间序列数据的总和值,avg(http_requests_total)计算平均值,max(http_requests_total)计算最大值等。
  5. 算术运算符:可以使用算术运算符对时间序列数据进行计算。例如,http_requests_total{job="api-server"} / http_requests_total{job="web-server"}表示计算api-serverweb-server两个时间序列的比值。
  6. 警报规则:可以使用警报规则来基于一定的查询条件触发报警操作。例如,alertmanager_notifications表示查询所有触发了报警的时间序列数据。

Prometheus 日志服务写入日志不同阶段

Prometheus 的日志写入的过程
(write block) — (Head GC completed) — (Creating checkpoint) — (WAL checkpoint complete)

  • 数据一致性:日志写入过程被划分为几个阶段,每个阶段都有特定的任务。首先,write-block阶段将数据块写入内存中,然后Head GC completed表示垃圾收集阶段完成了,这个阶段确保了不再使用的内存被释放,从而维持系统的有效性。Creating checkpoint表示正在创建一个检查点,这个检查点包含了此时间点的系统状态信息。当WAL checkpoint complete表示日志的写入已经完成并创建了一个检查点。这个阶段确保了所有的数据变动都被记录下来,并且在系统发生故障时可以恢复到之前的状态,从而保证了数据的一致性。
  • 数据可靠性:通过这种构成结构,Prometheus服务器也保证了数据的可靠性。在创建检查点之后,系统会将所有的数据变动都写入到Write-Ahead Log(WAL)中。这个日志是持久化的,也就是说,即使系统发生故障,这些数据变动也会被保留下来,不会丢失。因此,通过这种构成结构,Prometheus服务器确保了数据的可靠性。
  • 系统稳定性:除了数据一致性和可靠性之外,这种构成结构也有助于保证系统的稳定性。在垃圾收集阶段,如果遇到系统资源不足或者内存泄漏等问题,垃圾收集机制会自动调整,以保证系统的正常运行。同时,在创建检查点和写入WAL的过程中,如果出现错误或者异常情况,系统也会自动处理,以保证系统的稳定性。

Prometheus 监控介绍

Prometheus是一套开源的监控系统,它主要用于可靠地记录时间序列数据。为了实现日志数据的可靠性和一致性,以及保持系统的稳定性,Prometheus采用了以下几种技术和方法:

  1. 内存管理:Prometheus使用Go语言编写,这是一种内存管理友好的语言。Prometheus本身也有一套内存管理机制,它能够有效地管理内存,避免内存泄漏和内存溢出等问题。此外,Prometheus还使用了一种缓冲区机制,它能够将日志数据先写入内存中的缓冲区,然后再批量写入磁盘,从而提高了写入性能和可靠性。
  2. 持久化存储:Prometheus使用了一种名为Write-Ahead Log(WAL)的持久化存储机制,来保证日志数据的可靠性和一致性。WAL是一种日志文件,它记录了所有对数据的修改操作。当系统发生故障或崩溃时,Prometheus可以通过回滚WAL来恢复数据。此外,WAL还支持按时间顺序进行截断操作,以减小存储空间的使用量。
  3. 检查点(Checkpoint):Prometheus通过定期创建检查点来保证数据的一致性和可恢复性。检查点是一组元数据,它记录了当前系统的状态信息,包括数据存储的位置和时间等。当系统发生故障时,可以使用检查点来恢复数据。Prometheus会定期创建检查点,并将最后一个检查点作为日志数据的基准点,从而保证数据的一致性和可恢复性。
  4. 分布式架构:Prometheus还支持分布式架构,它可以将数据分散到多个节点上进行存储和管理。这种分布式架构可以提高系统的可靠性和稳定性,因为即使单个节点发生故障,其他节点仍然可以继续提供服务。此外,分布式架构还可以提高数据的一致性和完整性,因为每个节点都可以访问和处理数据,从而减少了单点故障的可能性。

Prometheus 在日志数据的可靠性,一致性和稳定性的说明

数据源可靠性:Prometheus 提供了多种数据采集方式,包括主动采集和被动采集。其中,主动采集是通过 Prometheus 提供的客户端库进行,可以确保采集到实时的监控数据。被动采集是通过 HTTP、文件等方式接收各类应用和系统的指标数据。这样的设计可以确保从不同数据源采集到完整和准确的数据,并且在采集过程中提供弹性和容错机制,以防止数据丢失。

数据存储可靠性:Prometheus 使用自身内置的时间序列数据库来存储采集到的监控数据。该数据库使用持久化存储来保证数据的持久性和可靠性。在写入过程中,Prometheus 会确保数据的持久性,即使在处理大量数据写入的情况下也能保持一致性。同时,Prometheus 还提供了数据备份和恢复机制,以防止任何意外情况导致数据丢失。

一致性:Prometheus 使用基于推模型的数据采集机制,即通过轮询和拉取的方式获取监控数据。这种方式可以确保数据的时效性和一致性,因为每个目标(如应用程序、主机等)都可以按照自己的节奏提供监控数据,而不会受到 Prometheus 的推送速率限制。此外,Prometheus 还支持分布式架构,可以在多个节点上运行,确保高可用性和负载均衡。

系统稳定性:为了保持系统的稳定性,Prometheus 提供了多种机制。首先,它支持自动发现和标记目标,这意味着当新的应用程序或主机启动时,Prometheus 可以自动进行配置和监控。其次,Prometheus 提供了告警功能,允许用户定义和触发自定义的告警规则。这样,可以及时发现系统故障或异常,并进行相应的处理。另外,Prometheus 还支持水平扩展,通过增加新的节点来满足更高的数据处理需求,以保持系统的稳定性。

java客户端库使用(io.prometheus.client)

io.prometheus.client 是一个Java客户端库,用于在Java应用程序中采集和暴露指标数据给Prometheus监控系统。作为一名Prometheus专家,下面是我对io.prometheus.client包的作用的解释:

  1. 数据采集:io.prometheus.client提供了一系列的类和方法,使开发人员能够轻松地在Java应用程序中定义和采集指标数据。通过使用该包提供的Metircs类和相关注解,可以将自定义的指标数据与Java应用程序的不同组件(如方法、类、HTTP请求等)相关联,并定期采集和汇总这些数据。
  2. 指标暴露:io.prometheus.client可以将采集到的指标数据以Prometheus的数据格式进行暴露。通过使用该包提供的HTTP服务器,可以在应用程序中启动一个用于提供指标数据的HTTP端点。Prometheus监控系统可以通过定期访问这个端点来收集指标数据。
  3. 指标类型:io.prometheus.client支持Prometheus支持的多种指标类型,包括计数器(Counter)、直方图(Histogram)、摘要(Summary)和测量(Gauge)。这些指标类型对于不同类型的指标数据提供了灵活性和准确性。
  4. 标签支持:io.prometheus.client允许为指标数据设置标签(Labels),以便更好地分类和标识指标。标签可以用于指定指标数据的不同维度,使得Prometheus可以更精确地查询和聚合指标数据。
  5. 自动发现:io.prometheus.client还支持自动发现机制,可以在应用程序运行时自动注册和发现指标数据。这样,当新的应用程序实例启动时,Prometheus可以自动识别和监控这些实例的指标数据。

总之,io.prometheus.client是一个强大而灵活的Java客户端库,用于在Java应用程序中采集和暴露指标数据。通过使用该库,开发人员可以更方便地将应用程序的关键指标与Prometheus监控系统集成,从而更好地理解和监控应用程序的性能和健康状况。


On the other hand

  • Client Metrics Collection: Various metrics from the Kubernetes cluster, such as resource usage and performance data, are collected from the client nodes using appropriate tools or mechanisms.
  • Kubernetes Cluster Resources: The collected data includes information about the resources utilized by the Kubernetes cluster, such as CPU, memory, storage, and network usage.
  • Prometheus Monitoring Data Collection: Prometheus, a popular monitoring and alerting tool, is used to collect the metrics from the Kubernetes cluster. Prometheus is designed to scrape and store time-series data.
  • Grafana Integration: Grafana, a visualization platform, is integrated with Prometheus to create interactive and visually appealing dashboards. Grafana provides a user-friendly interface for data exploration and visualization.
  • Data Querying with PromQL: PromQL, the query language used by Prometheus, is utilized to query the collected data for specific metrics or time ranges. PromQL allows users to perform complex queries and obtain meaningful insights from the data.
  • Alerting and Notifications: Grafana can be configured to set up alerts and notifications based on predefined thresholds or conditions. When certain metrics cross the specified limit, alerts are triggered, and notifications (via email, Slack, etc.) are sent to responsible parties or teams.
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
微服务是什么?微服务是用于构建应用程序的架构风格,一个大的系统可由一个或者多个微服务组成,微服务架构可将应用拆分成多个核心功能,每个功能都被称为一项服务,可以单独构建和部署,这意味着各项服务在工作和出现故障的时候不会相互影响。为什么要用微服务?单体架构下的所有代码模块都耦合在一起,代码量大,维护困难,想要更新一个模块的代码,也可能会影响其他模块,不能很好的定制化代码。微服务中可以有java编写、有Python编写的,他们都是靠restful架构风格统一成一个系统的,所以微服务本身与具体技术无关、扩展性强。大型电商平台微服务功能图为什么要将SpringCloud项目部署到k8s平台?SpringCloud只能用在SpringBoot的java环境中,而kubernetes可以适用于任何开发语言,只要能被放进docker的应用,都可以在kubernetes上运行,而且更轻量,更简单。SpringCloud很多功能都跟kubernetes重合,比如服务发现,负载均衡,配置管理,所以如果把SpringCloud部署到k8s,那么很多功能可以直接使用k8s原生的,减少复杂度。Kubernetes作为成熟的容器编排工具,在国内外很多公司、世界500强等企业已经落地使用,很多中小型公司也开始把业务迁移到kubernetes中。kubernetes已经成为互联网行业急需的人才,很多企业都开始引进kubernetes技术人员,实现其内部的自动化容器云平台的建设。对于开发、测试、运维、架构师等技术人员来说k8s已经成为的一项重要的技能,下面列举了国内外在生产环境使用kubernetes的公司: 国内在用k8s的公司:阿里巴巴、百度、腾讯、京东、360、新浪、头条、知乎、华为、小米、富士康、移动、银行、电网、阿里云、青云、时速云、腾讯、优酷、抖音、快手、美团等国外在用k8s的公司:谷歌、IBM、丰田、iphone、微软、redhat等整个K8S体系涉及到的技术众多,包括存储、网络、安全、监控、日志、DevOps、微服务等,很多刚接触K8S的初学者,都会感到无从下手,为了能让大家系统地学习,克服这些技术难点,推出了这套K8S架构师课程。Kubernetes的发展前景 kubernetes作为炙手可热的技术,已经成为云计算领域获取高薪要掌握的重要技能,在招聘网站搜索k8s,薪资水平也非常可观,为了让大家能够了解k8s目前的薪资分布情况,下面列举一些K8S的招聘截图: 讲师介绍:  先超容器云架构师、IT技术架构师、DevOps工程师,曾就职于世界500强上市公司,拥有多年一线运维经验,主导过上亿流量的pv项目的架构设计和运维工作;具有丰富的在线教育经验,对课程一直在改进和提高、不断的更新和完善、开发更多的企业实战项目。所教学员遍布京东、阿里、百度、电网等大型企业和上市公司。课程学习计划 学习方式:视频录播+视频回放+全套源码笔记 教学服务:模拟面试、就业指导、岗位内推、一对一答疑、远程指导 VIP终身服务:一次购买,终身学习课程亮点:1. 学习方式灵活,不占用工作时间:可在电脑、手机观看,随时可以学习,不占用上班时间2.老师答疑及时:老师24小时在线答疑3. 知识点覆盖全、课程质量高4. 精益求精、不断改进根据学员要求、随时更新课程内容5. 适合范围广,不管你是0基础,还是拥有工作经验均可学习:0基础1-3年工作经验3-5年工作经验5年以上工作经验运维、开发、测试、产品、前端、架构师其他行业转行做技术人员均可学习课程部分项目截图   课程大纲 k8s+SpringCloud全栈技术:基于世界500强的企业实战课程-大纲第一章 开班仪式老师自我介绍、课程大纲介绍、行业背景、发展趋势、市场行情、课程优势、薪资水平、给大家的职业规划、课程学习计划、岗位内推第二章 kubernetes介绍Kubernetes简介kubernetes起源和发展kubernetes优点kubernetes功能kubernetes应用领域:在大数据、5G、区块链、DevOps、AI等领域的应用第三章  kubernetes中的资源对象最小调度单元Pod标签Label和标签选择器控制器Replicaset、Deployment、Statefulset、Daemonset等四层负载均衡器Service第四章 kubernetes架构和组件熟悉谷歌的Borg架构kubernetes单master节点架构kubernetes多master节点高可用架构kubernetes多层架构设计原理kubernetes API介绍master(控制)节点组件:apiserver、scheduler、controller-manager、etcdnode(工作)节点组件:kube-proxy、coredns、calico附加组件:prometheus、dashboard、metrics-server、efk、HPA、VPA、Descheduler、Flannel、cAdvisor、Ingress     Controller。第五章 部署多master节点的K8S高可用集群(kubeadm)第六章 带你体验kubernetes可视化界面dashboard在kubernetes中部署dashboard通过token令牌登陆dashboard通过kubeconfig登陆dashboard限制dashboard的用户权限在dashboard界面部署Web服务在dashboard界面部署redis服务第七章 资源清单YAML文件编写技巧编写YAML文件常用字段,YAML文件编写技巧,kubectl explain查看帮助命令,手把手教你创建一个Pod的YAML文件第八章 通过资源清单YAML文件部署tomcat站点编写tomcat的资源清单YAML文件、创建service发布应用、通过HTTP、HTTPS访问tomcat第九章  kubernetes Ingress发布服务Ingress和Ingress Controller概述Ingress和Servcie关系安装Nginx Ingress Controller安装Traefik Ingress Controller使用Ingress发布k8s服务Ingress代理HTTP/HTTPS服务Ingress实现应用的灰度发布-可按百分比、按流量分发第十章 私有镜像仓库Harbor安装和配置Harbor简介安装HarborHarbor UI界面使用上传镜像到Harbor仓库从Harbor仓库下载镜像第十一章 微服务概述什么是微服务?为什么要用微服务?微服务的特性什么样的项目适合微服务?使用微服务需要考虑的问题常见的微服务框架常见的微服务框架对比分析第十二章 SpringCloud概述SpringCloud是什么?SpringCloud和SpringBoot什么关系?SpringCloud微服务框架的优缺点SpringCloud项目部署到k8s的流程第十三章 SpringCloud组件介绍服务注册与发现组件Eureka客户端负载均衡组件Ribbon服务网关Zuul熔断器HystrixAPI网关SpringCloud Gateway配置中心SpringCloud Config第十四章 将SpringCloud项目部署到k8s平台的注意事项如何进行服务发现?如何进行配置管理?如何进行负载均衡?如何对外发布服务?k8s部署SpringCloud项目的整体流程第十五章 部署MySQL数据库MySQL简介MySQL特点安装部署MySQL在MySQL数据库导入数据对MySQL数据库授权第十六章 将SpringCLoud项目部署到k8s平台SpringCloud的微服务电商框架安装openjdk和maven修改源代码、更改数据库连接地址通过Maven编译、构建、打包源代码在k8s中部署Eureka组件在k8s中部署Gateway组件在k8s中部署前端服务在k8s中部署订单服务在k8s中部署产品服务在k8s中部署库存服务第十七章 微服务的扩容和缩容第十八章 微服务的全链路监控什么是全链路监控?为什么要进行全链路监控?全链路监控能解决哪些问题?常见的全链路监控工具:zipkin、skywalking、pinpoint全链路监控工具对比分析第十九章 部署pinpoint服务部署pinpoint部署pinpoint agent在k8s中重新部署带pinpoint agent的产品服务在k8s中重新部署带pinpoint agent的订单服务在k8s中重新部署带pinpoint agent的库存服务在k8s中重新部署带pinpoint agent的前端服务在k8s中重新部署带pinpoint agent的网关和eureka服务Pinpoint UI界面使用第二十章 基于Jenkins+k8s+harbor等构建企业级DevOps平台第二十一章 基于Promethues+Alert+Grafana搭建企业级监控系统第二十二章 部署智能化日志收集系统EFK 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

P("Struggler") ?

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值