科普文:微服务之分布式链路追踪SkyWalking单点服务搭建

1. 概述

1.1 概念

SkyWalking 是什么?

SkyWalking 极简入门 | Apache SkyWalking

FROM Apache SkyWalking

分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。

提供分布式追踪、服务网格遥测分析、度量聚合和可视化一体化解决方案。

1.2 功能列表

SkyWalking 有哪些功能?

FROM Apache SkyWalking

  • 多种监控手段。可以通过语言探针和 service mesh 获得监控是数据。
  • 多个语言自动探针。包括 Java,.NET Core 和 Node.JS。
  • 轻量高效。无需大数据平台,和大量的服务器资源。
  • 模块化。UI、存储、集群管理都有多种机制可选。
  • 支持告警。
  • 优秀的可视化解决方案。

1.3 整体架构

SkyWalking 整体架构如何?

FROM Apache SkyWalking

架构图

整个架构,分成上、下、左、右四部分:

考虑到让描述更简单,我们舍弃掉 Metric 指标相关,而着重在 Tracing 链路相关功能。

  • 上部分 Agent :负责从应用中,收集链路信息,发送给 SkyWalking OAP 服务器。目前支持 SkyWalking、Zikpin、Jaeger 等提供的 Tracing 数据信息。而我们目前采用的是,SkyWalking Agent 收集 SkyWalking Tracing 数据,传递给服务器。
  • 下部分 SkyWalking OAP :负责接收 Agent 发送的 Tracing 数据信息,然后进行分析(Analysis Core) ,存储到外部存储器( Storage ),最终提供查询( Query )功能。
  • 右部分 Storage :Tracing 数据存储。目前支持 ES、MySQL、Sharding Sphere、TiDB、H2 多种存储器。而我们目前采用的是 ES ,主要考虑是 SkyWalking 开发团队自己的生产环境采用 ES 为主。
  • 左部分 SkyWalking UI :负责提供控台,查看链路等等。

1.4 官方文档

在 skywalking/docs at master · apache/skywalking · GitHub 地址下,提供了 SkyWalking 的英文文档。

考虑到大多数胖友的英语水平和艿艿不相伯仲,再加上胖友一开始对 SkyWalking 比较陌生,所以比较推荐先阅读 GitHub - SkyAPM/document-cn-translation-of-skywalking: [已过期,请使用官网AI文档] The CN translation version of Apache SkyWalking document 地址,提供了 SkyWalking 的中文文档。

考虑到胖友使用 SkyWalking 的目的,是实现分布式链路追踪的功能,所以最好去了解下相关的知识。这里推荐阅读两篇文章:

  • 《OpenTracing 官方标准 —— 中文版》
  • Google 论文 《Dapper,大规模分布式系统的跟踪系统》

2. 搭建 SkyWalking 单机环境

考虑到让胖友更快的入门,我们来搭建一个 SkyWalking 单机环境,步骤如下:

SkyWalking 单机环境

  • 第一步,搭建一个 Elasticsearch 服务。
  • 第二步,下载 SkyWalking 软件包。
  • 第三步,搭建一个 SkyWalking OAP 服务。
  • 第四步,启动一个 Spring Boot 应用,并配置 SkyWalking Agent。
  • 第五步,搭建一个 SkyWalking UI 服务。

仅仅五步,按照艿艿标题党的性格,应该给本文取个《10 分钟快速搭建 SkyWalking 服务》标题才对,哈哈哈。

2.1 Elasticsearch 搭建

FROM Elasticsearch:官方分布式搜索和分析引擎 | Elastic

Elasticsearch 是一个分布式、RESTful 风格的搜索和数据分析引擎,能够解决不断涌现出的各种用例。 作为 Elastic Stack 的核心,它集中存储您的数据,帮助您发现意料之中以及意料之外的情况。

参考《Elasticsearch 极简入门》的「1. 单机部署」小节,搭建一个 Elasticsearch 单机服务。

