简单的ELK部署学习

简单的ELK部署学习

1. 需求

我们公司现在使用的是ELK日志跟踪,在出现问题的时候,我们可以快速定为到问题,并且可以对日志进行分类检索,比如对服务名称,ip , 级别等信息进行分类检索。此文章为本人学习了解我们公司的整体服务架构整理的文档,方便日后学习与复习。部分内容本人以前博文已经有所提及,此处则不再详细赘述了,简单记录一下。

2. 整体架构

我本次建立的主要是进行测试学习使用,所以大部分服务都是单体架构,只有kafka以及zookeeper为集群服务。本次本地部署也参考了公司的架构,我简单的整理了一下公司的架构图,公司简略架构图如下所示:
在这里插入图片描述

我们测试环境系统,简单配置架构图如下,我们服务都使用单体项目:
在这里插入图片描述

3. 本地部署步骤

本地部署相对简单,仅仅是测试使用,具体部署的应用以及各种中间件整理如下:

  1. 准备运行的spring boot jar包[配置好日志格式],启动服务生成日志文件
  2. 准备服务需要启动运行的环境,包含redis以及mysql服务
  3. 安装kafka以及zookeeper集群启动
  4. 安装配置filebeat,采集日志文件,并且作为生产者生产日志消息
  5. 安装ES环境,测试我们使用单点服务即可
  6. 安装logstash,作为消费者消费kafka日志消息,并且过滤日志信息,发送到ES进行存储
  7. 配置kibana服务,进行可视化页面配置,提供可视化操作页面

我具体的服务器安装软件配置信息如下:

服务器ip配置hostname安装服务信息
192.168.138.1298c 16Gdocker1jdk1.8,kafka_2.12-2.4.1,apache-zookeeper-3.5.8,cerebro-0.9.4,elasticsearch-7.13.4,filebeat-6.6.0-linux-x86_64,logstash-6.6.0,spring boot jar
192.168.138.1302c 4Gdocker2jdk1.8,kafka_2.12-2.4.1,apache-zookeeper-3.5.8
192.168.138.1312c 4Gdocker3jdk1.8,kafka_2.12-2.4.1,apache-zookeeper-3.5.8
192.168.138.1332c 4Gdocker5jdk11, kibana-7.13.1-linux-x86_64

3.1 准备运行的jar

我们的jar包非常简单,就是一个标准的spring boot程序jar包,我使用了一个我的测试服务包,此处为包地址进行测试,里面已经配置好了log4j2的日志文件,具体配置信息可以参考我的另一篇日志配置博文。

日志配置文件内容信息参考人如下:

<?xml version="1.0" encoding="UTF-8"?>
<Configuration schema="Log4J-V2.0.xsd" monitorInterval="600"><Properties><!-- 日志生成目录 --><Property name="LOG_HOME">logs</Property><!-- 日志生系统名称 --><property name="FILE_NAME">docker-hello</property><!-- elk日志展示 --><property name="patternLayout">[%d{yyyy-MM-dd'T'HH:mm:ss.SSSZZ}] [%level{length=5}] [%traceId] [%logger] [${sys:hostName}] [${sys:ip}] [${sys:applicationName}] [%F,%L,%C,%M] [%m] ## '%ex'%n</property></Properties><Appenders><Console name="CONSOLE" target="SYSTEM_OUT"><PatternLayout pattern="${patternLayout}"/><!--控制台只输出level及其以上级别的信息(onMatch),其他的直接拒绝(onMismatch) --><ThresholdFilter level="info" onMatch="ACCEPT" onMismatch="DENY"/></Console><!-- 文件按照格式要求在固定目录下生成文件 "app-${FILE_NAME}.log" --><RollingRandomAccessFile name="appAppender" fileName="${LOG_HOME}/app-${FILE_NAME}.log" filePattern="${LOG_HOME}/app-${FILE_NAME}-%d{yyyy-MM-dd}-%i.log" ><PatternLayout pattern="${patternLayout}" /><Policies><!--根据当前filePattern配置"%d{yyyy-MM-dd}",每interval天滚动一次"%d{yyyy-MM-dd HH-mm}" 则为每interval分钟滚动一次--><TimeBasedTriggeringPolicy interval="1"/><!--日志文件大于500MB 滚动一次--><SizeBasedTriggeringPolicy size="500MB"/></Policies><!-- DefaultRolloverStrategy属性如不设置,则默认为最多同一文件夹下7个文件开始覆盖 --><DefaultRolloverStrategy max="20"/></RollingRandomAccessFile></Appenders><Loggers><!-- 业务相关 异步logger 不影响系统性能 --><AsyncLogger name="cn.git.*" level="info" includeLocation="true"><AppenderRef ref="appAppender"/></AsyncLogger><root level="info"><AppenderRef ref="CONSOLE"/><Appender-Ref ref="appAppender"/></root></Loggers>
</Configuration>

