kubernete部署prometheus监控sring-boot程序

news2024/11/16 1:21:30

目录

1、kubernete集群环境以及prometheus基础环境

2、kubernetes监控集群内部的spring-boot程序

2.1、application.yml系统配置,endpoints相关设置

2.2、引入监控的相关依赖文件  pom.xml ,主要是spring-boot-starter-actuator和micrometer-registry-prometheus

2.3、Dockerfile构建基础镜像 

2.4、k8s环境部署spring-boot-.app.yaml

2.5、k8s部署spring-boot-app的servicemonitor

2.6、kubesphere上未安装grafana,手动部署

3、kubernetes监控集群外部的程序

3.1、准备部署文件


1、kubernete集群环境以及prometheus基础环境

2、kubernetes监控集群内部的spring-boot程序

效果图

使用Spring Boot2.1监控系统的相关信息,grafana进行数据展示。

Prmetheus获取/actuator/prometheus接口的数据,target进行展示

k8s部署spring-boot成功,通过swagger3进行测试访问

 pod容器进行端口的映射

进入容器内部,访问/actuator/prometheus地址 

2.1、application.yml系统配置,endpoints相关设置

server:
  port: 8080
  tomcat:
    max-http-form-post-size: 200MB
springfox:
  documentation:
    swagger-ui:
      enabled: true
spring:
  redis:
    host: redis.apisix.svc.cluster.local
    port: 6379
    database: 0
    lettuce:
      pool:
        max-active: 8
        max-wait: -1ms
        max-idle: 8
        min-idle: 0
        time-between-eviction-runs: 6s
      shutdown-timeout: 1000ms
management:
  endpoints:
    web:
      exposure:
        include: '*'
        #include:
          #- 'prometheus'
          #- 'health'
          #- 'info'
    jmx:
      exposure:
        include: '*'
    enabled-by-default: true
  endpoint:
    metrics:
      enabled: true
    beans:
      cache:
        time-to-live: 10s
    shutdown:
      enabled: true
  metrics:
    export:
      prometheus:
        enabled: true
    tags:
      application: spring-boot-app
  health:
    jms:
      enabled: true
  server:
    base-path: /
    port: 9091
 

2.2、引入监控的相关依赖文件  pom.xml ,主要是spring-boot-starter-actuator和micrometer-registry-prometheus

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.4.5</version>
        <relativePath/>
    </parent>
    <artifactId>spring-boot-app</artifactId>
    <name>spring-boot-app</name>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>io.micrometer</groupId>
            <artifactId>micrometer-registry-prometheus</artifactId>
        </dependency>
    </dependencies>
</project>
 

2.3、Dockerfile构建基础镜像 

运行命令docker build -t zhxl1989/spring-boot-app:latest .

删除none镜像

docker images  | grep none | awk '{print $3}' | xargs docker rmi -f

FROM centos:7
ENV MYPATH /root
WORKDIR $MYPATH
RUN yum -y install vim git wget
RUN mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
RUN wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
RUN yum clean all && yum makecache && yum update -y &&  yum -y install gcc gcc-c++ kernel-devel yum-utils device-mapper-persistent-data lvm2 tcpdump
RUN yum -y install net-tools
RUN yum update -y && yum install -y java-1.8.0-openjdk
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
RUN yum install libpcap libpcap-devel -y
RUN yum -y install gcc gcc-c++ automake make pam-devel openldap-devel cyrus-sasl-devel openssl-devel wget telnet net-tools
VOLUME /tmp
WORKDIR /home/spring-boot-app/
COPY /target/lib /home/spring-boot-app/lib
COPY /target/config /home/spring-boot-app/config
COPY /target/spring-boot-app.jar /home/spring-boot-app/spring-boot-app.jar
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo 'Asia/Shanghai' >/etc/timezone
EXPOSE 8080
EXPOSE 9091
...

省略
 

2.4、k8s环境部署spring-boot-.app.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: spring-boot-app
  namespace: apisix
spec:
  replicas: 1
  selector:
    matchLabels:
      app: spring-boot-app
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
  template:
    metadata:
      labels:
        app: spring-boot-app
        release: default
    spec:
      restartPolicy: Always
      containers:
        - name: spring-boot-app
          image: zhxl1989/spring-boot-app:latest
          imagePullPolicy: IfNotPresent
          ports:
            - name: http
              containerPort: 8080
            - name: actuator
              containerPort: 9091
            - name: debug
              containerPort: 5555
          volumeMounts:
            - mountPath: /etc/localtime
              name: volume-localtime
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime

