作者:小傅哥
博客:bugstack.cn

沉积、共享、成长,让自己和别人都能有所收获!

这位同学,你比上一位面试者好多了,你的简历中做的几个项目都不错。既有事务项目,也有技能项目,看得出你对编程开发是有必定的经历积累的。那么我还想了解下,这些项目在运转中的一个数据效果是怎样样的。比方;tps、qps、响应时刻、数据库负载等,都是什么情况,你用的什么监控东西。别的你这儿还些了微服务的架构,那么微服务间的链路调用是怎样监控的。

咋样,是不一下就慌了。张口就喊:“java 崩盘!” 以前靠背题吹牛逼就能入职,现在得把吹的牛逼落地了。而越来越多的面试官也更喜欢用结果推进程,从进程中再考察细节。一上来就问八股文的越来越少了。

所以,做完项目,最好在配上对应的数据,这样才更有说服力。—— 所以本文小傅哥会教会你,怎么装备一套全链路监控体系,并完结测试获取体系运转的数据。此外这是整套《@小傅哥 Java 简明教程》其中的一节,更多内容能够进入这儿学习;bugstack.cn/md/road-map…

一、章节意图

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

本章节经过 Docker 方式布置一套 skywalking 非侵略的全链路监控体系,并在对应的测试工程中经过 skywalking-agent 字节码增强组件,收集体系运转时的各项信息到 skywalking-ui 监控平台调查数据。

  • 官网:skywalking.apache.org/ – 假如你想了解更多关于此类体系的设计和完结,能够阅读小傅哥的《字节码编程》
  • 源码:gitcode.net/KnowledgePl… – 这是小傅哥整理好的一套可运转的监控和体系,读者能够下载后对照本文进行验证运用。

二、基本环境

  • Docker version 1.13.1
  • Docker compose – 用于在云服务器环境中履行的 docker-compose 文件
  • Portainer Docker 容器办理面板

以上内容装置,参阅【Java简明教程/发布布置】:bugstack.cn/md/road-map… – 发布布置

三、监控装备

skywalking 的装置,需求 elasticsearch – 存放数据、skywalking-oap 接收数据、skywalking-ui 界面展示。以及还需求一个 skywalking-agent 用于装备到运用程序中,收集监控数据。留意这些内容在官网中,都已供给,地址:skywalking.apache.org/downloads/

因为小傅哥这儿供给了Docker的主动布置以及下载好了 skywalking-agent 所以你就不需求一个个去下载装置了。接下来小傅哥会分别介绍在本地环境云服务器两套环境装置,这样能够更加便利小伙伴做测试验证。

在进行下面的过程前,请先下载 skywalking 监控工程;gitcode.net/KnowledgePl…

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

1. 本地环境

脚本/road-map/skywalking/docs/dev-ops/skywalking – 你能够翻开工程找到这个方位,检查最新脚本。

