企业级监控项目Skywalking详细介绍,来看看呀

news2024/10/5 13:48:05

一. Skywalking概述

一个优秀的项目,除了具有高拓展的架构、高性能的方案、高质量的代码之外,还应该在上线后具备多角度的监控功能。现在企业中的监控服务也有很多,Skywalking除了提供多维度、多粒度的监控之外,也提供了良好的图形化界面以及性能剖析、服务报警等多种功能,备受很多企业的青睐。因此侯哥今天给大家通过一篇文章,来详细地给大家介绍Skywalking。

1.1 什么是Skywalking?

Skywalking是一款分布式的系统 性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking是一款 观察性的分析平台和应用性能管理系统,提供了 分布式追踪、性能指标分析、应用服务依赖分析、可视化一体化等解决方案。

1.2 官网地址

https://skywalking.apache.org/

1.3 Skywalking功能特点

Skywalking功能非常丰富,侯哥简单地给大家总结一下。

监控手段丰富
多语言自动探针
优秀的可视化方案
分布式链路跟踪和上下文传播
数据库访问指标
告警

1.4 Skywalking架构图

这是官网提供的Skywalking架构图,可以分成几个部分,简单来说,可以分成oapwebappagent三部分:

oap是skywalking最核心的部分,主要用于汇总数据、存储数据、提供对外的相关接口;
webapp主要提供了ui界面,并且从oap获取数据并且展示(通常和oap部署在服务端,相当于skywalking服务的后台监控管理程序);
agent是探针,部署在需要收集数据的应用服务器上,并将数据同步到Skywalking平台。

二. Skywalking的安装与使用

2.1 Skywalking服务端安装步骤

2.1.1 前置环境

首先需要安装JDK,并确保以下端口可用:

11800:探针和Skywalking通讯的gRPC端口
12800:UI视图程序和Skywalking通讯的HTTP端口
8080:可视化视图UI服务的启动端口

2.1.2 官网下载SkyWalking包

2.1.3 上传到Linux服务器并解压

#解压skywalking
tar -zxf apache-skywalking-apm-8.9.1.tar.gz
#修改解压后的文件夹
mv apache-skywalking-apm-8.9.1 skywalking
#进入skywalking文件夹
cd skywalking

2.1.4 直接启动Skywalking服务(默认单机模式)

bin/startup.sh
#运行结果
SkyWalking OAP started successfully!
SkyWalking Web Application started successfully!
#查看运行结果
JPS
#结果
11569 skywalking-webapp.jar
11668 Jps
11549 OAPServerStartUp

2.1.5 访问Skywalking管理端页面

http://ip:8080

2.2 Skywalking服务端Docker安装

准备docker-compose文件

version: "3.1"
services:  
  skywalking-oap:
    image: apache/skywalking-oap-server:8.9.1
    container_name: skywalking-oap
    restart: always
    volumes:
      - ./skywalking/alarm-settings.yml:/skywalking/config/alarm-settings.yml
      - ./skywalking/application.yml:/skywalking/config/application.yml
      - ./skywalking/service-apdex-threshold.yml:/skywalking/config/service-apdex-threshold.yml
      - ./skywalking/libs:/skywalking/ext-libs
    environment:
      - TZ=Asia/Shanghai
      - JAVA_OPTS=-Xms2048m -Xmx2048m
    ports:
      - 11800:11800
      - 12800:12800
  skywalking-ui:
    image: apache/skywalking-ui:8.9.1
    container_name: skywalking-ui
    restart: always
    ports:
      - 8080:8080
    environment:
      - SW_OAP_ADDRESS=http://skywalking-oap:12800

2.3 微服务整合Skywalking

2.3.1 下载java-agent(Java探针)

2.3.2 将探针解压,放入工程中(或任意位置都可以)

2.3.3 修改agent配置文件

2.3.4 修改微服务的启动VM option

-javaagent:./agent/skywalking-agent.jar
-Dskywalking.agent.service_name=qphone-student

三. Java Agent配置

3.1 Java Agent配置属性详解

属性名

描述

默认值

agent.namespace

命名空间,用于隔离跨进程传播的header。如果进行了配置,header将为HeaderName:Namespace.

未设置

agent.service_name

在SkyWalking UI中展示的服务名。5.x版本对应Application,6.x版本对应Service。 建议:为每个服务设置个唯一的名字,服务的多个服务实例为同样的服务名

