skywalking下载:下载服务端和对应语言的agent

https://skywalking.apache.org/downloads/

服务端:要安装jdk环境。

https://archive.apache.org/dist/skywalking/8.8.1/apache-skywalking-apm-8.8.1.tar.gz

agent:不同语言不同agent。

https://archive.apache.org/dist/skywalking/java-agent/8.8.0/apache-skywalking-java-agent-8.8.0.tgz


安装服务端:

tar -xf apache-skywalking-apm-8.8.1.tar.gz
cd apache-skywalking-apm-bin/config
vim application.yml
...
storage:
  selector: ${SW_STORAGE:elasticsearch} # 改成es作为存储
  elasticsearch:
    namespace: ${SW_NAMESPACE:""}
    clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.199.39:9200} # 填写地址端口
...

启动服务:

./apache-skywalking-apm-bin/bin/startup.sh

访问web端:

http://192.168.199.10:8080/


客户端部署:

这里使用的示例程序是一个博客:

wget https://dl.halo.run/release/halo-1.5.4.jar

需要安装java11:halo是用java11环境编写的

yum install java-11-openjdk -y

客户端agent的使用方法:

https://skywalking.apache.org/docs/skywalking-java/v8.8.0/en/setup/service-agent/java-agent/readme/

配置agent:

vim ./skywalking-agent/config/agent.config

# The agent namespace
agent.namespace=${SW_AGENT_NAMESPACE:default}

# The service name in UI
agent.service_name=${SW_AGENT_NAME:halo}

# Backend service addresses.
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.199.10:11800}

启动命令:

java -javaagent:./skywalking-agent/skywalking-agent.jar -jar halo-1.5.4.jar

正式环境中启动命令:

java -javaagent:./skywalking-agent/skywalking-agent.jar \
-DSW_AGENT_NAMESPACE=default \
-DSW_AGENT_NAME=halo \
-Dskywalking.collector.backend_service=skywalking.service.com:11800 \
-jar halo-1.5.4.jar


skywalking在k8s中的使用:

有几种方法:

    一是将skywalking-agent.jar包随着java应用一起构建到应用镜像当中随着java应用一起启动,

    二是使用k8s的 initContainers 在容器初始化时将 skywalking-agent.jar 包拷贝到主镜像当中,然后使用入参的方式将agent的jar包随着主程序一起启动。

skywalking-agent.jar 构建到agent镜像当中:这个容器的作用就是在初始化时将agent 包拷贝到主应用的容器中。

agent dockerfile:

cat > Dockerfile <<EOF
FROM busybox:latest
LABEL maintainer="even"
COPY skywalking-agent/ /usr/skywalking/agent/
EOF

构建镜像打标签:

docker build -t skywalking-agent-8.8.0:0.1 .
docker tag skywalking-agent-8.8.0:0.1 harbor.k8s.local/skywalking/skywalking-agent-8.8.0:0.1
docker push harbor.k8s.local/skywalking/skywalking-agent-8.8.0:0.1

测试镜像dockerfile:

FROM centos:centos7

