使用skywalking对k8s应用进行链路监控

为什么做全链路监控

  1. 故障排查和故障定位:全链路监控能够跟踪应用程序的每个组件和服务之间的调用流程,当系统出现故障时,可以更快地定位和解决问题。通过分析链路数据,可以确定引起问题的具体组件,从而加快故障排查的速度。

  2. 性能优化:全链路监控可以提供对应用程序的性能指标的实时可视化。您可以了解每个组件和服务的性能表现,并识别瓶颈和性能问题。通过优化关键组件和服务,可以提升整个应用程序的性能和响应时间。

  3. 业务分析和决策支持:全链路监控能够提供对应用程序的业务流程和关键指标的细粒度监控。这使得您可以深入了解业务流程,识别瓶颈,并为业务决策提供数据支持。通过分析链路数据,您可以了解用户行为、转化率、服务质量等关键指标,从而做出更明智的决策。

  4. 容量规划和资源管理:通过全链路监控,您可以了解应用程序和各个组件的资源使用情况。这可以帮助您进行容量规划,并优化资源分配,以确保应用程序在不同负载情况下的可靠性和稳定性。

  5. 安全和合规性:全链路监控可以帮助您监测应用程序的安全事件和异常行为。它可以提供实时警报和通知,以便您能够及时采取措施来应对潜在的安全威胁。此外,全链路监控还可以帮助您满足合规性要求,如数据隐私和安全标准。

方案一、修改代码,引入jar包

方案二、无侵入,在dokerfile里的jar启动命令中添加agent的jar包

以下使用方案二

以下使用helm安装,提前安装helm环境

1.添加SkyWalking的helm仓库

 helm repo add apache-skywalking https://apache.jfrog.io/artifactory/skywalking-helm

2.更新Helm仓库

helm repo update

3.创建一个k8s命令空间

kubectl create namespace skywalking

4.下载skywalking压缩包

 helm pull apache-skywalking/skywalking

5.安装skywalking(es使用已有的)

tar zxvf skywalking-4.3.0.tgz
vim my-values.yaml

oap:
  image:
    tag: 9.2.0
  storageType: elasticsearch
ui:
  image:
    tag: 9.2.0
  service:
    type: NodePort
    nodePort: 30880
elasticsearch:
  enabled: false
  config:
    host: elasticsearch.skywalking
    port:
      http: 9200

helm -n skywalking install apache-skywalking -f my-values.yaml skywalking

 查看pod状态

 kubectl get pods -n skywalking

 

 6.改造dockerfile(myweb-0.0.1-SNAPSHOT.jar为我的应用程序)

FROM openjdk:17
ENV LANG=C.UTF-8
ENV TZ=Asia/Shanghai
workdir /app

COPY skywalking-agent /opt/skywalking-agent/
ADD myweb-0.0.1-SNAPSHOT.jar ./app.jar

#CMD ["java","-jar","app.jar"]
ENTRYPOINT ["sh","-c","java -javaagent:/opt/skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=sky-demo -Dskywalking.collector.backend_service=apache-skywalking-oap.skywalking:11800 -Djava.security.egd=file:/dev/./urandom -jar ./app.jar"]

执行命令: docker build -t myapp3:v1 .

 

7.编写deployment应用myapp.yaml

apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp3
  namespace: yx
  labels:
    app: myapp3
spec:
  replicas: 1
  selector:
    matchLabels:
      app: myapp3
  template:
    metadata:
      labels:
        app: myapp3
    spec:
      nodeName: dst2
      containers:
      - name: myapp3
        image: myapp3:v1
        imagePullPolicy: Never
        ports:
        - containerPort: 8080
---
apiVersion: v1
kind: Service
metadata:
  name: myapp3
  namespace: yx
  labels:
    app: myapp3
spec:
  type: NodePort #外部流量可访问k8s中的服务
  ports:
  - port: 30084
    targetPort: 8080
    nodePort: 30084
  selector:
    app: myapp3

创建应用: kubectl create -f myapp.yaml

访问skywalking UI页面ip:30880

 可以看到应用已监控

 

 

posted @ 2024-05-28 17:59  瘦阿瘦  阅读(553)  评论(0编辑  收藏  举报