【弄nèng - Skywalking】入门篇(二)—— Skywalking集群部署

本文详细介绍了Skywalking集群版的安装步骤与配置方法,包括OAP的安装与配置、Agent的使用,以及如何接入工程。适用于希望监控大规模分布式系统的开发者。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

该篇博客是Skywalking集群版安装,基于单机版改造【弄nèng - Skywalking】入门篇(一)—— Skywalking安装与使用

官方文档:
https://github.com/apache/skywalking/tree/master/docs

该篇博客是Skywalking集群版安装,基于单机版改造【弄nèng - Skywalking】入门篇(一)—— Skywalking安装与使用

一. 安装OAP

1.1 前置

本教程使用的是最新版8.0.1,使用的数据源是es7,如果你要部署集群环境就适用zookeeper
所以需要安装es7和zk(可选,集群需要)
请自行安装,本教程重点是skywalking

1.2 下载

点击进入下载页
下载最新版8.0.1
在这里插入图片描述
解压后
在这里插入图片描述

1.3 修改配置application.yml

在这里插入图片描述

/config/application.yml部分配置

cluster:
   selector: ${SW_CLUSTER:zookeeper}
   # 单节点模式
   standalone:
   # zk用于管理collector集群协作.
   zookeeper:
     nameSpace: ${SW_NAMESPACE:""}
     # 多个用,分割
     hostPort: ${SW_CLUSTER_ZK_HOST_PORT:localhost:2181}
     # Retry Policy
     baseSleepTimeMs: ${SW_CLUSTER_ZK_SLEEP_TIME:1000} # initial amount of time to wait between retries
    maxRetries: ${SW_CLUSTER_ZK_MAX_RETRIES:3} # max number of times to retry
    # Enable ACL
    enableACL: ${SW_ZK_ENABLE_ACL:false} # disable ACL in default
    schema: ${SW_ZK_SCHEMA:digest} # only support digest schema
    expression: ${SW_ZK_EXPRESSION:skywalking:skywalking}
   # 分布式 kv 存储设施,类似于zk,但没有zk重型(除了etcd,consul、Nacos等都是类似功能)
   # etcd:
      # serviceName: ${SW_SERVICE_NAME:"SkyWalking_OAP_Cluster"}
      # 多个节点用逗号分隔, 如: 10.0.0.1:2379,10.0.0.2:2379,10.0.0.3:2379
      # hostPort: ${SW_CLUSTER_ETCD_HOST_PORT:localhost:2379}
core:
   selector: ${SW_CORE:default}
   default:
      # 混合角色:接收代理数据,1级聚合、2级聚合
      # 接收者:接收代理数据,1级聚合点
      # 聚合器:2级聚合点
      role: ${SW_CORE_ROLE:Mixed} # Mixed/Receiver/Aggregator
 
       # rest 服务地址和端口
      restHost: ${SW_CORE_REST_HOST:localhost}
      restPort: ${SW_CORE_REST_PORT:12800}
      restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/}
 
      # gRPC 服务地址和端口
      gRPCHost: ${SW_CORE_GRPC_HOST:localhost}
      gRPCPort: ${SW_CORE_GRPC_PORT:11800}
 
      downsampling:
      - Hour
      - Day
      - Month
 
      # 设置度量数据的超时。超时过期后,度量数据将自动删除.
      # 单位分钟
      recordDataTTL: ${SW_CORE_RECORD_DATA_TTL:90}
 
      # 单位分钟
      minuteMetricsDataTTL: ${SW_CORE_MINUTE_METRIC_DATA_TTL:90}
 
      # 单位小时
      hourMetricsDataTTL: ${SW_CORE_HOUR_METRIC_DATA_TTL:36}
 
      # 单位天
      dayMetricsDataTTL: ${SW_CORE_DAY_METRIC_DATA_TTL:45}
 
      # 单位月
      monthMetricsDataTTL: ${SW_CORE_MONTH_METRIC_DATA_TTL:18}
 
