面試官:“同學,你做的這幾個項目都不錯。但怎麼問QPS你就胡說呢?”

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

沉澱、分享、成長,讓自己和他人都能有所收穫!😄

這位同學,你比上一位面試者好多了,你的簡歷中做的幾個項目都不錯。既有業務項目,也有技術項目,看得出你對編程開發是有一定的經驗積累的。那麼我還想了解下,這些項目在運行中的一個數據效果是怎麼樣的。比如;tps、qps、響應時間、數據庫負載等,都是什麼情況,你用的什麼監控工具。另外你這裏還些了微服務的架構,那麼微服務間的鏈路調用是怎麼監控的。

咋樣,是不一下就慌了。張口就喊:“java 崩盤!” 以前靠背題吹牛逼就能入職,現在得把吹的牛逼落地了。而越來越多的面試官也更喜歡用結果推過程,從過程中再考察細節。一上來就問八股文的越來越少了。

所以,做完項目,最好在配上對應的數據,這樣才更有說服力。—— 所以本文小傅哥會教會你,如何配置一套全鏈路監控系統,並完成測試獲取系統運行的數據。此外這是整套《@小傅哥 Java 簡明教程》其中的一節,更多內容可以進入這裏學習;https://bugstack.cn/md/road-map/road-map.html

一、章節目的

本章節通過 Docker 方式部署一套 skywalking 非入侵的全鏈路監控系統,並在對應的測試工程中通過 skywalking-agent 字節碼增強組件,採集系統運行時的各項信息到 skywalking-ui 監控平臺觀察數據。

二、基本環境

  • Docker version 1.13.1
  • Docker compose - 用於在雲服務器環境中執行的 docker-compose 文件
  • Portainer Docker 容器管理面板

以上內容安裝,參考【Java簡明教程/發佈部署】https://bugstack.cn/md/road-map/road-map.html - 發佈部署

三、監控配置

skywalking 的安裝,需要 elasticsearch - 存放數據、skywalking-oap 接收數據、skywalking-ui 界面展示。以及還需要一個 skywalking-agent 用於配置到應用程序中,採集監控數據。注意這些內容在官網中,都已提供,地址:https://skywalking.apache.org/downloads/

因爲小傅哥這裏提供了Docker的自動部署以及下載好了 skywalking-agent 所以你就不需要一個個去下載安裝了。接下來小傅哥會分別介紹在本地環境雲服務器兩套環境安裝,這樣可以更加方便小夥伴做測試驗證。

在進行下面的步驟前,請先下載 skywalking 監控工程;https://gitcode.net/KnowledgePlanet/road-map/skywalking

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
  • 在 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 安裝,參考:https://bugstack.cn/md/road-map/road-map.html - 發佈部署,Docker#7

2.1 文件上傳

通過 ssh 的 sftp 工具,把 skywalking/docs 全部上傳到雲服務器。

2.2 執行腳本

[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

  • 注意修改;地址應用名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 服務。參考:https://bugstack.cn/md/road-map/road-map.html - 開通 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 文件。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章