需要这样一套日志收集、分析的系统:

  • 收集 -- 能够采集多种来源的日志数据 (流式日志收集器)
  • 传输 -- 能够稳定的把日志数据传输到中央系统 (消息队列)
  • 存储 -- 可以将日志以结构化数据的形式存储起来 (搜索引擎)
  • 分析 -- 支持方便的分析、检索方法,最好有GUI管理系统 (前端)
  • 警告 -- 能够提供错误报告,监控机制 (监控工具)

优秀的社区开源解决方案 ---- ELK Stack

  • E ----- ElasticSearch
  • L ----- LogStash
  • K ----- Kibana

1.传统ELK模型

缺点:

  • Logstash使用Jruby语言开发,吃资源,大量部署消耗极高
  • 业务程序与Logstash耦合过松,不利于业务迁移
  • 日志收集与ES解耦又过紧,易打爆、丢数据
  • 在容器云环境下,传统ELK模型难以完成工作

2.ELK架构图

3.制作tomcat容器的底包镜像

Tomcat官网:https://tomcat.apache.org/

(1)下载Tomcat二进制包

在运维主机(mfyxw50)上执行

Tomcat 8.5.57下载地址:https://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz

下载Tomcat二进制包并保存至/opt/src目录

  1. [root@mfyxw50 ~]# cd /opt/src
  2. [root@mfyxw50 src]#
  3. [root@mfyxw50 src]# wget https://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz
  4. --2020-08-17 22:52:23-- https://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.57/bin/apache-tomcat-8.5.57.tar.gz
  5. Resolving mirror.bit.edu.cn (mirror.bit.edu.cn)... 219.143.204.117, 202.204.80.77, 2001:da8:204:1205::22
  6. Connecting to mirror.bit.edu.cn (mirror.bit.edu.cn)|219.143.204.117|:443... connected.
  7. HTTP request sent, awaiting response... 200 OK
  8. Length: 10379806 (9.9M) [application/octet-stream]
  9. Saving to: apache-tomcat-8.5.57.tar.gz
  10. 100%[==================================================================================================>] 10,379,806 153KB/s in 70s
  11. 2020-08-17 22:53:33 (144 KB/s) - apache-tomcat-8.5.57.tar.gz saved [10379806/10379806]

创建存放Tomcat的目录并解压至此目录

  1. [root@mfyxw50 ~]# mkdir -p /data/dockerfile/tomcat8
  2. [root@mfyxw50 ~]# tar -xf /opt/src/apache-tomcat-8.5.57.tar.gz -C /data/dockerfile/tomcat8

(2)简单配置tomcat

关闭ajp端口

在/data/dockerfile/tomcat8/apache-tomcat-8.5.57/conf/server.xml找到AJP的,添加上注释即可关闭AJP端口

  1. <!-- <Connector protocol="AJP/1.3"
  2. address="::1"
  3. port="8009"
  4. redirectPort="8443" />
  5. -- >

(3)配置日志

删除3manager,4host-manager的handlers并注释相关的内容

文件路径如下:/data/dockerfile/tomcat8/apache-tomcat-8.5.57/conf/logging.properties

修改好后如下所示

  1. handlers = 1catalina.org.apache.juli.AsyncFileHandler, 2localhost.org.apache.juli.AsyncFileHandler, java.util.logging.ConsoleHandler

注释3manager和4host-manager的日志配置内容

  1. #3manager.org.apache.juli.AsyncFileHandler.level = FINE
  2. #3manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
  3. #3manager.org.apache.juli.AsyncFileHandler.prefix = manager.
  4. #3manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8
  5. #4host-manager.org.apache.juli.AsyncFileHandler.level = FINE
  6. #4host-manager.org.apache.juli.AsyncFileHandler.directory = ${catalina.base}/logs
  7. #4host-manager.org.apache.juli.AsyncFileHandler.prefix = host-manager.
  8. #4host-manager.org.apache.juli.AsyncFileHandler.encoding = UTF-8

将其它的日志的等级修改为INFO

  1. 1catalina.org.apache.juli.AsyncFileHandler.level = INFO
  2. 2localhost.org.apache.juli.AsyncFileHandler.level = INFO
  3. java.util.logging.ConsoleHandler.level = INFO

(4)准备Dockerfile文件

