1、拉取Prometheus镜像
docker search prometheus
docker pull prometheus
2、创建挂载文件
mkdir /app/prometheus
cd /app/prometheus
3、创建修改配置文件
vim prometheus.yml
一下是配置文件内容:
global:
scrape_interval: 60s
evaluation_interval: 60s
scrape_configs:
- job_name: prometheus
static_configs:
- targets: ['localhost:9090']
labels:
instance: prometheus
#这是新增的监控job,是配置nacos-consul-adapter适配器的服务,也就是我的网关
- job_name: 'consul-prometheus'
metrics_path: '/actuator/prometheus'
consul_sd_configs:
#这里是nacos-consul-adapter适配器的服务,也就是我的网关的ip和端口号
- server: '127.0.0.1:8888' # 这两个都是网关地址
services: []
- server: '127.0.0.1:8889' # 这两个都是网关地址
services: []
PS:以上配置文件是将naocs伪装成consul,然后讲consul集成在网关,这样Prometheus就可以通过网关注册的nacos服务来发现监控服务信息
4、启动Prometheus
docker run -d --name prometheus --restart=always -p 9090:9090 -v /app/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml prom/prometheus
5、题外话,讲nacos伪装成consul实现Prometheus自动监控
1、java网关微服务中引入
<dependency>
<groupId>io.github.chen-gliu</groupId>
<artifactId>nacos-consul-adapter</artifactId>
<version>version</version>
</dependency>
PS:如果拉取不到包,在maven的setting中加入
<mirror>
<id>mvnrepository</id>
<mirrorOf>*</mirrorOf>
<name>仓库</name>
<url>https://repo1.maven.org/maven2</url>
</mirror>
2、查看Prometheus的配置文件中是否有(以下内容),如果没有。就加上
#这是新增的监控job,是配置nacos-consul-adapter适配器的服务,也就是我的网关
- job_name: 'consul-prometheus'
metrics_path: '/actuator/prometheus'
consul_sd_configs:
#这里是nacos-consul-adapter适配器的服务,也就是我的网关的ip和端口号
- server: '127.0.0.1:8888' # 这两个都是网关地址
services: []
- server: '127.0.0.1:8889' # 这两个都是网关地址
services: []
3、所有需要监控的服务必须添加如下内容:
3.1:配置文件中加入
management.endpoints.web.exposure.include=*
3.2 pom.xml 中引入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>io.micrometer</groupId>
<artifactId>micrometer-registry-prometheus</artifactId>
</dependency>
3.3 监控的服务上加入
@Bean
MeterRegistryCustomizer<MeterRegistry> configurer(
@Value("${spring.application.name}") String applicationName) {
return (registry) -> registry.config().commonTags("application", applicationName);
}