
照片来源于 Pexels
除开运用指标值监管之外,它还能对分布式系统启用链接开展跟踪。相近作用的部件也有:Zipkin、Pinpoint、CAT 等。
上多张图,看一下实际效果,随后再一步一步构建并应用:




定义与构架
SkyWalking 是一个开源系统监控管理平台,用以从服务和云原生基础设施建设搜集、剖析、汇聚和数据可视化。
SkyWalking 给予了一种简易的办法来维护保养分布式架构的清楚主视图,乃至可以跨云查询。它是一种当代 APM,专业为云原生、根据器皿的分布式架构设计方案。
SkyWalking 从三个层面对运用开展监控:
- service(服务)
- service instance(案例)
- endpoint(端点)
服务和实例就很少讲了,端点是服务中的某一途径换句话说 URI:
SkyWalking allows users to understand the topology relationship between Services and Endpoints, to view the metrics of every Service/Service Instance/Endpoint and to set alarm rules.
SkyWalking 容许客户掌握服务和端点中间的拓扑关系,查询每一个服务/服务案例/端点的衡量,并设定报警标准。
构架如下图:

SkyWalking 逻辑性上分成四个一部分:
- Probes(探针)
- Platform backend(服务平台后面)
- Storage(储存)
- UI
这一构造就很明确了,探针便是 Agent 承担采集数据并汇报给服务端,服务端对数据资料完成处置和储存,UI 承担展现。

下载与安裝
SkyWalking 有两种版本,ES 版本和非 ES 版。如果我们决策选用 ElasticSearch 做为储存,那麼就下载 ES 版本。
https://skywalking.apache.org/downloads/https://archive.apache.org/dist/skywalking/


如下图所示:
- agent 文件目录未来要拷到各服务所属设备上作为探针。
- bin 文件目录是服务运行脚本制作。
- config 文件目录是环境变量。
- oap-libs 文件目录是 oap 服务运作所需要的 jar 包。
- webapp 文件目录是 web 服务运作所需要的 jar 包。
下面,要挑选储存了,适用的储存有:
- H2
- ElasticSearch 6,7
- MySQL
- TiDB
- InfluxDB
做为监控系统,最先清除 H2 和 MySQL,这儿强烈推荐 InfluxDB,它实际上便是时序数据库,特别适合这个情景。可是 InfluxDB 我并不是很了解,因此这儿先用 ElasticSearch7。
https://github.com/apache/skywalking/blob/master/docs/en/setup/backend/backend-storage.md
①安裝 ElasticSearch
连接如下所示:
https://www.elastic.co/guide/en/elasticsearch/reference/7.10/targz.html
#运行./bin/elasticsearch-d-ppid#终止pkill-Fpid

ElasticSearch 7.x 必须 Java 11 以上的版本,可是假如你设定了系统变量 JAVA_HOME 得话,它会用你自己的 Java 版本。
通常,运行全过程中会报下列三个不正确:
[1]:maxfiledescriptors[4096]forelasticsearchprocessistoolow,increasetoatleast[65535][2]:maxvirtualmemoryareasvm.max_map_count[65530]istoolow,increasetoatleast[262144][3]:thedefaultdiscoverysettingsareunsuitableforproductionuse;atleastoneof[discovery.seed_hosts,discovery.seed_providers,cluster.initial_master_nodes]mustbeconfigured
解决方案:在 /etc/security/limits.conf 文档中增加以下几点。
*softnofile65536*hardnofile65536*softnproc4096*hardnproc4096
可根据下面四个指令查询改动結果:
ulimit-Hnulimit-Snulimit-Huulimit-Su
改动 /etc/sysctl.conf 文档,追加以下内容:
vm.max_map_count=262144
改动 ES 配置文件 elasticsearch.yml 撤销注释,保留一个节点:
cluster.initial_master_nodes:["node-1"]
为了更好地可以 ip:port 方法浏览,还需改动网络配置:
network.host:0.0.0.0
修改完是如此的:


至此,ElasticSearch 算得上运行成功了。一个节点还不够,这儿用三个节点构建一个群集。
192.168.100.14 config/elasticsearch.yml:
cluster.name:my-monitornode.name:node-1network.host:192.168.100.14http.port:9200discovery.seed_hosts:["192.168.100.14:9300","192.168.100.15:9300","192.168.100.19:9300"]cluster.initial_master_nodes:["node-1"]
192.168.100.15 config/elasticsearch.yml:
cluster.name:my-monitornode.name:node-2network.host:192.168.100.15http.port:9200discovery.seed_hosts:["192.168.100.14:9300","192.168.100.15:9300","192.168.100.19:9300"]cluster.initial_master_nodes:["node-1"]
192.168.100.19 config/elasticsearch.yml:
cluster.name:my-monitornode.name:node-3network.host:192.168.100.19http.port:9200discovery.seed_hosts:["192.168.100.14:9300","192.168.100.15:9300","192.168.100.19:9300"]cluster.initial_master_nodes:["node-1"]
与此同时,提议改动三个节点 config/jvm.options:
-Xms2g-Xmx2g
先后运行三个节点:
pkill-Fpid./bin/elasticsearch-d-ppid



下面,改动 skywalking下config/application.yml 中配备 es 详细地址就可以:
storage:selector:${SW_STORAGE:elasticsearch7}elasticsearch7:nameSpace:${SW_NAMESPACE:""}clusterNodes:${SW_STORAGE_ES_CLUSTER_NODES:192.168.100.14:9200,192.168.100.15:9200,192.168.100.19:9200}
②安裝 Agent
详细地址如下所示:
https://github.com/apache/skywalking/blob/v8.2.0/docs/en/setup/service-agent/java-agent/README.md
将 agent 文件目录复制至各服务项目所属的设备上:
scp-r./agentchengjs@192.168.100.12:~/
这儿,我将它复制至每个服务项目文件目录下:

plugins 是探头使用各种各样软件,SkyWalking 插件全是1394连接的,可以把 optional-plugins 中的软件放进 plugins 中。
改动 agent/config/agent.config 配置文件,还可以根据命令行参数特定。主要是配备服务项目名字和后面服务项目详细地址:
agent.service_name=${SW_AGENT_NAME:user-center}collector.backend_service=${SW_AGENT_COLLECTOR_BACKEND_SERVICES:192.168.100.17:11800}
自然,还可以根据系统变量或系统属性的方法来设定,例如:
exportSW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800
最终,在服务项目运行的情况下用命令行参数 -javaagent 来特定探头:
java-javaagent:/path/to/skywalking-agent/skywalking-agent.jar-jaryourApp.jar
例如:
java-javaagent:./agent/skywalking-agent.jar-Dspring.profiles.active=dev-Xms512m-Xmx1024m-jardemo-0.0.1-SNAPSHOT.jar
启动服务
改动 webapp/webapp.yml 文档,变更端口号及后面服务详细地址:
server:port:9000collector:path:/graphqlribbon:ReadTimeout:10000#Pointtoallbackend'srestHost:restPort,splitby,listOfServers:127.0.0.1:12800
启动服务:
bin/startup.sh
或是各自先后启动:
bin/oapService.shbin/webappService.sh
查询 logs 文件目录下的日志文件,看是不是启动取得成功。电脑浏览器浏览 :
http://127.0.0.1:9000
告警

编写 alarm-settings.yml 设定告警标准和通知:
https://github.com/apache/skywalking/blob/v8.2.0/docs/en/setup/backend/backend-alarm.md
关键说下告警通知:


为了更好地应用钉钉打卡智能机器人通知,下面,新创建一个新项目:
<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0https://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.4.0</version><relativePath/><!</parent><groupId>com.wt.monitor</groupId><artifactId>skywalking-alarm</artifactId><version>1.0.0-SNAPSHOT</version><name>skywalking-alarm</name><properties><java.version>1.8</java.version></properties><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>com.aliyun</groupId><artifactId>alibaba-dingtalk-service-sdk</artifactId><version>1.0.1</version></dependency><dependency><groupId>commons-codec</groupId><artifactId>commons-codec</artifactId><version>1.15</version></dependency><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.75</version></dependency><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><optional>true</optional></dependency></dependencies><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins></build></project>
可选依靠(不建议引进):