dockerfile文件内容如下:

  1. [root@mfyxw50 ~]# cat > /data/dockerfile/tomcat8/Dockerfile << EOF
  2. From harbor.od.com/base/jre8:8u112
  3. RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime &&\
  4. echo 'Asia/Shanghai' >/etc/timezone
  5. ENV CATALINA_HOME /opt/tomcat
  6. ENV LANG zh_CN.UTF-8
  7. ADD apache-tomcat-8.5.57/ /opt/tomcat
  8. ADD config.yml /opt/prom/config.yml
  9. ADD jmx_javaagent-0.3.1.jar /opt/prom/jmx_javaagent-0.3.1.jar
  10. WORKDIR /opt/tomcat
  11. ADD entrypoint.sh /entrypoint.sh
  12. CMD ["/entrypoint.sh"]
  13. EOF

config.yml文件内容如下:

  1. [root@mfyxw50 ~]# cat > /data/dockerfile/tomcat8/config.yml << EOF
  2. ---
  3. rules:
  4. - pattern: '.*'
  5. EOF

下载jmx_javaagent-0.3.1.jar文件

  1. wget https://repo1.maven.org/maven2/io/prometheus/jmx/jmx_prometheus_javaagent/0.3.1/jmx_prometheus_javaagent-0.3.1.jar -O /data/dockerfile/tomcat8/jmx_javaagent-0.3.1.jar

entrypoint.sh文件内容如下:

  1. [root@mfyxw50 ~]# cat > /data/dockerfile/tomcat8/entrypoint.sh << EOF
  2. #!/bin/bash
  3. M_OPTS="-Duser.timezone=Asia/Shanghai -javaagent:/opt/prom/jmx_javaagent-0.3.1.jar=\$(hostname -i):\${M_PORT:-"12346"}:/opt/prom/config.yml"
  4. C_OPTS=\${C_OPTS}
  5. MIN_HEAP=\${MIN_HEAP:-"128m"}
  6. MAX_HEAP=\${MAX_HEAP:-"128m"}
  7. JAVA_OPTS=\${JAVA_OPTS:-"-Xmn384m -Xss256k -Duser.timezone=GMT+08 -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:CMSFullGCsBeforeCompaction=0 -XX:+CMSClassUnloadingEnabled -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=80 -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+PrintClassHistogram -Dfile.encoding=UTF8 -Dsun.jnu.encoding=UTF8"}
  8. CATALINA_OPTS="\${CATALINA_OPTS}"
  9. JAVA_OPTS="\${M_OPTS} \${C_OPTS} -Xms\${MIN_HEAP} -Xmx\${MAX_HEAP} \${JAVA_OPTS}"
  10. sed -i -e "1a\JAVA_OPTS=\"\$JAVA_OPTS\"" -e "1a\CATALINA_OPTS=\"\$CATALINA_OPTS\"" /opt/tomcat/bin/catalina.sh
  11. cd /opt/tomcat && /opt/tomcat/bin/catalina.sh run 2>&1 >> /opt/tomcat/logs/stdout.log
  12. EOF

给entrypoint.sh文件加可执行文件

  1. [root@mfyxw50 ~]# ls -l /data/dockerfile/tomcat8/entrypoint.sh
  2. -rw-r--r-- 1 root root 827 Aug 17 23:47 /data/dockerfile/tomcat8/entrypoint.sh
  3. [root@mfyxw50 ~]#
  4. [root@mfyxw50 ~]# chmod u+x /data/dockerfile/tomcat8/entrypoint.sh
  5. [root@mfyxw50 ~]#
  6. [root@mfyxw50 ~]# ls -l /data/dockerfile/tomcat8/entrypoint.sh
  7. -rwxr--r-- 1 root root 827 Aug 17 23:47 /data/dockerfile/tomcat8/entrypoint.sh

(5)构建tomcat底包

  1. [root@mfyxw50 ~]# cd /data/dockerfile/tomcat8/
  2. [root@mfyxw50 tomcat8]#
  3. [root@mfyxw50 tomcat8]# docker build . -t harbor.od.com/base/tomcat:v8.5.57
  4. Sending build context to Docker daemon 10.35MB
  5. Step 1/10 : From harbor.od.com/base/jre8:8u112
  6. ---> 1237758f0be9
  7. Step 2/10 : RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
  8. ---> Running in dd43a1973ae6
  9. Removing intermediate container dd43a1973ae6
  10. ---> 7d376f75a369
  11. Step 3/10 : ENV CATALINA_HOME /opt/tomcat
  12. ---> Running in 5d1a8302488f
  13. Removing intermediate container 5d1a8302488f
  14. ---> e6d8a5069f4b
  15. Step 4/10 : ENV LANG zh_CN.UTF-8
  16. ---> Running in 9ab19ad646de
  17. Removing intermediate container 9ab19ad646de
  18. ---> c61931622aae
  19. Step 5/10 : ADD apache-tomcat-8.5.57/ /opt/tomcat
  20. ---> 6953dffb9b11
  21. Step 6/10 : ADD config.yml /opt/prom/config.yml
  22. ---> 4d67798f76f5
  23. Step 7/10 : ADD jmx_javaagent-0.3.1.jar /opt/prom/jmx_javaagent-0.3.1.jar
  24. ---> 2ff30950c856
  25. Step 8/10 : WORKDIR /opt/tomcat
  26. ---> Running in f0692b96c235
  27. Removing intermediate container f0692b96c235
  28. ---> 00847c31b601
  29. Step 9/10 : ADD entrypoint.sh /entrypoint.sh
  30. ---> 6a44a6205708
  31. Step 10/10 : CMD ["/entrypoint.sh"]
  32. ---> Running in d2e6b80af0af
  33. Removing intermediate container d2e6b80af0af
  34. ---> c3c4fcdbe8fd
  35. Successfully built c3c4fcdbe8fd
  36. Successfully tagged harbor.od.com/base/tomcat:v8.5.57