不过要注意,本文使用的是 Elasticsearch 7.5.1 版本。因为 SkyWalking 6.6.0 版本,增加了对 Elasticsearch 7.X 版本的支持。当然,如果胖友使用 Elasticsearch 6.X 版本也是可以的。

2.2 下载 SkyWalking 软件包

对于 SkyWalking 的软件包,有两种方式获取:

  • 手动编译
  • 官方包

一般情况下,我们建议使用官方包。手动编译,更多是尝鲜或者等着急修复的 BUG 的版本。

2.2.1 官方包

在 Downloads | Apache SkyWalking 下,我们下载操作系统对应的发布版。

这里,我们选择 Binary Distribution for ElasticSearch 7 (Linux) 版本,因为艿艿是 Mac 环境,再加上想使用 Elasticsearch 7.X 版本作为存储。如果胖友想用 Elasticsearch 6.X 版本作为存储,记得下载 Binary Distribution (Linux) 版本。

① 下载

# 创建目录
$ mkdir -p /Users/yunai/skywalking
$ cd /Users/yunai/skywalking# 下载
$ wget http://mirror.bit.edu.cn/apache/skywalking/6.6.0/apache-skywalking-apm-es7-6.6.0.tar.gz

② 解压

# 解压
$ tar -zxvf apache-skywalking-apm-es7-6.6.0.tar.gz
$ cd  apache-skywalking-apm-bin-es7$ ls -ls4 drwxr-xr-x 8 root root  4096 Sep  9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 bin # 执行脚本4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep  9 14:32 LICENSE4 drwxr-xr-x 3 root root  4096 Sep  9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep  9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep  9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root  1978 Sep  9 14:32 README.txt4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 webapp # SkyWalking UI

2.2.2 手动编译

友情提示:如果胖友没有编译 SkyWalking 源码的诉求,可以跳过本小节。

参考 How to build project 文章。

需要前置安装如下:

  • GIT
  • JDK 8+
  • Maven

① 克隆代码

$ git clone https://github.com/apache/skywalking.git
  • 因为网络问题,可能克隆会有点久。

② 初始化子模块

$ cd skywalking
$ git submodule init
$ git submodule update

③ 编译

$ ./mvnw clean package -DskipTests
  • 编译过程,如果机子比较差,花费时间会比较久。

④ 查看编译结果

$ cd apm-dist # 编译结果目录
$ cd target
$ tar -zxvf apache-skywalking-apm-bin.tar.gz # 解压 Linux 包
$ cd apache-skywalking-apm-bin
$ ls -ls4 drwxr-xr-x 8 root root  4096 Sep  9 15:09 agent # SkyWalking Agent4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 bin # 执行脚本4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 config # SkyWalking OAP Server 配置文件
32 -rwxr-xr-x 1 root root 28903 Sep  9 14:32 LICENSE4 drwxr-xr-x 3 root root  4096 Sep  9 15:44 licenses
32 -rwxr-xr-x 1 root root 31850 Sep  9 14:32 NOTICE
16 drwxr-xr-x 2 root root 16384 Sep  9 15:22 oap-libs # SkyWalking OAP Server4 -rw-r--r-- 1 root root  1978 Sep  9 14:32 README.txt4 drwxr-xr-x 2 root root  4096 Sep  9 15:44 webapp # SkyWalking UI

2.3 SkyWalking OAP 搭建

① 修改 OAP 配置文件

友情提示:如果配置文件,适合 SkyWalking 6.X 版本。

