在 Kubernetes 中实现微服务应用监控
张坚,科大讯飞开发工程师,云原生爱好者。
本篇文章我们基于 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下的name和namespace将指定 Service Monitor 所需的一些关键元信息。spec的endpoints为服务端点,代表 Prometheus 所需的采集 Metrics 的地址。endpoints为一个数组,同时可以创建多个endpoints。每个endpoints包含三个字段,每个字段的含义如下:interval:指定 Prometheus 对当前endpoints采集的周期。单位为秒,在本次示例中设定为30s。path:指定 Prometheus 的采集路径。设置为/prometheus,这个跟应用中暴露的监听端口保持一致。port:指定采集数据需要通过的端口,设置为/metrics设置的端口为 步骤三 创建 Service 时端口所设置的name。
spec的namespaceSelector为需要发现的 Service 的范围。namespaceSelector包含两个互斥字段,字段的含义如下:any:有且仅有一个值true,当该字段被设置时,将监听所有符合 Selector 过滤条件的 Service 的变动。matchNames:数组值,指定需要监听的namespace的范围。例如,只想监听default和cloud-demo两个命名空间中的 Service,那么matchNames设置如下:
namespaceSelector:
matchNames:
- default
- cloud-demo
spec的selector用于选择 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。
- 添加应用仓库
进入企业空间 -> 应用管理 -> 应用仓库,点击添加,加入 bitnami 应用仓库。

- 安装 Grafana
我们依次打开企业空间-项目-点击要安装到的具体项目-点击应用-点击右侧的创建按钮;
弹出对话框中点击从应用模版,从应用仓库列表中选择我们刚刚添加的 bitnami 的仓库,搜索 Grafana 点击后安装即可。


安装完成后我们在服务里给 grafana 的服务开启 NodePort 外部访问,比如我这里的的访问地址为:http://172.30.10.73:28328/
- 设置 Grafana 数据源
我们使用管理员账号 admin 登录进 Grafana,默认密码可以在项目的保密字典中的
cloud-grafana-admin中找到;登录后我们点击左侧的小齿轮-datasource 在打开页面中选择 Add data source 然后选择 Prometheus 在 URL 中填入我们上面说到的 Prometheus 的 URL 地址。如图所示:

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

- 填写后拖到最下面,点击 save&test。
- 导入 Dashbord
- 我们点击页面左侧-import;
- 输入我们从 grafana 官网 获得的对应的模版的 id 点击 load(我这里使用的是 Spring Boot 2.1 Statistics | Grafana Labs);
- 在下一步中选择 Prometheus 为我们配置的数据源 点击 import 即可。

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


