Skywalking+Elasticsearch安装及应用(邮箱告警)
Posted serendipity-lc1212
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Skywalking+Elasticsearch安装及应用(邮箱告警)相关的知识,希望对你有一定的参考价值。
#博学谷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-driver2) 探针配置覆盖
# 默认格式是 -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.confgcollector.backend_service = $SW_AGENT_COLLECTOR_BACKEND_SERVICES : linux服务器IP地址 : 118002 、使用探针配置为涉及 项目分别配置 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:Webhook 配置其实是警告消息接收回调处理,可以在程序中写一个方法接收警告信息,Skywalking 会以 application/json 格式通过 http 请求发送,消息格式声明为: List<org.apache.skywalking.oap.server.core.alarm.AlarmMessage 。字段如下:
- http://linux服务器IP地址:18081/skywalking/webhook
- 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) //邮件或短信通知开发支持人员
这些就是SkyWalking安装及应用所涉及的文件及代码,有需要可以参考!!!/** * 发送邮件工具类 */ @Component public class SendMailUtil private String host = "smtp.mxhichina.com"; private String username = "albb@mxhi.com"; 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+Elasticsearch安装及应用(邮箱告警)的主要内容,如果未能解决你的问题,请参考以下文章
Docker快速搭建SkyWalking[ OAP & UI[登录] & Elasticsearch]