docker+elk+tomcat+springmvc+mongodb

环境:lunix+centos

  1. 如果系统中已经安装dockers,想要移除执行以下指令:

sudo yum remove   docker \

                  docker-client \

                  docker-client-latest \

                  docker-common \

                  docker-latest \

                  docker-latest-logrotate \

                  docker-logrotate \

                  docker-engine \

                  podman \

                 

2.安装docker

 #Set up the repository

 yum  install  -y  yum-utils

 yum -config-manager  --add-repo  https://download.docker.com/linux/centos/docker-ce.repo

  #To install the latest version, run:

  yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

  #Start Docker.

  systemctl start docker

  #Verify that the Docker Engine installation is successful by running the hello-world image.

  docker run hello-world

docker常用指令

   docker ps 是查看当前运行的容器

    docker ps -a 是查看所有容器(包括停止的)。

    docker rm 容器id  移除容器

    docker start 容器ID

    docker restart 容器ID

    docker stop 容器ID

    docker rm  - f $(docker ps -aq)  删除所有容器

    docker rmi 容器id 删除镜像

    docker exec -it 容器ID   进入当前正在运行的容器

   docker commit 容器id  tomcat:basic  保存镜像

   docker save/export

   docker load/import

3.docker 安装 ElasticSearch

 # 查看所有镜像

  docker images

 # 搜索镜像

  docker search elasticsearch

 # 拉取 7.12.1 版本镜像

docker pull elasticsearch:7.12.1

 拷贝配置文件

# 运行 elasticsearch   -d 后台运行  -it使用交互方式运行,进入容器内部查看 -p指定容器端口  -P随机端口  --net network网络

 docker run -d --name es --net host  -P  -e "discovery.type=single-node"  elasticsearch:7.12.1 # 进入容器查看配置文件路径

 docker exec -it es  /bin/bash

 cd config

  在 config 中可看到 elasticsearch.yml 配置文件,再执行 pwd 可以看到当前目录为: /usr/share/elasticsearch/config,所以退出容器,执行文件的拷贝:

  # 将容器内的配置文件拷贝到 /usr/local/elk/elasticsearch/ 中   在/root 中建好elasticsearch文件夹

  docker cp es:/usr/share/elasticsearch/config/elasticsearch.yml  elasticsearch/

  # 修改文件权限

  chmod  666  elasticsearch/elasticsearch.yml

  # 在elasticsearch 目录下再创建data目录,同时修改权限

   chmod  -R  777  elasticsearch/data

  这里要修改文件的权限为可写,否则,进行挂载后,在外部修改配置文件,容器内部的配置文件不会更改。同时,创建 data 目录进行挂载。

重新运行容器并挂载:

# 先删除旧的容器

docker rm -f es

# 运行新的容器

docker run -d --name es --net host -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" --privileged=true -v $PWD/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml -v $PWD/elasticsearch/data/:/usr/share/elasticsearch/data elasticsearch:7.12.1

# 查看容器日志

docker logs es

curl localhost:9200

4.docker 安装kibana

docekr search kibana

docker pull kibana:7.12.1

# 启动 kibana 容器并连接同一网络

docker run -d --name kibana --net host -P -e "ELASTICSEARCH_HOSTS=http://192.168.47.128:9200"  -e "I18N_LOCALE=zh-CN"  kibana:7.12.1

注意: -e "ELASTICSEARCH_HOSTS=http://es:9200" 表示连接刚才启动的 elasticsearch 容器,因为在同一网络(elk)中,地址可直接填 容器名+端口,即 es:9200, 也可以填 http://192.168.47.128:9200,即 http://ip:端口。

docker cp kibana:/usr/share/kibana/config/kibana.yml kibana/

chmod 666 kibana/kibana.yml

拷贝完成后,修改该配置文件,主要修改 elastissearch.hosts 并新增 i18n.locale 配置:

es 地址改为刚才安装的 es 地址,因容器的隔离性,这里最好填写 http://ip:9200;

kibana 界面默认是英文的,可以在配置文件中加上 i18n.locale: zh-CN(注意冒号后面有个空格)。

这样有了配置文件,在启动容器时就不用通过 -e 指定环境变量了。

kibana.yml文件配置:

server.name: kibana

server.host: "0"

# elasticsearch 地址

elasticsearch.hosts: [ "http://192.168.47.128:9200" ]

monitoring.ui.container.elasticsearch.enabled: true

# 开启 kibana 的汉化