storage:
   selector: ${SW_STORAGE:elasticsearch7}
   elasticsearch7:
      # elasticsearch 的集群名称
      nameSpace: ${SW_NAMESPACE:"TEST-ES"}
 
      # elasticsearch 集群节点的地址及端口
      clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.1.1:9200}
      
      # elasticsearch 的用户名和密码
      user: ${SW_ES_USER:""}
      password: ${SW_ES_PASSWORD:""}
 
      # 设置 elasticsearch 索引分片数量
      indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}
 
      # 设置 elasticsearch 索引副本数
      indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}
 
      # 批量处理配置
      # 每2000个请求执行一次批量
      bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000}
 
      # 每 20mb 刷新一次内存块
      bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20}
 
      # 无论请求的数量如何,每10秒刷新一次堆
      flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10}
 
      # 并发请求的数量
      concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2}
 
      # elasticsearch 查询的最大数量
      metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}
 
      # elasticsearch 查询段最大数量
      segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
      
      profileTaskQueryMaxSize: ${SW_STORAGE_ES_QUERY_PROFILE_TASK_SIZE:200}
      advanced: ${SW_STORAGE_ES_ADVANCED:""}

主要修改,SW_CLUSTER, SW_CORE_ROLESW_STORAGESW_NAMESPACESW_STORAGE_ES_CLUSTER_NODESSW_CLUSTER_ZK_HOST_PORT

  • SW_CLUSTER 默认standalone单机模式
  • SW_CORE_ROLE 默认Mixed混合模式
  • SW_STORAGE 存储,我使用的是es7,所以设置成elasticsearch7
  • SW_NAMESPACE namespace用来区分
  • SW_STORAGE_ES_CLUSTER_NODES es地址,多个地址以分割
  • SW_CLUSTER_ZK_HOST_PORT zk地址,多个地址以分割

与单机版的区别在于 SW_CLUSTERSW_CLUSTER_ZK_HOST_PORT,其他配置都一样

1.4 高级部署

后端(Oap)又分为三个角色

  • 混合Mixed(默认):默认角色,OAP应承担以下责任,1.接收代理跟踪或指标,2.进行L1聚合,3.内部通讯(发送/接收),4.进行L2聚合,5.持久化,6.报警
  • 接收者Receiver:1.接收代理跟踪或指标,2.进行L1聚合,3.内部通讯(发送/接收)
  • 聚合器Aggregator:4.进行L2聚合,5.持久化,6.报警

SW_CORE_ROLE 在集群模式下可以还可以设置成Receiver和Aggregator来提高系统性能。
如果集群只有Receiver节点,在收集数据时会报错,因为内部通讯(发送/接收)找不到接收节点而失败。

1.5 webapp配置

可以在这里修改前端工程端口,默认8080
webapp/webapp.yml

server:
  port: 8080

collector:
  path: /graphql
  ribbon:
    ReadTimeout: 10000
    # Point to all backend's restHost:restPort, split by ,
    listOfServers: 127.0.0.1:12800

1.6 启动

进入bin目录,执行启动文件,windows下startup.bat,linux为startup.shstartup.bat包含后端启动文件oapService.bat和前端启动文件webappService.bat

后端工程会启动两个端口1180012800,大多数代理使用11800端口,只有少数不支持grpc的代理使用12800
前端工程使用12800

启动成功后访问http://localhost:8080显示如下:
在这里插入图片描述
启动成功过还会在zookeeper目录/skywalking/remote目录下创建节点,该节点表示Aggregator角色节点,启动几个Aggregator角色节点,就会创建几个

二. 使用Agent

Agent官方文档

2.1 修改配置

有两种方式配置,1. 在配置文件中修改,2.在启动时传入环境变量。我们使用第二种,所以此处不修改

/agent/config/agent.config主要配置

# 不同的namespace会导致调用链路追踪中断
agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}

# 页面上展示的service的名称,也可以通过-Dskywalking.agent.service_name=xxx指定
agent.service_name=${SW_AGENT_NAME:service-pfm}

# 平台的调用地址,也可以通过-Dskywalking.collector.backend_service=127.0.0.1:11800指定
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:127.0.0.1:11800}