将服务上传到我的本地虚拟机docker1
在这里插入图片描述

3.2 准备spring boot项目需要环境

项目启动需要mysql以及redis信息,我本地使用docker进行了两个环境的简单部署,测试我就简单使用了单体环境即可,自己可以随意设置或者删除也可以,我的启动脚本如下:

# mysql 启动脚本
docker run --name mysql -e MYSQL_ROOT_PASSWORD=101022 -v /root/mysql/data:/var/lib/mysql -v /root/mysql/log:/var/log/mysql -v /root/mysql/conf:/etc/mysql/conf.d -dp 3306:3306 mysql:5.7# redis 启动脚本
docker run --name myredis --network host -v /root/redis/redis.conf:/etc/redis/redis.conf -v /root/redis/data:/data -dp 6379:6379 redis:latest redis-server /etc/redis/redis.conf

本地执行启动脚本发现服务已经起来了:
在这里插入图片描述
之后在启动spring boot jar包,服务启动脚本如下,执行后可以观察log日志,此日志为项目中的定时任务打印,包含业务日志以及error日志

# 启动脚本
nohup java -jar docker-hello-1.0-SNAPSHOT.jar >> app-server.log 2>&1 &# 观察日志脚本
tail -f app-server.log

在这里插入图片描述
服务生成日志path路径地址:
在这里插入图片描述

3.3 安装kafka以及zookeeper集群

kafka与zookeeper作为ELK的日志传输中间件,需要进行部署使用,具体的操作步骤可以参考此篇文档,此处便不多赘述了。

3.4 安装配置filebeat

首先我们需要有filebeat安装包,如果没有则去官网下载即可,我本地有一个远古包,就直接使用了,不去官网下载了。上传并且解压包,然后配置filebeat.yml配置文件

tar -zxvf filebeat-6.6.0-linux-x86_64.tar.gzcd filebeat-6.6.0-linux-x86_64
vim filebeat.yml

配置文件内容如下:

###################### Filebeat Configuration Example #########################
filebeat.prospectors:- input_type: logpaths:## app-服务名称.log, 为什么写死,防止发生轮转抓取历史数据,此路径位置也是我们jar包生成日志文件位置- /usr/local/soft/springboot_jar/logs/app-docker-hello.log#定义写入 ES 时的 _type 值document_type: "app-log"multiline:pattern: '^\s*(\d{4}|\d{2})\-(\d{2}|[a-zA-Z]{3})\-(\d{2}|\d{4})'   # 指定匹配的表达式(匹配以 2017-11-15 08:04:23:889 时间格式开头的字符串)pattern: '^\['                              # 指定匹配的表达式(匹配以 "{ 开头的字符串)negate: true                                # 是否匹配到match: after                                # 合并到上一行的末尾max_lines: 2000                             # 最大的行数timeout: 2s                                 # 如果在规定时间没有新的日志事件就不等待后面的日志fields:logbiz: collector   ## 自定义字段 区分业务类型logtopic: app-log-docker-hello-collector   ## 按服务划分用作kafka topic,会在logstash filter 过滤数据时候作为 判断参数 [fields][logtopic]evn: devlogging.to_files: true# 输出到控制台
output.console:pretty: trueenable: true# 启用 Kafka 输出模块
output.kafka:enabled: true							# 是否启用 Kafka 输出hosts: ["192.168.138.129:9092"]		# Kafka 服务器地址列表topic: '%{[fields.logtopic]}'			# 日志消息的主题名称,支持动态字段partition.hash:						# 分区哈希配置reachable_only: true				# 只在可用的分区上进行哈希计算compression: gzip						# 压缩算法,这里使用 gzip 压缩max_message_bytes: 1000000			# 单条消息的最大字节数required_acks: 1						# 生产者所需的确认数,1 表示只需要 leader 确认
logging.to_files: true					# 启用日志文件输出