$ vi config/application.ymlstorage:elasticsearch7:nameSpace: ${SW_NAMESPACE:"elasticsearch"}clusterNodes: ${SW_STORAGE_ES_CLUSTER_NODES:localhost:9200}protocol: ${SW_STORAGE_ES_HTTP_PROTOCOL:"http"}
#    trustStorePath: ${SW_SW_STORAGE_ES_SSL_JKS_PATH:"../es_keystore.jks"}
#    trustStorePass: ${SW_SW_STORAGE_ES_SSL_JKS_PASS:""}user: ${SW_ES_USER:""}password: ${SW_ES_PASSWORD:""}indexShardsNumber: ${SW_STORAGE_ES_INDEX_SHARDS_NUMBER:2}indexReplicasNumber: ${SW_STORAGE_ES_INDEX_REPLICAS_NUMBER:0}# Those data TTL settings will override the same settings in core module.recordDataTTL: ${SW_STORAGE_ES_RECORD_DATA_TTL:7} # Unit is dayotherMetricsDataTTL: ${SW_STORAGE_ES_OTHER_METRIC_DATA_TTL:45} # Unit is daymonthMetricsDataTTL: ${SW_STORAGE_ES_MONTH_METRIC_DATA_TTL:18} # Unit is month# Batch process setting, refer to https://www.elastic.co/guide/en/elasticsearch/client/java-api/5.5/java-docs-bulk-processor.htmlbulkActions: ${SW_STORAGE_ES_BULK_ACTIONS:1000} # Execute the bulk every 1000 requestsflushInterval: ${SW_STORAGE_ES_FLUSH_INTERVAL:10} # flush the bulk every 10 seconds whatever the number of requestsconcurrentRequests: ${SW_STORAGE_ES_CONCURRENT_REQUESTS:2} # the number of concurrent requestsresultWindowMaxSize: ${SW_STORAGE_ES_QUERY_MAX_WINDOW_SIZE:10000}metadataQueryMaxSize: ${SW_STORAGE_ES_QUERY_MAX_SIZE:5000}segmentQueryMaxSize: ${SW_STORAGE_ES_QUERY_SEGMENT_SIZE:200}
#  h2:
#    driver: ${SW_STORAGE_H2_DRIVER:org.h2.jdbcx.JdbcDataSource}
#    url: ${SW_STORAGE_H2_URL:jdbc:h2:mem:skywalking-oap-db}
#    user: ${SW_STORAGE_H2_USER:sa}
#    metadataQueryMaxSize: ${SW_STORAGE_H2_QUERY_MAX_SIZE:5000}
  • storage.elasticsearch7 配置项,设置使用 Elasticsearch 7.X 版本作为存储器。
    • 这里,我们打开注释,并记得通过 nameSpace 设置 Elasticsearch 集群名。
  • storage.elasticsearch 配置项,设置使用 Elasticsearch 6.X 版本作为存储器。
    • 这里,我们无需做任何改动。
    • 如果胖友使用 Elasticsearch 6.X 版本作为存储器,记得设置这个配置项,而不是 storage.elasticsearch7 配置项。
  • storage.h2 配置项,设置使用 H2 作为存储器。
    • 这里,我们需要手动注释掉,因为 H2 是默认配置的存储器。

友情提示:如果配置文件,适合 SkyWalking 7.X 版本。

配置文件

  • 重点修改 storage 配置项,通过 storage.selector 配置项来设置具体使用的存储器。
  • storage.elasticsearch 配置项,设置使用 Elasticsearch 6.X 版本作为存储器。胖友可以主要修改 nameSpaceclusterNodes 两个配置项即可,设置使用的 Elasticsearch 的集群和命名空间。
  • storage.elasticsearch7 配置项,设置使用 Elasticsearch 7.X 版本作为存储器。
  • 还有 MySQL、H2、InfluxDB 等等存储器的配置可以选择,胖友自己根据需要去选择哈~

② 启动 SkyWalking OAP 服务

$ bin/oapService.shSkyWalking OAP started successfully!

是否真正启动成功,胖友打开 logs/skywalking-oap-server.log 日志文件,查看是否有错误日志。首次启动时,因为 SkyWalking OAP 会创建 Elasticsearch 的索引,所以会“疯狂”的打印日志。最终,我们看到如下日志,基本可以代表 SkyWalking OAP 服务启动成功:

