张坚,科大讯飞开发工程师,云原生爱好者。

本篇文章我们基于 Prometheus 和 Grafana 实现微服务应用监控。

KubeSphere 平台本身提供了监控功能,包括节点状态、集群资源使用率、Etcd、API Server 等监控,不过缺少了应用级别的监控。

引入依赖包

在应用中引入监控所需要的 jar 包,包含 Prometheus 和 Actuator

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency> <dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>

引入这 2 个包以后就通过 Prometheus 抓取到应用的监控信息。

修改应用配置,暴露监控端口

management:
endpoints:
web:
exposure:
include: "*"
base-path: /
metrics:
tags:
application: ${spring.application.name}
  • management.server.port:启用独立的端口来提供监控,未配置的情况下共用应用端口;
  • management.metrics.tags.xxx:在统计信息中添加自定义的标签;
  • management.endpoints.web.exposure.include:用于包含我们要公开的端点列表 , 我们这里设置为* 代表所有。
  • management.endpoints.web.base-path:用于设置 Promethues 的监控路径,默认是通过 /actuator/prometheus 访问,这样配置以后只需要通过 /prometheus 访问

配置完成后重启服务,通过浏览器访问 localhost:8080/prometheus 即可抓取到 Prometheus 的监控数据,效果如下:

修改 Service 配置

kind: Service
apiVersion: v1
metadata:
name: spring-cloud-provider-service
namespace: cloud-demo
labels:
app: spring-cloud-provider-service
micrometer-prometheus-discovery: 'true'
spec:
ports:
- name: metrics
protocol: TCP
port: 8080
targetPort: 8080
selector:
app: spring-cloud-provider

修改后端服务端的 Service

  • 添加了 micrometer-prometheus-discovery: 'true' 这个标签,方便后面 ServiceMonitor 自动抓取
  • 修改 Service 端口映射的名称未 metrics

创建 ServiceMonitor

安装 KubeSphere 平台时已经安装好了 promethus-operator, ServiceMonitor 是 prometheus-operator 后创建的一种自定义资源,Prometheus 可以通过 ServiceMonitor 自动识别带有某些 label 的 service ,并从这些 Service 获取数据。

现在需要让 Promethus 可以抓取到我们暴露的应用监控,所以需要创建一个如下的 ServiceMonitor。

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: micrometer-demo
namespace: cloud-demo
spec:
endpoints:
- interval: 30s
path: /prometheus
port: metrics
namespaceSelector:
matchNames:
- cloud-demo
# any: true
selector:
matchLabels:
micrometer-prometheus-discovery: 'true'

这段 YAML 文件的意思是抓取 namespace 为 cloud-demo,并设置了 micrometer-prometheus-discovery: 'true' 的 labels 的所有 Service,抓取的端口为 metrics,抓取路径为 /prometheus

详细说明一下各字段的意义:

  • metadata 下的 namenamespace 将指定 Service Monitor 所需的一些关键元信息。

  • specendpoints 为服务端点,代表 Prometheus 所需的采集 Metrics 的地址。endpoints 为一个数组,同时可以创建多个 endpoints。每个 endpoints 包含三个字段,每个字段的含义如下:

    • interval:指定 Prometheus 对当前 endpoints 采集的周期。单位为秒,在本次示例中设定为 30s
    • path:指定 Prometheus 的采集路径。设置为 /prometheus,这个跟应用中暴露的监听端口保持一致。
    • port:指定采集数据需要通过的端口,设置为 /metrics 设置的端口为 步骤三 创建 Service 时端口所设置的 name
  • specnamespaceSelector 为需要发现的 Service 的范围。namespaceSelector 包含两个互斥字段,字段的含义如下:

    • any:有且仅有一个值 true,当该字段被设置时,将监听所有符合 Selector 过滤条件的 Service 的变动。
    • matchNames:数组值,指定需要监听的 namespace 的范围。例如,只想监听 defaultcloud-demo 两个命名空间中的 Service,那么 matchNames 设置如下:
    namespaceSelector:
    matchNames:
    - default
    - cloud-demo
  • specselector 用于选择 Service。

    在本次示例所使用的 Service 有 micrometer-prometheus-discovery: 'true' Label,所以 selector 设置如下:

    selector:
    matchLabels:
    micrometer-prometheus-discovery: 'true'

可以通过 kubectl apply -f micrometer-demo.yml 将其部署到集群中。

执行成功后可以在集群的 CRD 下面搜索 ServiceMonitor 并打开可以找到我们部署的 ServiceMonitor 配置。如图所示:

创建自定义监控

访问 集群-> 监控告警-> 自定义监控进入,如图所示:

我们点击创建 可以看到 KubeSphere 已经集成了部分监控面板,这里我们选择 Grafana。

在下一步后系统会让我们上传 JSON 模版,我们可以通过 Grafana 官网下载一些通用的模版配置,这里我们使用的是 [Spring Boot 2.1 Statistics](Spring Boot 2.1 Statistics | Grafana Labs)。在右侧可以下载 JSON 文件。

导入 JSON 后我们就可以看到相关监控指标了。

使用这种方式有个最大问题就是多个应用无法切换,像我们之前部署了 3 个应用在一张图中显示就很乱,所以需要通过外部 Grafana 展示监控数据。

使用外部 Grafana 集成

为了方便,我们直接使用 KubeSphere 提供的应用商店功能安装外部 Grafana。

  1. 添加应用仓库

进入企业空间 -> 应用管理 -> 应用仓库,点击添加,加入 bitnami 应用仓库。

  1. 安装 Grafana
  • 我们依次打开企业空间-项目-点击要安装到的具体项目-点击应用-点击右侧的创建按钮;

  • 弹出对话框中点击从应用模版,从应用仓库列表中选择我们刚刚添加的 bitnami 的仓库,搜索 Grafana 点击后安装即可。