注意:在测试的时候,我们有时候需要观察日志是否正确获取,那我们则使用output.console输出到控制台,kafka部分进行注释,后期使用则将控制台输出注释,只写kafka输出即可。

启动服务,执行启动脚本,使用如下命令查看服务是否启动以及观察日志信息

# 校验配置文件是否正确./filebeat -c filebeat.yml -configtest
# 启动服务
nohup ./filebeat -e -c filebeat.yml > filebeat.log &

在这里插入图片描述

3.5 Elasticsearch环境准备

es我们测试环境使用单点环境即可,也无需设置用户名以及密码信息,具体的步骤可以参考我之前Elastic学习的博文单点安装即可。

安装完毕后,我们访问 http://192.168.138.129:9200/ 地址,确定服务启动
在这里插入图片描述
我们使用 cerebro-0.9.4 连接ES,进行测试,输入页面进行登录
在这里插入图片描述
观察ES基本信息页面
在这里插入图片描述
也可以使用 REST 调用api 进行接口数据查询
在这里插入图片描述
在这里插入图片描述
调用参数如下:

{"query": {"query_string": {"fields": ["messageInfo"],"query": "定时任务执行开始"}}
}

除此之外,也可以使用elasticvue插件进行连接,方便查询ES文档数据信息
在这里插入图片描述

3.6 logstash安装配置

Logstash是一个开源数据收集引擎,具有实时管道功能。Logstash可以动态地将来自不同数据源的数据统一起来,并将数据标准化到你所选择的目的地。我本地有一个上古版本 logstash-6.6.0,就没有下载新版本的logstash了,推荐使用新版本进行测试,版本问题不好解决
在这里插入图片描述
他的主要功能如下:

  1. 集中、转换和存储你的数据:
    Logstash是一个开源的服务器端数据处理管道,可以同时从多个数据源获取数据,并对其进行转换,然后将其发送到你最喜欢的“存储”。(当然,我们最喜欢的是Elasticsearch)
  2. 输入:
    采集各种样式、大小和来源的数据,数据往往以各种各样的形式,或分散或集中地存在于很多系统中。Logstash 支持各种输入选择 ,可以在同一时间从众多常用来源捕捉事件。能够以连续的流式传输方式,轻松地从您的日志、指标、Web 应用、数据存储以及各种 AWS 服务采集数据。
  3. 输出处理后的数据:
    输出:选择你的存储,导出你的数据,尽管 Elasticsearch 是我们的首选输出方向,能够为我们的搜索和分析带来无限可能,但它并非唯一选择。 Logstash 提供众多输出选择,您可以将数据发送到您要指定的地方,并且能够灵活地解锁众多下游用例。

