k8s部署promentheus 使用 grafana监控springboot

k8s部署promentheus 使用 grafana监控springboot

大纲

  • 基础准备
  • 部署springboot pod (k8s集群内)
  • 配置springboot pod DSN 域名
  • 安装promentheus (k8s集群内)
  • 安装grafana (k8s集群外)

基础准备

  • 1 k8s集群 1.17
  • 2 promentheus-2.34.0
  • 3 grafana已经安装

整体架构图如下,在k8s集群内部部署promentheus 用于收集各个业务服务的运行时JVM状态

在这里插入图片描述

部署springboot pod

springboot使用my-docker-demo-sp-user 这个项目
my-docker-demo-sp-user中已经存在两个接口 /cpu 、/memory 用于消耗cpu 和 内存 用于后续状态监控报警

@RequestMapping("/memory")
	public String memery() {
		System.out.println(list.size());
	    new Thread(()->{
	    	while(true){
	    		list.add(new String[1024][1024]);
		    	System.out.println("加数据");
	    	}
	    }).start();
		return "ok\n\n";
	}

public String cpu(@RequestParam("s") int s) {
		int cpu = Runtime.getRuntime().availableProcessors();
		.... 省略
		for (int i=0;i<cpu;i++) {			
			new Thread(new Runnable() {
				public void run() {
					Random ra = new Random();
					while(flag){
						int i = ra.nextInt(100000);
						Math.sqrt(i);
					}
				}
			}).start();
		}
		return "当前系统 cpu 数量:" + cpu +"\n\n";
	}

将 springboot 制作为镜像

制作镜像注意用到4个文件

  • config.yml 配置监控metrics
  • Dockerfile 镜像制作文件
  • my-docker-demo-sp-user.jar 打包后的jar
  • jmx_prometheus_javaagent-0.17.2.jar 用于监控暴露metrics

相关文件在 my-docker-demo-sp-user/deploy 文件夹下

注意Dockerfile 使用-javaagent 暴露metrics 端口为12345

ENTRYPOINT ["java","-javaagent:jmx_prometheus_javaagent-0.17.2.jar=12345:config.yml", "-jar","my-docker-demo-sp-user.jar"]

docker 镜像制作参考文章 《docker创建java镜像文件总结 快速上手》

在这里插入图片描述

推送镜像到阿里云私库

docker tag user-service registry.cn-hangzhou.aliyuncs.com/jimliu/user-service
docker push registry.cn-hangzhou.aliyuncs.com/jimliu/user-service

在这里插入图片描述

阿里云私库参考文章 《阿里云docker私库使用总结》

制作springboot pod部署文件

部署pod有两个关键点

  • 1 配置Pod自定义域名
  • 2 创建headless Service

Pod自定义域名参考 文章 《k8s-Pod域名学习总结》

deploy.yaml内容如下

apiVersion: apps/v1
kind: Deployment
metadata:
   name: user-service-deploy
spec:
    ....省略
    template:
       metadata:
           labels:
              app: user-service   
       spec:     
            # hostname + subdomain 自定义Pod的域名
            hostname: user-service-host
            subdomain: user-service-inner-domain
            containers:
                ....省略  
---

apiVersion: v1
kind: Service
metadata:  
  name: user-service-inner-domain  # 注意name为 pod中 subdomain 的名称
spec:
  selector:  
    app: user-service
  clusterIP: None  #注意  clusterIP 为None

详细内容见 my-docker-demo-sp-user/deploy/deploy.yaml

此时springboot pod 在k8s集群内的域名如下
user-service-host.user-service-inner-domain.default.svc.cluster.local

测试Pod 部署情况以及域名情况

在这里插入图片描述

到此 springboot pod部署完成

安装promentheus

安装promentheus 需要注意一下几点

  • 1 创建一个独立namespace 与业务代码隔离
  • 2 使用ConfigMap 保存promentheus 配置信息
  • 3 指定promentheus 启动参数让其可以动态加载配置

创建Namespace与ConfigMap

ConfigMap配置如下

apiVersion: v1
kind: ConfigMap
metadata:
  name: prometheus-config
  namespace: promentheus
data:
  prometheus.yml: |
    global:
      scrape_interval:     15s
      evaluation_interval: 15s
    scrape_configs:
    
    - job_name: 'user-service-metrics'
      metrics_path: /metrics
      static_configs:
        - targets: ['user-service-host.user-service-inner-domain.default.svc.cluster.local:12345']

在这里插入图片描述

部署promentheus 服务端

关键是 添加**–web.enable-lifecycle** 参数 让prometheus热加载配置文件

spec:
  containers:
  - image: bitnami/prometheus:2.34.0
    name: prometheus-containers
    command:
        - "/opt/bitnami/prometheus/bin/prometheus" #注意prometheus命令位置
        args:
        - "--config.file=/etc/prometheus/prometheus.yml"
        - "--storage.tsdb.path=/prometheus"
        - "--storage.tsdb.retention.time=12h"
        - "--web.enable-lifecycle"

在这里插入图片描述

测试ok
在这里插入图片描述

测试动态添加新配置

再部署一个order-service pod

此时 order-service pod的集群内域名为 
order-service-host.order-service-inner-domain.default.svc.cluster.local

编辑prometheus configmap

kubectl edit cm prometheus-config  -n promentheus

在这里插入图片描述
在这里插入图片描述

刷新prometheus配置

curl -X POST http://192.168.0.160:9090/-/reload

在这里插入图片描述

配置 grafana 查看springboot项目监控

配置grafana 面板用于监控springboot 项目

grafana中配置JVM监控面板参考 《prometheus监控springboot项目 使用grafana展示》

配置prometheus数据源

配置数据源 使用上一步中配置的prometheus

在这里插入图片描述

添加新的面板

这里使用的是
https://grafana.com/grafana/dashboards/8563-jvm-dashboard/

在这里插入图片描述

测试监控

调用接口让cpu使用率达到 100%

http://10.244.1.46:5588/cpu?s=90

在这里插入图片描述

在grafana面板上可以看到效果

在这里插入图片描述

调用接口让内存使用率达到 100%

curl http://10.244.1.46:5588/memory

在这里插入图片描述

在grafana面板上可以看到效果

在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

寂寞的4角钱

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

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

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

打赏作者

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

抵扣说明:

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

余额充值