Your_ApplicationName

agent.sample_n_per_3_secs

负数或0表示不采样,默认不采样。SAMPLE_N_PER_3_SECS表示每3秒采样N条。

未设置

agent.authentication

鉴权是否开启取决于后端的配置,可查看application.yml的详细描述。对于大多数的场景,需要后端对鉴权进行扩展。目前仅实现了基本的鉴权功能。

未设置

agent.span_limit_per_segment

单个segment中的span的最大个数。通过这个配置项,Skywalking可评估应用程序内存使用量。

300

agent.ignore_suffix

如果这个集合中包含了第一个span的操作名,这个segment将会被忽略掉。

未设置

agent.is_open_debugging_class

如果为true,skywalking会将所有经Instrument转换过的类文件保存到/debugging文件夹下。Skywalking团队会要求你提供这些类文件以解决兼容性问题。

未设置

agent.active_v2_header

是否默认使用v2版本的header。

TRUE

agent.instance_uuid

实例id。skywalking会将实例id相同的看做一个实例。如果为空,skywalking agent会生成一个32位的uuid。

“”

agent.instance_properties[key]=value

添加服务实例的定制属性。

未设置

agent.cause_exception_depth

agent记录的异常时,代理进入的深度

5

agent.active_v1_header

是否默认使用v1版本的header。

FALSE

agent.cool_down_threshold

收到reset命令后,代理应等待多久(以分钟为单位)才能重新注册到OAP服务器。

10

agent.force_reconnection_period

根据grpc_channel_check_interval强制重新连接grpc。

1

agent.operation_name_threshold

operationName最大长度,不建议将此值设置为> 500。

500

collector.grpc_channel_check_interval

检查grpc的channel状态的时间间隔。

30

collector.app_and_service_register_check_interval

检查应用和服务的注册状态的时间间隔。

3

collector.backend_service

接收skywalking trace数据的后端地址

127.0.0.1:11800

collector.grpc_upstream_timeout

grpc客户端向上游发送数据时的超时时间,单位秒。

30 秒

logging.level

日志级别。默认为debug。

DEBUG

logging.file_name

日志文件名

skywalking-api.log

logging.output

日志输出,默认FILE。CONSOLE表示输出到stdout。

FILE

logging.dir

日志目录。默认为空串,表示使用"system.out"输出日志。

“”

logging.pattern

日志记录格式。所有转换说明符: %level 表示日志级别。 %timestamp 表示现在的时间,格式yyyy-MM-dd HH:mm:ss:SSS。 %thread 表示当前线程的名称。 %msg 表示消息。 %class 表示TargetClass的SimpleName。 %throwable 表示异常。 * %agent_name 表示agent.service_name

%level %timestamp %thread %class : %msg %throwable

logging.max_file_size

日志文件的最大大小。当日志文件大小超过这个数,归档当前的日志文件,将日志写入到新文件。

30010241024

logging.max_history_files

最大历史记录日志文件。发生翻转时,如果日志文件超过此值,则最早的文件将被删除。默认情况下,负数或零表示关闭。

-1

jvm.buffer_size

收集JVM信息的buffer的大小。

60 * 10

buffer.channel_size

buffer的channel大小。

5

buffer.buffer_size

buffer的大小

300

dictionary.service_code_buffer_size

The buffer size of application codes and peer

10 * 10000

dictionary.endpoint_name_buffer_size

The buffer size of endpoint names and peer

1000 * 10000

plugin.peer_max_length

Peer最大描述限制

200

plugin.mongodb.trace_param

如果为true,记录所有访问MongoDB的参数信息。默认为false,表示仅记录操作名,不记录参数信息。

FALSE

plugin.mongodb.filter_length_limit

如果设为正数,WriteRequest.params 将被截断为该长度,否则将被完全保存,这可能会导致性能问题。

256

plugin.elasticsearch.trace_dsl

如果为true,记录所有访问ElasticSearch的DSL信息。默认为false。

FALSE

plugin.springmvc.use_qualified_name_as_endpoint_name

如果为true,endpoint的name为方法的全限定名,而不是请求的URL。默认为false。

FALSE

plugin.toolit.use_qualified_name_as_operation_name

如果为true,operation的name为方法的全限定名,而不是给定的operation name。默认为false。

FALSE

plugin.jdbc.trace_sql_parameters

如果设置为true,则将收集sql的参数(通常为java.sql.PreparedStatement)。

