【Docker】之部署skywalking实现全链路监控功能

简介

  skywalking是一个开放源码的,用于收集、分析,聚合,可视化来自于不同服务和本地基础服务的数据的可观察的平台,
  skywalking提供了一个简单的方法来让你对你的分布式系统甚至是跨云的服务有清晰的了解。
  它更像是一个现代的系统性能管理,特别为分布式系统而设计。

功能

  skywalking提供了在很多不同的场景下用于观察和监控分布式系统的方式。 首先,像传统的方法,skywalking为java,c#,Node.js等提供了自动探针代理. 同时,它为Go,C++提供了手工探针。
  随着本地服务越来越多,需要越来越多的语言,掌控代码的风险也在增加, Skywalking可以使用网状服务探针收集数据,以了解整个分布式系统。 通常,skywalking提供了观察service,service instance,endpoint的能力。

  • service: 一个服务
  • Service Instance: 服务的实例(1个服务会启动多个节点)
  • Endpoint: 一个服务中的其中一个接口

架构图

快速部署

下载镜像

docker pull elasticsearch:7.17.3
docker pull apache/skywalking-oap-server:9.0.0
docker pull apache/skywalking-ui:9.0.0
  1. elasticsearch 作为 skywalking 的存储,保存链路和日志数据等
  2. oap 数据接收和分析 Observability Analysis Platform
  3. ui web端的数据展示

部署

安装elasticsearch

  安装过程,参考: 【Docker】之安装 ElasticSearch

# 修改系统参数
vi /etc/sysctl.conf
# 调整参数
vm.max_map_count=262144
# 刷新参数
sysctl -p

  启动elasticsearch

docker run -d --name=es7 \
-p 9200:9200 -p 9300:9300 \
-e "discovery.type=single-node" elasticsearch:7.17.3

  等待30秒左右,查看docker日志,如果有出现

"publish_address {172.17.0.2:9300}, bound_addresses {0.0.0.0:9300}"

  说明启动成功了。
  创建持久化目录,并重启启动elasticsearch

mkdir -p /data/elasticsearch
docker cp es7:/usr/share/elasticsearch/data /data/elasticsearch/
docker cp es7:/usr/share/elasticsearch/logs /data/elasticsearch/
docker rm -f es7
docker run -d --name=es7 \
  --restart=always \
  -p 9200:9200 -p 9300:9300 \
  -e "discovery.type=single-node" \
  -v /data/elasticsearch/data:/usr/share/elasticsearch/data \
  -v /data/elasticsearch/logs:/usr/share/elasticsearch/logs \
elasticsearch:7.17.3
安装oap

  注意:等待elasticsearch完全启动之后,再启动oap
  参考:https://skywalking.apache.org/docs/main/latest/en/setup/backend/backend-docker/

docker run \
--name skywalking-oap \
--restart always \
-p 11800:11800 \
-p 12800:12800 -d \
--privileged=true \
-e TZ=Asia/Shanghai \
-e SW_STORAGE=elasticsearch \
-e SW_STORAGE_ES_CLUSTER_NODES=10.211.55.81:9200 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-oap-server:9.0.0
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=10.211.55.81:9200 \
-v /etc/localtime:/etc/localtime:ro \
apache/skywalking-oap-server:8.6.0-es7

  说明:这里指定elasticsearch 来存储数据

安装ui

  参考: https://skywalking.apache.org/docs/main/latest/en/setup/backend/ui-setup/

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

docker-compose 的方式

# 创建配置文件保存的目录
mkdir -p /data/docker/admin/skywalking
# 切换到刚创建的目录
cd /data/docker/admin/skywalking
# 将下面的 docker-compose.yml 文件保存到这个目录
vi docker-compose.yml
# 拉去镜像并启动
docker-compose up -d
# 查看日志
docker-compose logs -f

  docker-compose.yml

version: '3.8'
services:
  elasticsearch:
    image: docker.elastic.co/elasticsearch/elasticsearch:7.14.1
    container_name: elasticsearch
    restart: always
    ports:
      - 9200:9200
    healthcheck:
      test: ["CMD-SHELL", "curl --silent --fail localhost:9200/_cluster/health || exit 1"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      - discovery.type=single-node
      - bootstrap.memory_lock=true
      - "ES_JAVA_OPTS=-Xms512m -Xmx512m"
      - TZ=Asia/Shanghai
    ulimits:
      memlock:
        soft: -1
        hard: -1
  oap:
    image: apache/skywalking-oap-server:8.7.0-es7
    container_name: oap
    depends_on:
      - elasticsearch
    links:
      - elasticsearch
    restart: always
    ports:
      - 11800:11800
      - 12800:12800
    healthcheck:
      test: ["CMD-SHELL", "/skywalking/bin/swctl"]
      interval: 30s
      timeout: 10s
      retries: 3
      start_period: 40s
    environment:
      TZ: Asia/Shanghai
      SW_STORAGE: elasticsearch7
      SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
  ui:
    image: apache/skywalking-ui:8.7.0
    container_name: ui
    depends_on:
      - oap
    links:
      - oap
    restart: always
    ports:
      - 8088:8080
    environment:
      TZ: Asia/Shanghai
      SW_OAP_ADDRESS: http://oap:12800

Spring-boot实例部署

  下载agent:https://skywalking.apache.org/downloads/

  以agent的方式启动,对代码没有侵入性,直接在启动命令上指定javaagent即可。
  启动命令javaagent参数添加:

java -javaagent:/Users/xiaosige/Downloads/skywalking-agent/skywalking-agent.jar 
  -DSW_AGENT_COLLECTOR_BACKEND_SERVICES=10.211.55.81:11800 
  -DSW_AGENT_NAME=user-ser 
  -jar user-service-1.0-SNAPSHOT.jar

查看监控情况

  启动程序后,登录skywalking查看监控情况:http://10.211.55.81:8086

PS

链路追踪:SkyWalking
SpringCloud系列之接入SkyWalking进行链路追踪和日志收集