【监控系统】日志可视化监控体系ELK搭建

1.ELK架构是什么

ELK是Elasticsearch+Logstash+Kibana的简称。

Elasticsearch是一个开源的分布式搜索和分析引擎,可以用于全文检索、结构化检索和分析,它构建在Lucene搜索引擎库之上,是当前使用较为广泛的开源搜索引擎之一。

Logstash是一个开源的数据搜集引擎是一个用来搜集、分析、过滤日志的工具,使用它可以将搜集来的日志信息进行处理然后进行输出。Logstash支持许多功能强大的插件,可以合理使用这些插件来对搜集到 的日志信息进行过滤和处理。

Kibana是一个基于Web的图形界面,可以使用它对Elasticsearch索引中的数据进行搜索、查看、交互操作。还可以很方便的利用图表、表格及地图对数据进行多元化的分析和呈现。

Filebeat是一个轻量级的日志搜集器,用于搜集和转发日志数据,Filebeat一般都会安装在需要搜集日志的服务器上,指定需要搜集日志的日志文件的位置,搜集日志信息并转发到Elasticsearch 或Logstash上进行索引。

在这里插入图片描述

其中, Filebeat 主要用于在服务器中采集服务日志信息并输出到 Logstash, Logstash 负责接收所有 Filebeat 传递过来的日志数据,并对数据进行过滤筛选处理后输出到 Elasticsearch, Elasticsearch 主要用于日志消息的存储,搜索和分析,在 Elasticsearch 中存储的索引信息最终会通过 Kibana 在页面上直观的进行展示。最终用户可以在 Kibana 页面中操作索引,查询日志, 监控 Elasticsearch 和 Kibana 的健康状态,以及配置多种 Dashboard 来展示聚合数据信息。

总结来说,ELK 日志监控大体上分为两部分,Elasticsearch、Logstash 和 Filebeat 负责数据的搜集,过滤,存储和分析,Kibana 负责操作存储在 Elasticsearch 中的索引信息,监控 Elasticsearch 和 Kibana 的健康状态以及管理用户信息。 同时用户还可以配置多种 Dashboard 来展示数据聚合信息。

2.为什么采用ELK架构

(1)Elasticsearch、Logstash、Kibana、Filebeat 均为开源组件,并且使用 ELK 搭建日志监控系统的方案也比较成熟。

(2)一般的日志监控系统架构都是采用 ELK(Elasticsearch、Logstash、Kibana)架构去搭建的,但是由于 Logstash 本身是基于 jdk 的,且它集成了许多插件,所以占用内存较大,在每台服务器上都部署一 个 Logstash 有些占用资源,因此我们使用轻量级的 Filebeat 组件来完成搜集日志的操作。但是 Filebeat 只能采集日志数据却无法对数据进行过滤,因此我们在将日志信息输出到 Elasticsearch 之前先使 用 Logstash 对数据进行过滤处理,再将处理好的数据输出到 Elasticsearch。

(3)在微服务场景下,可能存在如下两种情况:

  • 开发或生产环境的微服务项目部署在多台服务器上,此时需要监控多台服务器下的日志信息情况;
  • 一台服务器下既存在开发环境的微服务项目,又存在生产环境的微服务项目,此时需要将搜集到的日志信息加以区分。

这种情况下我们可以在 Filebeat 采集日志时为日志信息指定每个不同环境的唯一前缀后再输出。

3.ElasticSearch8.X源码部署

(1)什么是ElasticSearch

在这里插入图片描述

官网:https://www.elastic.co/cn/elasticsearch/

ElasticSearch是⼀个开源,是⼀个基于Apache Lucene库构建的Restful搜索引擎. Elasticsearch是在Solr之后⼏年推出的。
它提供了⼀个分布式,多租户能⼒的全⽂搜索引擎,具有HTTP Web界⾯(REST)和⽆架构JSON⽂档。
Elasticsearch的官⽅客户端库提供Java,Groovy,PHP,Ruby,Perl,Python,.NET和Javascript。
应⽤场景:维基百科、Stack Overflow、GitHub、电商⽹站、⽇志数据分析、商品价格监控⽹站、BI系统、站内搜索

(2)Elasticsearch核心概念

  • Index索引
