一、Prometheus 监控

默认没有开启Prometheus监控,

1.1 配置打开Promethues 监控功能

#修改配置
[root@ubuntu2404 ~]#vi /usr/local/nacos/conf/application.properties
#***********Expose prometheus and health **************************# 
#取消下面行注释开启prometheus监控指标路径http://127.0.0.1:8848/nacos/actuator/prometheus
management.endpoints.web.exposure.include=prometheus,health

[root@ubuntu2404 ~]#systemctl restart nacos

#验证访问
[root@ubuntu2404 ~]#curl -s http://127.0.0.1:8848/nacos/actuator/prometheus |grep -v '^#'|grep nacos
nacos_naming_publisher{version="v1",} 0.0
nacos_naming_publisher{version="v2",} 0.0
nacos_naming_subscriber{version="v1",} 0.0
nacos_naming_subscriber{version="v2",} 0.0
nacos_monitor_seconds_max{module="core",name="raft_apply_log_timer",} 0.0
nacos_monitor_seconds_max{module="core",name="raft_apply_read_timer",} 0.0
nacos_monitor_seconds_count{module="core",name="raft_apply_log_timer",} 0.0
nacos_monitor_seconds_sum{module="core",name="raft_apply_log_timer",} 0.0
nacos_monitor_seconds_count{module="core",name="raft_apply_read_timer",} 0.0
nacos_monitor_seconds_sum{module="core",name="raft_apply_read_timer",} 0.0
application_ready_time_seconds{main_application_class="com.alibaba.nacos.Nacos",} 12.294
application_started_time_seconds{main_application_class="com.alibaba.nacos.Nacos",} 12.265
nacos_monitor{module="naming",name="mysqlHealthCheck",} 0.0
nacos_monitor{module="naming",name="emptyPush",} 0.0
nacos_monitor{module="config",name="configCount",} 1.0
nacos_monitor_count{module="core",name="raft_read_from_leader",} 0.0
nacos_monitor_sum{module="core",name="raft_read_from_leader",} 0.0

1.2 配置 Prometheus 监控 Nacos

https://github.com/nacos-group/nacos-docker/tree/master/example/prometheus

#https://github.com/nacos-group/nacos-docker/blob/master/example/prometheus/prometheus-cluster.yaml
#集群模式
# my global config
global:
 scrape_interval:     15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
 evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
  # scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
 alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
  # The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
  - job_name: 'prometheus'
    # metrics_path defaults to '/metrics'
    # scheme defaults to 'http'.
   static_configs:
      - targets: ['localhost:9090']
  - job_name: 'nacos'
   metrics_path: '/nacos/actuator/prometheus'
   static_configs:
      - targets: ["nacos1:8848","nacos2:8848","nacos3:8848"]
# prometheus-standalone.yaml
# 适用于 Nacos 单机监控
global:
  scrape_interval: 15s
  evaluation_interval: 15s

alerting:
  alertmanagers:
    - static_configs:
        - targets:
          # - alertmanager:9093

rule_files:

scrape_configs:
  - job_name: 'prometheus'
    static_configs:
      - targets: ['localhost:9090']

  - job_name: 'nacos'
    metrics_path: '/nacos/actuator/prometheus'
    static_configs:
      - targets: ['nacos:8848']

二、Nacos 案例

2.1 Nacos 项目服务注册和发现

利用 Nacos 实现 JAVA 应用消费者和提供者调用

image

IP 备注
10.0.0.100:8848 Nacos 服务
10.0.0.101:8001 Provider 应用
10.0.0.102:8002 Consumer 应用

2.1.1 安装 Nacos

# 安装 Docker
apt update && apt -y install docker.io 
systemctl enable --now docker

# 方式1:使用国内阿里云镜像(最快)
docker run --name nacos -e MODE=standalone \
  -p 8848:8848 -p 9848:9848 \
  -d --restart always \
  registry.cn-beijing.aliyuncs.com/zhangqing/nacos-server:v2.4.3-slim

# 方式2:使用官方镜像
docker run --name nacos -e MODE=standalone \
  -p 8848:8848 -p 9848:9848 \
  -d --restart always \
  nacos/nacos-server:v2.4.3-slim

2.1.2 运行服务提供者的JAVA应用

在10.0.0.101 主机上运行

Nacos服务主机的名称解析

# 1. 配置 Nacos 服务主机名解析
cat >> /etc/hosts <<EOF
10.0.0.100 nacos.wang.org
EOF

# 2. 安装 JDK21 / 17 / 8 任选其一即可
apt update && apt -y install openjdk-21-jdk

# 3. 安装 Maven
apt update && apt -y install maven

# 4. 验证版本
mvn -v
java -version

#----------------------------------------
# 5. 进入 Java 项目目录服务提供者
cd nacos-provider