i18n.locale: zh-CN

注意:如果使用挂载配置文件的方式启动的话,elasticsearch.hosts 这需填写 http://ip:9200,而不能使用容器名了,否则后面 kibana 连接 es 会失败。

重新开个容器

#删除原来未挂载的容器

docker rm -f kibana

# 启动容器并挂载

docker run -d --name kibana -p 5601:5601 -v $PWD/kibana/kibana.yml:/usr/share/kibana/config/kibana.yml --net host kibana:7.12.1

查看结果

打开浏览器,输入:http://192.168.47.128:5601 打开 kibana 控制台,如果未能成功打开,可以使用: docker logs kibana 查看容器日志看是否运行有误等。

5.docker安装logstash

docker pull logstash:7.12.1

docker run -d -P --name logstash --net host logstash:7.12.1

# 拷贝数据

docker cp logstash:/usr/share/logstash/config logstash/

docker cp logstash:/usr/share/logstash/data logstash/

docker cp logstash:/usr/share/logstash/pipeline logstash/

#文件夹赋权

chmod  -R  777  logstash/

修改 logstash/config 下的 logstash.yml 文件,主要修改 es 的地址:

http.host: "0.0.0.0"

xpack.monitoring.elasticsearch.hosts: [ "http://192.168.47.128:9200" ]

修改 logstash/pipeline 下的 logstash.conf 文件:

input {

  tcp {

    mode => "server"

    host => "0.0.0.0"  # 允许任意主机发送日志

    port => 5044

    codec => json_lines    # 数据格式

  }

 

}

input{

  log4j {

        host => "0.0.0.0"

        port => 5044

    }

}

output {

  elasticsearch {

      hosts  => ["http://192.168.47.128:9200"]   # ElasticSearch 的地址和端口

      index  => "elk"         # 指定索引名

      codec  => "json"

  }

  stdout {

    codec => rubydebug

  }

}

启动容器并挂载

#注意先删除之前的容器

docker rm -f logstash

# 启动容器并挂载

docker run -d --name logstash --net host --privileged=true -p 5044:5044 -p 9600:9600 -v $PWD/logstash/data/:/usr/share/logstash/data -v $PWD/logstash/config/:/usr/share/logstash/config -v $PWD/logstash/pipeline/:/usr/share/logstash/pipeline logstash:7.12.1

docker logs -f logstash

6.docker 部署tomcat

docker pull tomcat:9.0.41

// -v(挂载) 虚拟机目录 容器目录

docker run -d --name tomcat -p 8080:8080   -v $PWD/tomcat/:/usr/local/tomcat/webapps/     tomcat:9.0.41

容器中安装常用工具

更新apt 工具 : apt update

安装vim编辑器: apt install vim

安装rz上传命令: apt install lrzsz

正常情况下运行了tomcat访问http://192.168.47.128:8080/  能看到tomcat首页,但是实际上有可能会出现访问tomcat404报错,这是因为拉下来的镜像中webapp文件夹中是空的,需要进入容器进行webapps的建设

docker exec -it tomcat /bin/bash

