当您的 Java 业务容器化至 Kubernetes 后,可通过本文了解如何使用 Skywalking Agent 上报调用链到 TSW 来观测 Java 应用。这种方式的好处在于不需要修改原来的基础镜像,也不用重新构建新的服务镜像,而是以 sidecar 模式,通过共享 volume 的方式将 agent 所需的相关文件挂载到已经存在的服务镜像中。
用户使用待部署的 Java 应用。本文例子使用 Spring boot 编写Java应用,具体代码省略,可参考GitHub 上 tsw-demo 中 spring-boot-hello 模块。
FROM centos:7
RUN echo "ip_resolve=4" >> /etc/yum.conf
RUN yum update -y && yum install -y java-1.8.0-openjdk
# 设置时区。
RUN /bin/cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime
RUN echo "Asia/Shanghai" > /etc/timezone
ENV workdir /app/
# 下面的 jar 包可替换为您的应用 jar包,注意这个 jar 包要和您的 dockerfile 位于同一级目录
ENV jar spring-boot-hello-1.0.jar
COPY target/${jar} ${workdir}
WORKDIR ${workdir}
# JAVA_OPTS 环境变量的值为部署组的 JVM 启动参数,在运行时 bash 替换。使用 exec 以使 Java 程序可以接收 SIGTERM 信号。
CMD ["sh", "-ec", "exec java ${JAVA_OPTS} -jar ${jar}"]
docker build -t tsw_demo/tsw_demo_hello:v1.0 .
sudo docker login --username=[uin] ccr.ccs.tencentyun.com
sudo docker tag [ImageId] ccr.ccs.tencentyun.com/tsw_demo/tsw_demo_hello:[tag]
sudo docker push ccr.ccs.tencentyun.com/tsw_demo/tsw_demo_hello:[tag]
部署应用至 Kubernetes 时,需修改以下几项:
增加 Skywalking Agent 的 initContainers,以 sidecar 模式挂载 agent。qcloud-tsw/tsw-dist-of-apache-skywalking 镜像已发布到TKE公共镜像,镜像版本前三位对应 Skywalking 的版本,如示例中 v8.3.0.1 对应 Skywalking 的 v8.3.0 版本。
JAVA_OPTS 环境变量添加 agent 启动目录。
添加 Skywalking Agent 配置的环境变量,取值可以从 TSW 接入指引页面 获取。
SW_AGENT_COLLECTOR_BACKEND_SERVICES = {collector.backend_service} 后端上报地址
SW_AGENT_AUTHENTICATION = {agent.authentication} 数据上报鉴权凭证
SW_AGENT_NAME = {agent.service_name} 服务名
示例如下:
apiVersion: apps/v1
kind: Deployment
metadata:
name: hello-demo
spec:
replicas: 1
selector:
matchLabels:
app: hello-demo
template:
metadata:
labels:
app: hello-demo
spec:
initContainers:
- name: sw-agent-sidecar
image: ccr.ccs.tencentyun.com/qcloud-tsw/tsw-dist-of-apache-skywalking:v8.3.0.1
imagePullPolicy: IfNotPresent
command: ['sh']
args: ['-c','mkdir -p /skywalking/agent && cp -r /usr/skywalking/agent/* /skywalking/agent']
volumeMounts:
- mountPath: /skywalking/agent
name: sw-agent
containers:
- name: hello-demo
image: ccr.ccs.tencentyun.com/tsw_demo/tsw_demo_hello:v1.0
volumeMounts:
- mountPath: /usr/skywalking/agent
name: sw-agent
env:
- name: JAVA_OPTS
value: "-javaagent:/usr/skywalking/agent/skywalking-agent.jar"
- name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
value: "ap-guangzhou.tencentservicewatcher.com:11800"
- name: SW_AGENT_NAME
value: "tke-hello-demo"
- name: SW_AGENT_AUTHENTICATION
value: "tsw_site@example"
volumes:
- name: sw-agent
emptyDir: {}
------
apiVersion: v1
kind: Service
metadata:
name: hello-demo
labels:
app: hello-demo
spec:
type: ClusterIP
ports:
- port: 80
protocol: TCP
name: http
selector:
app: hello-demo
多次访问 Java 应用后,可以在 TSW 分布式依赖拓扑、调用链查询 等页面确认数据是否上报,若没有数据,可在 Skywalking Agent 路径查看日志查找原因,本文示例挂载目录是/usr/skywalking/agent
。
说明:初次上报,数据存在1分钟左右延迟,请稍加等待。若等待时长较长,请通过 提交工单 与我们取得联系。
curl {ip:port}/echo/123
分布式依赖拓扑:
调用链查询:
知名软件行业分析公司 RedMonk 发布了 2021 年 1 月(第一季度)编程语言排行榜。 ...
2020已经过去,在过去的一年里,又有非常多优秀的Python库涌现出来。 相对于nump...
作者 |?顾静(子白) 来源 | 阿里巴巴云原生公众号 容器化部署应用可以降低企业...
你是否经常希望有一个CSS特性可以轻松创建一个可滚动的容器? CSS scroll snap 可...
您可以通过变更ECS实例所在的安全组来更新主网卡的安全组。您也可以修改辅助弹性...
前言 之所以了解到了这个,是因为使用了一个依赖tqdm的包,然后好奇就查了一下。...
企业建设网站以后,购买了一台或两台服务器,但自己又不能自行管理,还必须托管...
大家好,我是鱼皮的小老弟阿巴,大家也可以叫我小阿巴。 我也对编程非常感兴趣,...
企业邮箱 126怎么申请?126 企业邮箱申请 其实非常简单,我们简单来说一说。 首...
起因 某一天突然有同事说zk client连不上server,考虑到最近业务代码没有变更,...