随着微服务的兴起与流行,一些微服务架构下的问题也会越来越突出,服务之间的依赖关系愈发复杂。
如果某个服务出现问题,寻找问题往往需要很长的时间,可能需要一个一个服务的查找问题,由此我们就有了一个新的工具去方便定位这个问题。这个工具就是APM(应用性能管理),他可以帮助我们在出现问题时,快速定位问题原因。
Skywalking就是这样的一款APM工具,他提供了完善的链路追踪能力。随着微服务的兴起与流行,一些微服务架构下的问题也会越来越突出,服务之间的依赖关系愈发复杂。如果某个服务出现问题,寻找问题往往需要很长的时间,可能需要一个一个服务的查找问题,由此我们就有了一个新的工具去方便定位这个问题。这个工具就是APM(应用性能管理),他可以帮助我们在出现问题时,快速定位问题原因。
Skywalking就是这样的一款APM工具,他提供了完善的链路追踪能力。
SkyWalking项目是由华为大牛吴晟开源的个人项目,目前已经加入Apache孵化器。SkyWalking项目的核心目标是针对微服务、Cloud Native、容器化架构提供应用性能监控和分布式调用链追踪功能
分布式追踪
分布式链路追踪就是将一次分布式请求还原成调用链路,将一次分布式请求的调用情况集中展示,比如各个服务节点上的耗时、请求具体到达哪台机器上、每个服务节点的请求状态等等。
多种安装方法选择
1、tar包安装
tar zxf apache-skywalking-apm-6.6.0.tar.gz
mv apache-skywalking-apm-bin/ skywalking
cd bin/
执行启动命令
./startup.sh
耐心等待skywalking启动:
http://192.168.198.154:8080/
docker-compose安装
version: '3.3'
services:
oap:
image: apache/skywalking-oap-server:8.4.0-es6
container_name: oap
restart: always
ports:
- 11800:11800 # agent 上报数据的端口,这是 gRPC 端口
- 12800:12800 # ui 读取数据的端口, 这是 http 端口
skywaling-ui:
image: apache/skywalking-ui:8.4.0
container_name: ui
depends_on:
- oap
links:
- oap
ports:
- 8088:8080
environment:
- SW_OAP_ADDRESS=oap:12800
jar包监控发布方法
java命令发布方法
java -javaagent:/opt/skywalking/agent_springbootdemo2/skywalking-agent.jar -
Dskywalking.collector.backend_service=192.168.198.141:11800 -jar
skywalkingspringbootdemo2.jar
docker脚本发布
DockerFile
FROM openjdk:8-alpine3.9
# 作者信息
MAINTAINER Dingcy Docker skywalking springboot "1249774208@qq.com"
# 修改源
RUN echo "https://mirrors.aliyun.com/alpine/v3.6/main/" > /etc/apk/repositories && \
echo "https://mirrors.aliyun.com/alpine/v3.6/community/" >> /etc/apk/repositories
# 安装需要的软件,解决时区问题
RUN apk --update add curl bash tzdata && \
rm -rf /var/cache/apk/*
#修改镜像为东八区时间
ENV TZ Asia/Shanghai
COPY apache-skywalking-apm-bin/agent/ /opt/skyagent/
VOLUME /tmp
ARG JAR_FILE
ARG SERVICE_NAME
ARG SERVICE_PORT
COPY ${JAR_FILE} app.jar
EXPOSE ${SERVICE_PORT}
ENV AGENT_COLLECTOR_ADDRESS="192.168.80.151:11800" AGENT_SERVICE_NAME=${SERVICE_NAME}
ENTRYPOINT java -javaagent:/opt/skyagent/skywalking-agent.jar=agent.service_name=${AGENT_SERVICE_NAME},collector.backend_service=${AGENT_COLLECTOR_ADDRESS} ${JAVA_OPTS} -jar /app.jar
发布脚本
docker build --rm -t lagou/edu-order-impl:2.0 --build-arg SERVICE_NAME='edu-order-impl' --build-arg SERVICE_PORT='8088' --build-arg JAR_FILE=edu-order-impl.jar .
启动脚本
docker run -itd --name edu-order-impl -p 8088:8088 lagou/edu-order-impl:2.0