多个应用之间可以通过左上角进行切换,符合预期。
附录
本文由博客一文多发平台 OpenWrite 发布!
在 Kubernetes 中实现微服务应用监控的更多相关文章
- 使用 Skywalking 对 Kubernetes(K8s)中的微服务进行监控
1. 概述 老话说的好:任何成功都不是轻易得来的,是不断地坚持与面对的结果. 言归正传,之前我们聊了 SpringCloud 开发的微服务是如何部署在 Kubernetes(K8s)集群中的,今天我 ...
- 为什么 kubernetes 天然适合微服务
最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发三大容器平台从功能方面来看,最后简直是一摸一样.(可参考<容器平台选型的十大模式: ...
- 为什么 kubernetes 天然适合微服务 (3)
此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 四.Kubernetes 本身就是微服务架构 基于上面这十个设计要点,我们再回来看 Kubernetes,会发现 ...
- 为什么 kubernetes 天然适合微服务 (2)
此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 三.微服务化的十个设计要点 微服务有哪些要点呢?第一张图是 SpringCloud 的整个生态. 第二张图是微服 ...
- (17)go-micro微服务Prometheus监控
目录 一 Prometheus监控介绍 1.微服务监控系统promethues介绍 2.微服务监控系统promethues工作流程 二 Prometheus监控重要组件和重要概念 1.微服务监控系统p ...
- 如何在Ruby中编写微服务?
[编者按]本文作者为 Pierpaolo Frasa,文章通过详细的案例,介绍了在Ruby中编写微服务时所需注意的方方面面.系国内 ITOM 管理平台 OneAPM 编译呈现. 最近,大家都认为应当采 ...
- Kubernetes才是微服务和DevOps的桥梁
一.从企业上云的三大架构看容器平台的三种视角 一切都从企业上云的三大架构开始. 如图所示,企业上的三大架构为IT架构,应用架构和数据架构,在不同的公司,不同的人,不同的角色,关注的重点不同. 对于大部 ...
- 为什么 kubernetes 天然适合微服务 (1)
此文已由作者刘超授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验 最近总在思考,为什么在支撑容器平台和微服务的竞争中,Kubernetes 会取得最终的胜出,事实上从很多角度出发 ...
- 微服务日志监控与查询logstash + kafka + elasticsearch
使用 logstash + kafka + elasticsearch 实现日志监控 https://blog.csdn.net/github_39939645/article/details/788 ...
- 利用 istio 来对运行在 Kubernetes 上的微服务进行管理
尝试在一个准生产环境下,利用 istio 来对运行在 Kubernetes 上的微服务进行管理. 这一篇是第一篇,将一些主要的坑和环境准备工作. 内容较多,因此无法写成手把手教程,希望读者有一定 Ku ...
随机推荐
- Inno Setup 出现 the drive or unc share you selected does not exist or is not accessible 解决记录
背景 软件是使用Inno Setup的,且安装后,再次安装是默认安装到历史路径.一次用户电脑维修后,发现再次安装后报错 解决办法 取消自动安装到默认路径就好了~ UsePreviousAppDir=n ...
- H5页面\PC端实现QQ客服功能
1.背景 很多应用都有在线客服,最简单是实现就是利用人们常用的QQ 2.实现 步骤一:授权QQ通讯组件(普通QQ都是可以的) 授权链接:https://shang.qq.com/v3/widget.h ...
- Lazysysadmin靶机笔记
Lazysysadmin靶机笔记 概述 lazysysadmin是一台Vulnhub靶机,整体比较简单. 靶机地址:https://pan.baidu.com/s/19nBjhMpGkdBDBFSnM ...
- 为了给Javaer落地DDD,我们不得不写开源组件
本文上回书接<这是DDD建模最难的部分(其实很简单)>,欢迎关注我的同名公众号. https://mp.weixin.qq.com/s/HZKMLF0_I10iczzp2mAR-w 故 ...
- css居中的多种方式
1 <!DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="U ...
- 新员工一口气写完了这些C语言例子,领导给他转正了!
持续更新中... 很多想从事嵌入式Linux开发的老铁问一口君,有没有快速提升自己编程水平的小例子? 一口君根据自己多年工作经验,整理了一些基于Linux的c语言的非常实用的小例子, 这些例子在嵌入式 ...
- 平衡搜索树-AVL树 图文详解 (万字长文)
目录 AVL树 AVL树的概念 AVL树节点的定义: AVL树的插入 基本情况分析 平衡因子对应的操作 旋转操作 分析需要旋转的情况 结论 4种旋转操方法与特征 6种双旋平衡因子特征 代码实现 四种旋 ...
- 基于python的文字转图片工具
地址 https://hub.docker.com/r/rainsccc/strtoimg 拉取镜像后,可以启动一个容器来运行该应用程序.以下命令会启动容器并将其端口映射到主机上: docker ru ...
- 安装vsftp服务器的时候遇到的问题
安装vsftp服务器的时候遇到的问题 环境说明: 系统:阿里云centos7 面板:宝塔面板 问题描述: 在centos7中安装VSFTP的时候,使用命令行,ftp 然后输入用户名和密码,登陆之后,p ...
- 从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享
从数据洞察到智能决策:合合信息&infiniflow RAG技术的实战案例分享 标题取自 LLamaIndex,这个内容最早提出于今年 2 月份 LlamaIndex 官方博客.从 22 年 ...