友情提示:因为首次启动会创建 Elasticsearch 索引,所以可能会比较慢。

2020-01-02 18:22:53,635 - org.eclipse.jetty.server.Server - 444 [main] INFO  [] - Started @35249ms

2.4 SkyWalking UI 搭建

① 启动 SkyWalking UI 服务

bin/webappService.shSkyWalking Web Application started successfully!

是否真正启动成功,胖友打开 logs/logs/webapp.log 日志文件,查看是否有错误日志。最终,我们看到如下日志,基本可以代表 SkyWalking UI 服务启动成功:

2020-01-02 18:27:02.824  INFO 48250 --- [main] o.a.s.apm.webapp.ApplicationStartUp      : Started ApplicationStartUp in 7.774 seconds (JVM running for 8.316)

如果想要修改 SkyWalking UI 服务的参数,可以编辑 webapp/webapp.yml 配置文件。例如说:

  • server.port :SkyWalking UI 服务端口。
  • collector.ribbon.listOfServers :SkyWalking OAP 服务地址数组。因为 SkyWalking UI 界面的数据,是通过请求 SkyWalking OAP 服务来获得的。

② 访问 UI 界面:

浏览器打开 http://127.0.0.1:8080 。界面如下图:

SkyWalking UI

2.5 SkyWalking Agent

大多数情况下,我们在启动项目的 Shell 脚本上,通过 -javaagent 参数进行配置 SkyWalking Agent 。我们在 「2.3.1 Shell」 小节来看。

考虑到偶尔我们需要在 IDE 中,也希望使用 SkyWalking Agent ,所以我们在 「2.3.2 IDEA」 小节来看。

2.3.1 Shell

① Agent 软件包

我们需要将 apache-skywalking-apm-bin/agent 目录,拷贝到 Java 应用所在的服务器上。这样,Java 应用才可以配置使用该 SkyWalking Agent。我们来看看 Agent 目录下有哪些:

$ ls -lstotal 351760 drwxr-xr-x@  7 yunai  staff       224 Dec 24 14:20 activations0 drwxr-xr-x@  4 yunai  staff       128 Dec 24 14:21 bootstrap-plugins0 drwxr-xr-x@  3 yunai  staff        96 Dec 24 14:12 config # SkyWalking Agent 配置0 drwxr-xr-x@  3 yunai  staff        96 Jan  2 19:29 logs # SkyWalking Agent 日志0 drwxr-xr-x@ 13 yunai  staff       416 Dec 24 14:22 optional-plugins # 可选插件0 drwxr-xr-x@ 68 yunai  staff      2176 Dec 24 14:20 plugins # 插件
35176 -rw-r--r--@  1 yunai  staff  18006420 Dec 24 14:12 skywalking-agent.jar # SkyWalking Agent
  • 关于 SkyWalking Agent 提供的插件列表,可以看看《SkyWalking 文档 —— 插件支持列表》。

因为艿艿是在本机测试,所以无需拷贝,SkyWalking Agent 目录是 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/

考虑到方便胖友,艿艿这里提供了一个最简的 Spring Boot 应用 lab-39-demo-2.2.2.RELEASE.jar。对应 Github 仓库是 lab-39-demo。

② 配置 Java 启动脚本

# SkyWalking Agent 配置
export SW_AGENT_NAME=demo-application # 配置 Agent 名字。一般来说,我们直接使用 Spring Boot 项目的 `spring.application.name` 。
export SW_AGENT_COLLECTOR_BACKEND_SERVICES=127.0.0.1:11800 # 配置 Collector 地址。
export SW_AGENT_SPAN_LIMIT=2000 # 配置链路的最大 Span 数量。一般情况下,不需要配置,默认为 300 。主要考虑,有些新上 SkyWalking Agent 的项目,代码可能比较糟糕。
export JAVA_AGENT=-javaagent:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar # SkyWalking Agent jar 地址。# Jar 启动
java -jar $JAVA_AGENT -jar lab-39-demo-2.2.2.RELEASE.jar
  • 通过环境变量,进行配置。
  • 更多的变量,可以在 /work/programs/skywalking/apache-skywalking-apm-bin/agent/config/agent.config 查看。要注意,可能有些变量是被注释掉的,例如说 SW_AGENT_SPAN_LIMIT 对应的 agent.span_limit_per_segment 。

