#博学谷IT学习技术支持#
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安装及应用所涉及的文件及代码,有需要可以参考!!!
版权归原作者 serendipity-lc1212 所有, 如有侵权,请联系我们删除。