(6)将构建好的tomcat底包上传至私有仓库

  1. [root@mfyxw50 ~]# docker login harbor.od.com
  2. Authenticating with existing credentials...
  3. WARNING! Your password will be stored unencrypted in /root/.docker/config.json.
  4. Configure a credential helper to remove this warning. See
  5. https://docs.docker.com/engine/reference/commandline/login/#credentials-store
  6. Login Succeeded
  7. [root@mfyxw50 ~]#
  8. [root@mfyxw50 ~]# docker push harbor.od.com/base/tomcat:v8.5.57
  9. The push refers to repository [harbor.od.com/base/tomcat]
  10. 1adedb0df456: Pushed
  11. c456d7815bdc: Pushed
  12. adbd684689e5: Pushed
  13. fc2e7ea50383: Pushed
  14. 1d6b6320a33e: Pushed
  15. c012afdfa38e: Mounted from base/jre8
  16. 30934063c5fd: Mounted from base/jre8
  17. 0378026a5ac0: Mounted from base/jre8
  18. 12ac448620a2: Mounted from base/jre8
  19. 78c3079c29e7: Mounted from base/jre8
  20. 0690f10a63a5: Mounted from base/jre8
  21. c843b2cf4e12: Mounted from base/jre8
  22. fddd8887b725: Mounted from base/jre8
  23. 42052a19230c: Mounted from base/jre8
  24. 8d4d1ab5ff74: Mounted from base/jre8
  25. v8.5.57: digest: sha256:83098849296b452d1f4886f9c84db8978c3d8d16b12224f8b76f20ba79abd8d6 size: 3448

4.实战交付tomcat形式的dubbo服务消费者到K8S集群

(1)创建Tomcat的jenkins流水线

给予tomcat创建流水线

使用admin用户登录,New Item ----> Create new jobs ----> Enter an item name,输入流水线的名字,比如:tomcat-demo