③ 执行脚本:

直接执行上述的 Shell 脚本,启动 Java 项目。在启动日志中,我们可以看到 SkyWalking Agent 被加载的日志。日志示例如下:

DEBUG 2020-01-02 19:29:29:400 main AgentPackagePath : The beacon class location is jar:file:/Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/skywalking-agent.jar!/org/apache/skywalking/apm/agent/core/boot/AgentPackagePath.class.
INFO 2020-01-02 19:29:29:402 main SnifferConfigInitializer : Config file found in /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/config/agent.config.

同时,也可以在 /Users/yunai/skywalking/apache-skywalking-apm-bin-es7/agent/agent/logs/skywalking-api.log 查看对应的 SkyWalking Agent 日志。日志示例如下:

DEBUG 2020-01-02 19:37:22:539 SkywalkingAgent-5-ServiceAndEndpointRegisterClient-0 ServiceAndEndpointRegisterClient : ServiceAndEndpointRegisterClient running, status:CONNECTED.
  • 这里,我们看到 status:CONNECTED ,表示 SkyWalking Agent 连接 SkyWalking OAP 服务成功。

④ 简单测试

完事,可以去 SkyWalking UI 查看是否链路收集成功。

1、首先,使用浏览器,访问下 http://127.0.0.1:8079/demo/echo 地址,请求下 Spring Boot 应用提供的 API。因为,我们要追踪下该链路。

2、然后,继续使用浏览器,打开 http://127.0.0.1:8080/ 地址,进入 SkyWalking UI 界面。如下图所示:

SkyWalking UI 界面 —— 仪表盘

这里,我们会看到 SkyWalking 中非常重要的三个概念:

  • 服务(Service) :表示对请求提供相同行为的一系列或一组工作负载。在使用 Agent 或 SDK 的时候,你可以定义服务的名字。如果不定义的话,SkyWalking 将会使用你在平台(例如说 Istio)上定义的名字。

    这里,我们可以看到 Spring Boot 应用的服务为 "demo-application",就是我们在环境变量 SW_AGENT_NAME 中所定义的。

  • 服务实例(Service Instance) :上述的一组工作负载中的每一个工作负载称为一个实例。就像 Kubernetes 中的 pods 一样, 服务实例未必就是操作系统上的一个进程。但当你在使用 Agent 的时候, 一个服务实例实际就是操作系统上的一个真实进程。

    这里,我们可以看到 Spring Boot 应用的服务为 {agent_name}-pid:{pid}@{hostname},由 Agent 自动生成。关于它,我们在「5.1 hostname」小节中,有进一步的讲解,胖友可以瞅瞅。

  • 端点(Endpoint) :对于特定服务所接收的请求路径, 如 HTTP 的 URI 路径和 gRPC 服务的类名 + 方法签名。

    这里,我们可以看到 Spring Boot 应用的一个端点,为 API 接口 /demo/echo

3、之后,点击「拓扑图」菜单,进入查看拓扑图的界面。如下图所示:

SkyWalking UI 界面 —— 拓扑图

4、再之后,点击「追踪」菜单,进入查看链路数据的界面。如下图所示:

SkyWalking UI 界面 —— 追踪

2.3.2 IDEA

我们统一使用 IDEA 作为开发 IDE ,所以忽略 Eclipse 的配置方式。

具体参考下图,比较简单:

IDEA 界面

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

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

相关文章

19.计算两点间的距离