ES将数据存储于一个或多个索引中,索引是具有类似特性的文档的集合,相当于关系型数据库中的一个Database。索引由其名称(必须为全小写字符)进行标识,并通过引用此名称完成文档的创建、搜索、更新及删除操作。一个ES集群中可以按需创建任意数目的索引。
  • 类型Type
类型是索引内部的逻辑分区,在一个索引内部可定义一个或多个类型(type),类似于传统数据库中的表。一般来说,类型就是为那些拥有相同的域的文档做的预定义。例如,在索引中,可以定义一个用于存储用户数据的类型,一个存储日志数据的类型,以及一个存储评论数据的类型。
  • 文档Document
文档是索引和搜索的原子单位,它是存储在ES中的一个JSON格式的字符串,其中包含了一个或多个域(Field)的容器。在ES中每个文档都有一个类型和ID,每个文档由一个或多个域组成,每个域拥有一个名字及一个或多个值,有多个值的域通常称为“多值域”。每个文档可以存储不同的域集,但同一类型下的文档至应该有某种程度上的相似之处。
  • 集群Cluster
集群由一个或多个节点组成,对外提供索引和搜索功能。在一个集群中所有的节点都有一个唯一的名称默认为“Elasticsearch”,当某个节点被设置为相同的集群名称时,会自动加入到集群。如果有多个集群,需要设置不同的名称,否则节点可能会加入到错误的集群。需要注意的是一个节点只能加入一个集群。
  • 节点Node
一个运行中的Elasticsearch实例称为一个节点,它是一个逻辑上独立的服务,可以存储数据,是ES集群的一部分。ES集群由一个或者多个拥有相同cluster.name配置的节点组成,它们共同承担数据和负载的压力。ES集群中的节点有三种不同的类型:
主节点:负责管理集群范围内的所有变更,例如增加、删除索引,或者增加、删除节点等,并决定哪些分片分配给相关的节点、追踪集群中节点的状态等。主节点并不需要涉及到文档级别的变更和搜索等操作,可以通过属性node.master进行设置。
数据节点:存储数据和其对应的倒排索引,同时对数据进行增删改查和聚合等操作。默认每一个节点都是数据节点(包括主节点),可以通过node.data属性进行设置。通常随着集群的扩大,需要增加更多的数据节点来提高性能和可用性。
协调节点:如果node.master和node.data属性均为false,则此节点称为协调节点,用来响应客户请求,均衡每个节点的负载。
  • 路由Routing
当存储一个文档的时候,它会存储在唯一的主分片中,具体哪个分片是通过散列值进行选择。默认情况下这个值由文档的ID生成,如果文档中指定了一个父文档,则从父文档ID中生成。
注:Routing值和路由计算具体到哪个分片有关。
  • 分片Sharding
ES中的索引数据量太大的时候,可以通过水平拆分的方式将一个索引上的数据拆分出来分配到不同的数据块上,这个数据块称为分片,相当于水平分表。一个分片便是一个Lucene的实例,ES中的index就是指向主分片和副本分片的逻辑空间。实际的文档数据被存储和索引到分片内,但是应用程序是直接与索引而不是与分片进行交互。主分片:每个文档都存储在一个分片中,当存储一个文档的时候,ES首先将数据存储在主分片中,然后复制到不同的副本中。ES默认为一个索引创建 5 个主分片, 并分别为每个分片创建一个副本,通过参数可以指定。在索引建立的时候就已经确定了主分片数,但是副本分片数可以随时修改。副本分片:副本分片是主分片的复制,每个主分片有0个或者多个副本。当主分片异常的时候,可以从副本分片中选择一个作为主分片,提高可用性。同时,查询可以在副本分片进行,减轻主分片的压力,提高性能。
  • 元数据
Elasticsearch中以 “ _” 开头的属性都成为元数据,都有自己特定的意思。

(3)上传安装包和解压

tar -zxvf elasticsearch-8.4.1-linux-x86_64.tar.gz

(4)elasticsearch默认不允许以root账号运行,新建一个用户运行es

创建用户:useradd es_user
设置密码:passwd es_user

在这里插入图片描述

(5)修改目录权限

