浅谈Skywalking微服务监控分析

Skywalking架构
浅谈Skywalking微服务监控分析

快速开始
一直在寻找一款全能的监控平台,可以满足指标、日志、调用链等多方面一站式观察。Prometheus 在指标方面很强大,但调用链需要依赖需要依赖第三方。而Skywalking 可以一站式解决上面所有问题,其工作原理比较简单,易于二次开发。其架构分为服务端、收集端、前端。收集端既支持后台服务也支持前端服务,例如java项目可以以javaagent 的方式集成skywalking-agent.jar组件,这个组件会读取配置文件(agent.config)并拉起插件(默认拉起 plugins、activations两个目录下的插件),而收集日志和指标的任务都是依赖这些插件完成的,比如要忽视某些方法被追踪,那就使用apm-trace-ignore-plugin-x.x.x.jar 插件;如果想增强某些方法那就使用apm-customize-enhance-plugin-x.x.x.jar 插件等。

OAP服务
启动OAP服务,OAP服务相当于Skywalking的后台服务,这里采用docker的安装方式,skywalking 默认内置H2存储,也可以是ES、Mysql等,下面介绍两种docker启动方案,当然你也可以直接下载分发版本通过本地的方式启动。

方案一: 使用缺省的H2作为存储启动,适合本地测试环境
docker run --name oap -p 11800:11800 -p 12800:12800 -e TZ=Asia/Shanghai --restart always -d apache/skywalking-oap-server:8.6.0-es7
docker run --name oapui --link oap:oap -p 8080:8080 -e TZ=Asia/Shanghai -e SW_OAP_ADDRESS=oap:12800 --restart always -d apache/skywalking-ui:8.6.0

方案二:使用ES作为存储启动,适合生产环境
使用 docker-compose部署skywalking的三个基础服务:ES、OAP、WEB

version: '3'

services:
  es7:
    container_name: es7
    hostname: es7
    image: elasticsearch:7.5.1
    expose:
      - 9200
      - 9300  
    networks:
      - e2e      
    environment:
      - discovery.type=single-node
      
  oap:
    container_name: oap
    hostname: oap  
    image: apache/skywalking-oap-server:8.7.0-es7
    expose:
      - 11800
      - 12800
      - 5005
    networks:
      - e2e
    restart: on-failure
    environment:
      - SW_STORAGE=elasticsearch7
      - SW_STORAGE_ES_CLUSTER_NODES="es7:9200"
    healthcheck:
      test: ["CMD", "sh", "-c", "nc -zn 127.0.0.1 11800"]
      interval: 5s
      timeout: 60s
      retries: 120
    depends_on:
     - "es7"      

  ui:
    image: apache/skywalking-ui:8.7.0
    ports:
      - "8080:8080"
    networks:
      - e2e
    environment:
      - SW_OAP_ADDRESS=http://oap:12800
    depends_on:
     - "oap"   
         
networks:
  e2e:

Agent端
在springboot项目集成Skywalking Agent
1.解压apache-skywalking-apm-8.6.0.tar.gz,设置-javaagent:指向解压后的skywalking-agent.jar位置,不能拷贝出来,因为它会通过这个jar来识别当前config 和 plugin目录,同时这个jar会依赖日志、跟踪、指标等相关jar包。
2.先请求springboot服务,请求完后,一定要等一会,点一下右上角刷新按钮才有数据,这些数据缺省会被保存3天,可以调整服务端 recordDataTTL 参数
3.服务名称agent.service_name如果要分组可以命名为:mygroup::myapp,这样所有服务就自动划分到mygroup组中
java -javaagent:D:\apache-skywalking-apm-bin\agent\skywalking-agent.jar \
-Dskywalking.agent.service_name=myapp \
-Dskywalking.agent.instance_name=myapp \
-Dskywalking.collector.backend_service=oap:11800 \
-jar myapp.jar
如果是idea,那么在Edit Configuration 中 VM Option中添加
-javaagent:skywalking-agent/skywalking-agent.jar -Dskywalking.agent.service_name=myapp -Dskywalking.agent.instance_name=myapp -Dskywalking.collector.backend_service=oap:11800
k8s中服务集成Skywalking Agent
在k8s 中 springboot项目集成Skywalking,推荐采用 sidecar形式

# myapp.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
  name: myapp  

spec:
  selector:
    matchLabels:
      app: myapp
  replicas: 1
  template:
    metadata:
      labels:
        app: myapp
    spec:
      initContainers:
      # 应用镜像
      - image: myapp:3.0
        imagePullPolicy: Always
        name: app-container
        command: ["cp", "/myapp.jar", "/app"]
        volumeMounts:
        - mountPath: /app
          name: app-volume
      # skywalking镜像
      - image: apache/skywalking-java-agent:8.7.0-alpine
        name: agent-container
        command: [ "/bin/sh" ]
        args: [ "-c","cp /skywalking/agent/optional-plugins/apm-trace-ignore-plugin-8.7.0.jar /skywalking/agent/activations/ && cp -R /skywalking/agent /agent/"]
        volumeMounts:
        - name: skywalking-agent
          mountPath: /agent
      containers:
      - name: jre-container
        image: anapsix/alpine-java:8_server-jre_unlimited
        imagePullPolicy: IfNotPresent
        command: ["java","-jar","/usr/local/myapp.jar"]
        args: ["--server.port=9086","--spring.profiles.active=dev"]
        volumeMounts:
        - mountPath: /usr/local
          name: app-volume
        - name: skywalking-agent
          mountPath: /skywalking
        ports:
        - name: container-port
          containerPort: 9086
        env:
        - name: JAVA_TOOL_OPTIONS
          value: "-javaagent:/skywalking/agent/skywalking-agent.jar -Dskywalking.trace.ignore_path=/eureka/**,SpringScheduled/**,Guav
aCache/**,Jedis/**,PostgreSQL/**"
        # 应用名称
        - name: SW_AGENT_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.labels['app']
        # oap服务地址
        - name: SW_AGENT_COLLECTOR_BACKEND_SERVICES
          value: "oap:11800"
        #- name: SW_AGENT_TRACE_IGNORE_PATH
        #  value: "/actuator/health/**,/eureka/**,PostgreSQL/**,Jedis/**"
        #- name: SW_MOUNT_FOLDERS
        #  value: "plugins,activations,optional-plugins"

      volumes:
      - name: app-volume
        emptyDir: {}      
      - name: skywalking-agent
        emptyDir: {}

---
#service
apiVersion: v1
kind: Service
metadata:
  name: myapp
spec:
  ports:
  - port: 9086
    protocol: TCP
    targetPort: container-port
  selector:
    app: myapp
  type: ClusterIP

Web前端
整体概览
浅谈Skywalking微服务监控分析

Skywalking UI
服务概览
Service界面显示某个服务运行情况,当选择不同服务时,相应指标也会变化
同一个服务部署在多个节点上,就会形成多个实例,这时服务显示的就是多个实例的整体运行情况
当前端点可以查看当前服务的某个请求的请求状况
浅谈Skywalking微服务监控分析

上一篇:Ruby处理二进制


下一篇:rpm查询某个软件是否已安装