虚拟化容器,大数据,DBA,中间件,监控。

APM监控系统 微服务接入SkyWalking

21 12月
作者:admin|分类:容器虚拟化

微服务监控需求


随着微服务架构的流行, 服务按照不同的维度进行拆分 ,一次请求往往需要涉及到多个服务。这些服务可能不同编程语言开发,不同团队开发,可能部署很多副本。因此,就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。“APM系统” 就在这样的问题背景下产生了。
APM系统 从整体维度到局部维度展示各项指标 ,将跨应用的所有调用链性能信息集中展现,可方便度量整体和局部性能,并且方便找到故障产生的源头,生产上可极大缩短故障排除时间。

 

APM监控系统是什么


APM(ApplicationPerformance Management) 是一种应用性能监控工具,通过汇聚业务系统各处理环节的实时数据,分析业务系统各事务处理的交易路径和处理时间,实现对应用的全链路性能监测。
相比接触的Prometheus、Zabbix这类监控系统,APM系统主要监控对应用程序内部,例如:
• 请求链路追踪:通过分析服务调用关系,绘制运行时拓扑信息,可视化展示
• 调用情况衡量:各个调用环节的性能分析,例如吞吐量、响应时间、错误次数
• 运行情况反馈:告警,通过调用链结合业务日志快速定位错误信息

 

APM监控系统选择依据


APM类监控系统有:Skywalking、Pinpoint、Zipkin

关于选型,可以从以下方面考虑:
探针的性能消耗
APM组件服务的影响应该做到足够小,数据分析要快,性能占用小。
代码的侵入性
即也作为业务组件,应当尽可能少入侵或者无入侵其他业务系统,对于使用方透明,减少开发人员的负担。
监控维度
分析的维度尽可能多。
可扩展性
一个优秀的调用跟踪系统必须支持分布式部署,具备良好的可扩展性。能够支持的组件越多当然越好

Skywalking介绍


Skywalking 是一个分布式应用程序性能监控系统,针对微服务体系结构而设计。

功能:

• 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
• 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
• 轻量高效。无需大数据平台,和大量的服务器资源。
• 模块化。UI、存储、集群管理都有多种机制可选。
• 支持告警。
• 优秀的可视化解决方案

Skywalking架构 


 

Skywalking部署


1、部署ES数据库

docker run --name elasticsearch -p 9200:9200 -e "discovery.type=single-node" -d elasticsearch:7.7.0

2、部署Skywalking OAP 

软件包下载地址:https://archive.apache.org/dist/skywalking/8.3.0/
yum install java-11-openjdk –y
tar zxvf apache-skywalking-apm-es7-8.3.0.tar.gz
cd apache-skywalking-apm-bin-es7/
[root@monitor apache-skywalking-apm-bin-es7]# ls
agent  bin  config  LICENSE  licenses  NOTICE  oap-libs  README.txt  tools  webapp

#使用哪块配置
storage:
  selector: ${SW_STORAGE:elasticsearch7}

#指定使用具体IP地址
  elasticsearch7:
    nameSpace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:127.0.0.1:9200}

#启动OAP和UI
[root@monitor bin]# ./startup.sh 
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!


[root@monitor apache-skywalking-apm-bin-es7]# cd logs/
[root@monitor logs]# ls
oap.log  skywalking-oap-server.log  webapp-console.log  webapp.log
[root@monitor logs]# tail -f skywalking-oap-server.log 


[root@monitor logs]# netstat -tpln | grep -w 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      14641/java

微服务接入监控


 内置Agent包路径:apache-skywalking-apm-bin-es7/agent/

启动Java程序以探针方式集成Agent:
java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=<项目名称
>,agent.instance_name=<实例名称>,collector.backend_service=<Skywalking服务器>:11800 xxx.jar
[root@master product-service]# cd product-service-biz/
[root@master product-service-biz]# ls
Dockerfile  pom.xml  skywalking  src
[root@master product-service-biz]# cat Dockerfile 
FROM lizhenliang/java:8-jdk-alpine
LABEL maintainer www.ctnrs.com
COPY ./target/product-service-biz.jar ./
COPY skywalking /skywalking
EXPOSE 8010
CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-product,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.31.90:11800 /product-service-biz.jar


[root@master order-service-biz]# kubectl get pod -n ms
NAME                       READY   STATUS    RESTARTS   AGE
eureka-0                   1/1     Running   1          27d
eureka-1                   1/1     Running   1          27d
eureka-2                   1/1     Running   1          27d
gateway-fcdff7b65-2jn7f    1/1     Running   1          36d
order-5775448c6-rz74g      1/1     Running   1          36d
portal-586dbdfc8-hm85c     1/1     Running   1          36d
product-69b4846b89-tbzsh   1/1     Running   0          15m
stock-67d849958d-5jk5v     1/1     Running   0          3m41s
[root@master order-service-biz]# HOSTNAME=product-69b4846b89-tbzsh
[root@master order-service-biz]# echo $HOSTNAME | awk -F- '{print $1"-"$NF}'
product-tbzsh



[root@master product-service-biz]# docker build -t reg.harbor.com/microservice/product:skywalking .
Sending build context to Docker daemon   96.2MB
Step 1/6 : FROM java:8-jdk-alpine
 ---> 3fd9dd82815c
Step 2/6 : RUN  apk add -U tzdata &&      ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
 ---> Using cache
 ---> 3d79cdf17999
Step 3/6 : COPY ./target/product-service-biz.jar ./
 ---> Using cache
 ---> af45498b45de
Step 4/6 : COPY skywalking /skywalking
 ---> 972d1d84872b
Step 5/6 : EXPOSE 8010
 ---> Running in 35409311758b
Removing intermediate container 35409311758b
 ---> 1ce48f156ad9
Step 6/6 : CMD java -jar -javaagent:/skywalking/skywalking-agent.jar=agent.service_name=ms-product,agent.instance_name=$(echo $HOSTNAME | awk -F- '{print $1"-"$NF}'),collector.backend_service=192.168.0.13:11800 /product-service-biz.jar
 ---> Running in b43839309d41
Removing intermediate container b43839309d41
 ---> 67c0ec036979
Successfully built 67c0ec036979
Successfully tagged reg.harbor.com/microservice/product:skywalking
[root@master product-service-biz]# docker push reg.harbor.com/microservice/product:skywalking
The push refers to repository [reg.harbor.com/microservice/product]
b594484b0bd9: Pushed 
a7eb54fcd329: Layer already exists 
1a6781d58798: Layer already exists 
a1e7033f082e: Layer already exists 
78075328e0da: Layer already exists 
9f8566ee5135: Layer already exists 
skywalking: digest: sha256:a7205a5e0b823b65006a711af155206d615371a2101ed1b36c4d264c8335fad4 size: 1582

浏览387 评论0
返回
目录
返回
首页
Skywalking UI使用 为什么微服务一定要有网关?