0


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 
的数据收集器。

*服务端:又分为OAPStorage***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安装及应用所涉及的文件及代码,有需要可以参考!!!

本文转载自: https://blog.csdn.net/weixin_47566449/article/details/123860033
版权归原作者 serendipity-lc1212 所有, 如有侵权,请联系我们删除。

“Skywalking+Elasticsearch安装及应用(邮箱告警)”的评论:

还没有评论