通过prometheus
收集数据,通过grafana
进行展示并告警,来监控nacos
。
通过docker
部署
这里同时将prometheus
、grafana
与nacos
的docker
配置都包括了,若有的已经安装了,则只安装缺少的就行。
docker-compose
配置文件如下:
version: "2"
services:
# nacos服务
nacos:
image: nacos/nacos-server
container_name: nacos-standalone
network_mode: bridge
restart: always
environment:
- PREFER_HOST_MODE=hostname
- MODE=standalone
- SPRING_DATASOURCE_PLATFORM=mysql # 采用mysql数据库存储数据,若不指定,默认采用嵌入式数据库derby
- MYSQL_SERVICE_HOST=172.17.0.1 # mysql地址
- MYSQL_SERVICE_PORT=3306
- MYSQL_SERVICE_DB_NAME=nacos
- MYSQL_SERVICE_USER=root
- MYSQL_SERVICE_PASSWORD=root
volumes: # 将配置和日志映射出来
- ./standalone-logs/:/home/nacos/logs
- ./init.d/custom.properties:/home/nacos/init.d/custom.properties # 不存在时会自动创建
ports:
- "8848:8848"
- "9848:9848"
# prometheus服务
prometheus:
container_name: prometheus
image: prom/prometheus:latest
network_mode: bridge
ports:
- "19090:9090"
depends_on:
- nacos
restart: on-failure
# grafana服务
grafana:
container_name: grafana
image: grafana/grafana:latest
network_mode: bridge
depends_on:
- nacos
ports:
- 13000:3000
restart: on-failure
直接启动即可:
sudo docker-compose up -d
要注意的是,后面需要更改prometheus
的配置文件,为了配置方便,可以将其也映射出来,先将容器内的配置文件复制出来:
mkdir prometheus && sudo docker cp prometheus:/etc/prometheus/prometheus.yml ./prometheus/prometheus.yml
然后在docker-compose.yaml
中加入映射:
prometheus:
container_name: prometheus
image: prom/prometheus:latest
network_mode: bridge
ports:
- "19090:9090"
volumes:
- ./prometheus/prometheus.yml:/etc/prometheus/prometheus.yml # 加入配置文件映射
depends_on:
- nacos
restart: on-failure
不能初始直接在docker-compose
中加入prometheus
的配置映射,而是先将容器创建后将配置文件复制出来再做映射,是因为做了映射但映射的配置不存在时prometheus
不会自动创建,则启动时就会报错。
然后销毁容器,重新创建:
sudo docker stop prometheus && sudo docker rm prometheus
sudo docker-compose up -d
prometheus
配置
在prometheus.yml
中加入nacos
的job
配置:
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: ["172.17.0.1:19090"] # prometheus地址
- job_name: "nacos" # 加入ncos配置
scrape_interval: 60s
metrics_path: "/nacos/actuator/prometheus"
static_configs:
- targets: ["172.17.0.1:8848"] # nacos的服务器地址
labels:
instance: nacos
注意上边
prometheus
与nacos
服务器地址写的是172.17.0.1
,是因为三者都是部署在同一机器的不同容器里,172.17.0.1
段是docker
虚拟网桥分配的地址,且不会改变,当网络形式设为bridge
时,各容器间端口都可以通过此地址直接访问,docker
会自动做端口转发,这个地址可以当作容器共用的localhost
,当然也可能不是172.17
(比如已经被占用了),具体可以直接通过ifconfig
查看,docker0
的那个就是:如果是部署在不容的服务器,改成具体服务器的地址即可。
配置完成后重启prometheus
:
sudo docker restart prometheus
grafana
配置
访问grafana
网址localhost:13000
,初始用户名密码为admin
、admin
,输入用户名密码后会接着让重新设置管理员密码,设置新的用户名密码即可。
登录后点击 设置->Data sources
->Add data source
,选择Prometheus
:
然后写入prometheus
配置,注意Name
中的p
改成小写,和配置中一致。如下:
点解test&save
保存即可。
保存成功后,导入nacos
的控制面板配置,json
格式配置文件直接在github
下载即可:
json
文件保存后直接在grafna
下导入即可:
导入后即可跳转到nacos
面板,,点击右上角的save
图标将面板保存一下。
这时会发现大多数监控项显示为空,这是因为我们在prometheus
的配置中写了标签,即nacos
下的labels.instance
设置,需要改下面板默认配置中的标签设置,点击设置,修改一下默认的变量:
点击 variables
,选择instance
:
然后修改其中的变量名字,将Query Options
中的Regex
改为nacos
(与配置中一致),将Selection options
中的include All option
关掉,如下:
点击save dashboard
,保存修改。回到面板,即可看到所有监控项都正常了: