1、 Skywalking概述
Skywalking是一个可观测性分析平台和应用性能管理系统,它也是基于OpenTracing规范、开源的 AMP 系统。 Skywalking 提供分布式跟踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。
SkyWalking 特点:
1)多语言自动探针
2)为多种开源项目提供了插件
3)微内核 + 插件的架构 ,存储、集群管理、使用插件集合都可以进行自由 选择
4)支持告警
5) 优秀的可视化效果
Skywalking数据存储方式常用的有5种,分别为 H2(默认)、Elasticsearch、MySql、TiDB、InfluxDB等,Skywalking默认6秒实时刷新,查询性能要求高,所以下面使用的是Skywalking+Elasticsearch的实现方式。
2、Skywalking安装
Skywalking 架构图:
SkyWalking分为:客户端,服务端
客户端: agent 组件
agent 运行在各个服务实例中,负责采集服务实例的 Tracing 、Metrics 等数据,然后通过 gRPC 或HTTP方式上报给 SkyWalking 的数据收集器。
服务端:又分为 OAP , Storage , WebUI
OAP: observability analysis platform 可观测性分析平台,负责接收客户端上报的数据,对数据进行分析,聚合,计算后将数据进行存储,并且还会提供一些查询API 进行数据的查询,这个模块其实就是我们所说的链路追踪系统的Collector 收集器。
Storage: skyWalking 的存储介质,默认是采用 H2 ,同时支持许多其他的存储介质,比如:ElastaticSearch , mysql 等。
WebUI:提供一些图形化界面展示对应的跟踪数据,指标数据等等。
服务端的安装需要把elasticsearch、 Skywalking的oap-server 、 Skywalking-UI。为方便部署,可以使用Compose服务编排。
2.1、Compose服务编排
Docker Compose是用于定义和运行多容器 Docker 应用程序的工具。通过 Compose,您可以使用 YML 文件来配置应用程序需要的所有服务。然后使用一个命令,就可以从 YML 文件配置中创建并启动所有服务。
2.1.1、Compose 使用的三个步骤:
使用 Dockerfile 定义应用程序的环境。
使用 docker-compose.yml 定义构成应用程序的服务,这样它们可以在隔离环境中一起运行。
最后,执行 docker-compose up 命令来启动并运行整个应用程序
2.1.2、Compose安装
# Compose目前已经完全支持Linux、Mac OS和Windows,在安装Compose之前,需要先安装Docker。先以编译好的二进制包方式安装在Linux系统中。
# 更新一下yum
yum update
# 安装yum相关的依赖
yum install -y yum-utils device-mapper-persistent-data lvm2
# 配置yum 告诉yum在哪下载docker
yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
# 安装docker-ce 社区版(免费)
yum install -y docker-ce
# -v version 查看版本,验证安装成功
docker -v
# 启动docker服务
systemctl start docker
# 为方便使用,可以设置开机自启动docker服务
systemctl enable docker
1)运行以下命令以下载 Docker Compose 的当前稳定版本:
# curl -L "https://github.com/docker/compose/releases/download/v2.2.2/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
2)将可执行权限应用于二进制文件:
# chmod +x /usr/local/bin/docker-compose
3)创建软链:
# ln -s /usr/local/bin/docker-compose /usr/bin/docker-compose
4)测试是否安装成功:
# docker-compose --version 或者 docker-compose -v
2.2 服务端部署
创建 docker - compose.yml 并配置如下 :
version: '3.3'
services:
elasticsearch:
image: elasticsearch:7.6.2
container_name: elasticsearch
restart: always
privileged: true
hostname: elasticsearch
ports:
- 9200:9200
- 9300:9300
environment:
- discovery.type=single-node
- bootstrap.memory_lock=true
- "ES_JAVA_OPTS=-Xms512m -Xmx512m"
- TZ=Asia/Shanghai
networks:
- skywalking
ulimits:
memlock:
soft: -1
hard: -1
oap:
image: apache/skywalking-oap-server:8.3.0-es7
container_name: oap
hostname: oap
privileged: true
depends_on:
- elasticsearch
links:
- elasticsearch
restart: always
ports:
- 11800:11800
- 12800:12800
environment:
SW_STORAGE: elasticsearch7
SW_STORAGE_ES_CLUSTER_NODES: elasticsearch:9200
TZ: Asia/Shanghai
volumes:
- ./config/alarm-settings.yml:/skywalking/config/alarm-settings.yml
networks:
- skywalking
ui:
image: apache/skywalking-ui:8.3.0
container_name: ui
privileged: true
depends_on:
- oap
links:
- oap
restart: always
ports:
- 8080:8080
environment:
SW_OAP_ADDRESS: oap:12800
TZ: Asia/Shanghai
networks:
- skywalking
networks:
skywalking:
driver: bridge
通过命令一键启动:docker-compose up -d
启动成功后即可访问skywalking 的 webui的8080端口的 页面
3、Skywalking应用
3.1、agent安装
Skywalking 源码下载地址: https://archive.apache.org/dist/skywalking/
项目使用agent, 需要将下载的 apache - skywalking - apm - bin 文件包上传到服务器。 并将 agent/config/agent.config 配置文 件拷贝到每个需要集成Skywalking 工程的 resource目录下,并修改应用名配置, 修改其 中的 agent.service_name,如下:
agent.service_name = ${SW_AGENT_NAME : taxi-gateway}
还有其他方式覆盖服务名::
1)JVM 覆盖配置
# "skywalking." 是 Skywalking 环境变量的默认前缀
-Dskywalking.agent.service_name = taxi-driver
2) 探针配置覆盖
# 默认格式是 -javaagent:agent.jar=[option1]=[value1], [option2]=[value2]
-javaagent : /path/skywalking-agent.jar = agent.service_name = taxi-driver
优先级: 探针配置 > JVM 配置 > 系统环境变量配置 > agent.config 文件默认值
3.2、IDEA集成使用agent
1 、修改 agent 中数据收集服务的地址: agent/config/agent.confg
collector.backend_service = ${SW_AGENT_COLLECTOR_BACKEND_SERVICES : {linux服务器IP地址} : 11800}
2 、使用探针配置为涉及 项目分别配置 agent :
-javaagent : D : \develop\skywalking\apache-skywalking-apm-bin\agent\skywalking-agent.jar
-Dskywalking.agent.service_name = taxi-driver
3.3 生产环境使用agent
生产环境使用,因此我们需要将agent 和每个项目的 jar 包上传到服务器上,上传 apache- skywalking - apm - bin 至 /usr/local/server/skywalking ,再将工程taxi - parent 中的项目打包,并分别上传到服务器上启动 taxi-driver 等项目。
java -javaagent :/usr/local/server/skywalking/apache-skywalking-apm-bin/agent/skywalking-agent.jar -Dskywalking .agent .service_name = taxi-driver -jar taxi-driver-1.0-SNAPSHOT.jar &
然后在SkyWalking 提供的 UI 界面—— Skywalking Rocketbot仪表盘查看启动状态
3.4 告警
SkyWalking 告警是 6.x 版本新增的功能,其核心由一组规则驱动,这些规则定义在 config/alarm - settings.yml 文件中。 告警的定义分为两部分:
1) 告警规则:定义了应该如何触发度量警报、触发条件。
2) Webhook (网络钩子) :定义当警告触发时,哪些服务终端需要被告知。
Skywalking每隔一段时间根据收集到的链路追踪的数据和配置的告警规则(如服务响应时间、服务响应时间百分比)等,判断如果达到阈值则发送相应的告警信息。发送告警信息是通过调用webhook接口完成。
SkyWalking 的发行版都会默认提供 config/alarm - settings.yml 文件,里面预先定义了一些常用的告警规则,定义告警要通知的服务地址。
webhooks:
- http://{linux服务器IP地址}:18081/skywalking/webhook
Webhook 配置其实是警告消息接收回调处理,可以在程序中写一个方法接收警告信息,Skywalking 会以 application/json 格式通过 http 请求发送,消息格式声明为:
List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage 。字段如下:
scopeId、scope:所有可用的 Scope 详见
name:目标 Scope 的实体名称
id0:Scope 实体的 ID
id1:保留字段,目前暂未使用
ruleName:告警规则名称
alarmMessage:告警消息内容
startTime:告警时间,格式为时间戳
@Data
@ToString
public class AlarmMessage {
private int scopeId;
private String name;
private String id0;
private String id1;
private String alarmMessage;
private long startTime;
String ruleName;
}
@RestController
@RequestMapping(value = "/skywalking")
public class AlarmMessageController {
@PostMapping("/webhook")
public void webhook(@RequestBody List<AlarmMessage> alarmMessageList) {
//邮件或短信通知开发支持人员
}
}
邮箱工具类
/**
* 发送邮件工具类
*/
@Component
public class SendMailUtil {
private String host = "smtp.mxhichina.com";
private String username = "[email protected]";
private String password = "lc-87654321";
public boolean sendMail(String recipient, String title, String content) {
try {
Properties props = new Properties();
//设置发邮件的协议
props.setProperty("mail.transport.protocol", "smtp");
//设置发邮件的地址(smtp邮箱服务器地址)
props.setProperty("mail.smtp.host", host);
// 指定验证为true
props.setProperty("mail.smtp.auth", "true");
props.setProperty("mail.smtp.port", smtpPort);
// 发件人的账号
props.put("mail.user", username);
//发件人的密码
props.put("mail.password", password);
// 构建授权信息
Authenticator authenticator = new Authenticator() {
@Override
protected PasswordAuthentication getPasswordAuthentication() {
// 用户名、密码
String username = props.getProperty("mail.user");
String password = props.getProperty("mail.password");
return new PasswordAuthentication(username, password);
}
};
// 创建邮件会话
Session mailSession = Session.getInstance(props, authenticator);
// 创建邮件消息
MimeMessage message = new MimeMessage(mailSession);
// 发件人
String username = props.getProperty("mail.user");
InternetAddress from = new InternetAddress(username);
message.setFrom(from);
// 收件人
InternetAddress toAddress = new InternetAddress(recipient);
message.setRecipient(Message.RecipientType.TO, toAddress);
// 邮件标题
message.setSubject(title);
// 邮件的内容体
message.setContent(content, "text/html;charset=UTF-8");
// 发送邮件
Transport.send(message);
return true;
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
}
这些就是SkyWalking安装及应用所涉及的文件及代码,有需要可以参考!!!
————————————————
版权声明:本文为CSDN博主「serendipity-lc1212」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_47566449/article/details/123860033