docker 部署 sentinel ,包含实时监控不显示的解决方案

1. 使用docker部署sentinel

对于实时监控不显示的解决方案可以直接看4. 总结

1.1. 下载sentinel的jar包

sentinel-dashboard就是一个SpringBoot项目,直接使用命令启动即可,所以可以自定义配置docker启动。

如果没有特殊需要可以直接下载jar,需要修改源码则下载源码包即可,下载地址:https://github.com/alibaba/Sentinel/releases,下载相应版本的jar包,比如sentinel-dashboard-1.8.1.jar
docker 部署 sentinel ,包含实时监控不显示的解决方案_第1张图片
docker 部署 sentinel ,包含实时监控不显示的解决方案_第2张图片
然后将下载好的jar包放到服务器的某一个目录下。并且在相同位置创建Dockerfile文件。
docker 部署 sentinel ,包含实时监控不显示的解决方案_第3张图片

1.2. Dockerfile文件内容

# java 版本
FROM java:8
# 挂载的docker卷
VOLUME /tmp
# 前者是要操作的jar包  后者自定义jar包名
ADD *.jar sentinel-dashboard.jar
# 定义时区参数
ENV TZ=Asia/Shanghai
# 设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone
# 配置启动命令,-D表示设置JVM参数  (xxx.xxx.xxx.xxx换成自己服务器的ip)
ENTRYPOINT ["java","-jar","-Dserver.port=8858","-Dcsp.sentinel.dashboard.server=xxx.xxx.xxx.xxx:8858","-Dproject.name=sentinel-dashboard","-Dsentinel.dashboard.auth.username=sentinel","-Dsentinel.dashboard.auth.password=123456","/sentinel-dashboard.jar"]

ENTRYPOINT中的内容实际上就是执行jar包时执行的命令,可根据自己的需求和官方文档添加别的配置参数。

控制台配置项
docker 部署 sentinel ,包含实时监控不显示的解决方案_第4张图片

1.3. 创建、运行容器

在服务器当前目录执行下述命令构建镜像

docker build -t sentinel-server .

执行下述命令创建、运行容器

docker run --name sentinel_9 -p 8858:8858 -p 8719:8719 --restart=always --privileged=true -d sentinel-server

再执行docker ps就可以看见容器已经在运行了
在这里插入图片描述
执行docker logs sentinel_9 -f 可以试试查看容器的运行日志。

2. 使用spring整合

(本文省略对nacos的讲解)

2.1. 服务中添加依赖和配置

<!--       sentinel 服务保护-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
        </dependency>

下面这段配置得添加到nacos中。

spring:
  cloud:
    sentinel:
      transport:
        dashboard: localhost:8080

docker 部署 sentinel ,包含实时监控不显示的解决方案_第5张图片

2.2. 将服务打包部署到服务器上

docker 部署 sentinel ,包含实时监控不显示的解决方案_第6张图片
流程和上述差不多,将服务的jar包和Dockerfile文件放在一个目录中。
docker 部署 sentinel ,包含实时监控不显示的解决方案_第7张图片
Dockerfile文件内容

# 基础镜像使用Java
FROM openjdk:11.0.4
# VOLUME 指定了临时文件目录为/tmp。
# 其效果是在主机 /var/lib/docker 目录下创建了一个临时文件,并链接到容器的/tmp
VOLUME /tmp
# 将jar包添加到容器中并更名为app.jar
ADD demo_user_server-exec.jar app.jar

# 定义时区参数
ENV TZ=Asia/Shanghai
# 设置时区
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo '$TZ' > /etc/timezone

# 运行jar包
# ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=config/application.yml","> log.txt &"]

# 以便于微服务配置
ENTRYPOINT ["java","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar","--spring.config.location=config/bootstrap.yml","> log.txt &"]

config目录下方配置文件
在这里插入图片描述

docker 部署 sentinel ,包含实时监控不显示的解决方案_第8张图片
然后执行下述命令

docker build -t demo_user_server_2 .
docker run -d -p 8100:8100 -v /root/docker_file/demo_project/demoUserServer/config:/config --name demo_user_server_2 demo_user_server_2

/root/docker_file/demo_project/demoUserServer/config为我服务器上的路径,大家根据自己的实际情况修改。
执行docker ps可以看到容器已经启动。
在这里插入图片描述

3. 给docker容器创建网络

执行下述命令

# 创建一个名字为sentinel-net的网络
docker network create sentinel-net
# 查看已经创建的网络
docker network ls
# 查看sentinel-net网络的详细信息
docker network inspect sentinel-net
# 将容器sentinel_9和demo_user_server_2 连接到网络 sentinel-net
docker network connect sentinel-net sentinel_9
docker network connect sentinel-net demo_user_server_2
# 查看sentinel-net网络的详细信息
docker network inspect sentinel-net
# 重启容器sentinel_9和demo_user_server_2 
docker restart demo_user_server_2 sentinel_9

之后就发现没问题了。

4. 总结

从网上总结的几个可能会导致Sentinel没有实时监控的原因。

  1. 容器中的时间不对,这个需要1.2. Dockerfile文件内容中设置时区参数
  2. 端口没有打开,需要打开文章中涉及到的端口(服务器防火墙和安全组)
  3. 网络问题,需要在3. 给docker容器创建网络中创建网络(我就是这个问题。。)
  4. Spring cloud版本问题,这个得查询相关资料,核对版本是否兼容。
  5. 如果不加@SentinelResource注解, 当请求接口为2层级或者更多层级时, sentinel无法对接口进行实时监控, 只有1层级才能实时监控到。 (我在找解决方案的时候遇到网上一篇博客遇到这个问题,但是我没有成功复现出这个问题,不知道是否是版本问题,原文链接)

5. 参考资料

容器技术(二):Docker Network基础
docker network详解、教程
Sentinel(二)Docker搭建Sentinel 控制台环境搭建及使用介绍

你可能感兴趣的:(平时开发的笔记,docker,sentinel,java)