安装过程:

  • 上传解压包,配置对应配置文件

    tar -zxvf logstash-6.6.0.tar.gz
    cd /logstash-6.6.0/
    mkdir custom-config
    # 修改配置文件
    vim logstash-simple.conf
    

    配置文件具体内容如下:

    ## multiline 插件也可以用于其他类似的堆栈式信息,比如 linux 的内核日志。
    ## 可以作为kafka消费者角色
    input {kafka {## app-log-服务名称topics_pattern => "app-log-.*"bootstrap_servers => "192.168.138.129:9092"codec => jsonconsumer_threads => 1    ## 增加consumer的并行消费线程数,对应 partition数量decorate_events => true#auto_offset_rest => "latest"group_id => "app-log-group" ## 组id}
    }filter { ## 数据过滤## 时区转换ruby { ## 当前时间 定位到天 elk 时间是 东八区的 比北京时间慢8小时,此处转换回来。code => "event.set('index_time',event.timestamp.time.localtime.strftime('%Y.%m.%d'))"}if "app-log" in [fields][logtopic]{grok {## 表达式,对应的内容是在app中设置 log4j2.xml 中定义的 partten格式,notspace 没有空格, currentDateTime等字段为key,value 是打印的日志信息,名称是自定义的match => ["message", "\[%{NOTSPACE:currentDateTime}\] \[%{NOTSPACE:level}\] \[%{NOTSPACE:traceId}\] \[%{NOTSPACE:class}\] \[%{DATA:hostName}\] \[%{DATA:ip}\] \[%{DATA:applicationName}\] \[%{DATA:location}\] \[%{DATA:messageInfo}\] ## (\'\'|%{QUOTEDSTRING:throwable})"]}}
    }## 测试输出到控制台:
    #output {
    #  stdout { codec => rubydebug }
    #}## elasticsearch:
    output {elasticsearch {## es服务地址hosts => ["192.168.138.129:9200"]## 用户名密码,没有可以不填写## user => "elastic"## password => "123456"## 索引名,+ 号开头的,就会自动认为后面是时间格式:## javalog-app-service-2019.01.23## index => "app-log-%{[fields][logbiz]}-%{index_time}"index => "index-elk-topic-%{index_time}"## 通过嗅探机制进行es集群负载均衡发日志消息sniffing => true## logstash默认自带一个mapping模板,进行模板覆盖template_overwrite => true}
    }
  • 启动服务

    cd /usr/local/soft/logstash-6.6.0/bin
    ./logstash -f ../custom-config/logstash-simple.conf > logstash.log 2>&1 &
    
  • 查看服务运行状态

    ps -ef | grep logstash
    tail -f logstash.log
    

    注意:我们可以测试logstash是否好用,消费了kafka数据信息,那么我们暂时不需要向ES发送信息,那么我们可以放开output> stdout { codec => rubydebug },进行控制台打印测试,后期使用ES再注释即可。

    es运行时候的情况如下所示
    在这里插入图片描述

3.7 kibana服务安装

Kibana 是一个开源的数据分析和可视化平台,它是 Elastic Stack(包括 Elasticsearch、Logstash、Kibana 和 Beats)的一部分,主要用于对 Elasticsearch 中的数据进行搜索、查看、交互操作。

Kibana 的主要功能和用途包括:

  • 数据可视化:
    Kibana 提供了丰富的数据可视化选项,如柱状图、线图、饼图、地图等,帮助用户以图形化的方式理解数据。

  • 数据探索:
    Kibana 提供了强大的数据探索功能,用户可以使用 Elasticsearch 的查询语言进行数据查询,也可以通过 Kibana 的界面进行数据筛选和排序。

  • 仪表盘:
    用户可以将多个可视化组件组合在一起,创建交互式的仪表盘,用于实时监控数据。

  • 机器学习:
    Kibana 还集成了 Elasticsearch 的机器学习功能,可以用于异常检测、预测等任务。

  • 定制和扩展:
    Kibana 提供了丰富的 API 和插件系统,用户可以根据自己的需求定制和扩展 Kibana。

注意,kibana也是不能使用root用户进行部署的,所以我们需要新建一个用户进行操作,这里我们使用新建的es用户即可:

useradd -d /home/es -m es
passwd es
su - es

我本地没有kibana包,所以下载了一个包,推荐使用新版本,具体的下载地址。或者在服务器上使用wget进行下载,具体脚本如下:

wget https://artifacts.elastic.co/downloads/kibana/kibana-7.13.1-linux-x86_64.tar.gz
# 解压
tar -zxvf kibana-7.13.1-linux-x86_64.tar.gz

修改配置文件内容,具体内容修改如下:

cd /usr/local/soft/kibana-7.13.1-linux-x86_64/config
vim kibana.yml# 最后文件新增如下内容,我们使用的ES为单机节点,所以设置单机即可
server.name: ccms-kibana # Kibana 服务名称
server.port: 5601 # Kibana 服务监听的端口号
server.host: "0" # Kibana 服务监听的主机地址,"0" 表示监听所有可用的网络接口
elasticsearch.hosts: [ "http://192.168.138.129:9200" ] # Elasticsearch 集群的地址列表,Kibana 将连接到这些地址
monitoring.ui.container.elasticsearch.enabled: true # 是否启用 Kibana 监控界面中的 Elasticsearch 容器监控功能
i18n.locale: "zh-CN" # 设置 Kibana 界面的语言,这里设置为中文

服务启动命令为 :

nohup ./kibana > kibana.log 2>&1 &

服务启动后,我们可以使用 http://192.168.138.133:5601/ 访问kiban,可以进入到我们的访问首页,我们主要使用的是日志的查找以及部分统计功能,那么下面我们便开始配置日志的查找页面,首先点击我们的添加数据 进行索引添加

  • 添加ES对应索引信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 创建搜索字段信息
    在这里插入图片描述
    如果没有数据,我们可以将时间跨度选择的大一些,我们是测试环境,数据很少,所以选择了两周时间跨度
    在这里插入图片描述
    点击刷新按钮,发现数据已经出现了
    在这里插入图片描述
    出现之后,我们开始建立搜索字段信息,这样重复添加多个,主要有applicationName,level,ip, traceId等等,最终选定字段信息如下点击保存即可。
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 添加搜索过滤框信息
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    此处我们添加服务名称,日志级别以及ip地址信息,因为这几个是查询常用字段,我们特别进行筛选展示
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
  • 开始dashboard展示面板配置
    我们先新增一个条状图,用于展示随着时间日志数据量的变化趋势图信息
    在这里插入图片描述在这里插入图片描述
    设置水平轴为时间,垂直轴为日志数量取和,具体配置如下
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    将面板排班整理下,我们再新增一个服务占比的条形图,水平轴为日志数量,垂直轴为服务名称
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    我们整理下展示面板的排版然后我们再次新增一个扇形统计图,用于统计服务日志占比,切片依据applicationName服务名称,占比使用日志数量
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    在这里插入图片描述
    再次整理下我们的dashboard面板,最后我们再加入查询的信息展示信息即可,点击从库中添加按钮
    在这里插入图片描述
    在这里插入图片描述
    最后我们再整理下我们的dashboard布局信息,整理好之后我们便可以进行保存了
    在这里插入图片描述
  • 进行查询测试
    以上我们便配置好了我们的ELK kibana查询面板,我们使用dashboard进行查询测试,首先我们使用搜索框进行搜索,里面可以任意搜索全部定义字段信息
    在这里插入图片描述
    再使用服务名称搜索,发现只搜索出自定义服务名称日志信息
    在这里插入图片描述
    使用ip进行搜索
    在这里插入图片描述
    使用日志级别搜索
    在这里插入图片描述
    至此,我们的ELK简单部署就完成了,并且进行了简单的测试,对ELK整体的运行逻辑有了简单的了解。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

SpringBoot篇(自动装配原理)

目录 一、自动装配机制 1. 简介 2. 自动装配主要依靠三个核心的关键技术 3. run()方法加载启动类 4. 注解SpringBootApplication包含了多个注解 4.1 SpringBootConfiguration 4.2 ComponentScan 4.3 EnableAutoConfiguration 5. SpringBootApplication一共做了三件事 …

科学减肥:基础代谢减肥法

基础代谢减肥法是什么&#xff1f; 相信有很多人在减肥的路上都有做过努力&#xff0c;但是效果往往和努力不匹配。那是因为很多时候在细节上面没有做对&#xff0c;大家都是根据自己的理解去努力&#xff0c;而没有深度去了解过身体营养成分构成与吸收。 没科学了解过减肥的原…

华为云安装docker

docker_docker-compose_install: 代替官网的一键安装脚本&#xff0c;使用docker包进行离线安装 bash <(curl -sL https://raw.githubusercontent.com/1scripts/docker_docker-compose_install/main/quick_install.sh) 华为镜像&#xff1a; https://console.huaweicloud.…

中欧科学家论坛暨第六届人工智能与先进制造国际会议(AIAM 2024)在德国法兰克福成功举办,两百余名中外科学家共襄盛举

2024年10月20至21日&#xff0c;首届中欧科学家论坛在德国法兰克福的SAALBAU Titus Forum国际会议中心成功举行。中国驻法兰克福总领事馆伍鹏飞副总领事、德国兰斯巴赫-鲍姆巴赫市市长Michael Merz亲自出席并致辞。2004年诺贝尔化学奖得主Aaron Ciechanover教授和法国国家科学院…

Leetcode73. 矩阵置零

问题描述&#xff1a; 给定一个 m x n 的矩阵&#xff0c;如果一个元素为 0 &#xff0c;则将其所在行和列的所有元素都设为 0 。请使用 原地 算法。 示例 1&#xff1a; 输入&#xff1a;matrix [[1,1,1],[1,0,1],[1,1,1]] 输出&#xff1a;[[1,0,1],[0,0,0],[1,0,1]]示例 2…

Spring Boot中实现多数据源连接和切换的方案

❃博主首页 &#xff1a; 「码到三十五」 &#xff0c;同名公众号 :「码到三十五」&#xff0c;wx号 : 「liwu0213」 ☠博主专栏 &#xff1a; <mysql高手> <elasticsearch高手> <源码解读> <java核心> <面试攻关> ♝博主的话 &#xff1a…

服务器数据恢复—SAN环境中LUN映射错误导致文件系统一致性出错的数据恢复案例

服务器数据恢复环境&#xff1a; SAN光纤网络环境&#xff0c;存储由一组6块硬盘组建的RAID6阵列构成&#xff0c;划分为若干LUN&#xff0c;MAP到跑不同业务的SUN SOLARIS操作系统服务器上。 服务器故障&分析&#xff1a; 因为业务需要&#xff0c;用户在该光纤存储环境中…

java毕业设计之基于Bootstrap的常州地方旅游管理系统的设计与实现(springboot)

项目简介 基于Bootstrap的常州地方旅游管理系统的设计与实现有下功能&#xff1a; 基于Bootstrap的常州地方旅游管理系统的设计与实现的主要使用者分为用户功能模块和管理员功能模块两大部分&#xff0c;用户可查看景点信息、景点资讯等&#xff0c;注册登录后可进行景点订票…

Linux 练习三

1、建立用户组 shengcan&#xff0c;其id 为 2000 [rootlocalhost 桌面]# groupadd -g 2000 shengchan 2、建立用户组 caiwu&#xff0c;其id 为 2001 [rootlocalhost 桌面]# groupadd -g 2001 caiwu 3、建立用户组 jishu&#xff0c;其 id 为 2002 [rootlocalhost 桌面]#…

mfc140u.dll丢失怎么办? mfc140u.dll文件缺失的修复技巧

mfc140u.dll 是 Microsoft Foundation Classes (MFC) 库的一部分&#xff0c;它是 Visual Studio 2015 的组件之一&#xff0c;主要服务于使用 C 编写的 Windows 应用程序。这个动态链接库文件包含了 MFC 14.0 Unicode 版本的实现代码&#xff0c;为应用程序提供运行时支持。当…

在Ubuntu上安装TensorFlow与Keras

文章目录 1. 查看系统和Python版本信息1.1 查看Ubuntu版本信息1.2 查看Python版本信息 2. 安装pip2.1 下载get-pip.py2.2 运行get-pip.py2.3 查看pip版本 3. 安装Jupyter Notebook3.1 安装Jupyter Notebook3.2 运行Jupyter Notebook3.3 安装jupyter-core3.4 配置Jupyter Notebo…

反射简介及简单使用

1、反射的定义及作用 在运行状态中&#xff0c;对于任意一个类&#xff0c;都能够获取到这个类的所有属性和方法&#xff0c;对于任意一个对象&#xff0c;都能够调用它的任意一个方法和属性(包括私有的方法和属性)&#xff0c;这种动态获取类的信息以及动态调用对象的方法的功…

iOS 18.2 可让欧盟用户删除App Store、Safari、信息、相机和照片应用

升级到 iOS 18.2 之后&#xff0c;欧盟的 iPhone 用户可以完全删除一些核心应用程序&#xff0c;包括 App Store、Safari、信息、相机和 Photos 。苹果在 8 月份表示&#xff0c;计划对其在欧盟的数字市场法案合规性进行更多修改&#xff0c;其中一项更新包括欧盟用户删除系统应…

基于Spring Boot的信息学科平台系统开发与优化

6系统测试 6.1概念和意义 测试的定义&#xff1a;程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为&#xff1a; 目的&#xff1a;发现程序的错误&#xff1b; 任务&#xff1a;通过在计算机上执行程序&#xff0c;暴露程序中潜在的错误。 另一个…

Unity——如何自然采摘果实(进行中)

2023.3.9 思路&#xff1a;把苹果挂在树上&#xff0c;开始苹果没有重力&#xff0c;当用手摘下后&#xff0c;有重力&#xff0c; 此时树枝播放颤动动画。 目前&#xff1a;树枝使用网格碰撞器。 当与其他碰撞体接触并离开后&#xff0c;播放动画。 private void OnTrigge…

局部加权回归

2. 局部加权回归 (Loess / Lowess) 局部加权回归是一种非参数回归方法&#xff0c;可以自适应地拟合数据的弧度。它对每个点应用加权回归&#xff0c;以根据数据的局部趋势产生一条平滑曲线。这种方法特别适合捕捉数据中较小的曲率变化。 优点&#xff1a;能够很好地拟合微小…

湘潭市学生公交卡线上申领流程及一寸照片自拍方法

在湘潭市&#xff0c;学生公交卡的线上申领流程已经非常便捷&#xff0c;同时&#xff0c;为了满足学生公交卡申领时所需的一寸照片要求&#xff0c;本文将详细介绍整个申领流程以及如何使用手机自拍并制作线上申领学生公交卡所需的一寸照片电子版。 一、湘潭市学生公交卡线上申…

STM32HAL-最简单的长、短、多击按键框架(多按键)

概述 本文章使用最简单的写法实现长、短、多击按键框架,非常适合移植各类型单片机,特别是资源少的芯片上。接下来将在stm32单片机上实现,只需占用1个定时器作为时钟扫描按键即可。 一、开发环境 1、硬件平台 STM32F401CEU6 内部Flash : 512Kbytes,SARM …

研究了100个小绿书十万加之后,我们发现2024小绿书独家秘籍就是:在于“先抄后超,持续出摊,量大管饱”!

小绿书作为今年最大的红利&#xff0c;很多人已经吃到了螃蟹。看——&#xff1a; 今天我们总结了100个10万爆款&#xff0c;我们发现要在这个平台上脱颖而出&#xff0c;找到属于自己的方法尤为重要。在这里分享一个主题——小绿书的秘诀就是“先抄后超&#xff0c;持续出摊”…

鸿蒙原生应用开发及部署:首选华为云,开启HarmonyOS NEXT App新纪元

目录 前言 HarmonyOS NEXT&#xff1a;下一代操作系统的愿景 1、核心特性和优势 2、如何推动应用生态的发展 3、对开发者和用户的影响 华为云服务在鸿蒙原生应用开发中的作用 1、华为云ECS C系列实例 &#xff08;1&#xff09;全维度性能升级 &#xff08;2&#xff…