FALSE

lugin.jdbc.sql_parameters_max_length

parameters_max_length 如果设置为正数,db.sql.parameters 将被截断为该长度,否则将被完全保存,这可能会导致性能问题。

512

plugin.postgresql.trace_sql_parameters

如果设置为true,则将收集sql的参数(通常为java.sql.PreparedStatement)。

FALSE

plugin.postgresql.sql_parameters_max_length

如果设置为正数,db.sql.parameters 将被截断为该长度,否则将被完全保存,这可能会导致性能问题。

512

plugin.solrj.trace_statement

如果为true,则在Solr查询请求中跟踪所有查询参数(包括deleteByIds和deleteByQuery)

FALSE

plugin.solrj.trace_ops_params

如果为true,则跟踪Solr请求中的所有操作参数

FALSE

plugin.light4j.trace_handler_chain

如果为true,请跟踪Light4J的请求的所有中间件/业务handler。

FALSE

plugin.opgroup.*

支持操作名称自定义不同插件中的组的规则。详见 支持组规则的插件

未设置

plugin.springtransaction.simplify_transaction_definition_name

设为true,则简化事务定义名称。

FALSE

plugin.jdkthreading.threading_class_prefixes

将对名称与任意一个 THREADING_CLASS_PREFIXES (多个使用 , 分隔)匹配的线程化类( java.lang.Runnable 和 java.util.concurrent.Callable )及其子类进行 Instrument,请确保仅将窄前缀指定为您希望Instrument的前缀(安全考虑, java. 和 javax. 将被忽略)

未设置

示例:设置Skywalking采样率

配置属性: agent.sample_n_per_3_secs=${SW_AGENT_SAMPLE: -1}
-1 表示全部采样,改为大于0的数即可

示例:设置数据库采集SQL执行参数

配置属性: plugin.jdbc.trace_sql_parameters=${SW_JDBC_TRACE_SQL_PARAMETERS: false}
该属性设置为true即可,配套属性还有:
plugin.jdbc.sql_parameters_max_length=${SW_PLUGIN_JDBC_SQL_PARAMETERS_MAX_LENGTH:512}

3.2 Java Agent配置方式

3.2.1 直接修改配置文件

3.2.2 在服务VM 启动参数项中配置

-Dskywalking.配置名称=配置的值 //或者-javaagent:agent路径/skywalking-agent.jar=[配置名称]=[配置的值],[配置名称2]=[配置的值2]

3.2.3 系统环境变量

#例如这样的配置,表示会去读取SW_AGENT_NAME的环境变量,如果没有再去获取:后面的值agent.service_name=${SW_AGENT_NAME:Your_ApplicationName}

3.3 Java Agent相关插件介绍

相关插件介绍

四. Skywalking仪表盘

Skywalking最主要的功能就是APM,监控维度与指标都非常丰富,为了让大家能更好的掌握Skywalkig的使用,接下来侯哥就把Skywalking的每个指标都给大家进行详细地解释。

4.1 APM参数详解

APM(Application Performance Monitor) - 应用性能监视器
Global - 全局指标
Service - 当前服务指标
Instance - 当前服务实例指标
Endpoint - 端点(接口)指标

4.2 Database参数详解

4.3 什么是Apdex?

Apdex是衡量一个服务器性能的指标,这个值越高越好,满分为1。Apdex有三个指标:

正常:服务请求的响应时间 <= T
可容忍:T < 服务请求响应时间 <= 4T
慢调用:服务请求响应时间 > 4T
T是自定义的一个响应阈值,比如500ms

Apdex = (正常请求数 + 可容忍请求数 / 2)/ 请求总数。示例如下:

服务A定义T=200ms,在100个采样中,有20个请求小于200ms,有60个请求在200ms到800ms之间,有20个请求大于800ms。计算apdex = (20 + 60/2)/100 = 0.5。

4.4 Skywalking自定义T

#配置文件config/service-apdex-threshold.yml
# default threshold is 500ms
default: 500
# example:
# the threshold of service "tomcat" is 1s
# tomcat: 1000
# the threshold of service "springboot1" is 50ms
# springboot1: 50

五. Skywalking拓扑图

六. Skywalking追踪

6.1 追踪面板参数详解

6.2 在代码中获取当前业务请求的TraceId

6.2.1 添加依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-trace</artifactId>
    <version>8.9.0</version>