# 6. 查看项目配置已配置 Nacos 注册中心
cat src/main/resources/application.properties
server.port=8001
spring.application.name=nacos-provider-api
spring.cloud.nacos.discovery.server-addr=nacos.wang.org:8848

# 7. 打包项目
mvn clean package -Dmaven.test.skip=true

# 8. 正常启动 Java 应用
java -jar target/nacos-provider-1.0-SNAPSHOT.jar

# 9. 临时指定 Nacos 地址启动优先级高于配置文件
java -Dspring.cloud.nacos.discovery.server-addr=nacos.wang.org:8848 \
-Dspring.cloud.nacos.config.server-addr=nacos.wang.org:8848 \
-jar target/nacos-provider-1.0-SNAPSHOT.jar

# 10. 验证端口监听
ss -ntlp | grep java

2.1.3 运行服务消费者的JAVA应用

在10.0.0.102 主机上运行

#Nacos服务主机的名称解析
[root@ubuntu2404 ~]#cat /etc/hosts
10.0.0.100 nacos.wang.org

#安装JDK21,17,8都支持
[root@ubuntu2404 ~]#apt update && apt -y install openjdk-21-jdk
[root@ubuntu2404 ~]#apt update && apt -y install openjdk-17-jdk 
[root@ubuntu2404 ~]#apt update && apt -y install openjdk-8-jdk
[root@ubuntu2404 ~]#apt update && apt -y install maven

[root@ubuntu2404 ~]#mvn -v
Apache Maven 3.8.7
Maven home: /usr/share/maven
Java version: 21.0.8, vendor: Ubuntu, runtime: /usr/lib/jvm/java-21-openjdk-amd64
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "6.8.0-48-generic", arch: "amd64", family: "unix"

#准备JAVA应用
[root@ubuntu2404 nacos-consumer]#ls
pom.xml src target

#配置nacos服务相关信息
[root@ubuntu2404 nacos-consumer]#cat src/main/resources/application.properties 
server.port=8002
spring.application.name=nacos-consumer-api
spring.cloud.nacos.discovery.server-addr=nacos.wang.org:8002

[root@ubuntu2404 nacos-consumer]#mvn clean package -Dmaven.test.skip=true
....
[INFO] Replacing main artifact with repackaged archive
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  02:15 min
[INFO] Finished at: 2024-05-15T12:00:09+08:00
[INFO] ------------------------------------------------------------------------

#运行JAVA应用
[root@ubuntu2404 nacos-consumer]#java -jar target/nacos-consumer-1.0-SNAPSHOT.jar 

#如果临时修改nacos地址信息
[root@ubuntu2404 nacos-consumer]#java -Dspring.cloud.nacos.discovery.server-addr=nacos.wang.org:8848 -Dspring.cloud.nacos.config.server-addr=nacos.wang.org:8848 -jar target/nacos-consumer-1.0-SNAPSHOT.jar

[root@ubuntu2404 ~]#ss -ntlp|grep java
LISTEN 0      100               *:8002           *:*    users:(("java",pid=4699,fd=30))

2.1.4 访问 JAVA 应用

访问服务提供者

#访问服务提供者
http://10.0.0.101:8001/echo/zhangqing

#访问服务消费者
http://10.0.0.102:8002/echo/zhangqing

image

2.1.5 确认Nacos服务注册和发现

2.x之前 http://nacos.wang.org:8848/nacos/ 从3.0开始 http://nacos.wang.org:8080 image

2.2 Nacos 项目服务注册和配置管理

基于 Nacos 实现JAVA服务的配置管理

image

2.2.1 安装 Redis 服务

#=========================
# 方式1Docker 容器运行 Redis(推荐,快速、干净)
#=========================
apt update && apt -y install docker.io 
systemctl enable --now docker

docker run -d \
  --name redis \
  -p 6379:6379 \
  --restart always \
  registry.cn-beijing.aliyuncs.com/zhangqing/redis:7.2.5 \
  --requirepass 123456

#=========================
# 方式2:传统 APT 安装 Redis
#=========================
apt update && apt -y install redis

# 修改配置
vim /etc/redis/redis.conf
# 找到并修改:
bind 0.0.0.0
requirepass 123456

# 重启服务
systemctl restart redis
systemctl enable redis

2.2.2 安装 Nacos

#容器运行
[root@ubuntu2404 ~]#apt update && apt -y install docker.io 
[root@ubuntu2404 ~]#docker run --name nacos -e MODE=standalone -p 8848:8848 -p 9848:9848 -d --restart always registry.cn-beijing.aliyuncs.com/zhangqing/nacos-server:v2.2.3-slim
#地址为
http://nacos.wang.org:8848/nacos

2.2.3 配置 Nacos