Problem-2001 Problem Description 输入两点坐标(X1,Y1),(X2,Y2),计算并输出两点间的距离。 Input 输入数据有多组,每组占一行,由4个实数组成,分别表示x1,y1,x2,y2,数据之间用空格隔开。 Outpu…

Python实战——轻松实现动态网页爬虫(附详细源码)

大家好&#xff0c;我是东眠的鱼&#xff0c;专注原创&#xff0c;致力于用浅显易懂的语言分享爬虫、数据分析及可视化等干货&#xff0c;希望人人都能学到新知识。<文末附带精品籽料哦&#xff0c;也可以和博主一起学Python呀&#xff01;> 项目背景 有同学自学爬虫时…

Redis基础总结、持久化、主从复制、哨兵模式、内存淘汰策略、缓存

文章目录 Redis 基础Redis 是什么&#xff0c;有哪些特点为什么要使用 Redis 而不仅仅依赖 MySQLRedis 是单线程吗Redis 单线程为什么还这么快 Redis 数据类型和数据结构五种基本数据结构及应用场景其他数据类型Redis 底层数据结构 Redis 持久化数据不丢失的实现AOF 日志RDB 快…

go中的值传递和指针传递

文章目录 1、& 和 *2、空指针3、nil4、用值传递还是指针传递&#xff1f;5、补充 1、& 和 * &后跟一个变量名&#xff0c;得到的是这个变量的内存地址*int类型的变量&#xff0c;代表这个变量里存的值是int类型的变量的内存地址数据类型的指针类型&#xff0c;即在…

Spring Boot 参数校验 Validation 使用

概述 当我们想提供可靠的 API 接口&#xff0c;对参数的校验&#xff0c;以保证最终数据入库的正确性&#xff0c;是必不可少的活。前、后端校验都是保证参数的准确性的手段之一&#xff0c;前端校验并不安全&#xff0c;任何人都可以通过接口来调用我们的服务&#xff0c;就算…

【linux】【操作系统】内核之traps.c源码阅读

C 文件traps.c 是 Linux 内核的一部分&#xff0c;主要处理硬件陷阱和故障。文件中包含多个函数来处理不同类型的异常和错误。下面是详细的解析&#xff1a; 概览 目的&#xff1a;此文件负责处理各种硬件异常和故障。它包括了处理特定类型错误以及初始化异常处理器的函数。文…

前端的学习-CSS(弹性布局-flex)

一&#xff1a;什么是弹性布局-Flex flex 是 Flexible Box 的缩写&#xff0c;意为"弹性布局"&#xff0c;用来为盒状模型提供最大的灵活性。 语法&#xff1a; .box{display: flex; } .box{display: inline-flex; } 注意&#xff0c;设为 Flex 布局以后&#xff0…

SpringBoot整合Knife4j接口文档

1. 在项目入口模块pom文件导入依赖 <!-- knife4j&#xff08;API 文档工具&#xff09; --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-openapi2-spring-boot-starter</artifactId><version>${knife4j…

新款奔驰S450升级动态按摩座椅有哪些功能

奔驰 S450 升级前排动态按摩座椅通常具有以下功能&#xff1a; 1. 多种按摩模式和强度选择&#xff1a;通过精心设计的气囊和机械装置&#xff0c;能够模拟如揉捏、敲击、推拿等不同的按摩手法&#xff0c;为驾驶者和前排乘客舒缓肌肉疲劳&#xff0c;放松身心。 2. 广泛的按…

6.C基础_输入输出函数

putchar 功能&#xff1a;输出一个字符 函数声明&#xff1a; int putchar(int c);返回值&#xff1a;参数c的ASCLL码值 c&#xff1a;要输出的字符&#xff0c;可以为字符常量、字符变量或表达式 注意点&#xff1a;输出的结果不带\n getchar 功能&#xff1a;从键盘读…

SpringCache集成Redis

