浅谈Skywalking微服务监控分析

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介: SkyWalking简介:SkyWalking是一个开源的观测平台,用于从服务和云原生等基础设施中收集、分析、聚合以及可视化数据。SkyWalking 提供了一种简便的方式来清晰地观测分布式系统,甚至可以观测横跨不同云的系统。SkyWalking 更像是一种现代的应用程序性能监控(Application Performance Monitoring,即APM)工具,专为云原生,基于容器以及分布式系统而设计

Skywalking架构
image.png

快速开始
一直在寻找一款全能的监控平台,可以满足指标、日志、调用链等多方面一站式观察。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前端
整体概览
image.png

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

相关文章
|
14小时前
|
数据采集 运维 监控
微服务监控:守护系统稳定的终极防线
微服务监控在数字化时代日益重要,它帮助运维和开发人员实时监测服务性能、状态和安全,确保微服务架构的稳定性和可用性。构建微服务监控体系需关注合理监控策略、数据采集处理、可视化及告警。数据采集的三大支柱是指标、日志和链路追踪。监控涵盖基础设施、系统、应用和业务层面。通过优化监控体系、融合业务场景和建立跨团队协作,可提升监控效果。未来,AI和云计算将推动微服务监控向更精准、高效和安全的方向发展。
61 0
|
14小时前
|
Java fastjson 数据安全/隐私保护
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
【Dubbo3技术专题】「云原生微服务开发实战」 一同探索和分析研究RPC服务的底层原理和实现
49 0
|
14小时前
|
监控 网络协议 Go
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
应用监控 eBPF 版:实现 Golang 微服务的无侵入应用监控
109666 118
|
14小时前
|
数据采集 存储 监控
如何监控微服务调用
【2月更文挑战第2天】搭建一个服务监控系统,涉及数据采集、数据传输、数据处理、数据展示等多个环节。
|
14小时前
|
Prometheus 监控 Cloud Native
微服务框架(二十二)Prometheus + Grafana 可视化监控
此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。 本文为Prometheus + Grafana 可视化监控的介绍,下篇为Prometheus + Grafana...
|
14小时前
|
Prometheus 监控 Cloud Native
微服务框架(十九)Spring Boot 可视化监控 Prometheus + Grafana
  此系列文章将会描述Java框架Spring Boot、服务治理框架Dubbo、应用容器引擎Docker,及使用Spring Boot集成Dubbo、Mybatis等开源框架,其中穿插着Spring Boot中日志切面等技术的实现,然后通过gitlab-CI以持续集成为Docker镜像。   本文为Spring Boot 通过 micrometer 的监控门面,实现Prometheus + G...
|
14小时前
|
Prometheus 监控 Cloud Native
SpringCloud微服务实战——搭建企业级开发框架(四十五):【微服务监控告警实现方式二】使用Actuator(Micrometer)+Prometheus+Grafana实现完整的微服务监控
无论是使用SpringBootAdmin还是使用Prometheus+Grafana都离不开SpringBoot提供的核心组件Actuator。提到Actuator,又不得不提Micrometer,从SpringBoot2.x开始,Actuator的功能实现都是基于Micrometer的。
270 0
|
6月前
|
Prometheus 监控 Cloud Native
微服务轮子项目(23) -Metrics监控
微服务轮子项目(23) -Metrics监控
111 0
|
6月前
|
存储 监控 Java
微服务轮子项目(22) -APM监控(SkyWalking)
微服务轮子项目(22) -APM监控(SkyWalking)
230 0
|
6月前
|
存储 Prometheus 监控
微服务轮子项目(08) - 监控架构设计Metrics
微服务轮子项目(08) - 监控架构设计Metrics
37 0