安装完成后我们在服务里给 grafana 的服务开启 NodePort 外部访问,比如我这里的的访问地址为:http://172.30.10.73:28328/

  1. 设置 Grafana 数据源
  • 我们使用管理员账号 admin 登录进 Grafana,默认密码可以在项目的保密字典中的 cloud-grafana-admin 中找到;

  • 登录后我们点击左侧的小齿轮-datasource 在打开页面中选择 Add data source 然后选择 Prometheus 在 URL 中填入我们上面说到的 Prometheus 的 URL 地址。如图所示:

Prometheus 可以通过如下方式找到 kubectl get svc -n kubesphere-monitoring-system

  • 填写后拖到最下面,点击 save&test。
  1. 导入 Dashbord

之后我们就可以看到配置的应用监控了。

多个应用之间可以通过左上角进行切换,符合预期。

附录

本文由博客一文多发平台 OpenWrite 发布!

在 Kubernetes 中实现微服务应用监控的更多相关文章

  1. 使用 Skywalking 对 Kubernetes(K8s)中的微服务进行监控

    1. 概述 老话说的好:任何成功都不是轻易得来的,是不断地坚持与面对的结果. 言归正传,之前我们聊了 SpringCloud 开发的微服务是如何部署在  Kubernetes(K8s)集群中的,今天我 ...

  2. 为什么 kubernetes 天然适合微服务

    最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发三大容器平台从功能方面来看,最后简直是一摸一样.(可参考<容器平台选型的十大模式: ...

  3. 为什么 kubernetes 天然适合微服务 (3)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 四.Kubernetes 本身就是微服务架构 基于上面这十个设计要点,我们再回来看 Kubernetes,会发现 ...

  4. 为什么 kubernetes 天然适合微服务 (2)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 三.微服务化的十个设计要点 微服务有哪些要点呢?第一张图是 SpringCloud 的整个生态. 第二张图是微服 ...

  5. (17)go-micro微服务Prometheus监控

    目录 一 Prometheus监控介绍 1.微服务监控系统promethues介绍 2.微服务监控系统promethues工作流程 二 Prometheus监控重要组件和重要概念 1.微服务监控系统p ...

  6. 如何在Ruby中编写微服务?

    [编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采 ...

  7. Kubernetes才是微服务和DevOps的桥梁

    一.从企业上云的三大架构看容器平台的三种视角 一切都从企业上云的三大架构开始. 如图所示,企业上的三大架构为IT架构,应用架构和数据架构,在不同的公司,不同的人,不同的角色,关注的重点不同. 对于大部 ...

  8. 为什么 kubernetes 天然适合微服务 (1)

    此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发 ...

  9. 微服务日志监控与查询logstash + kafka + elasticsearch

    使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...

  10. 利用 istio 来对运行在 Kubernetes 上的微服务进行管理

    尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...

随机推荐

  1. 人形机器人的AI技术 —— 将一个大问题拆解为若干个小问题

    前文: 人形机器人 -- Figure 01机器人亮相 | OpenAI多模态能力加持 | 与人类流畅对话交互 | 具身智能的GPT-4时刻 所需的AI技术: 人形机器人的软件层面其实有: 视觉模块/ ...

  2. 一些八股:1.fetch 的理解。2.let、const、var

    一. 说说你对 Fetch 的理解,它有哪些优点和不足? Fetch API 是现代 JavaScript 中用于进行网络请求的接口,旨在替代传统的 XMLHttpRequest.它提供了一种更简单. ...

  3. VUE learn

    Vue .js 的官方文档中是这样介绍它的. 简单小巧的核心,渐进式技术拢,足以应付任何规模的应用. 简单小巧是指 vue.js 压缩后大小仅有 17k .所谓渐进式(Progressive ),就是 ...

  4. 神经网络之卷积篇:详解卷积步长(Strided convolutions)

    详解卷积步长 卷积中的步幅是另一个构建卷积神经网络的基本操作,让向展示一个例子. 如果想用3×3的过滤器卷积这个7×7的图像,和之前不同的是,把步幅设置成了2.还和之前一样取左上方的3×3区域的元素的 ...

  5. stm32g070 不同channel区别

    1. TIM 2.UART

  6. Unity FpsSample Demo研究

    1.前言 Unity FpsSample Demo大约是2018发布,用于官方演示MLAPI(NetCode前身)+DOTS的一个FPS多人对战Demo. Demo下载地址(需要安装Git LFS) ...

  7. YOLOv10添加输出各类别训练过程指标

    昨天有群友,在交流群[群号:392784757]里提到了这个需求,进行实现一下 V10 官方代码结构相较于 V8 稍微复杂一些 yolov10 是基于 v8 的代码完成开发,yolov10 进行了继承 ...

  8. Typora中的markdown语法的学习

    markdown语法学习 二级标题 三级标题 四级标题 字体 hello world hello world hello world hello world 引用 我是最nb的 分割线 图片 ctrl ...

  9. Cookie,Session Filter,Listener详解

    HTTP请求的无状态性 HTTP的无状态性是其一个重要的特征,指的是HTTP协议本身并不保留客户端与服务器交互的历史信息,换而言之,即每次的HTTP请求都是独立的,服务器在处理每一个请求时都不会记住前 ...

  10. 安装 Ubuntu / Windows 双系统

    最近给自己的老笔记本换了一块大硬盘,顺便装了 Windows 和 Ubuntu 两个操作系统.记录一下安装过程. 提示:Ubuntu 安装程序可以检测到磁盘已有的 Windows 安装.所以如果先安装 ...