# chmod是更改文件的权限   
# chown是改改文件的属主与属组  
# chgrp只是更改文件的属组。chgrp -R es_user /usr/local/software/elasticsearch-8.4.1
chown -R es_user /usr/local/software/elasticsearch-8.4.1
chmod -R  777 /usr/local/software/elasticsearch-8.4.1

在这里插入图片描述

(6)修改文件和进程最大打开数,需要root用户,如果系统本身有这个文件最大打开数和进程最大打开数配置,则不用

vi /etc/security/limits.conf* soft nofile 65536
* hard nofile 65536

(7)修改虚拟内存空间,默认太小

在配置文件中改配置 最后一行上加上,执行 sysctl -p(立即生效)
vi /etc/sysctl.conf vm.max_map_count=262145

(8)修改elasticsearch的JVM内存,机器内存不足,常规线上推荐16到24G内存

vi config/jvm.options-Xms1g
-Xmx1g

(9)修改 elasticsearch相关配置

vi config/elasticsearch.ymlcluster.name: my-application
node.name: node-1
path.data: /usr/local/software/elasticsearch-8.4.1/data
path.logs: /usr/local/software/elasticsearch-8.4.1/logs
network.host: 0.0.0.0
http.port: 9200
cluster.initial_master_nodes: ["node-1"]
xpack.security.enabled: false
xpack.security.enrollment.enabled: false
ingest.geoip.downloader.enabled: false
配置说明:
cluster.name: 指定Elasticsearch集群的名称。所有具有相同集群名称的节点将组成一个集群。
node.name: 指定节点的名称。每个节点在集群中应该具有唯一的名称。
path.data: 指定用于存储Elasticsearch索引数据的路径。
path.logs: 指定Elasticsearch日志文件的存储路径。
network.host: 指定节点监听的网络接口地址。0.0.0.0表示监听所有可用的网络接口,开启远程访问连接
http.port: 指定节点上的HTTP服务监听的端口号。默认情况下,Elasticsearch的HTTP端口是9200。
cluster.initial_master_nodes: 指定在启动集群时作为初始主节点的节点名称。
xpack.security.enabled: 指定是否启用Elasticsearch的安全特性。在这里它被禁用(false),意味着不使用安全功能。
xpack.security.enrollment.enabled: 指定是否启用Elasticsearch的安全认证和密钥管理特性。在这里它被禁用(false)。
ingest.geoip.downloader.enabled: 指定是否启用GeoIP数据库下载功能。在这里它被禁用(false)

(10)启动ElasticSearch,切换到es_user用户启动

./elasticsearch &

在这里插入图片描述

(11)常见命令访问es的服务状态

#查看集群健康情况
http://ip:9200/_cluster/health

在这里插入图片描述

#查看分片情况
http://ip:9200/_cat/shards?v=true&pretty

在这里插入图片描述

#查看节点分布情况
http://ip:9200/_cat/nodes?v=true&pretty

在这里插入图片描述

#查看索引列表
http://ip:9200/_cat/indices?vip

在这里插入图片描述

(12)部署es常见的问题

磁盘空间需要85%以下,不然ES状态会不正常
不要用root用户安装
linux内存不够
linux文件句柄
没开启远程访问 或者 网络安全组没看开放端口
有9300 tcp端口,和http 9200端口,要区分
没权限访问,重新执行目录权限分配

4.Kibana8.X源码部署

(1)什么是Kibana

在这里插入图片描述

  • 基于node.js开发,数据可视化和仪表盘工具,连接到Elasticsearch,通过简单易用的用户界面创建各种图表、图形和仪表盘
  • 帮助用户快速探索和理解数据,并进行强大的数据分析和可视化

(2)上传安装包和解压

tar -zxvf kibana-8.4.1-linux-x86_64.tar.gz

(3)配置用户权限

chgrp -R es_user /usr/local/software/kibana-8.4.1
chown -R es_user /usr/local/software/kibana-8.4.1
chmod -R  777 /usr/local/software/kibana-8.4.1

(4)修改配置文件

