1、获取spring demo
yum install git wget lrzsz -y
mkdir /data
cd /data
git clone https://github.com/wqqing77/demo.git
2、安装jdk11
#下载jdk11,需要注删oracle的帐号,下载方法此处略
https://www.oracle.com/cn/java/technologies/javase-jdk11-downloads.html
mkdir -p /opt/jdk
cd /opt/jdk
tar zxvf jdk-11.0.12_linux-x64_bin.tar.gz --strip-components 1
#添加jdk11环境变量
cat >> /etc/profile << 'EOF'
#jdk11
export JAVA_HOME=/opt/jdk
export PATH=$JAVA_HOME/bin:$PATH
EOF
source /etc/profile
#验证安装
java -version
3、安装maven3
mkdir -p /opt/maven
cd /opt/maven
wget https://mirror-hk.koddos.net/apache/maven/maven-3/3.8.2/binaries/apache-maven-3.8.2-bin.tar.gz
tar zxvf apache-maven-3.8.2-bin.tar.gz --strip-components 1
#添加mavem环境变量
cat >> /etc/profile << 'EOF'
#maven3
export MAVEN_HOME=/opt/maven
export PATH=$MAVEN_HOME/bin:$PATH
EOF
source /etc/profile
mvn -version
4、promethes监控springboot
- pom.xml
vi /data/demo/pom.xml
<?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 https://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.3</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>first-spring-boot-project</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>first-spring-boot-project</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<!-- 以下两个 prometheus 依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
<!-- prometheus 依赖 -->
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
- application.yml ,添加配置文件
cat > /data/demo/src/main/resources/application.yml << 'EOF'
management:
security:
enabled: false
#prometheus+grafana+springboot2监控集成配置
metrics:
export:
prometheus:
enabled: true
jmx:
enabled: true
endpoints:
web:
exposure:
include: '*'
base-path: /metrics
EOF
- 主启动类加入配置
vi /data/demo/src/main/java/com/example/firstspringbootproject/FirstSpringBootProjectApplication.java
package com.example.firstspringbootproject;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
// 添加以下三行
import io.micrometer.core.instrument.MeterRegistry;
import org.springframework.boot.actuate.autoconfigure.metrics.MeterRegistryCustomizer;
import org.springframework.context.annotation.Bean;
@RestController
@SpringBootApplication
public class FirstSpringBootProjectApplication {
public static void main(String[] args) {
SpringApplication.run(FirstSpringBootProjectApplication.class, args);
}
@RequestMapping
public String hello() {
return "hello spring boot!";
}
//添加以下几行@Bean
@Bean
MeterRegistryCustomizer meterRegistryCustomizer(MeterRegistry meterRegistry) {
return meterRegistry1 -> {
meterRegistry.config()
.commonTags("application", "Tenantapp");
};
}
}
5、使用mvn编译打包
cd /data/demo/
mvn package -DskipTests
6、运行jar包,并测试metrics
#编译打包无问题后,运行jar包
cd /data/demo/target
java -jar first-spring-boot-project-0.0.1-SNAPSHOT.jar &
curl 127.0.0.1:8080/metrics/prometheus
7、配置prometheus
cat >> /data/prometheus/conf/prometheus.yml << 'EOF'
#springboot自动发现
- job_name: 'srpingboot'
metrics_path: '/metrics/prometheus'
file_sd_configs:
- files:
- /etc/prometheus/sd_config/springboot.yaml
refresh_interval: 5s
relabel_configs:
- source_labels: [__address__]
regex: (.*)
target_label: instance
replacement: $1
- source_labels: [__address__]
regex: (.*):(.*)
target_label: __address__
replacement: $1:8080
EOF
cat > /data/prometheus/conf/sd_config/springboot.yaml << 'EOF'
#sprintboot自动发现
- labels:
project: 民生springboot
targets:
- 192.168.11.192:8080
- 192.168.11.193:8080
- 192.168.11.194:8080
EOF
8、grafana: 4701
9、jvm 告警规则
cat > /data/prometheus/conf/rules/jvm.rules << 'EOF'
groups:
- name: JVM-监控告警
rules:
- alert: JvmMemoryFillingUp
expr: (sum by (instance)(jvm_memory_used_bytes{area="heap"}) / sum by (instance)(jvm_memory_max_bytes{area="heap"})) * 100 > 80
for: 2m
labels:
severity: 一般警告
annotations:
summary: "{{ $labels.instance }}JVM 堆空间占用快满!"
description: "堆空间占用超过80%\n 当前值 = {{ printf \"%.2f\" $value }}"
EOF