2.2.3.1 创建名称空间为 dev

image

2.2.3.2 在dev空间中创建配置

如下

image

image

image

#名称空间:dev
#DataID: api-service
#将JAVA应用连接Redis的配置信息写在Nacos配置中
#YAML格式
server:
 port: 9999
spring:
 redis:
   host: redis.wang.org
   port: 6379
   password: 123456
   database: 0

2.2.4 修改 JAVA 应用的配置

范例:方法1,修改配置重新编译

#安装JDK21,17,8都支持
apt update && apt -y install openjdk-21-jdk openjdk-17-jdk openjdk-8-jdk maven
mvn -v

#进入项目配置
cd nacos-redis-demo
cat > src/main/resources/bootstrap.properties <<EOF
nacos.server.namespace=dev
spring.application.name=cloud-api
spring.cloud.nacos.server-addr=nacos.wang.org:8848
spring.cloud.nacos.config.namespace=dev
spring.cloud.nacos.config.group=DEFAULT_GROUP
spring.cloud.nacos.config.prefix=api-service
spring.profiles.active=dev
spring.cloud.nacos.config.auto-refreshed=true
spring.cloud.nacos.config.file-extension=yml
spring.cloud.nacos.discovery.server-addr=nacos.wang.org:8848
spring.cloud.nacos.discovery.namespace=dev
EOF

#编译打包
mvn clean package -Dmaven.test.skip=true

范例:方法2,无需重新编译,直接修改 nacos-1.0-SNAPSHOT.jar文件

#修改nacos-1.0-SNAPSHOT.jar后缀为zip解压缩后修改下面文件
#按环境修改BOOT-INF/classes/bootstrap.properties即可
#配置命名空间的ID
nacos.server.namespace=dev
#微服务的名称这个可以随意写
spring.application.name=cloud-api
#nacos的地址
spring.cloud.nacos.server-addr=nacos.wang.org:8848
#配置命令空间的ID
spring.cloud.nacos.config.namespace=dev
#配文件的组名
spring.cloud.nacos.config.group=DEFAULT_GROUP
#配置文件的名称 data id
spring.cloud.nacos.config.prefix=api-service
spring.profiles.active=dev
spring.cloud.nacos.config.auto-refreshed=true
spring.cloud.nacos.config.file-extension=yml
#nacos的地址
spring.cloud.nacos.discovery.server-addr=nacos.wang.org:8848
#配置命名空间的ID
spring.cloud.nacos.discovery.namespace=dev
[root@ubuntu2404 nacos-redis-demo]#mv target/nacos-1.0-SNAPSHOT.jar.zip target/nacos-1.0-SNAPSHOT.jar

2.2.5 运行 JAVA 应用

#配置名称解析
[root@ubuntu2404 ~]#cat /etc/hosts
10.0.0.100 nacos.wang.org redis.wang.org

[root@ubuntu2404 ~]#apt update && apt -y install openjdk-8-jdk 
[root@ubuntu2404 ~]#java -version
openjdk version "1.8.0_382"
OpenJDK Runtime Environment (build 1.8.0_382-8u382-ga-1~22.04.1-b05)
OpenJDK 64-Bit Server VM (build 25.382-b05, mixed mode)

#启动应用
#新版
[root@ubuntu2404 nacos-redis-demo]#java -jar target/nacos-redis-demo-1.0.0.jar
#旧版
[root@ubuntu2404 nacos-redis-demo]#java -jar target/nacos-1.0-SNAPSHOT.jar 

  .   ____          _            __ _ _
 /\\ / ___'_ __ _ _(_)_ __  __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
 \\/  ___)| |_)| | | | | || (_| |  ) ) ) )
  '  |____| .__|_| |_|_| |_\__, | / / / /
 =========|_|==============|___/=/_/_/_/
 :: Spring Boot ::                (v2.6.7)

......

#检查服务端口打开
[root@ubuntu2404 ~]#ss -ntlp|grep java
LISTEN 0      100               *:9999           *:*    users:(("java",pid=4432,fd=31))

2.2.6 访问 JAVA 应用

#浏览器访问JAVA应用
#新版
curl http://localhost:9999/api/redis/
数据插入成功! 已保存用户信息和系统信息到Redis
#旧版
http://myapp.wang.org:9999/redis

image

2.2.7 验证结果

验证 nacos 服务注册成功

image

image

#验证redis数据生成
[root@ubuntu2404 ~]#apt update && apt -y install redis-tools
#新版
[root@ubuntu2404 ~]#redis-cli -a 123456 keys '*'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
1) "system:version"
2) "user:zhangqing"
3) "system:startup_time"
4) "user:zq"
#旧版
[root@ubuntu2404 ~]#redis-cli -a 123456 keys '*'
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.
1) "zhangqing"
2) "zq"