云原生
Kubernetes基础
容器技术介绍
Docker快速入门
Containerd快速入门
K8S主要资源罗列
认识YAML
API资源对象
Kubernetes安全掌控
Kubernetes网络
Kubernetes高级调度
Kubernetes 存储
Kubernetes集群维护
Skywalking全链路监控
ConfigMap&Secret场景应用
Kubernetes基础概念及核心组件
水平自动扩容和缩容HPA
Jenkins
k8s中部署jenkins并利用master-slave模式实现CICD
Jenkins构建过程中常见问题排查与解决
Jenkins部署在k8s集群之外使用动态slave模式
Jenkins基于Helm的应用发布
Jenkins Pipeline语法
EFKStack
EFK日志平台部署管理
海量数据下的EFK架构优化升级
基于Loki的日志收集系统
Ingress
基于Kubernetes的Ingress-Nginx解决方案
Ingress-Nginx高级配置
使用 Ingress-Nginx 进行灰度(金丝雀)发布
Ingress-nginx优化配置
APM
Skywalking全链路监控
基于Helm部署Skywalking
应用接入Skywalking
服务网格
Istio
基于Istio的微服务可观察性
基于Istio的微服务Gateway实战
Kubernetes高可用集群部署
Kuberntes部署MetalLB负载均衡器
Ceph
使用cephadm部署ceph集群
使用Rook部署Ceph存储集群
openstack
glance上传镜像失败
mariadb运行不起来
创建域和项目错误_1
创建域和项目错误_2
安装计算节点
时钟源
网络创建失败
本文档使用 MrDoc 发布
-
+
首页
应用接入Skywalking
# 1、使用Skywalking Agent Java 中使用 agent ,提供了以下三种方式供你选择 - 使用官方提供的基础镜像 skywalking-base; - 将 agent 包构建到已经存在的基础镜像中; - sidecar 模式挂载 agent(推荐); **1、使用官方提供的基础镜像** [Downloads | Apache SkyWalking](https://skywalking.apache.org/downloads/) **2、将agent包构建到已经存在的基础镜像中** 提供这种方式的原因是:官方的镜像属于精简镜像,并且是 openjdk ,可能很多命令没有,需要自己二次安装,这里略过。 **3、sidecar模式挂载agent** - 不需要修改原来的基础镜像,也无需重新构建服务镜像。以sidecar 模式,通过共享volume 的方式将 agent 所需的相关文件挂载到已经存在的服务镜像中。 - 在 Sidecar 模式下,SkyWalking 代理程序与应用程序是分离的,不会影响应用程序的执行,也不会干扰到应用的性能问题。 **4、构建skywalking agent image** 通过以下dockerfile进行构建 ```dockerfile FROM alpine:3.8 LABEL maintainer="ZHDYA" ENV SKYWALKING_VERSION=8.5.0 ADD https://archive.apache.org/dist/skywalking/${SKYWALKING_VERSION}/apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz / RUN tar -zxvf /apache-skywalking-apm-${SKYWALKING_VERSION}.tar.gz && \ mv apache-skywalking-apm-bin skywalking && \ mv /skywalking/agent/optional-plugins/apm-trace-ignore-plugin* /skywalking/agent/plugins/ && \ sed -i 's@# logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:-1}@logging.max_history_files=${SW_LOGGING_MAX_HISTORY_FILES:2}@' /skywalking/agent/config/agent.config && \ echo -e "\n# Ignore Path" >> /skywalking/agent/config/agent.config && \ echo "# see https://github.com/apache/skywalking/blob/v8.5.0/docs/en/setup/service-agent/java-agent/agent-optional-plugins/trace-ignore-plugin.md" >> /skywalking/agent/config/agent.config && \ echo 'trace.ignore_path=${SW_IGNORE_PATH:/health}' >> /skywalking/agent/config/agent.config ``` 待 docker build 完毕后,push 到仓库即可。 ```shell $ docker build -t harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 . $ docker push harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 ``` **5、使用sidecar挂载** 测试 demo应用 ```yaml apiVersion: apps/v1 kind: Deployment metadata: name: demo-skywalking spec: replicas: 1 selector: matchLabels: app: demo-skywalking strategy: rollingUpdate: maxSurge: 1 maxUnavailable: 0 type: RollingUpdate template: metadata: labels: app: demo-skywalking spec: initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - image: nginx:1.7.9 imagePullPolicy: Always name: nginx ports: - containerPort: 80 protocol: TCP volumeMounts: - mountPath: /opt/skywalking/agent name: skywalking-agent volumes: - name: skywalking-agent emptyDir: {} ``` 以上是挂载`sidecar`的`deployment.yaml`文件,以`nginx`作为服务为例,主要是通过 共享`volume`的方式挂载`agent`。 首先`initContainers`通过`skywalking-agent`卷挂载了`sw-agent-sidecar`中的`/vmskywalking/agent`,并且将上面构建好的镜像中的`agent`目录 cp 到了`/vmskywalking/agent`目录,完成之后`nginx`启动时也挂载了`skywalking-agent`卷,并将其挂载到了容器的`/opt/skywalking/agent`目录。 # 2、改造Spring Cloud应用 **1、docker打包并推送到仓库** 修改下 dockerfile 配置,集成 skywalking agent: ```dockerfile # FROM openjdk:8-jdk FROM harbor-local.kubernets.cn/library/openjdk:8-jdk COPY ./springdemo2023.jar /opt/ RUN mkdir -p data/logs/ \ && mkdir -p data/skywalking/agent RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime RUN echo 'Asia/Shanghai' > /etc/timezone ENTRYPOINT [ "java","-Dapp.id=springdemo2023","-javaagent:/data/skywalking/agent/skywalking-agent.jar","-Dskywalking.agent.service_name=springdemo2023","-Dskywalking.collector.backend_service=skywalking-oap.devops.svc.cluster.local:11800", "-jar", "/opt/springdemo2023.jar" ,"-Dfile.encoding=UTF-8"] ``` 注意: > k8s 创建 Service 时,它会创建相应的 DNS 条目。此条目的格式为`<service-name>.<namespace-name>.svc.cludster.local`,这意味着如果容器只使用`<service-name>`,它将解析为本地服务到命名空间。 如果要跨命名空间访问,则 需要使用完全限定的域名。 编译推送到私仓测试: ```bash $ docker build -t harbor-local.kubernets.cn/demo/springdemo-skywalking:v1 . ``` **2、编写 k8s的yaml部署** ```yaml apiVersion: v1 kind: Service metadata: annotations: prometheus.io/http-probe: "true" prometheus.io/http-probe-port: "8080" prometheus.io/http-probe-path: "/apptwo" name: springdemo2023 namespace: default spec: ports: - name: web port: 8080 protocol: TCP targetPort: 8080 selector: app: springdemo2023 sessionAffinity: None type: ClusterIP --- apiVersion: apps/v1 kind: Deployment metadata: name: springdemo2023 namespace: default spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: springdemo2023 strategy: rollingUpdate: maxSurge: 25% maxUnavailable: 25% type: RollingUpdate template: metadata: labels: app: springdemo2023 spec: imagePullSecrets: - name: harborsecret initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - image: harbor-local.kubernets.cn/demo/springdemo-skywalking:v1 imagePullPolicy: IfNotPresent livenessProbe: failureThreshold: 5 httpGet: path: /apptwo port: 8080 scheme: HTTP initialDelaySeconds: 30 periodSeconds: 10 successThreshold: 1 timeoutSeconds: 2 name: springdemo2023 ports: - containerPort: 8080 name: web protocol: TCP readinessProbe: failureThreshold: 5 httpGet: path: /apptwo port: 8080 scheme: HTTP initialDelaySeconds: 20 periodSeconds: 5 successThreshold: 1 timeoutSeconds: 2 volumeMounts: - mountPath: /data/skywalking/agent name: skywalking-agent dnsPolicy: ClusterFirst restartPolicy: Always terminationGracePeriodSeconds: 60 volumes: - name: skywalking-agent emptyDir: {} ``` # 3、线上真实场景模拟(springboot微服务) **1、Springboot微服务 - UI服务** ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: acme-financial-ui name: acme-financial-ui spec: replicas: 1 selector: matchLabels: app: acme-financial-ui template: metadata: labels: app: acme-financial-ui spec: initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - env: - name: JAVA_OPTS value: "-javaagent:/opt/sw/agent/skywalking-agent.jar" - name: SW_AGENT_NAME value: "acme-financial-ui" - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES value: "skywalking-oap.devops.svc.cluster.local:11800" image: registry.cn-shanghai.aliyuncs.com/zhdya/acme-financial-ui:v0.1 imagePullPolicy: Always name: ui ports: - containerPort: 8081 protocol: TCP volumeMounts: - mountPath: /opt/sw/agent name: skywalking-agent volumes: - name: skywalking-agent emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: acme-financial-ui name: acme-financial-ui spec: ports: - name: http port: 8081 protocol: TCP targetPort: 8081 selector: app: acme-financial-ui sessionAffinity: None type: ClusterIP ``` **2、Springboot微服务 - office服务** ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: acme-financial-office name: acme-financial-office spec: replicas: 1 selector: matchLabels: app: acme-financial-office template: metadata: labels: app: acme-financial-office spec: initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - env: - name: JAVA_OPTS value: "-javaagent:/opt/sw/agent/skywalking-agent.jar" - name: SW_AGENT_NAME value: "acme-financial-office" - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES value: "skywalking-oap.devops.svc.cluster.local:11800" image: registry.cn-shanghai.aliyuncs.com/zhdya/acme-financial-office:v0.1 imagePullPolicy: Always name: office ports: - containerPort: 8082 protocol: TCP volumeMounts: - mountPath: /opt/sw/agent name: skywalking-agent volumes: - name: skywalking-agent emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: acme-financial-office name: acme-financial-back-office spec: ports: - name: http port: 8082 protocol: TCP targetPort: 8082 selector: app: acme-financial-office sessionAffinity: None type: ClusterIP ``` **3、Springboot微服务 - account服务** ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: acme-financial-account name: acme-financial-account spec: replicas: 1 revisionHistoryLimit: 10 selector: matchLabels: app: acme-financial-account template: metadata: labels: app: acme-financial-account spec: initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - env: - name: JAVA_OPTS value: "-javaagent:/opt/sw/agent/skywalking-agent.jar" - name: SW_AGENT_NAME value: "acme-financial-account" - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES value: "skywalking-oap.devops.svc.cluster.local:11800" image: registry.cn-shanghai.aliyuncs.com/zhdya/acme-financial-account:v0.1 imagePullPolicy: Always name: account ports: - containerPort: 8083 protocol: TCP volumeMounts: - mountPath: /opt/sw/agent name: skywalking-agent volumes: - name: skywalking-agent emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: acme-financial-account name: acme-financial-account spec: ports: - name: http port: 8083 protocol: TCP targetPort: 8083 selector: app: acme-financial-account sessionAffinity: None type: ClusterIP ``` **4、Springboot微服务 - customer服务** ```yaml apiVersion: apps/v1 kind: Deployment metadata: labels: app: acme-financial-customer name: acme-financial-customer spec: replicas: 1 selector: matchLabels: app: acme-financial-customer template: metadata: labels: app: acme-financial-customer spec: initContainers: - name: init-skywalking-agent image: harbor-local.kubernets.cn/library/skywalking-agent:8.5.0 command: - 'sh' - '-c' - 'set -ex;mkdir -p /vmskywalking/agent;cp -r /skywalking/agent/* /vmskywalking/agent;' volumeMounts: - mountPath: /vmskywalking/agent name: skywalking-agent containers: - env: - name: JAVA_OPTS value: "-javaagent:/opt/sw/agent/skywalking-agent.jar" - name: SW_AGENT_NAME value: "acme-financial-customer" - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES value: "skywalking-oap.devops.svc.cluster.local:11800" image: registry.cn-shanghai.aliyuncs.com/zhdya/acme-financial-customer:v0.1 imagePullPolicy: Always name: customer ports: - containerPort: 8084 protocol: TCP volumeMounts: - mountPath: /opt/sw/agent name: skywalking-agent volumes: - name: skywalking-agent emptyDir: {} --- apiVersion: v1 kind: Service metadata: labels: app: acme-financial-customer name: acme-financial-customer namespace: default spec: ports: - name: http port: 8084 protocol: TCP targetPort: 8084 selector: app: acme-financial-customer sessionAffinity: None type: ClusterIP ``` **5、创建UI-ingress** ```yaml apiVersion: networking.k8s.io/v1 kind: Ingress metadata: namespace: default name: acme-financial-ing spec: ingressClassName: nginx rules: - host: acme.kubernets.cn http: paths: - pathType: Prefix backend: service: name: acme-financial-ui port: number: 8081 path: / ``` **6、测试Spring微服务API** 通过Ingress访问UI服务的三个接口:/hello、/start、/readtimeout。 ```bash ## 查看服务svc $ kubectl get svc NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE acme-financial-account ClusterIP 10.96.54.249 <none> 8083/TCP 6m22s acme-financial-back-office ClusterIP 10.111.237.227 <none> 8082/TCP 6m22s acme-financial-customer ClusterIP 10.98.134.30 <none> 8084/TCP 6m21s acme-financial-office ClusterIP 10.97.42.206 <none> 8082/TCP 6m21s acme-financial-ui ClusterIP 10.99.246.84 <none> 8081/TCP 6m21s ## 模拟访问 $ for i in {1..5000}; do curl http://acme.kubernets.cn/hello && sleep 1; done $ for i in {1..5000}; do curl http://acme.kubernets.cn/start && sleep 1; done $ for i in {1..5000}; do curl http://acme.kubernets.cn/readtimeout && sleep 1; done ``` **7、查看Skywalking UI界面** 1. 吞吐量CPM,表示每分钟的调用. 2. Apdex分数:衡量服务器性能的标准 3. 响应时间百分比,包括 p99, p95, p90, p75, p50. 4. SLA表示成功率。对于HTTP,表示响应为200的请求.  > **拓扑图**:用指标显示服务和实例之间的关系,点击服务显示监控数据。  > **跟踪查询**:skywalk提供的分布式代理一样的典型特性.  > 具体接口服务报错/响应慢的主要原因  # 4、Go应用如何接入Skywalking [SkyWalking Go Agent 快速开始指南 | Apache SkyWalking](https://skywalking.apache.org/zh/2023-06-01-quick-start-with-skywalking-go-agent/)
阿星
2024年1月27日 20:27
转发文档
收藏文档
上一篇
下一篇
手机扫码
复制链接
手机扫一扫转发分享
复制链接
Markdown文件
PDF文档(打印)
分享
链接
类型
密码
更新密码