---

apiVersion: v1
kind: Service
metadata:
  name: spring-boot-app
  namespace: apisix
  labels:
    app: spring-boot-app
spec:
  #type: ClusterIP
  type: NodePort
  ports:
    - name: http
      port: 8080
      protocol: TCP
      targetPort: 8080
      nodePort: 30153
    - name: actuator
      port: 9091
      protocol: TCP
      targetPort: 9091
      nodePort: 30152
    - name: debug
      port: 5555
      protocol: TCP
      targetPort: 5555
      nodePort: 30151
  selector:
    app: spring-boot-app

2.5、k8s部署spring-boot-app的servicemonitor

apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
  name: spring-boot-app
  namespace: demo
  #service和ServiceMonitor开始配置后,的Service Discovery有数据,但是状态UP一直为0
  #target一直找不到数据
  #label下写成k8s-app,Service Discovery有数据,Target无数据,不知道为什么
  #改成app出现正常了
  #ServiceMonitor使用的namespace一定要存在,和service的namespace可以不一样
  labels:
    app: spring-boot-app
spec:
  endpoints:
    - interval: 15s
      scheme: http
      path: /actuator/prometheus
      port: actuator
      honorLabels: true
  jobLabel: app
  namespaceSelector:
    matchNames:
      - apisix
  selector:
    matchLabels:
      app: spring-boot-app 

2.6、kubesphere上未安装grafana,手动部署

apiVersion: v1
kind: PersistentVolumeClaim
metadata:
  name: grafana-pvc
  namespace: apisix
spec:
  storageClassName: nfs-client
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 10Gi
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: grafana
  name: grafana
  namespace: apisix
spec:
  selector:
    matchLabels:
      app: grafana
  template:
    metadata:
      labels:
        app: grafana
    spec:
      securityContext:
        fsGroup: 472
        supplementalGroups:
          - 0
      containers:
        - name: grafana
          image: grafana/grafana:9.1.0
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 3000
              name: http-grafana
              protocol: TCP
          readinessProbe:
            failureThreshold: 3
            httpGet:
              path: /robots.txt
              port: 3000
              scheme: HTTP
            initialDelaySeconds: 10
            periodSeconds: 30
            successThreshold: 1
            timeoutSeconds: 2
          livenessProbe:
            failureThreshold: 3
            initialDelaySeconds: 30
            periodSeconds: 10
            successThreshold: 1
            tcpSocket:
              port: 3000
            timeoutSeconds: 1
          resources:
            requests:
              cpu: 250m
              memory: 750Mi
          volumeMounts:
            - mountPath: /var/lib/grafana
              name: grafana-pv
      volumes:
        - name: grafana-pv
          persistentVolumeClaim:
            claimName: grafana-pvc
---
apiVersion: v1
kind: Service
metadata:
  name: grafana
  namespace: apisix
spec:
  ports:
    - port: 3000
      protocol: TCP
      targetPort: http-grafana
  selector:
    app: grafana
  sessionAffinity: None
  type: LoadBalancer

3、kubernetes监控集群外部的程序

3.1、准备部署文件

k8s-gitlab-ci-demo-deplyment.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: k8s-gitlab-ci-demo
  namespace: demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: k8s-gitlab-ci-demo
  strategy:
    type: RollingUpdate
    rollingUpdate:
      maxUnavailable: 25%
      maxSurge: 25%
  revisionHistoryLimit: 10
  progressDeadlineSeconds: 600
  template:
    metadata:
      labels:
        app: k8s-gitlab-ci-demo
        release: default
    spec:
      restartPolicy: Always
      containers:
        - name: k8s-gitlab-ci-demo
          image: zhxl1989/k8s-gitlab-ci-demo:latest
          imagePullPolicy: IfNotPresent
          ports:
            - containerPort: 8089
              name: http
          resources:
            limits:
              cpu: '1'
              memory: 2Gi
            requests:
              cpu: 500m
              memory: 1Gi
          volumeMounts:
            - mountPath: /etc/localtime
              name: volume-localtime
      volumes:
        - hostPath:
            path: /etc/localtime
            type: ''
          name: volume-localtime

k8s-gitlab-ci-deno-service.yaml ,service中添加kind: Endpoints,指定宿主机的ip端口信息,在k8s集群外面再启动一个java进程

