通过prometheus收集数据,通过grafana进行展示并告警,来监控nacos

通过docker部署

这里同时将prometheusgrafananacosdocker配置都包括了,若有的已经安装了,则只安装缺少的就行。

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中加入nacosjob配置:

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

注意上边prometheusnacos服务器地址写的是172.17.0.1,是因为三者都是部署在同一机器的不同容器里,172.17.0.1段是docker虚拟网桥分配的地址,且不会改变,当网络形式设为bridge时,各容器间端口都可以通过此地址直接访问,docker会自动做端口转发,这个地址可以当作容器共用的localhost,当然也可能不是172.17(比如已经被占用了),具体可以直接通过ifconfig查看,docker0的那个就是:

Snipaste20220725135421png

如果是部署在不容的服务器,改成具体服务器的地址即可。

配置完成后重启prometheus

sudo docker restart prometheus

grafana配置

访问grafana网址localhost:13000,初始用户名密码为adminadmin,输入用户名密码后会接着让重新设置管理员密码,设置新的用户名密码即可。

登录后点击 设置->Data sources->Add data source,选择Prometheus:

Snipaste20220725140244png

Snipaste20220725140328png

然后写入prometheus配置,注意Name中的p改成小写,和配置中一致。如下:

Snipaste20220725140413png

点解test&save保存即可。

保存成功后,导入nacos的控制面板配置,json格式配置文件直接在github下载即可:

nacos-grafana.json · GitHub

json文件保存后直接在grafna下导入即可:

Snipaste20220725140836png

导入后即可跳转到nacos面板,,点击右上角的save图标将面板保存一下。

这时会发现大多数监控项显示为空,这是因为我们在prometheus的配置中写了标签,即nacos下的labels.instance设置,需要改下面板默认配置中的标签设置,点击设置,修改一下默认的变量:

Snipaste20220725144228png

点击 variables,选择instance

Snipaste20220725144622png

然后修改其中的变量名字,将Query Options中的Regex改为nacos(与配置中一致),将Selection options中的include All option关掉,如下:

Snipaste20220725144514png

点击save dashboard,保存修改。回到面板,即可看到所有监控项都正常了:

Snipaste20220725144535png