kubernete部署prometheus监控sring-boot程序

news/2024/5/18 21:51:28 标签: prometheus

目录

prometheus%E5%9F%BA%E7%A1%80%E7%8E%AF%E5%A2%83-toc" style="margin-left:0px;">1、kubernete集群环境以及prometheus基础环境

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

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

prometheus-toc" style="margin-left:40px;">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、准备部署文件


prometheus%E5%9F%BA%E7%A1%80%E7%8E%AF%E5%A2%83">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
 

prometheus">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.niftyadmin.cn/n/1831357.html

相关文章

请领导批阅文件怎么说_领导让你当众说心得体会,你要怎么说,才获得领导和同事的认可?...

作为职场人&#xff0c;当自己做出成绩之后&#xff0c;被领导当众点名表扬&#xff0c;是一件值得高兴的事情。当然&#xff0c;很多领导在表扬员工之后&#xff0c;也会让员工做一个小小的心得分享&#xff0c;那么作为职场人&#xff0c;我们可要注意了。因为这个环节一旦说…

iOS 使用KVO

学习并使用KVO有段时间了&#xff0c;在之前也简单的介绍了KVO机制&#xff0c; 这种机制提供了监听某些类属性变化的机制.在MVC中,简单的说,通过监听M的变化,可以及时更新V.因为监听属性明确,当有变化时就直接传递到观察者. 考虑这样一种情况:请求某网站的rss,并将内容解析出来…

python培训班都能满员吗_针灸培训班哪里好,能学到技能吗?

你能从中医针灸培训课程中学到什么吗?许多人想学中医针灸&#xff0c;但他们对中医针灸培训班的课程有疑问。学习针灸课程后&#xff0c;他们能学到什么真正的东西吗?首先&#xff0c;看针灸培训班的周期是多长&#xff0c;有些学习班&#xff0c;可能就是学习三五天&#xf…

Codeforces 487B Strip

题意&#xff1a;给你一个数组&#xff0c;现在让你分割这个数组&#xff0c;要求是数组每一块最少 L 个数 且 每一块中 极值 不超过 s 解题思路&#xff1a; 1&#xff09;dp&#xff0c;从1 到 n 预处理左边的不能更新 离i 最近的点 &#xff0c;然后线段树找出最小值。 2&…

详解LVM工作原理及企业中高级应用实例分析

dayong_guo 的BLOG详解LVM工作原理及企业中高级应用实例分析Linux 内核中的 Device Mapper 机制转载于:https://blog.51cto.com/chenshenglong/1372714

dataloader 源码_带你从零掌握迭代器及构建最简 DataLoader

&#xfeff;0 摘要本文本意是写 pytorch 中 DataLoader 源码学习心得&#xff0c;但是发现自己对迭代器和生成器的掌握比较水&#xff0c;不够牢固&#xff0c;而我也没有搜到能够解决我所有疑问的解答文章&#xff0c;因此诞生了这篇文章。通过本文你将能够零基础深入掌握 py…

android 系统回调onSizeChange, onMeasure, onLayout调用时机

android 系统回调onSizeChange, onMeasure, onLayout调用时机-LotusLoveNature 最新项目中常用到上面三个系统回调&#xff0c;所以就在想&#xff0c;这三个用的时机到底是怎么样的&#xff1f;今天做了实验&#xff1a; <?xml version"1.0" encoding"utf-…

pc构件生产线及设备_【图片】装配式预制件生产线,建筑装配式生产线价格15805376300【预制构件吧】...

装配式建筑生产工艺、装配式建筑PC生产线设备装配式建筑生产工艺是在指在流水线上通过可移动式模台生产装配式建筑所用的钢筋混凝土预制构件&#xff0c;具体的工艺流程包括&#xff1a;清理模台——喷涂划线——安装边摸——绑扎钢筋——浇筑混凝土——振动——拉毛——预养—…