介绍
随着微服务架构的流行,一些微服务架构下的问题也会越来越突出,比如一个请求会涉及多个服务,而服务本身可能也会依赖其他服务,整个请求路径就构成了一个网状的调用链,而在整个调用链中一旦某个节点发生异常,整个调用链的稳定性就会受到影响。
面对以上情况, 我们就需要一些可以帮助理解系统行为、用于分析性能问题的工具,以便发生故障的时候,能够快速定位和解决问题。这时候分布式追踪系统就该闪亮登场了。
SkyWalking 是针对分布式系统的 APM 系统,也被称为分布式追踪系统
安装步骤
安装环境
- 安装:jdk1.8
- 安装:elasticsearch-6.x
- 安装:SkyWalking
安装jdk1.8
点击:安装jdk1.8
安装elasticsearch-6.x
点击:安装elasticsearch-6.x
安装SkyWalking
1 2 3 4 5 6 7 8 9
| wget https://archive.apache.org/dist/skywalking/6.4.0/apache-skywalking-apm-6.4.0.tar.gz
tar xf apache-skywalking-apm-6.4.0.tar.gz -C /opt/
vim /opt/apache-skywalking-apm-bin/config/application.yml
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| storage: elasticsearch: nameSpace: ${SW_NAMESPACE:"my-application"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.10.131:9200} protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
|
1 2 3 4 5
| /opt/apache-skywalking-apm-bin/bin/startup.sh
curl http://localhost:8080
|
客户端连接测试
客户端说明:
- /opt/apache-skywalking-apm-bin/agent/目录是数据收集的服务客户端
- 要监控哪台服务器上的jar服务,就需要把该目录复制到被监控的服务器上
- 通过以下方式指定配置启动后,需要再访问被监控的服务,skywalking上才可接收到该请求信息。
方式一:手动指定配置启动
1 2 3 4
| java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar \ -Dskywalking.agent.service_name=eureka \ -Dskywalking.collector.backend_service=localhost:11800 \ -jar eureka-1.0.0-SNAPSHOT.jar
|
- -javaagent:指定agent地址
- -Dskywalking.agent.service_name:指定要运行的服务名称,可自由定义
- -Dskywalking.collector.backend_service:skywalking服务端连接地址
- eureka-1.0.0-SNAPSHOT.jar:为测试用的jar包
方式二:修改配置文件启动
1 2
| vim /opt/apache-skywalking-apm-bin/agent/config/agent.config
|
1 2 3 4 5
| agent.service_name=${SW_AGENT_NAME:mmhsy-eureka-1.0.0-SNAPSHOT}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:localhost:11800}
|
1 2
| java -javaagent:/opt/apache-skywalking-apm-bin/agent/skywalking-agent.jar -jar eureka-1.0.0-SNAPSHOT.jar
|
配置文件说明
application.yml
OAP(Collector)链路数据归集器,主要用于数据落地,大部分都会选择 Elasticsearch 6,OAP配置文件为 /opt/apache-skywalking-apm-6.2.0/config/application.yml,配置单点的 OAP(Collector)配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| cluster: standalone: core: default: role: ${SW_CORE_ROLE:Mixed} restHost: ${SW_CORE_REST_HOST:localhost} restPort: ${SW_CORE_REST_PORT:12800} restContextPath: ${SW_CORE_REST_CONTEXT_PATH:/} 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: elasticsearch: nameSpace: ${SW_NAMESPACE:"local-ES"} clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:192.168.2.10:9200} user: ${SW_ES_USER:""} password: ${SW_ES_PASSWORD:""} indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2} indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0} bulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:2000} bulkSize: ${SW_STORAGE_ES_BULK_SIZE:20} flushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} concurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000} segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
|
webapp.yml
Skywalking 的 WebApp 主要是用来展示落地的数据,因此只需要配置 Web 的端口及获取数据的 OAP(Collector)的IP和端口,webApp 配置文件地址为 /opt/apache-skywalking-apm-6.2.0/webapp/webapp.yml 配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| server: port: 9000 collector: path: /graphql ribbon: ReadTimeout: 10000 listOfServers: localhost:12800 security: user: admin: password: admin
|
agent.config
Skywalking 的 Agent 主要用于收集和发送数据到 OAP(Collector),因此需要进行配置 Skywalking OAP(Collector)的地址,Agent 的配置文件地址为 /opt/apache-skywalking-apm-6.2.0/agent/config/agent.config,配置如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
| agent.namespace=${SW_AGENT_NAMESPACE:default-namespace}
agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}
agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE:-1}
collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.2.215:11800}
logging.level=${SW_LOGGING_LEVEL:DEBUG}
|