</dependency>

6.2.2 在代码上标记@Trace注解

@RequestMapping("/getById")
@Trace//在需要获取TraceId的代码上添加该注解
public R getById(Integer sId){
    .....
}

6.2.3 在代码中获取TraceId

...
//获取全局追踪Id
String traceId = TraceContext.traceId();   
...

6.3 Skywalking整合Log4j2在日志中打印TraceId

6.3.1 添加依赖

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>8.9.0</version>
</dependency>

6.3.2 在log4j2的配置文件中获得TraceId

通过 - [%traceId] - 标签可获取全局TraceId
示例:%date{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} [%traceId] - %msg%n

七. Skywalking性能剖析

性能剖析主要的工作就是对不同的端点进行采样,然后提供一个更加详细的分析结果。

7.1 使用示例

7.1.1 先随机在业务代码中设置一个睡眠时间,模拟慢请求

7.1.2 在Skywalking控制台创建监控任务

7.1.3 给相应的端点发送请求,然后控制台查看监控结果

注意:

一个服务在监控持续时间内只能设置一个端点监控任务
剖析端点的响应时间必须大于监控间隔时间,如果响应时间小于监控间隔时间,则无法进行采集

八. Skywalking日志采集(Log4j2版)

Skywalking支持微服务间运行日志上传到Skywalking端,进行日志相关管理,并且可以将日志和相关服务节点关联起来。

8.1 配置方式

8.1.1 微服务添加依赖(同Log4j2获取TraceId的依赖)

<dependency>
    <groupId>org.apache.skywalking</groupId>
    <artifactId>apm-toolkit-log4j-2.x</artifactId>
    <version>8.9.0</version>
</dependency>

8.1.2 配置Log4j2输出器

<appenders>
  ......  
    
  <!-- skywalking输出器 -->
  <GRPCLogClientAppender name="SkywalkingLog">
    <ThresholdFilter level="debug" onMatch="ACCEPT" onMismatch="DENY"/>
    <PatternLayout pattern="${LOG_PATTERN}"/>
  </GRPCLogClientAppender>
</appenders>
<loggers>
    <!-- 启用输出器 -->
    <root level="info">
      ......
      <appender-ref ref="SkywalkingLog"/>
    </root>
</loggers>

8.1.3 启动微服务,发送请求,查看Skywalking日志面板

九. Skywalking告警

Skywalking可以对指定参数设置阈值,当超过阈值时,就会触发告警,及时通知开发人员

9.1 告警配置方式

9.1.1 定义告警规则

Skywalking-OAP端 config/alarm-settings.yml
#配置告警规则
rule:
  #服务自带的告警规则
  ...
  #自定义告警规则
  #规则名称,必须全局唯一,并且以"_rule"结尾
  xxxxxx_rule:
    #告警的指标名称,具体值可以参考下图
    metrics-name: endpoint_sla
    #[可选] 指定告警的服务
    include-names:
      - serviceA
      - serviceB
    #[可选] 排除的服务将不触发告警  
    exclude-names:
      - serviceC
    #[可选] 匹配微服务的名称, 通过正则表达式  
    include-names-regex: instance\_\d+
    #阈值,对于不同的指标类型,可以设置不用类型的值,目前支持long, double or int  
    threshold: 9000  
    #操作符
    op: "<"
    #时间窗口长度,单位时间内,指标异常就会触发告警 (单位是分钟)
    period: 2
    #累计数量,指标符合告警条件达到累计数量后,才会触发告警
    count: 3
    #静默时间,当发生告警后,多长时间不再告警,默认和period值保持一致
    silence-period: 10
    #告警内容,触发告警时,显示的消息内容 {name} 表示告警的服务名称
    message: Successful rate of service {name} is lower than 90% in 2 minutes of last 10 minutes

9.1.2 重启Skywalking服务即可

9.2 动态配置告警

动态配置就是将相关配置信息,放入配置中心(比如nacos),然后修改nacos的配置,在无需重启skywalking服务的情况下达到刷新配置的目的

9.2.1 Skywalking支持动态配置的配置项

告警相关配置,会覆盖alarm-settings.yml配置内容
apdex阈值相关配置,会覆盖service-apdex-threshold.yml配置内容

9.2.2 基于nacos实现动态配置

1)安装nacos服务器

2)修改Skywalking配置文件 - config/application.yml