apiVersion: v1
kind: Service
metadata:
  labels:
    app: k8s-gitlab-ci-demo
  name: k8s-gitlab-ci-demo
  namespace: demo
spec:
  type: ClusterIP
  ports:
    - name: http
      port: 8089
      protocol: TCP
      targetPort: 8089
---
apiVersion: v1
kind: Endpoints
metadata:
  labels:
    app: k8s-gitlab-ci-demo
  name: k8s-gitlab-ci-demo
  namespace: demo
subsets:
  - addresses:
      - ip: 10.10.10.99
    ports:
      - name: http
        port: 8089
        protocol: TCP

在10.10.10.99上通过java -jar启动程序

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/709835.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ModaHub魔搭社区:向量数据库Milvus产品问题(二)

目录 为什么向量距离计算方式是内积时&#xff0c;搜索出来的 top1 不是目标向量本身&#xff1f; 对集合分区的查询是否会受到集合大小的影响&#xff0c;尤其在集合数据量高达一亿数据量时&#xff1f; 如果只是搜索集合中的部分分区&#xff0c;整个集合的数据会全部加载…

表单(form) post 方式提交时的编码与乱码(上)

在上一篇章中谈论了表单以 get 提交时的编码与乱码问题, 这一章中将讨论以 post 方式提交时的编码与乱码问题. 在前面也同时提到, 表单有一个叫 enctype 的属性, 它有两个值, application/x-www-form-urlencoded 和 multipart/form-data. 这一属性实际只对 post 方式起作用, …

@Configuration 和 @Component 的区别 ,别再瞎用了!

一句话概括就是 Configuration 中所有带 Bean 注解的方法都会被动态代理&#xff0c;因此调用该方法返回的都是同一个实例。 理解&#xff1a;调用Configuration类中的Bean注解的方法&#xff0c;返回的是同一个示例&#xff1b;而调用Component类中的Bean注解的方法&#xff…

List, Set, Ordered-SetHash

前言 本文小结Redis中List&#xff0c;Set&#xff0c;ZSet和Hash四种数据类型的&#xff0c;基本特点&#xff0c;使用场景和实现方式。 一、List 1. 基本特点 a. 作为数组&#xff0c;基于下标索引操作, 但支持正向索引和反向索引; b. 作为链表, 支持高效插入&#xff1b…

信息安全-应用安全-定制化白盒检测 | 越权漏洞治理分享

目录 一、背景 二、面临的挑战 三、治理目标 四、解决方案 4.1 系统架构 4.2 鉴权函数 4.3 告警识别 4.4 鉴权分 五、未来的白盒检测方向 六、越权治理 七、小结 一、背景 在漏洞扫描领域&#xff0c;主流的扫描方式分为黑盒扫描和白盒扫描&#xff0c;其中源代码安…

MYSQL-主键外键约束

主键语法: 在创建表指定列数据类型时在后面加(可以结合AUTO_INCREMENT) PRIMARY KEY 主键要短&#xff0c;可唯一标识记录&#xff0c;且永不改变。 外键语法: 第一个column_name是被指定外键的本表列名 table_name是主键的表名 第二个column_name是主键列名 FOREIGN KE…

使用DataX同步数据(小白步骤,一看就懂)

详细文档说明,及图文讲解 ​​​​​​datax的异构数据同步资源-CSDN文库 Datax简介 下载datax软件,从开源镜像下载

python接口自动化(七)--状态码详解对照表(详解)

简介 我们为啥要了解状态码&#xff0c;从它的作用&#xff0c;就不言而喻了。如果不了解&#xff0c;我们就会像个无头苍蝇&#xff0c;横冲直撞。遇到问题也不知道从何处入手&#xff0c;就是想找别人帮忙&#xff0c;也不知道是找前端还是后端的工程师。 状态码的作用是&…

串口接收不定长数据的实现

使用串口进行数据的收发在嵌入式产品中是很常用的一种通信方式&#xff0c;因为串口的简单使用&#xff0c;很容易就被选为产品中数据交互的通信手段。 基于串口进行开发的功能有很多&#xff0c;比如同类/不同类产品之间的通信&#xff0c;RS485通信&#xff0c;RS232通信方式…

(二)线程的六种状态及上下文切换

&#xff08;二&#xff09;线程的六种状态及上下文切换 2.1 操作系统中线程的状态及切换2.2 Java 中线程的六种状态01、NEW&#xff08;线程尚未启动&#xff09;02、RUNNABLE&#xff08;运行中&#xff09;03、BLOCKED&#xff08;阻塞状态&#xff09;04、WAITING&#xff…