cp  -r  webapps.dist/*  webapps

// 备份配置好的tomcat容器

 docker commit f5a09ef00256 tomcat:basic

宿主机和容器间文件拷贝指令:上传war文件 上传成功后会自动生成对应的文件夹

将宿主机的war文件拷贝至容器里,并将首页页面放到/usr/local/tomcat/webapps/ROOT中

docker cp /root/mongodb.war  tomcat:/usr/local/tomcat/webapps/

将容器里的文件拷贝至宿主机

docker cp tomcat:/usr/local/tomcat/webapps/   /root

进入/usr/local/tomcat/conf 目录 打开server.xml文件在Host节点下新增Context 节点配置 保存并退出

path:指定访问该Web应用的URL入口。

docBase:指定Web应用的文件路径,可以给定绝对路径,也可以给定相对于的appBase属性的相对路径,如果Web应用采用开放目录结构,则指定Web应用的根目录,如果Web应用是个war文件,则指定war文件的路径。

reloadable:如果这个属性设为true,tomcat服务器在运行状态下会监视在WEB-INF/classes和WEB-INF/lib目录下class文件的改动,如果监测到有class文件被更新的,服务器会自动重新加载Web应用。

<Context path="/" docBase="mongodb" reloadable="true"/>

退出容器,重启tomcat:

docker restart 容器id

正常情况下能访问到项目的首页

7.docker安装mongodb

 docker pull mongo:3.4.24

 创建mongo数据持久化目录

 mkdir mongodb/data

 docker run -itd --name mongo -v  $PWD/mongodb/data:/data/db -p 27017:27017 mongo:3.4.24  --auth

 -v: 将宿主机的mongodb/data映射到容器的/data/db目录,将数据持久化到宿主机,以防止删除容器后,容器内的数据丢失

 –auth:需要密码才能访问容器服务

创建用户

 登录mongo容器,并进入到【admin】数据库

  docker exec -it mongo mongo admin

创建一个用户,mongo 默认没有用户

  db.createUser({ user:'root',pwd:'root',roles:[ { role:'userAdminAnyDatabase', db: 'admin'},'readWriteAnyDatabase']});

  【user:‘root’ 】:设置用户名为root

  【pwd:‘root’】:设置密码为root

  【role:‘userAdminAnyDatabase’】:只在admin数据库中可用,赋予用户所有数据库的userAdmin权限

  【db: ‘admin’】:可操作的数据库

  【‘readWriteAnyDatabase’】:赋予用户读写权限

dbAdmin:允许用户在指定数据库中执行管理函数,如索引创建、删除,查看统计或访问system.profile

连接、测试

连接mongo数据库 db.auth('root', 'root')

测试数据库,插入一条语句 db.user.insert({"name":"zhangsan","age":18})

8.安装过程中遇到的问题:

1)Tomcat原来安装的最近一个版本,部署项目的时候出现了报错,所以删除了原来的镜像,重新拉取了tomcat9,报错解决:

Tomcat10 报错java.lang.NoClassDefFoundError: javax/servlet/ServletContextListener

  原来是 Servlet、JSP 与 Spring 的版本之间的匹配出了问题。众所周知,2018 年,Java EE 改名为 Jakarta EE。这导致一些 JAR 包的包名也在之后的版本中进行了更改。这对本项目的影响是,Spring 本身是不含 Servlet、JSP 的 JAR 包的,但其依赖这些 JAR 包。如果在 Tomcat 服务器中部署的项目使用了 Spring,则这部分的 JAR 包将由 Tomcat 服务器来提供。而问题在于,Spring 5.2.9.RELEASE 期望的 JAR 包前缀是 javax,而Tomcat 10.0.0 提供的 JAR 包前缀是 jakarta。因此,Spring 报了一个认为没有 Servlet、JSP 的 JAR 包的错。

  (查看 Tomcat 的各版本对应的 Servlet 等的版本的网址是:http://tomcat.apache.org/whichversion.html)

由于 Tomcat 与 Servlet、JSP 的 JAR 包关系密切,因此无法通过替换 Tomcat 下的文件夹 lib 中 Servlet、JSP 的 JAR 包来解决。而且这也无法通过在 Maven 中添加正确的 Servlet、JSP 依赖来解决,实际上,如果该工程的纯 Java 代码的部分没有使用到 Servlet、JSP 的 JAR 包,其实这里在 Maven 添加的 Servlet、JSP 依赖都可以删掉。(更专业的说法是,在基于 Maven 的 Web 应用中,对 Servlet、JSP 的依赖范围为 provided。)

幸运的是,Tomcat 9.0.41 使用的 JAR 包前缀是 javax 。因此,这里只需要再安装一个Tomcat 9.0.41 即可解决(不需要卸载已有的 Tomcat,因为不同版本的 Tomcat 的安装路径可以不同,只是安装时需要先关闭已有的 Tomcat 服务器,避免占用同一个端口号)。

2)关于log4j和logback

 log4j和logback可以一起使用吗?

不可以,会产生冲突。最多只能使用其中一种日志框架

日志配置文件名

Logback:logback.xml, logback-spring.xml, logback-spring.groovy, logback.groovy

Log4j:log4j.properties, log4j.xml,log4j-spring.properties, log4j-spring.xml,

Log4j2:log4j2.xml,log4j2-spring.xml

JDK (Java Util Logging):logging.properties

logback与log4j一样,也需要在classpath中编写配置文件。但logback配置文件似乎比log4j复杂一些:log4j不仅支持xml格式的配置文件,还支持properties格式的,而logback只支持xml格式的。有在线工具,可以将log4j.properties文件直接转换成logback.xml文件,也可以反过来。补充说明,如果logback.xml在classpath下面,是不需要在web.xml里面配置任何信息的,包括监听、配置文件路径的配置。 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

rose and war

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值