428 configuration:
429   selector: ${SW_CONFIGURATION:nacos} #该选项改为nacos
430   none:
.....
#配置好nacos的相关属性
467   nacos:
468     # Nacos Server Host
469     serverAddr: ${SW_CONFIG_NACOS_SERVER_ADDR:nacos}
470     # Nacos Server Port
471     port: ${SW_CONFIG_NACOS_SERVER_PORT:8848}
472     # Nacos Configuration Group
473     group: ${SW_CONFIG_NACOS_SERVER_GROUP:skywalking}
474     # Nacos Configuration namespace
475     namespace: ${SW_CONFIG_NACOS_SERVER_NAMESPACE:skywalking}
476     # Unit seconds, sync period. Default fetch every 60 seconds.
477     period: ${SW_CONFIG_NACOS_PERIOD:60}
478     # Nacos auth username
479     username: ${SW_CONFIG_NACOS_USERNAME:"nacos"}
480     password: ${SW_CONFIG_NACOS_PASSWORD:"nacos"}
481     # Nacos auth accessKey
482     accessKey: ${SW_CONFIG_NACOS_ACCESSKEY:""}
483     secretKey: ${SW_CONFIG_NACOS_SECRETKEY:""}

3)在nacos上创建配置信息

注意:配置的dataId必须为 - alarm.default.alarm-settings

9.3 告警通知

Skywalking并没有提供告警通知的功能(发短信、发邮件等方式),但是提供了一个webhook(网络钩子),开发者可以通过webhook自定义通知接口,然后再自己实现告警通知的方式

9.3.1 配置webhook

webhooks: - 通知接收地址

9.3.2 接收告警消息

自定义的webhook接口将接收到类似如下的消息,只需要解析并且按照自己的需求发送即可

[
 {
    "scopeId": 1,
    "scope": "SERVICE",
    "name": "qphone-gateway",
    "id0": "cXBob25lLWdhdGV3YXk\u003d.1",
    "id1": "",
    "ruleName": "service_sla_rule",
    "alarmMessage": "警告,服务qphone-gateway处于响应请求过慢!",
    "tags": [],
    "startTime": 1655046016465
 },
 ...... 
]

十. Skywalking数据持久化

Skywalking数据持久化的方式比较多,常见的有基于mysql和es的方式,这里我们选择 mysql的方式持久化数据

10.1 基于Mysql配置Skywalking数据持久化

10.1.1 修改配置文件config/application.yml

storage:
  selector: ${SW_STORAGE:mysql} #修改配置存储方式为mysql
...
  #配置mysql的相关属性
  mysql:
    properties:
      jdbcUrl: ${SW_JDBC_URL:"jdbc:mysql://mysql:3306/skywalking?useUnicode=true&characterEncoding=utf8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2b8&useSSL=true&allowMultiQueries=true&autoReconnect=true&nullCatalogMeansCurrent=true&nullCatalogMeansCurrent=true"}
      dataSource.user: ${SW_DATA_SOURCE_USER:root}
      dataSource.password: ${SW_DATA_SOURCE_PASSWORD:root}
      dataSource.cachePrepStmts: ${SW_DATA_SOURCE_CACHE_PREP_STMTS:true}
      dataSource.prepStmtCacheSize: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_SIZE:250}
      dataSource.prepStmtCacheSqlLimit: ${SW_DATA_SOURCE_PREP_STMT_CACHE_SQL_LIMIT:2048}
      dataSource.useServerPrepStmts: ${SW_DATA_SOURCE_USE_SERVER_PREP_STMTS:true}
    metadataQueryMaxSize: ${SW_STORAGE_MYSQL_QUERY_MAX_SIZE:5000}
    maxSizeOfArrayColumn: ${SW_STORAGE_MAX_SIZE_OF_ARRAY_COLUMN:20}
    numOfSearchableValuesPerTag: ${SW_STORAGE_NUM_OF_SEARCHABLE_VALUES_PER_TAG:2}
    maxSizeOfBatchSql: ${SW_STORAGE_MAX_SIZE_OF_BATCH_SQL:2000}
    asyncBatchPersistentPoolSize: ${SW_STORAGE_ASYNC_BATCH_PERSISTENT_POOL_SIZE:4}

10.1.2 提前在数据库中创建好skywalking库

create database skywalking;

10.1.3 在Skywalking-oap服务下放入mysql驱动包

