k8s-apm

apm全链路追踪

产品对比

pinpoint

Pinpoint是用 Java / PHP编写的用于大型分布式系统的 APM(应用程序性能管理)工具。受Dapper的启发,Pinpoint 提供了一种解决方案,通过跟踪分布式应用程序中的事务来帮助分析系统的整体结构以及其中的组件如何互连。

Skywalking

分布式系统的应用程序性能监控工具,专为微服务、云原生和基于容器的 (Kubernetes) 架构而设计。

CAT

  • CAT 是基于 Java 开发的实时应用监控平台,为美团点评提供了全面的实时监控告警服务。
  • CAT 作为服务端项目基础组件,提供了 Java, C/C++, Node.js, Python, Go 等多语言客户端,已经在美团点评的基础架构中间件框架(MVC框架,RPC框架,数据库框架,缓存框架等,消息队列,配置系统等)深度集成,为美团点评各业务线提供系统丰富的性能指标、健康状况、实时告警等。
  • CAT 很大的优势是它是一个实时系统,CAT 大部分系统是分钟级统计,但是从数据生成到服务端处理结束是秒级别,秒级定义是48分钟40秒,基本上看到48分钟38秒数据,整体报表的统计粒度是分钟级;第二个优势,监控数据是全量统计,客户端预计算;链路数据是采样计算。

Zipkin

bonree(收费)

基调听云

Skywalking

helm-k8s安装

1
2
3
4
5
6
7
8
9
10
11
12
13
#添加仓库
helm repo add skywalking https://apache.jfrog.io/artifactory/skywalking-helm
#创建skywalking空间
kubectl create namespace skywalking
#安装
helm install skywalking \
skywalking/skywalking \
--version 4.3.0 \
-n skywalking \
--set oap.image.tag=9.2.0 \
--set oap.storageType=elasticsearch \
--set ui.image.tag=9.2.0 \
--set elasticsearch.imageTag=6.8.6

springboot接入Skywalking

查看Skywalking oap服务地址

集群管理->应用负载->服务->skywalking-oap->dns+服务端口=skywalk oap 后端服务地址

idea agent接入

编辑vm参数,添加如下参数:

java -javaagent:~/skywalking/agent/skywalking-agent.jar -Dskywalking.agent.service_name=your-service-name -Dskywalking.collector.backend_service=127.0.0.1:11800

通过k8s sidecar无侵入接入

kind: Deployment配置文件添加如下配置:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
initContainers: #新添加初始化容器,主要用于拷贝skywalking-agent.jar包,也可以在dockerfile里面的基础镜像直接加,就不用初始化容器
- name: sidecar
#过期不兼容hutool image: apache/skywalking-base:8.1.0-es7 # 容器镜像,包含静态资源文件
image: apache/skywalking-java-agent:8.13.0-java8
imagePullPolicy: IfNotPresent
command: ["cp", "-r", "/skywalking/agent", "/sidecar"]
volumeMounts:
- name: sidecar
mountPath: /sidecar
containers:
- name: {{ .Chart.Name }}
securityContext:
{{- toYaml .Values.securityContext | nindent 12 }}
image: "{{ .Values.image.repository }}" #springboot 应用镜像
imagePullPolicy: {{ .Values.image.pullPolicy }}
env:
- name: JAVA_OPTS
value: -javaagent:/sidecar/agent/skywalking-agent.jar
- name: SW_AGENT_NAME
value: {{ include "springboot-app.fullname" . }} #服务名
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "{{.Values.skyWalking.oap}}" # skywalk oap 后端服务
ports:
- containerPort: {{ .Values.containerPort }}
resources:
{{- toYaml .Values.resources | nindent 12 }}
volumeMounts: #新加
- name: sidecar
mountPath: /sidecar
volumes: #新加
- name: sidecar #共享agent文件夹
emptyDir: {}

常见问题

  1. 使用hutool工具的HttpUtil.get方法发现不能追踪链路?

    原理:skywalking版本9.2.0,升级agent镜像,升级之后能追踪。

    解决:将apache/skywalking-base:8.1.0-es7替换成 apache/skywalking-java-agent:8.13.0-java8

参考

KubeSphere 部署 SkyWalking 至 Kubernetes 开启无侵入 APM

使用/不使用 Istio 将 Envoy 指标发送到 SkyWalking