移动端微信小程序学习

目录 小程序和web端的不同 小程序的宿主环境 通信 组件 视图容器​编辑 text组件 button image ​编辑 API api三大分类 模板语法 事件绑定 ​编辑 事件传参​编辑 bindinput 条件渲染 列表渲染 ​编辑 全局配置 window 页面配置 网络数据请求 ​编辑 GET请求 POST…

近轴成像的相关性质

本文介绍薄透镜近轴成像的一些性质&#xff0c;所谓近轴成像&#xff0c;就是入射光线非常靠近光轴&#xff0c;意味着入射角很小。在介绍这些性质之前&#xff0c;我们先来看看三角函数的泰勒展开&#xff1a; sin ⁡ θ θ − θ 3 3 ! θ 5 5 ! − θ 7 7 ! . . . \sin{\…

#10047. 「一本通 2.2 练习 3」似乎在梦中见过的样子(内附封面)

题目描述 原题来自&#xff1a;2014 年湖北省队互测 Week2 「Madoka&#xff0c;不要相信 QB&#xff01;」伴随着 Homura 的失望地喊叫&#xff0c;Madoka 与 QB 签订了契约。 这是 Modoka 的一个噩梦&#xff0c;也同时是上个轮回中所发生的事。为了使这一次 Madoka 不再与…

JVM类加载机制-JVM(一)

我们运行一个.class文件&#xff0c;windows下的java.exe调用底层jvm.dll文件创建java虚拟机&#xff08;c实现&#xff09;。创建一个引导类加载器实例&#xff08;c实现&#xff09;C调用java代码Launcher&#xff0c;该类创建其他java类加载器。Launcher.getClassLoader()调…

【算法】最长公共子序列编辑距离(两个序列之间的DP)

文章目录 最长公共子序列&#xff08;LCS&#xff09;编辑距离&#xff08;Edit Distance&#xff09;总结相关题目练习583. 两个字符串的删除操作 https://leetcode.cn/problems/delete-operation-for-two-strings/712. 两个字符串的最小ASCII删除和 https://leetcode.cn/prob…

BWA序列比对方法丨针对较大基因组的并行计算和性能优化方式,利用多线程和负载均衡策略提高效率

BWA 序列比对 高通量测序技术日新月异发展迅猛&#xff0c;产生了数亿级大数据&#xff0c;生命的世界由DNA序列ATCG组成&#xff0c;正如计算机的世界由二进制01组成。 高通量测序的工作实质是把一本生命字典撕成碎片&#xff0c;然后每人手里拿一片&#xff0c;招募成千上万…

【洛谷】B3644 【模板】拓扑排序 / 家谱树(用邻接表存储和其他题解不一样哦)

本薅蒻通过这次学到的知识点&#xff08;本人认为好用的东西&#xff09;&#xff1a; 1&#xff1a; &#xff08;情况适用于输入的x为0时结束输入&#xff09; 2&#xff1a; 先输出“t”(就是因为这里wa了好几发&#xff0c;555555) 原本是在 if里面输出的&#xff0c;这…

mysql通过存储过程解决ERROR 1060 (42S21): Duplicate column的问题

问题描述 实际的日常开发工作中&#xff0c;经常需要对现有表的结构作出变更&#xff0c;涉及到sql相关的操作&#xff0c;基本都通过初始化脚本来完成&#xff0c;如果初始化脚本运行失败或者遇到其他问题&#xff0c;可能导致sql部分执行&#xff0c;不分失败的问题&#xf…

ModaHub ——向量数据库Milvus特征向量和预写式日志教程

目录 特征向量 什么是特征向量 特征向量的优势 应用领域 预写式日志 数据可靠性 缓冲区设置 旧日志删除 特征向量 什么是特征向量 向量是具有一定大小和方向的量&#xff0c;可以简单理解为一串数字的集合&#xff0c;就像一行多列的矩阵&#xff0c;比如&#xff1a…

领域事件驱动(三)子域

上一章对领域层的相关概念做了阐述 应用服务 应用层作为展现层与领域层的桥梁&#xff0c;是用来表达用例和用户故事的主要手段。 应用层通过应用服务接口来暴露系统的全部功能。在应用服务的实现中&#xff0c;它负责编排和转发&#xff0c;它将要实现的功能委托给一个或多…