10.1.4 重启skywalking服务,查看数据库是否自动创建相关表

十一. 结语

Skywalking是一款很好的APM服务,希望通过这篇使用指南,能让大家更好地掌握学习Skywalking的服务运用。大家记得一定要自己上手实操,才能真正的掌握Skywalking的魅力哦。

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

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

相关文章

Kotlin 元编程之 KSP 全面突破

什么是元编程 没想到吧&#xff0c;这世上除了元宇宙&#xff0c;还有元编程&#xff0c;如果没有接触过&#xff0c;可能会有点懵&#xff0c;不过没关系&#xff0c;简单的说就是用代码来生成代码。实现元编程的传统常见手段主要是使用 APT注解处理器 JavaPoet 组合拳&…

JAVA基础知识巩固训练

目录 1. 案例一&#xff1a;逢 7 跳过 2. 案例二&#xff1a;数组元素求和 3. 案例三&#xff1a;判断两个数组是否相同⭐ 4. 案例四&#xff1a;查找元素在数组中的索引 5. 案例五&#xff1a;数组元素反转 6. 案例六&#xff1a;评委打分 7. 案例七&#xff1a;随机产…

后端人眼中的Vue(五)

七、Vue生命周期 ​ Vue的生命周期指的是Vue实例在页面中创建到销毁整个过程。Vue提供了在各个生命周期的钩子&#xff0c;钩子也叫Vue生命周期函数。这些生命周期函数是伴随着Vue实例创建、销毁的过程中自动触发的&#xff08;不需要人为手动触发&#xff09;。Vue实例生命周期…

产业互联网:补齐互联网的「短板」,重启互联网的「进化」

尽管在互联网时代出现了诸多的乱象&#xff0c;但是&#xff0c;我们依然无法否认互联网时代给人们的生产和生活带来的影响和改变。即使如此&#xff0c;我们依然无法否认互联网本身其实是存在着诸多的问题和弊病的&#xff0c;这些问题和弊病所导致的一个最为直接的结果&#…

【opencv】二维面找角点/关键点 实现

every blog every motto: You can do more than you think. 0. 前言 二维面找角点/关键点 实现 1. 正文 1.1 前提 1.1.1 显示函数 def show(arr):plt.imshow(arr)plt.show()def cvshow(arr):cv2.namedWindow(a, 0)cv2.imshow(a, arr)cv2.waitKey(0)cv2.destroyAllWindows…

通关算法题之 ⌈链表⌋

链表 删除元素 203. 移除链表元素 给你一个链表的头节点 head 和一个整数 val &#xff0c;请你删除链表中所有满足 Node.val val 的节点&#xff0c;并返回 新的头节点 。 示例&#xff1a; 输入&#xff1a;head [1,2,6,3,4,5,6], val 6 输出&#xff1a;[1,2,3,4,5]c…

2022 IoTDB Summit:宝武智维徐少锋《Apache IoTDB 在宝武装备远程智能运维平台中的使用案例》...

12 月 3 日、4日&#xff0c;2022 Apache IoTDB 物联网生态大会在线上圆满落幕。大会上发布 Apache IoTDB 的分布式 1.0 版本&#xff0c;并分享 Apache IoTDB 实现的数据管理技术与物联网场景实践案例&#xff0c;深入探讨了 Apache IoTDB 与物联网企业如何共建活跃生态&#…

01【Vector CP】- 详解PN局部网络管理

Partial Networking概述 Partial Networking适用的ECU类型: 总线上依然有通信ECU关闭通信堆栈ECU要求降低功耗 Note:Partial Networking功能及其所有子功能是可选的,必须进行配置。为了控制此类ECU的关断和唤醒,CAN NM提供了一种额外的算法: NM PDU 消息中的用户数据部分…

java命名规范

Java总体命名规范1、项目名全部小写2、包名全部小写3、类名首字母大写&#xff0c;其余组成词首字母依次大写&#xff0c;驼峰命名4、变量名&#xff0c;方法名首字母小写&#xff0c;如果名称由多个单词组成&#xff0c;除首字母外的每个单词的首字母都要大写&#xff0c;保证…

企业数字化转型的关键一步,建立数据意识

数字化给社会带来的巨大的科技革命和产业革命&#xff0c;让数字经济成为新的高速增长的国民经济支柱&#xff0c;让数据变为第五大生产要素&#xff0c;发挥巨大价值&#xff0c;成为企业重要资产。不仅如此&#xff0c;在数字化的影响下&#xff0c;数字化转型成为了个人、机…