vim config/kibana.ymlserver.port: 5601
server.host: "0.0.0.0"
elasticsearch.hosts: ["http://ip:9200"] #es部署机器的IP地址
i18n.locale: "zh-CN" #汉化
server.port: 指定Kibana服务器监听的端口号,Kibana将在5601端口上监听HTTP请求。
server.host: 指定Kibana服务器绑定的网络接口地址, "0.0.0.0"表示监听所有可用的网络接口。
elasticsearch.hosts: 指定ES集群的主机地址,可以配置多个,Kibana将连接到位于"120.24.7.58"主机上、使用默认HTTP端口9200的es
i18n.locale: 指定Kibana界面的语言区域,"zh-CN"表示使用简体中文作为语言。

(5)启动,切换到es_user 用户

./kibana &
  • 访问:192.168.140.100:5601

在这里插入图片描述

(6)开发者工具

在这里插入图片描述

5.SpringBoot部署应用

(1)创建SpringBoot项目,编写测试接口

@RequestMapping("/log")
public String log(){logService.log();return "SUCCESS";
}

(2)配置logback.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<configuration><property name="LOG_HOME" value="./logs" /><!--采用打印到控制台,记录日志的方式--><appender name="console" class="ch.qos.logback.core.ConsoleAppender"><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 采用保存到日志文件 记录日志的方式,%d{yyyy-MM-dd HH:mm:ss.SSS}:输出日志发生的时间,精确到毫秒。[%thread]:输出日志所在的线程名。%-5level:输出日志级别,使用占位符%5level可以保持日志级别的对齐。%logger{36}:输出日志所在的类名(只输出类名的后36个字符)。%msg:输出日志消息。%n:新行。--><appender name="rollingFile" class="ch.qos.logback.core.rolling.RollingFileAppender"><file>${LOG_HOME}/order.log</file><rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy"><fileNamePattern>${LOG_HOME}/order-%d{yyyy-MM-dd}.log</fileNamePattern></rollingPolicy><encoder><pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern></encoder></appender><!-- 指定某个类单独打印日志 --><logger name="com.lixiang.service.impl.LogServiceImpl"level="INFO" additivity="false"><appender-ref ref="rollingFile" /><appender-ref ref="console" /></logger><root level="INFO" additivity="false"><appender-ref ref="rollingFile" /></root>
</configuration>

(3)打包部署服务器

ps -ef | grep order-service-1.0.jar | grep -v grep | awk '{print $2}' | xargs kill -9 
nohup java -Xms512m -Xmx512m  -jar /usr/local/order/order-service-1.0.jar > order.log 2>&1 &

6.LogStash8.X源码部署

(1)什么是Logstash

  • Logstash是一个用于数据收集、转换和传输的数据处理引擎,支持从各种来源(如文件、日志、数据库等)收集数据。
  • 基于java开发,并对数据进行结构化、过滤和转换,然后将数据发送到Elasticsearch等目标存储或分析系统。
  • 常见的数据采集流程
    • Logstash 采集 –> Elasticsearch –> Kibana
    • Beats 采集(Filebeat/Metricbeat)–> Elasticsearch –> Kibana
    • Beats 采集(Filebeat/Metricbeat)–> Logstash –> Elasticsearch –> Kibana

(2)LogStash宏观配置文件组成

在这里插入图片描述

(3)上传安装包和解压

tar -zxvf logstash-8.4.1-linux-x86_64.tar.gz

(4)修改配置文件

  • JVM内存不够的话修改 config/jvm.options
  • 创建新配置文件 touch config/test-logstash.conf
input {file {path => "/usr/local/order/logs/order.log"start_position => "beginning"stat_interval => "3"type => "order-service-log"}
}output {if [type] == "order-service-log" {elasticsearch {hosts => ["http://192.168.140.100:9200"]index => "order-service-%{+YYYY.MM.dd}"}}
}
input:指定Logstash接收数据的输入插件,使用file插件作为输入。file插件用于读取并处理文件中的数据。
file:指定使用的输入插件是file插件。
path:指定要读取的文件路径,Logstash会读取位于"/usr/local/software/log/access.log"路径下的文件。
start_position:指定从文件的哪个位置开始读取数据。设置为"beginning"表示从文件的开始位置开始读取数据。
stat_interval:指定文件的状态检查间隔(以秒为单位)。设置为"3"表示每隔3秒检查一次文件状态,以判断是否有新数据。
type:指定数据的类型名称。设置为"nginx-access-log"表示数据的类型是Nginx访问日志。
output:指定Logstash处理完数据后的输出插件。使用elasticsearch插件将处理后的日志数据发送到Elasticsearch。
elasticsearch:指定使用的输出插件是elasticsearch插件。
hosts:指定Elasticsearch集群的主机地址。Logstash将处理后的数据发送到位于"192.168.140.100"主机上,HTTP端口9200的ES节点
index:指定数据在Elasticsearch中的索引名称,比如【 filebeat-8.4.1-2023.07.02 】使用[@metadata][beat]字段、[@metadata][version]字段和当前日期来构建索引名称可以根据采集数据的来源和版本动态创建索引。

