作者:小傅哥,博客:https://bugstack.cn
這位同學,你比上一位面試者好多了,你的簡歷中做的幾個項目都不錯。既有業(yè)務項目,也有技術項目,看得出你對編程開發(fā)是有一定的經(jīng)驗積累的。那么我還想了解下,這些項目在運行中的一個數(shù)據(jù)效果是怎么樣的。比如;tps、qps、響應時間、數(shù)據(jù)庫負載等,都是什么情況,你用的什么監(jiān)控工具。另外你這里還些了微服務的架構,那么微服務間的鏈路調用是怎么監(jiān)控的。
咋樣,是不一下就慌了。張口就喊:“java 崩盤了!” 以前靠背題吹牛逼就能入職,現(xiàn)在得把吹的牛逼落地了。而越來越多的面試官也更喜歡用結果推過程,從過程中再考察細節(jié)。一上來就問八股文的越來越少了。
所以,做完項目,最好在配上對應的數(shù)據(jù),這樣才更有說服力?!?所以本文小傅哥會教會你,如何配置一套全鏈路監(jiān)控系統(tǒng),并完成測試獲取系統(tǒng)運行的數(shù)據(jù)。此外這是整套《@小傅哥 Java 簡明教程》其中的一節(jié),更多內容可以進入這里學習;https://bugstack.cn/md/road-map/road-map.html
一、章節(jié)目的
本章節(jié)通過 Docker 方式部署一套 skywalking 非入侵的全鏈路監(jiān)控系統(tǒng),并在對應的測試工程中通過 skywalking-agent 字節(jié)碼增強組件,采集系統(tǒng)運行時的各項信息到 skywalking-ui 監(jiān)控平臺觀察數(shù)據(jù)。
- 官網(wǎng):https://skywalking.apache.org/ - 如果你想了解更多關于此類系統(tǒng)的設計和實現(xiàn),可以閱讀小傅哥的《字節(jié)碼編程》源碼:https://gitcode.net/KnowledgePlanet/road-map/skywalking - 這是小傅哥整理好的一套可運行的監(jiān)控和系統(tǒng),讀者可以下載后對照本文進行驗證使用。
二、基本環(huán)境
- Docker version 1.13.1Docker compose - 用于在云服務器環(huán)境中執(zhí)行的 docker-compose 文件Portainer Docker 容器管理面板
以上內容安裝,參考【Java簡明教程/發(fā)布部署】:https://bugstack.cn/md/road-map/road-map.html - 發(fā)布部署
三、監(jiān)控配置
skywalking 的安裝,需要 elasticsearch - 存放數(shù)據(jù)、skywalking-oap 接收數(shù)據(jù)、skywalking-ui 界面展示。以及還需要一個 skywalking-agent 用于配置到應用程序中,采集監(jiān)控數(shù)據(jù)。注意這些內容在官網(wǎng)中,都已提供,地址:https://skywalking.apache.org/downloads/
因為小傅哥這里提供了Docker的自動部署以及下載好了 skywalking-agent 所以你就不需要一個個去下載安裝了。接下來小傅哥會分別介紹在本地環(huán)境
和云服務器
兩套環(huán)境安裝,這樣可以更加方便小伙伴做測試驗證。
在進行下面的步驟前,請先下載 skywalking 監(jiān)控工程;https://gitcode.net/KnowledgePlanet/road-map/skywalking
1. 本地環(huán)境
腳本:/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 監(jiān)控系統(tǒng)。非常方便。如果你點擊紅圈下面的單個按鈕,那么代表的是只安裝當前一個應用。你可以通過命令執(zhí)行
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 - 發(fā)布部署,Docker#7
2.1 文件上傳
通過 ssh 的 sftp 工具,把 skywalking/docs 全部上傳到云服務器。
2.2 執(zhí)行腳本
[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 端口;監(jiān)控數(shù)據(jù)上報端口
安裝完成后就可以訪問監(jiān)控界面了;http://180.76.138.**:9090/ ?- 替換為你的IP地址
四、數(shù)據(jù)上報
監(jiān)控數(shù)據(jù)的上報使用的是 Javaagent 技術,在程序編譯時候通過字節(jié)碼增強技術,在需要監(jiān)控的位置自動加上額外的監(jiān)控代碼,來采集系統(tǒng)的運行數(shù)據(jù)。所以我們這里可以把 Javaagent 配置到程序啟動上,也可以配置到 Docker 鏡像打包上。
1. 程序啟動 - 加入探針
配置到 IDEA 程序啟動中,VM Options 參數(shù):-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 容器了,就不能這樣配置了,需要把配置打包到鏡像里,更加方便執(zhí)行。
#?基礎鏡像
FROM?openjdk:8-jre-slim
#?作者
MAINTAINER?xiaofuge
#?配置
ENV?PARAMS=""
#?時區(qū)
ENV?TZ=PRC
RUN?ln?-snf?/usr/share/zoneinfo/$TZ?/etc/localtime?&&?echo?$TZ?>?/etc/timezone
#?添加應用
ADD?/target/skywalking-app.jar?/skywalking-app.jar
##?在鏡像運行為容器后執(zhí)行的命令
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 服務,另外一種是把應用程序的鏡像發(fā)布到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}
-
- 你可以在云服務執(zhí)行 start.sh 腳本,或者直接復制 docker run 命令,去執(zhí)行啟動。注意;
-v /docs/skywalking-agent/:/docs/skywalking-agent/
- 是你的映射地址,只有這樣才能拿到 skywalking-agent另外記得按照 MySQL【environment-docker-compose.yml】 到云服務以及執(zhí)行 road-map.sql 文件。
如果你需要;簡明學習路線
、實戰(zhàn)項目鍛煉
、學習幫助輔導
、幫你簡歷優(yōu)化
- 應對招聘,那么可以掃碼加入小傅哥的知識星球【碼農會鎖】- 我會帶著走捷徑直擊目標,完成實戰(zhàn)項目,提高編程思維,鍛煉編碼能力。
- END -