前言

虽然可以使用jvisualvm之类的工具监控java项目,但是集群环境下,还是捉襟见肘,下面介绍如何用主流的prometheus来监控java项目。

java项目配置

在pom.xml中添加依赖

        <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<!--暴露histogram-->
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
<version>1.5.1</version>
<!--<version>1.1.3</version>-->
</dependency>
<!-- 可选, 用于进程内存使用图表 -->
<dependency>
<groupId>io.github.mweirauch</groupId>
<artifactId>micrometer-jvm-extras</artifactId>
<version>0.2.0</version>
</dependency>

修改spring boot配置(application.yml)

server:
port: 8096 spring:
application:
name: gift management:
endpoint:
health:
show-details: always
endpoints:
web:
exposure:
include: 'prometheus' # 暴露/actuator/prometheus
metrics:
tags:
application: ${spring.application.name} # 暴露的数据中添加application label

非k8s下java项目监控

打包:mvn clean package

启动项目:java -jar xxx.jar

请求:http://xxx:8096/qzcsbj/actuator/prometheus,查看暴露的数据

在Prometheus中添加配置:vim prometheus.yml

  - job_name: "gift"
metrics_path: "/qzcsbj/actuator/prometheus"
static_configs:
- targets: ["qzcsbj:8096"]

重启prometheus:systemctl restart prometheus

访问prometheus:http://ip:9090/targets

targets下可以看到这个端点

grafana导入模板:4701

效果如下:

k8s下java项目监控

打包:mvn clean package -Dmaven.test.skip=true

打镜像:docker build -t 192.168.117.160/gifts/gift:v1 .

把镜像推送到镜像仓库:docker push 192.168.117.160/gifts/gift:v1

编写资源yaml文件:deploy和svc

vim gift.yaml

---
apiVersion: apps/v1
kind: Deployment
metadata:
name: gift-java-deploy
namespace: gift
spec:
replicas: 1
selector:
matchLabels:
k8s-app: gift
template:
metadata:
labels:
k8s-app: gift
spec:
imagePullSecrets:
- name: gifts-registry containers:
- name: gift
image: 192.168.117.160/gifts/gift:v1215
imagePullPolicy: IfNotPresent
ports:
- containerPort: 8096 ---
apiVersion: v1
kind: Service
metadata:
name: gift-java-deploy-svc
namespace: gift
labels:
k8s-app: gift-java-deploy-svc
spec:
type: ClusterIP
selector:
k8s-app: gift
ports:
- name: gift-java-deploy-svc-api
port: 8096
targetPort: 8096
protocol: TCP

创建资源:kubectl apply -f gift.yaml

查看资源:kubectl get all -n gift

编写servicemonitor资源yaml文件:

vim gift-sm.yaml

---
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
name: java-servicemonitor
namespace: monitoring
labels:
k8s-app: gift
spec:
endpoints:
- port: gift-java-deploy-svc-api
interval: 30s
scheme: http
path: '/qzcsbj/actuator/prometheus'
selector:
matchLabels:
k8s-app: gift-java-deploy-svc
namespaceSelector:
matchNames:
- gift

创建资源:kubectl apply -f gift-sm.yaml

查看资源:kubectl get servicemonitor -n monitoring

查看prometheus端口:kubectl get svc -n monitoring

访问prometheus:http://192.168.117.162:30576/

config已经自动生成配置:搜索gift

自动发现

targets

查询数据:jvm_threads_live_threads

grafana导入模板:12856

效果:

思考:看到这个监控数据,你的思路是?

【bak】:https://www.cnblogs.com/uncleyong/p/15688404.html

【性能项目实战:jmeter+k8s+微服务+skywalking+efk】汇总

详见:https://www.cnblogs.com/uncleyong/p/15475614.html