(5)启动,进入bin目录

./logstash -f /usr/local/software/logstash-8.4.1/config/test-logstash.conf &

(6)访问kibana,查看索引管理

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/152068.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Databend 开源周报第 120 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 使用自定义 CON…

常见Web安全

一.Web安全概述 以下是百度百科对于web安全的解释&#xff1a; Web安全&#xff0c;计算机术语&#xff0c;随着Web2.0、社交网络、微博等等一系列新型的互联网产品的诞生&#xff0c;基于Web环境的互联网应用越来越广泛&#xff0c;企业信息化的过程中各种应用都架设在Web平台…

MySQL 之多版本并发控制 MVCC

MySQL 之多版本并发控制 MVCC 1、MVCC 中的两种读取方式1.1、快照读1.2、当前读 2、MVCC实现原理之 ReadView2.1、隐藏字段2.2、ReadView2.3、读已提交和可重复读隔离级别下&#xff0c;产生 ReadView 时机的区别 3、MVCC 解决幻读4、总结 MVCC&#xff08;多版本并发控制&…

springboot引入第三方jar包放到项目目录中,添加web.xml

参考博客&#xff1a;https://www.cnblogs.com/mask-xiexie/p/16086612.html https://zhuanlan.zhihu.com/p/587605618 1、在resources目录下新建lib文件夹&#xff0c;将jar包放到lib文件夹中 2、修改pom.xml文件 <dependency><groupId>com.lanren312</grou…

网络运维与网络安全 学习笔记2023.11.18

网络运维与网络安全 学习笔记 第十九天 今日目标 冲突域和交换机工作原理、广播域和VLAN原理 VLAN配置、TRUNK原理与配置、HYBRID原理与配置 冲突域和交换机工作原理 冲突域概述 定义 网络设备发送的数据&#xff0c;产生冲突的区域&#xff08;范围&#xff09; 对象 “数…

【Java 进阶篇】Ajax 实现——JQuery 实现方式 `ajax()`

嗨&#xff0c;亲爱的读者们&#xff01;欢迎来到这篇关于使用 jQuery 中的 ajax() 方法进行 Ajax 请求的博客。在前端开发中&#xff0c;jQuery 提供了简便而强大的工具&#xff0c;其中 ajax() 方法为我们处理异步请求提供了便捷的解决方案。无需手动创建 XMLHttpRequest 对象…

利用AlphaMissense准确预测蛋白质组范围内的错义变体效应

Editor’s summary 蛋白质中单个氨基酸的变化有时影响不大&#xff0c;但通常会导致蛋白质折叠、活性或稳定性方面的问题。只有一小部分变体进行了实验研究&#xff0c;但有大量的生物序列数据适合用作机器学习方法的训练数据。程等人开发了AlphaMissense&#xff0c;这是一种…

浅析ChatGPT中涉及到的几种技术点

❤️觉得内容不错的话&#xff0c;欢迎点赞收藏加关注&#x1f60a;&#x1f60a;&#x1f60a;&#xff0c;后续会继续输入更多优质内容❤️ &#x1f449;有问题欢迎大家加关注私戳或者评论&#xff08;包括但不限于NLP算法相关&#xff0c;linux学习相关&#xff0c;读研读博…

航测三维实景:创造更加真实和精细的虚拟环境

航测三维实景&#xff1a;创造更加真实和精细的虚拟环境 航测三维实景技术是一项以航空摄影测量为基础&#xff0c;结合计算机图像处理和显示技术的高精度三维实景重建方法。它以其独特的视角和真实感十足的体验&#xff0c;已经广泛应用于城市规划、土地资源管理、自然资源调查…