COPY repos/* /etc/yum.repos.d/

RUN yum install wget iproute java-11-openjdk -y
RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai  /etc/localtime && echo "Asia/Shanghai" >/etc/timezone

ADD skywalking-agent/ skywalking-agent/
COPY halo-1.5.4.jar /root/

EXPOSE 8090

ENTRYPOINT ["java","-jar","/root/halo-1.5.4.jar"]

部署文件:

apiVersion: v1
kind: Service
metadata:
  labels:
    app: halo
  name: halo
  namespace: default
spec:
  ports:
  - port: 80
    protocol: TCP
    targetPort: 8090
  selector:
    app: halo
  type: ClusterIP
---
apiVersion: apps/v1
kind: Deployment
metadata:
  labels:
    app: halo
  name: halo
  namespace: default
spec:
  replicas: 1
  selector:
    matchLabels:
      app: halo
  template:
    metadata:
      labels:
        app: halo
    spec:
      containers:
      - env:
        - name: TZ
          value: Asia/Shanghai
        - name: SW_AGENT_INSTANCE_NAME
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.name
        - name: NAMESPACE
          valueFrom:
            fieldRef:
              apiVersion: v1
              fieldPath: metadata.namespace
        - name: JAVA_TOOL_OPTIONS
          value: -javaagent:/skywalking-agent/skywalking-agent.jar
        - name: SW_AGENT_NAME
          value: halo
        - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
          value: 192.168.199.50:11800
        image: harbor.k8s.local/skywalking/halo-skywalking:0.1
        imagePullPolicy: IfNotPresent
        name: halo-skywalking
        ports:
        - containerPort: 8090
          name: http
          protocol: TCP
        resources:
          limits:
            memory: 2G
            cpu: 1
          requests:
            memory: 1G
            cpu: 100m


initContainers方式部署文件:通过volume将初始化容器的agent文件拷贝到主容器中。不建议使用initContainers的方式将agent拷贝到主容器中,因为这种方式运行的程序非常不稳定,只适合临时简单测试。

apiVersion: apps/v1
kind: Deployment
metadata:
  name: springboot-demo
  namespace: skywalking
  labels:
    app: springboot-demo
spec:
  replicas: 1
  selector:
    matchLabels:
      app: springboot-demo
  template:
    metadata:
      labels:
        app: springboot-demo
    spec:
      initContainers:
        - image: harbor.k8s.local/skywalking/skywalking-agent-8.8.0:0.1
          name: skywalking-agent-sidecar
          imagePullPolicy: IfNotPresent
          command: [ "sh" ]
          args:
            [
                "-c",
                "cp -R /usr/skywalking/agent/* /skywalking/agent",
            ]
          volumeMounts:
            - mountPath: /skywalking/agent
              name: skywalking-agent
      containers:
        - name: springboot-demo
          image: xjk27400861/springbootapp:42
          imagePullPolicy: IfNotPresent
          env: #更多变量详见配置文件 application.yml
            - name: TZ
              value: Asia/Shanghai
            - name: SW_AGENT_INSTANCE_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name # 使用Pod名称方便数据查看
            - name: NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
            - name: JAVA_TOOL_OPTIONS #这里通过JAVA_TOOL_OPTIONS变量将启动命令加入到启动参数中
              value: -javaagent:/usr/skywalking/agent/skywalking-agent.jar
            - name: SW_AGENT_NAME
              value: springboot-demo
            - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
              value: 192.168.199.49:11800 # skywalking server端地址
          ports:
            - containerPort: 8080
          resources:
            requests:
              cpu: 200m
              memory: 512Mi
          volumeMounts:
            - mountPath: /usr/skywalking/agent
              name: skywalking-agent
      volumes:
        - name: skywalking-agent
          emptyDir:
            sizeLimit: 50M

---
apiVersion: v1
kind: Service
metadata:
  name: springboot-demo
  namespace: skywalking
  labels:
    app: springboot-demo
spec:
  ports:
    - name: port
      port: 80
      protocol: TCP
      targetPort: 8080
  selector:
    app: springboot-demo
  type: ClusterIP

参考文章:

cnblogs.com/even160941/p/16933062.html
cnblogs.com/klvchen/articles/17446847.html


docker运行skywalking server:

mkdir /data/elasticsearch/{logs,data} -pv
chmod 777 -R /data/elasticsearch/logs /data/elasticsearch/data

docker run -d --name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e ES_JAVA_OPTS="-Xms256m -Xmx256m" \
-v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
-v /data/elasticsearch/data:/usr/share/elasticsearch/data \
elasticsearch:7.17.1


docker run \
--name skywalking-oap \
--restart always \
-p 11800:11800 \
-p 12800:12800 -d \
--privileged=true \
-e TZ=Asia/Shanghai \
-e SW_STORAGE=elasticsearch7 \
-e SW_STORAGE_ES_CLUSTER_NODES=172.31.8.48:9200 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-oap-server:8.6.0-es7


docker run \
--name skywalking-ui \
--restart always \
-p 8080:8080 -d \
--privileged=true \
--link skywalking-oap:skywalking-oap \
-e TZ=Asia/Shanghai \
-e SW_OAP_ADDRESS=172.31.8.48:12800 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-ui:8.6.0


docker run \
-d --name kibana \
-p 5601:5601 \
kibana:7.17.1

mkdir -p /data/kibana/config -pv
docker cp kibana:/usr/share/kibana/config /data/kibana/

vim /data/kibana/config/kibana.yml

server.host: "0"
server.shutdownTimeout: "5s"
elasticsearch.hosts: [ "http://localhost:9100" ] # 记得修改ip
monitoring.ui.container.elasticsearch.enabled: true
i18n.locale: "zh-CN"

docker stop kibana
docker rm kibana

docker run \
-d --name kibana \
-p 5601:5601 \
-v /data/kibana/config:/usr/share/kibana/config \
kibana:7.17.1

参考文章:

juejin.cn/post/7073720092273590309
cnblogs.com/baoshu/p/16128127.html