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