大数据时代,怎样通过日志分析保护我们的数据!

在今天的大数据时代&#xff0c;大量的数据被生成和存储。对于IT行业来说&#xff0c;日志文件是宝贵的信息财富。 通过合理的日志分析和解读&#xff0c;可以帮助企业提高运维效率、加强安全防护、改进产品质量和优化用户体验&#xff0c;本文将深入探讨日志分析在IT中的重要性…

基于R语言平台Biomod2模型的物种分布建模与可视化分析

!](https://img-blog.csdnimg.cn/84e1cc8c7f9b4b6ab60903ffa17d82f0.jpeg#pic_center)

设计模式-状态模式-笔记

状态模式State 在组件构建过程中&#xff0c;某些对象的状态经常面临变化&#xff0c;如何对这些变化进行有效的管理&#xff1f;同时又维持高层模块的稳定&#xff1f;“状态变化”模式为这一问题提供了一种解决方案。 经典模式&#xff1a;State、Memento 动机&#xff08…

【飞控调试】DJIF450机架+Pixhawk6c mini+v1.13.3固件+好盈Platinium 40A电调无人机调试

1 背景 由于使用了一种新的航电设备组合&#xff0c;在调试无人机起飞的时候遇到了之前没有遇到的问题。之前用的飞控&#xff08;Pixhawk 6c&#xff09;和电调&#xff08;Hobbywing X-Rotor 40A&#xff09;&#xff0c;在QGC里按默认参数配置来基本就能平稳飞行&#xff0…

SpringBoot——日志及原理

优质博文&#xff1a;IT-BLOG-CN 一、SpringBoot日志 选用 SLF4j&#xff08;接口&#xff09;和 logback&#xff08;实现类&#xff09;&#xff0c;除了上述日志框架&#xff0c;市场上还存在 JUL(java.util.logging)、JCL(Apache Commons Logging)、Log4j、Log4j2、SLF4j…

2024中国人民大学计算机考研分析

24计算机考研|上岸指南 中国人民大学 中国人民大学计算机考研招生学院是信息学院。目前均已出拟录取名单。 中国人民大学在1978年创立了经济信息管理系&#xff0c;它是国内最早建立的将数学与信息技术在经济管理领域应用为特色的系科。1986年&#xff0c;在原系计算站的基础…

js-WebApi笔记之BOM

目录 window对象 定时器-延迟函数 location对象 navigator对象 histroy对象 本地存储 localStorage sessionStorage localStorage 存储复杂数据类型 window对象 BOM (Browser Object Model ) 是浏览器对象模型 window对象是一个全局对象&#xff0c;也可以说是JavaScr…

基于ResNet框架的CNN

数据准备 DATA_URL http://download.tensorflow.org/example_images/flower_photos.tgz 一、训练集和验证集的划分 #spile_data.pyimport os from shutil import copy import randomdef mkfile(file):if not os.path.exists(file):os.makedirs(file)file flower_data/flower…

11.20 知识总结(choices参数、MVC和MTV的模式、Django与Ajax技术)

一、 choices参数的使用 1.1 作用 针对某个可以列举完全的可能性字段&#xff0c;我们应该如何存储 .只要某个字段的可能性是可以列举完全的&#xff0c;那么一般情况下都会采用choices参数 1.2 应用场景 应用场景&#xff1a; 学历&#xff1a; 小学 初中 高中 本科 硕士…

第八部分:JSP

目录 JSP概述 8.1&#xff1a;什么是JSP&#xff0c;它有什么作用&#xff1f; 8.2&#xff1a;JSP的本质是什么&#xff1f; 8.3&#xff1a;JSP的三种语法 8.3.1&#xff1a;jsp头部的page指令 8.3.2&#xff1a;jsp中的常用脚本 ①声明脚本&#xff08;极少使用&#xf…

打不开github网页解决方法

问题&#xff1a; 1、composer更新包总是失败 2、github打不开&#xff0c;访问不了 解决方法&#xff1a;下载一个Watt Toolkit工具&#xff0c;勾选上&#xff0c;一键加速就可以打开了。 下载步骤&#xff1a; 1、打开网址&#xff1a; Watt Toolkit 2、点击【下载wind…