ue4.27空项目打包不卡ue5.1空项目打包运行卡的要命研究测试

知乎上有人提问 lumen是如何做到不卡顿的,我却不以为然,我的显卡虽然算不上好显卡,但是也不至于独立显卡一个空项目都玩不起吧,打个cf,玩腾讯模拟器和平精英吃鸡肯定还是会很流畅的. 一个空项目都卡,怎么能说是我电脑配置问题呢??? 再来看提示 image.pngimage.png反射设置的…

2023 过春年,烟花依然了无缘;这能难倒程序猿?一键三连过大年!

效果图镇楼 序 不知道是在什么时候&#xff0c;济南就开始都在传&#xff1a;“今年不再限制放烟花啦&#xff01;”。一些集市上也开始有了售卖烟花的摊子 大家都很兴奋&#xff0c;很多小伙伴开始购买烟花。特别是今年特别火的 “加特林 &#x1f631;” 但是大家兴奋劲还没…

<C++>红黑树

文章目录1. 红黑树的概念2. 红黑树的性质3. 红黑树节点定义4. 红黑树的插入操作5. 红黑树的验证6. 红黑树与AVL树的比较7. 红黑树模拟实现STL中的map与set1. 红黑树的概念 红黑树&#xff0c;是一种二叉搜索树&#xff0c;但在每个结点上增加一个存储位表示结点的颜色&#xf…

小程序管理还能这样做,让小程序管理更高效

说起小程序&#xff0c;作为开发者或者企业用户不得不面临一个问题就是&#xff0c;需要小程序承载的业务越来越多的时候&#xff0c;小程序的数量也呈现增长&#xff0c;随之而来的就是小程序开发、维护等一系列管理中会出现的问题。 包括到小程序的代码包管理、小程序上下架…

Toolwtech Graphics3D.NET 2.0.x专业版Crack

您是否正在寻找一种易于使用、功能强大且 100% 托管的 .NET 组件来快速开发 3D 图形或 3D 数据可视化应用程序&#xff1f;请尝试 Graphics3D.NET。使用 Graphics3D.NET&#xff0c;您可以在几分钟内开发出专业的 3D 可视化应用程序。 Graphics3D.NET 特点&#xff1a; * 100% …

点亮 LED

1.在 Linux 系统下&#xff0c;一切皆文件&#xff01;应用层如何操控底层硬件&#xff0c;同样也是通过文件 I/O 的方式来实现。设备文件通常在/dev/目录下&#xff0c;我们也把/dev 目录下的文件称为设备节点。设备节点并不是操控硬件设备的唯一途径&#xff0c;除此之外&…

Vue模板语法(二)

Vue条件语句 1、v-if、v-else、v-else-if v-if、v-else、v-else-if用于根据条件来渲染某一块的内容&#xff1a; 这些内容只有在条件为true时&#xff0c;才会被渲染出来&#xff1b;这三个指令与JavaScript的条件语句if、else、else if类似&#xff1b; v-if的渲染原理&a…

单片机开发---ESP32-S3模块上手

背景介绍 想起来之前做的半成品单片机游戏机&#xff0c;又想继续做一个&#xff0c;不过之前那个单片机驱动屏幕速率太低&#xff0c;已经无法改进了。所以这次斥巨资购买了一款顶配的ESP32S开发板&#xff0c;做个简单的游戏机&#xff0c;没问题。 完整介绍链接 这花花绿绿…

通过logstash将Redis数据写入ElasticSearch

点击上方蓝字关注我使用logstash将Redis中数据自动同步至ES中1. 部署Redis上传编译好的Redis二级制安装包&#xff0c;使用redis用户启动redis即可具体编译安装过程可参考https://mp.weixin.qq.com/s/RaWy0sqRxcAti1qbv-GbZQ2. 部署logstash下载二进制安装包wget https://ar…

HTTP FLV交互流程及实例解析

HTTP FLV交互流程及实例解析 文章目录HTTP FLV交互流程及实例解析HTTP FLV传输方式HTTP FLV 抓包分析结束语HTTP FLV传输方式 前文已经介绍过&#xff0c;HTTP FLV利用了一个HTTP的协议约定&#xff0c;http 的content-length头字段如果不存在&#xff0c;则客户端就会一直接收…