下面是设置流水线的参数:

  • Discard old builds

    Days to keep builds: 3

    Max # of builds to keep: 30

  • This project is parameterized

    1. Add Parameter ---> String Parameter

      Name: app_name

      Default value:

      Description: project name. e.g: dubbo-demo-web

      • [√] Trim the string
    2. Add Parameter ---> String Parameter

      Name: image_name

      Default Value:

      Description :project docker image name. e.g: app/dubbo-demo-web

      • [√] Trim the string
    3. Add Parameter ---> String Parameter

      Name: git_repo

      Default Value:

      Description : project git repository. e.g: git@gitee.com

      通过k8s部署dubbo微服务并接入ELK架构的更多相关文章

      1. 8.实战交付一套dubbo微服务到k8s集群(1)之Zookeeper部署

        1.基础架构 主机名 角色 ip HDSS7-11.host.com K8S代理节点1,zk1 10.4.7.11 HDSS7-12.host.com K8S代理节点2,zk2 10.4.7.12 H ...

      2. 实战交付一套dubbo微服务到k8s集群(1)之Zookeeper部署

        基础架构 主机名 角色 IP地址 mfyxw10.mfyxw.com K8S代理节点1,zk1 192.168.80.10 mfyxw20.mfyxw.com K8S代理节点2,zk2 192.168 ...

      3. Docker 系列七(Dubbo 微服务部署实践).

        一.前言 之前我们公司部署服务,就是大家都懂的那一套(安装JDK.Tomcat —> 编译好文件或者打war包上传 —> 启动Tomcat),这种部署方式一直持续了很久,带来的问题也很多: ...

      4. 交付Dubbo微服务到kubernetes集群

        1.基础架构 1.1.架构图 Zookeeper是Dubbo微服务集群的注册中心 它的高可用机制和k8s的etcd集群一致 java编写,需要jdk环境 1.2.节点规划 主机名 角色 ip hdss ...

      5. (转)实验文档2:实战交付一套dubbo微服务到kubernetes集群

        基础架构 主机名 角色 ip HDSS7-11.host.com k8s代理节点1,zk1 10.4.7.11 HDSS7-12.host.com k8s代理节点2,zk2 10.4.7.12 HDS ...

      6. k8s-1-交付dubbo微服务

        一.Dubbo微服务概述 1.1: dubbo介绍 1.2: 部署内容 二.实验环境架构 2.1: 架构 1.1 架构图解 1.最上面一排为K8S集群外服务 1.1 代码仓库使用基于git的gitee ...

      7. 使用Redis为注册中心的Dubbo微服务架构(基于SpringBoot)

        title: 使用Redis为注册中心的Dubbo微服务架构(基于SpringBoot) date: 2019-07-30 14:06:29 categories: 架构 author: mrzhou ...

      8. ZooKeeper分布式专题与Dubbo微服务入门

        第1章 分布式系统概念与ZooKeeper简介对分布式系统以及ZooKeeper进行简介,使得大家对其有大致的了解1-1 zookeeper简介1-2 什么是分布式系统1-3 分布式系统的瓶颈以及zk ...

      9. Dubbo 微服务系列(03)服务注册

        Dubbo 微服务系列(03)服务注册 [TOC] Spring Cloud Alibaba 系列目录 - Dubbo 篇 1. 背景介绍 图1 Dubbo经典架构图 注:本图来源 Dubbo官方架构 ...

      随机推荐

      1. P1273 有线电视网(树形动规,分组背包)

        题目链接: https://www.luogu.org/problemnew/show/P1273 题目描述 某收费有线电视网计划转播一场重要的足球比赛.他们的转播网和用户终端构成一棵树状结构,这棵树 ...

      2. LRU(Least Recently Used)最近未使用置换算法--c实现

        在OS中,一些程序的大小超过内存的大小(比如好几十G的游戏要在16G的内存上跑),便产生了虚拟内存的概念 我们通过给每个进程适当的物理块(内存),只让经常被调用的页面常驻在物理块上,不常用的页面就放在 ...

      3. 一文读懂k8s之Pod安全策略

        导读 Pod容器想要获取集群的资源信息,需要配置角色和ServiceAccount进行授权.为了更精细地控制Pod对资源的使用方式,Kubernetes从1.4版本开始引入了PodSecurityPo ...

      4. ABAP中SQL语句,指定索引(oracle)

        ①常用的两种方法: 1.指定使用全表扫描:%_HINTS ORACLE 'FULL(table_name)' 表示扫描整个表 2.指定索引:%_HINTS ORACLE 'INDEX("ta ...

      5. uni-app调用wifi接口

        微信小程序条件渲染 在小程序app.json中添加 需要先获取位置信息 "permission": { "scope.userLocation": { &quo ...

      6. FTP使用Socket SSL流程认证(一)

        关于Ftp使用SSL流程认证 本文章使用的是C#,ftp服务器为FileZilla 注:如果不是使用的Socket可以使用FtpWebRequst类,说实话,该类比较简单,但现在说的是SOCKET,网 ...

      7. 2021/1/20随记,MTU

        背景: 事情是这样的,客户2台防火墙部署了ipsec,内网互通,但是其中ssh以及其他大命令之类的操作就会卡住,简单的vi命令可以使用. 解决: 排除网络问题,因为内网互通,其次是系统层面问题,最终定 ...

      8. 抛弃 .NET 经典错误:object null reference , 使用安全扩展方法? 希望对大家有帮助---Bitter.Frame 引用类型的安全转换

        还是一样,我不喜欢长篇大论,除非关乎我设计思想领域的文章.大家过来看,都是想节省时间,能用白话表达的内容,绝不长篇大论.能直接上核心代码的,绝不上混淆代码. 长期从事 .NET 工作的人都知道..NE ...

      9. Linux内核poll/select机制简析

        0 I/O多路复用机制 I/O多路复用 (I/O multiplexing),提供了同时监测若干个文件描述符是否可以执行IO操作的能力. select/poll/epoll 函数都提供了这样的机制,能 ...

      10. 基于Koa2框架的项目搭建及实战开发

        Koa是基于 Node.js 平台的下一代 web 开发框架,由express原班人马打造,致力于成为一个更小.更富有表现力.更健壮的 Web 框架.使用 koa 编写 web 应用,通过组合不同的 ...