介绍
- skywalking和zipkin(zipkin使用教程)一样,也分为服务端和客户端,服务端负责收集日志数据并且展示,架构如下:
- 上面的Agent:负责收集日志数据,并且传递给中间的OAP服务器
- 中间的OAP:负责接收 Agent 发送的 Tracing 和Metric的数据信息,然后进行分 析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
- 左面的UI:负责提供web控制台,查看链路,查看各种指标,性能等等。
- 右面Storage:负责数据的存储,支持多种存储类型。
看了架构图之后,思路很清晰了,Agent负责收集日志传输数据,通过GRPC的方式传递给OAP进行分析并且存储到数据库中,最终通过UI界面将分析的统计报表、服务依赖、拓扑关系图展示出来。
准备工作
-
若用虚拟机操作,需要右键虚拟机->设置内存 将内存调到3072 , 处理器设置处理器数量为2
-
为了兼容es 对创建文件和线程等的要求 做以下处理编辑配置文件
vi /etc/security/limits.conf
- 将以下内容 编写在
limits.conf
文件最下方
es soft nofile 65536
es hard nofile 65536
es soft nproc 4096
es hard nproc 4096
- 编辑
sysctl.conf
文件,让es能开辟相应的虚拟内存
vi /etc/sysctl.conf
- 将以下内容 放在
sysctl.conf
文件最下方
vm.max_map_count=262144
- 输入命令让系统控制权限配置生效
sysctl -p
安装与启动
- skywalking 存储库可用
es
或者mysql
搭配使用 - 创建目录
mkdir /usr/local/skywalking
- 去对应官网下载并将elasticsearch和skywalking压缩包(
后缀为.tar.gz
) 放入该目录下 - 解压es压缩包 和 skywalking
tar -zxvf elasticsearch压缩包/skywalking压缩包
启动elasticsearch
- es要求linux不能使用root用户启动es进程,所以必须使用其他用户启动es进程
useradd es
passwd es
chown -R es elasticsearch目录名 //到该目录路径下输入该命令
su es //切换到es用户
- 进入到es目录下的
bin
目录 启动es
./elasticsearch -d //后台运行
- 校验是否启动成功
curl http://localhost:9200
启动es可能遇到的问题
- 本地需要配置jdk环境变量 才能启动 可参考如何在linux配置java环境变量
- 若使用的es 是
7版本
以上, 则需要使用jdk11,可用es自身自带的jdk11解决,如下 - 到es目录下 执行以下编辑命令
vi bin/elasticsearch
- 将以下内容 放在
elasticsearch
文件最下方
# 指定jdk11
export JAVA_HOME=/opt/software/jdk/jdk-11.0.1
export PATH=$JAVA_HOME/bin:$PATH
# 添加jdk判断
if [ -x "$JAVA_HOME/bin/java" ]; then
JAVA="/opt/software/jdk/jdk-11.0.1/bin/java"
else
JAVA=`which java`
fi
启动skywalking
- 进入skywalking目录
- 进入
config
目录 - 若要使用es 作为存储库, 则找到
application.yml
文件内容中storage
以下的elasticsearch
相关的注释给放开(若用Mysql作为存储库则注释) - 修改
cluster
下的selector:${SW_CLUSTER:xxxx}
中的xxxx
改为nacos, 并在cluster
下的nacos
下的hostPort
填写自身项目的nacos地址 - 若用mysql作为存储库 找到该文件内容
mysql
下的参数,配置对应的连接数据库地址和账号密码并且 在storage
下的selector: ${SW_STORAGE:xxxx}
中的xxxx
改为mysql
vi application.yml
- 进入
webapp
目录 修改skywalking的启动端口 - 在文件内容中找到
server
下的port
修改端口号
vi webapp.yml
- 进入
bin
目录 启动skywalking服务
./startup.sh
- 开启sky的端口给予探针那边项目启动访问,以及ui访问的端口
firewall-cmd --zone=public --add-port=11800/tcp --permanent
firewall-cmd --zone=public --add-port=ui的端口/tcp --permanent
firewall-cmd --reload
- 打开该Ip地址的 对应的端口 ,即可打开网页ui图 查看链路追踪的信息
停用服务
- 通过
netstat -tpln
命令查看两个端口,一个11800端口,和一个对应UI网址的端口,找到他们的进程id, 通过kill-9 进程id
删除
使用
- 进入
agent
目录里的config
目录 修改为自定义的服务名称 - 找到文件内容中
agent.service_name=${SW_AGENT_NAME:xxxx}
在该xxxx
修改为自己自定义的名称(也可以不这样配置,直接启动命令编写好即可)
vi agent.config
- 在自己的微服务的启动(
java -jar xxx那个脚本
)脚本(一般后缀是.sh
)最上方加入以下命令 即可关联该链路追踪(若原来命令是java -jar xxx , 则拼接该命令变为, java -jar - javaagent: /xx/xx/skywalking-agent-jar xxx
) - 指定到
agent目录下的jar包
-javaagent: /usr/local/skywalking/skywalking的目录/agent/skywalking-agent.jar
探针
- 若项目各个微服务放在不同服务器,则拷贝
agent
文件到各个服务器当中去(对应不同服务器的项目启动命令也要拼接-javaagent命令指定到自身服务器的agent目录中的skywalking-agent.jar
)
配置覆盖命令
- 指定项目被skywalking所对应的服务名, 则无需进入配置文件去修改名称 (拼接启动命令)
-javaagent:/xxx/skywalking-agent.jar -Dskywalking.agent.service.name=xxxx
-Dskywalking.agent.service.name= xxxxx
- 指定oap服务绑定的地址,并且oap服务默认的端口是11800(
注意若是探针则不是本地地址
)
-Dskywalking.collector.backend_service=127.0.0.1:11800
综合启动拼接命令
java- jar
+拼接以下命令
+xxx.jar(微服务项目jar包)
-javaagent:skywalking目录\agent\skywalking-agent.jar
-Dskywalking.agent.service_name=自定义对应在skywalking的服务名
-Dskywalking.collector.backend_service=启动skywalking的服务器ip:11800
- 自测方式: idea启动项目配置(事先拷贝skywlking服务器上的agent目录文件在本地)
- 在此处添加相应命令后 启动项目即可
- 打开skywalking的ui网即可查看该项目服务的相关数据