version: '3.8'
services:
  elasticsearch:
    image: elasticsearch:7.16.2
    container_name: elasticsearch
    ports:
      - "9200:9200"
    healthcheck:
      test: [ "CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
    ulimits:
      memlock:
        soft: -1
        hard: -1
    volumes:
      - ./data/es_data:/usr/share/elasticsearch/data
  oap:
    image: apache/skywalking-oap-server:8.9.0
    container_name: oap
    depends_on:
      elasticsearch:
        condition: service_healthy
    links:
      - elasticsearch
    ports:
      - "11800:11800"
      - "12800:12800"
    healthcheck:
      test: [ "CMD-SHELL", "/skywalking/bin/swctl ch" ]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 10s
    environment:
      SW_STORAGE: elasticsearch
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
      SW_HEALTH_CHECKER: default
      SW_TELEMETRY: prometheus
      JAVA_OPTS: "-Xms1024m -Xmx1024m"
  skywalking-ui:
    image: apache/skywalking-ui:8.9.0
    container_name: skywalking-ui
    depends_on:
      oap:
        condition: service_healthy
    links:
      - oap
    ports:
      - "9090:8080"
    environment:
      SW_OAP_ADDRESS: http://oap:12800
面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”
  • 在 Docker 装置并正确✅发动后,你就能够点击这个按钮了。它会帮你主动运转装置出整套的 skywalking 监控体系。十分便利。
  • 假如你点击红圈下面的单个按钮,那么代表的是只装置当时一个运用。
  • 你能够经过指令履行 skywalking-docker-compose.yml 的装置:/usr/local/bin/docker-compose -f /docs/dev-ops/skywalking/skywalking-docker-compose.yml up -d – 在云服务器端也是运用这个指令装置。

拜访验证:http://localhost:9090/ – 我设置的端口是9090,假如你是其他的则需求修正。

2. 云服务器

  • 预备一台2核4G的云服务器,整个服务发动后会占用2-3G左右
  • 下载 ssh 东西,用于连接云服务。这儿小傅哥推荐运用 Termius 十分好用!
  • docker-compose 装置,参阅:bugstack.cn/md/road-map… – 发布布置,Docker#7

2.1 文件上传

经过 ssh 的 sftp 东西,把 skywalking/docs 悉数上传到云服务器。

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”

2.2 履行脚本

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”
[root@dev-ops ~]# cd /docs/
[root@dev-ops docs]# ls
dev-ops  skywalking-agent  sql
[root@dev-ops docs]# cd dev-ops/
[root@dev-ops dev-ops]# ls
environment  skywalking
[root@dev-ops dev-ops]# cd skywalking/
[root@dev-ops skywalking]# ls
skywalking-docker-compose.yml
[root@dev-ops skywalking]# /usr/local/bin/docker-compose -f /docs/dev-ops/skywalking/skywalking-docker-compose.yml up -d
[+] Building 0.0s (0/0)                                                                          
[+] Running 3/3
 ✔ Container elasticsearch  Healthy                                                         0.5s 
 ✔ Container oap            Healthy                                                         1.0s 
 ✔ Container skywalking-ui  Running                                                         0.0s

装置完结记住敞开端口;

  • 9090 端口;skywalking-ui 界面端口
  • 11800 端口;监控数据上报端口

装置完结后就能够拜访监控界面了;http://180.76.138.**:9090/ – 替换为你的IP地址

四、数据上报

监控数据的上报运用的是 Javaagent 技能,在程序加载时分经过字节码增强技能,在需求监控的方位主动加上额外的监控代码,来收集体系的运转数据。所以咱们这儿能够把 Javaagent 装备到程序发动上,也能够装备到 Docker 镜像打包上。

1. 程序发动 – 参加探针

装备到 IDEA 程序发动中,VM Options 参数:-javaagent:/Users/fuzhengwei/1024/KnowledgePlanet/road-map/skywalking/docs/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=skywalking-app-dev -Dskywalking.collector.backend_service=127.0.0.1:11800

面试官:“同学,你做的这几个项目都不错。但怎么问QPS你就胡说呢?”
  • 留意修正;地址运用名IP【假如是云服务,就装备云服务的IP地址】

2. 镜像打包 – 参加探针

当程序需求运转在云服务的 Docker 容器了,就不能这样装备了,需求把装备打包到镜像里,更加便利履行。

# 基础镜像
FROM openjdk:8-jre-slim
# 作者
MAINTAINER xiaofuge
# 装备
ENV PARAMS=""
# 时区
ENV TZ=PRC
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# 添加运用
ADD /target/skywalking-app.jar /skywalking-app.jar
## 在镜像运转为容器后履行的指令
ENTRYPOINT ["java", "-Xmx512m", "-javaagent:/docs/skywalking-agent/skywalking-agent.jar", "-Dskywalking.agent.service_name=skywalking-app", "-Dskywalking.collector.backend_service=180.76.138.41:11800", "-jar", "/skywalking-app.jar"]
  • 留意;/docs/skywalking-agent/skywalking-agent.jar 这个是经过 SFTP 东西上传到云服务器端的。但不在 Docker 容器里,等布置程序的时分还需求做一次文件映射。

五、发动服务

假如你希望在把运用程序布置到云服务端,一种是经过 IDEA 连接 Docker 服务,别的一种是把运用程序的镜像发布到Docker Hub。这儿咱们经过 IDEA 连接 Docker 服务。参阅:bugstack.cn/md/road-map… – 开通 2375 端口,用完记住关闭。

脚本skywalking/src/bin/main/start.sh

CONTAINER_NAME=skywalking-app
IMAGE_NAME=fuzhengwei/skywalking-app:1.0
PORT=9091
echo "容器布置开始 ${CONTAINER_NAME}"
# 中止容器
docker stop ${CONTAINER_NAME}
# 删去容器
docker rm ${CONTAINER_NAME}
# 发动容器 skywalking-agent 下载:https://archive.apache.org/dist/skywalking/java-agent/8.9.0/apache-skywalking-java-agent-8.9.0.tgz
docker run --name ${CONTAINER_NAME} \
-p ${PORT}:${PORT} \
-v /docs/skywalking-agent/:/docs/skywalking-agent/ \
-d ${IMAGE_NAME}
#docker run --name skywalking-app \
#-p 9091:9091 \
#-v /docs/skywalking-agent/:/docs/skywalking-agent/ \
#-d fuzhengwei/skywalking-app:1.2
echo "容器布置成功 ${CONTAINER_NAME}"
docker logs -f ${CONTAINER_NAME}
  • 你能够在云服务履行 start.sh 脚本,或者直接复制 docker run 指令,去履行发动。
  • 留意;-v /docs/skywalking-agent/:/docs/skywalking-agent/ \ 是你的映射地址,只有这样才能拿到 skywalking-agent
  • 别的记住按照 MySQL【environment-docker-compose.yml】 到云服务以及履行 road-map.sql 文件。