prometheus监控java项目(jvm等):k8s外、k8s内的更多相关文章

  1. kubernetes生态--交付prometheus监控及grafana炫酷dashboard到k8s集群

    由于docker容器的特殊性,传统的zabbix无法对k8s集群内的docker状态进行监控,所以需要使用prometheus来进行监控: 什么是Prometheus? Prometheus是由Sou ...

  2. Spring Boot 使用 Micrometer 集成 Prometheus 监控 Java 应用性能

    转载自:https://cloud.tencent.com/developer/article/1508319 文章目录1.Micrometer 介绍2.环境.软件准备3.Spring Boot 工程 ...

  3. k8s中prometheus监控k8s外mysql

    k8s外安装mysql https://www.cnblogs.com/uncleyong/p/10739530.html 配置MySQL Exporter采集MySQL监控数据 创建yaml文件:v ...

  4. 手把手教你使用 Prometheus 监控 JVM

    概述 当你的 Java 业务容器化上 K8S 后,如果对其进行监控呢?Prometheus 社区开发了 JMX Exporter 来导出 JVM 的监控指标,以便使用 Prometheus 来采集监控 ...

  5. Prometheus监控k8s企业级应用

    Prometheus架构图 常见的镜像 pod 备注 kube-state-metric 用来收集K8S基本状态信息的监控代理 node-exporter 专门用来收集K8S运算节点基础信息,需要部署 ...

  6. Prometheus 监控K8S Node监控

    Prometheus 监控K8S Node监控 Prometheus社区提供的NodeExporter项目可以对主机的关键度量指标进行监控,通过Kubernetes的DeamonSet可以在各个主机节 ...

  7. K8s之Prometheus监控

    目录 容器监控与报警 Prometheus prometheus简介 prometheus系统架构 prometheus 安装方式 容器方式安装prometheus operator部署 克隆项目 创 ...

  8. 利用JConsole工具监控java程序内存和JVM

    一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29.218:7070/training/ 部署的应用服务器为tomcat6.028 启动tomcat服 ...

  9. (转)利用JConsole工具监控java程序内存和JVM

    转自:http://www.cnblogs.com/luihengk/p/5446279.html 一.找到java应用程序对应的进程PI 性能测试应用程序访问地址:http://192.168.29 ...

随机推荐

  1. Java 各个版本中的新特性

    新特性你知道多少? Java 8 Lambda 表达式 接口增加默认方法等 方法引用 流 Stream Java 9 模块系统 交互式工具jshell .of() 创建不可变集合 接口支持私有方法 更 ...

  2. redis 入门使用

     一.Redis 数据类型及结构特点 Redis 最常见的5中数据结构有 String(字符串),List(列表),Set(集合),Hash(散列),Sorted Sets (有序集合),下表简单总结 ...

  3. 微服务探索之路02篇liunx ubuntu服务器部署k8s(kubernetes)-kubernetes/dashboard

    本章介绍所需环境:ubuntu18.04,建立在上一篇微服务探索之路01篇已经安装了docker的基础上. 1 替换k8s镜像源为国内镜像 进入目录 cd /etc/apt/sources.list. ...

  4. 【刷题-LeetCode】203. Remove Linked List Elements

    Remove Linked List Elements Remove all elements from a linked list of integers that have value *val* ...

  5. 【get√】golang中实现从腾讯云CVM查询网卡流量的两种方法

    公众号文章链接 主要参考了以下位置的资料: 云服务器监控接口 腾讯云go-sdk example 方法一:使用腾讯云go-sdk go.mod文件中增加这样一行: github.com/tencent ...

  6. 34.AVL树

    1.创建Node结点 class Node { int value; Node left; Node right; public Node(int value) { this.value = valu ...

  7. Go 面向对象编程应用

    #### Go 面向对象编程应用前面学习了很多的基础知识,这一节来实际写一个小案例:涉及到的知识: 1. 数组的基本使用2. 结构体3. 切片 4. 方法5. 循环6. 函数返回值(命名返回值,普通返 ...

  8. Filter的拦截路径

    Filter的拦截路径 精确匹配 <url-pattern>/target.jsp</url-pattern> 以上配置的路径,表示请求地址必须为:http://ip.port ...

  9. python3调用js的库之execjs

    执行JS的类库:execjs,PyV8,selenium,node execjs是一个比较好用且容易上手的类库(支持py2,与py3),支持 JS runtime. 1.安装: pip install ...

  10. c语言之sizeof总结+strlen函数

    一.sizeof的概念 Sizeof是C语言的一种单目操作符,如C语言的其他操作符++.–等.它并不是函数.Sizeof操作符以字节形式给出了其操作数的存储大小.操作数可以是一个表达式或括在括号内的类 ...