1. 添加config配置类 配置SpringCache 与 redis 的集成 配置类 2. 在service层中加注解 在Service层中增加注解 CacheConfig() 里面的CacheNmes是redis的nameSpace命名空间 方法上的Cacheable是key的值 请求结果 第一次会查数据库&#xff0c;后面相同的查询会直接走redis&am…

LBS 开发微课堂|Polyline绘制优化:效果更丰富,性能更佳!

为了让广大的开发者 更深入地了解 百度地图开放平台的技术能力 轻松掌握满满的技术干货 更加简单地接入 开放平台的服务 我们特别推出了 “位置服务&#xff08;LBS&#xff09;开发微课堂” 系列技术案例 第一期的主题是 《Polyline 绘制优化升级》 你还想了解哪些…

vulhub:Apache解析漏洞CVE-2017-15715

Apache HTTPD是一款HTTP服务器&#xff0c;它可以通过mod_php来运行PHP网页。其2.4.0~2.4.29版本中存在一个换行解析漏洞&#xff0c;在解析PHP时&#xff0c;1.php\x0A将被按照PHP后缀进行解析&#xff0c;导致绕过一些服务器的安全策略。 #启动靶机 cd /Vulnhub/vulhub-mast…

程序员的魔法石!

本文由 ChatMoney团队出品 AI自己写代码&#xff0c;这只是传说&#xff1f;还是摸鱼新指南&#xff1f; AI出现之前&#xff0c;从来都是老板或产品经理提需求&#xff0c;程序员熬夜加班吭哧吭哧写代码或者是从Github&#xff0c;Stackoverflow上controlc&#xff0c;control…

JavaFX布局-GridPane

JavaFX布局-GridPane 常用实行alignmenthgapvgappaddinggridLinesVisible 实现方式Java实现fxml实现 使用行和列来组织其子节点将节点放置在二维网格中的任何单元格&#xff0c;同时也可以设置跨越行、跨越列 常用实行 alignment 对齐方式&#xff0c;设置内容居中&#xff0…

数据库文件管理

数据库文件与普通文件区别: 1.普通文件对数据管理(增删改查)效率低 2.数据库对数据管理效率高,使用方便 常用数据库: 1.关系型数据库&#xff1a; 将复杂的数据结构简化为二维表格形式 大型:Oracle、DB2 中型:MySql、SQLServer 小型:Sqlite 2.非关…

第三十一天 chrome调试工具

打开调试工具 页面空白处右击 检查 或者F12 使用调试工具 ctrl滚轮改变代码大小 左边是html 右边是css css可以直接改动数值左右箭头或者直接输入 查看颜色 ctrl0 复原浏览器大小 点击元素右侧出现样式引入 没有的话 说明类名或者样式引用错误 这里的.new-left是存在的 如果类…

【Android Studio】UI 布局

文章目录 view布局LinearLayout view 在Android开发中&#xff0c;View是一个非常重要的概念&#xff0c;它是所有用户界面组件的基类。View类及其子类构成了Android应用中的用户界面。每个View都占用屏幕上的一个矩形区域&#xff0c;并可以响应用户输入&#xff08;如触摸、按…

鸿蒙(API 12 Beta2版)NDK开发【JSVM-API使用规范】

JSVM-API使用规范 生命周期管理 【规则】 合理使用OH_JSVM_OpenHandleScope和OH_JSVM_CloseHandleScope管理JSVM_Value的生命周期&#xff0c;做到生命周期最小化&#xff0c;避免发生内存泄漏问题。 每个JSVM_Value属于特定的HandleScope&#xff0c;HandleScope通过OH_JSV…

MySQL精简笔记

基础类型 bit&#xff0c;tinyint&#xff0c;smallint&#xff0c;int&#xff0c;bigintfload&#xff0c;double&#xff08;M&#xff1a;整数小数的位数&#xff0c;D&#xff1a;小数的位数&#xff09;decimal&#xff0c;numeric&#xff08;M&#xff0c;D)&#xff0…