# 忽略指定后缀的请求收集
agent.ignore_suffix=${SW_AGENT_IGNORE_SUFFIX:.jpg,.jpeg,.js,.css,.png,.bmp,.gif,.ico,.mp3,.mp4,.html,.svg}

# 每3秒的采样率,负数代表100%
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}

注意:如果Collector以集群方式部署,比如:Acollector和Bcollector,建议Acollector.sampleRate = Bcollector.sampleRate

2.2 启动工程接入Agent

在jvm启动参数上添加

-javaagent:/var/local/apache-skywalking-apm-bin/agent/skywalking-agent.jar

完整的启动命令

java -javaagent:/var/local/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking.agent.service_name=service-pfm   -Dskywalking.collector.backend_service=127.0.0.1:11800  -jar simple-skywalking-test.jar

IDEA中启动
在这里插入图片描述
添加参数,直接正常启动就可以了

启动成功后访问API,页面会看到数据

排错需要观察agent的日志,路径为/agent/logs/skywalking-api.log
和skywalking的运行日志,路径为logs/skywalking-oap-server.log


项目推荐

IT-CLOUD :IT服务管理平台,集成基础服务,中间件服务,监控告警服务等。
IT-CLOUD-ACTIVITI6 :Activiti教程源码。博文在本CSDN Activiti系列中。
IT-CLOUD-ELASTICSEARCH :elasticsearch教程源码。博文在本CSDN elasticsearch系列中。
IT-CLOUD-KAFKA :spring整合kafka教程源码。博文在本CSDN kafka系列中。
IT-CLOUD-KAFKA-CLIENT :kafka client教程源码。博文在本CSDN kafka系列中。

开源项目,持续更新中,喜欢请 Star~

### Consul集群部署教程和最佳实践 #### 选择合适的硬件配置 为了确保Consul集群稳定运行,在规划阶段应考虑服务器的CPU、内存以及磁盘I/O性能。通常建议每台机器至少配备8GB RAM 和4核 CPU,对于高负载环境则需更高规格。 #### 安装Consul软件包 在所有计划参与构成Consul网络成员(无论是Server还是Client角色)的操作系统之上安装官方发布的最新版本Consul进制文件[^1]。 #### 配置Server节点 - Server节点负责处理查询请求并维护集群状态的一致性。 - 推荐最少设置三个Server实例来形成法定人数(quorum),从而提高容错能力。 - 编辑`/etc/consul.d/server.json` 文件定义初始引导参数和其他必要选项: ```json { "bootstrap_expect": 3, "server": true, "data_dir":"/opt/consul", "ui_config":{"enabled":true}, "client_addr":"0.0.0.0" } ``` #### 启动Server进程 通过命令行启动每个Server节点上的Consul服务,并指定加入现有集群的方式: ```bash consul agent -config-dir=/etc/consul.d/ ``` #### 设置Client节点 - Client仅用于转发RPC调用至最近的一个可用Server端点而不保存任何数据副本。 - 修改相应路径下的客户端配置文件 `/etc/consul.d/client.json`, 如下所示: ```json { "retry_join":["provider=aws tag_key=Role tag_value=consul-server"], "data_dir":"/opt/consul", "ui_config":{"enabled":false}, "client_addr":"0.0.0.0" } ``` 这里假设使用AWS云平台并通过EC2标签自动发现其他成员;如果不是这种情况,则需要手动输入目标地址列表替代上述JSON片段中的`"retry_join"`字段值。 #### 加入Cluster 当首次初始化时,可以通过向任意已知健康在线的Server发送HTTP API指令让新的参与者正式成为集群的一员: ```bash curl \ -w "\n" \ -X PUT \ -d '["<ip-of-peer>"]' \ http://localhost:8500/v1/operator/raft/membership/join ``` 其中 `<ip-of-peer>` 应替换为实际待连接伙伴的真实IP地址字符串表示形式。 #### 测试连通性和功能验证 完成以上步骤之后,应当立即执行一些基本测试以确认整个分布式系统的正常运作状况,比如尝试解析由Consul管理的服务名称到具体实例映射关系等操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值