Nightingale 夜莺监控系统 - 监控篇(2)

news2024/11/17 22:19:49

Nightingale

Author:rab

官方文档:https://flashcat.cloud/docs/content/flashcat-monitor/categraf/3-configuration/


目录

    • 前言
    • 一、Categraf 配置文件
    • 二、Input 插件配置文件
      • 2.1 插件说明
      • 2.2 通用配置
        • 2.2.1 配置采集频率 interval
        • 2.2.2 配置采集实例 instances
        • 2.2.3 配置采集频率 interval_times
        • 2.2.4 配置采集标签 labels
      • 2.3 高级配置
        • 2.3.1 过滤指定采集指标
        • 2.3.2 采集指标添加前缀
        • 2.3.3 采集指标数据转换
        • 2.3.4 Categraf 自身指标采集
    • 三、常用插件
      • 3.1 基础指标采集
      • 3.2 mysql
      • 3.3 redis
      • 3.4 nginx
      • 3.5 net_response
      • 3.6 exec
    • 总结


前言

在部署篇中已经讲到了如何部署 n9e 的采集客户端(Categraf),这里不再重复,当然也不细说 Categraf 中的每个采集插件。这里只是告诉你,n9e 是如何监控(采集)数据的。

首先我们需要搞清楚 Categraf 的配置文件,以及一些常用采集的功能作用。Categraf 提供了一个采集框架,支持近百个指标采集插件,框架层面有一些通用的配置,比如 labels、interval 等,

我当前的 Categraf 版本为 0.3.45

一、Categraf 配置文件

Categraf 主配置文件放在conf目录下conf/config.toml

[global]
# 启动的时候是否在stdout中打印配置内容
print_configs = false

# 机器名,作为本机的唯一标识,会为时序数据自动附加一个 agent_hostname=$hostname 的标签
# hostname 配置如果为空,自动取本机的机器名
# hostname 配置如果不为空,就使用用户配置的内容作为hostname
# 用户配置的hostname字符串中,可以包含变量,目前支持两个变量,
# $hostname 和 $ip,如果字符串中出现这两个变量,就会自动替换
# $hostname 自动替换为本机机器名,$ip 自动替换为本机IP
# 建议大家使用 --test 做一下测试,看看输出的内容是否符合预期
# 这里配置的内容,在--test模式下,会显示为 agent_hostname=xxx 的标签
hostname = ""


# 是否忽略主机名的标签,如果设置为true,时序数据中就不会自动附加agent_hostname=$hostname 的标签
omit_hostname = false

# 时序数据的时间戳使用ms还是s,默认是ms,是因为remote write协议使用ms作为时间戳的单位
precision = "ms"

# 全局采集频率,15秒采集一次
interval = 15

# 全局附加标签,一行一个,这些写的标签会自动附到时序数据上
# [global.labels]
# region = "shanghai"
# env = "localhost"

[log]
# 默认的log输出,到标准输出(stdout) 
# 如果指定为文件, 则写入到指定的文件中
file_name = "stdout"

# options below will not be work when file_name is stdout or stderr
# 如果是写入文件,最大写入大小,单位是MB
max_size = 100
# max_age is the maximum number of days to retain old log files based on the timestamp encoded in their filename.
# 保留多少天的日志文件
max_age = 1
# max_backups is the maximum number of old log files to retain.
# 保留多少个日志文件
max_backups = 1
# local_time determines if the time used for formatting the timestamps in backup files is the computer's local time.
# 是否使用本地时间
local_time = true
# Compress determines if the rotated log files should be compressed using gzip.
# 是否将老文件压缩(gzip格式)
compress = false

# 发给后端的时序数据,会先被扔到 categraf 内存队列里,每个采集插件一个队列
# chan_size 定义了队列最大长度
# batch 是每次从队列中取多少条,发送给后端backend
[writer_opt]
# default: 2000
batch = 2000
# channel(as queue) size
chan_size = 10000

# 后端backend配置,在toml中 [[]] 表示数组,所以可以配置多个writer
# 每个writer可以有不同的url,不同的basic auth信息
[[writers]]
# 注意端口号
# v5版本端口是19000
# v6版本端口是17000
url = "http://127.0.0.1:19000/prometheus/v1/write"

# Basic auth username
basic_auth_user = ""

# Basic auth password
basic_auth_pass = ""

# timeout settings, unit: ms
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

# 是否开启push gateway
[http]
enable = false
address = ":9100"
print_access = false
run_mode = "release"

# 是否启用告警自愈agent
[ibex]
enable = false
## ibex flush interval
interval = "1000ms"
## n9e ibex server rpc address
servers = ["127.0.0.1:20090"]
## temp script dir
meta_dir = "./meta"

# 心跳上报(附带资源信息,对象列表中使用)给夜莺v6
# 如果是v5版本,这里不需要保留
[heartbeat]
enable = true

# report os version cpu.util mem.util metadata
url = "http://127.0.0.1:17000/v1/n9e/heartbeat"

# interval, unit: s
interval = 10

# Basic auth username
basic_auth_user = ""

# Basic auth password
basic_auth_pass = ""

## Optional headers
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

# timeout settings, unit: ms
timeout = 5000
dial_timeout = 2500
max_idle_conns_per_host = 100

以上是官方对 Categraf 主配置文件的解释,接下来就是对每个采集插件的配置了。

二、Input 插件配置文件

2.1 插件说明

插件的配置文件,放在conf目录,以input.打头conf/input.xxxx/xxx.toml

插件采集的指标默认都会添加一个前缀,比如 input.redis 采集的指标会以 redis_ 开头, input.mysql采集的指标会以mysql_开头。部分插件也支持自定义前缀,像 input.prometheus 和 input.exec 插件。

可以通过以下命令观察指标:

./categraf --test --inputs xxx 

# xxx:即你的插件名称
# 注意:这只是简单测试你这个插件是否能获取到数据,并不会上报n9e或n9e-edge

2.2 通用配置

2.2.1 配置采集频率 interval

每个插件的配置中,一开始通常都是 interval 配置,表示采集频率,如果这个配置注释掉了,就会复用主配置文件 config.toml 中的采集频率,这个配置如果配置成数字,单位就是秒,如果配置成字符串,就要给出单位,比如:

interval = 60
interval = "60s"
interval = "1m"

上面三种写法,都表示采集频率是1分钟,如果是使用字符串,可以使用的单位有:

  • 秒:s
  • 分钟:m
  • 小时:h
2.2.2 配置采集实例 instances

很多采集插件的配置中,都有 instances 配置段,用 [[]] 包住,说明是数组,即,可以出现多个 [[instances]] 配置段,比如 ping 监控的采集插件,想对4个IP做PING探测,可以按照下面的方式来配置:

[[instances]]
targets = [
    "www.baidu.com",
    "127.0.0.1",
    "10.4.5.6",
    "10.4.5.7"
]

也可以下面这样子配置:

[[instances]]
targets = [
    "www.baidu.com",
    "127.0.0.1"
]

[[instances]]
targets = [
    "10.4.5.6",
    "10.4.5.7"
]
2.2.3 配置采集频率 interval_times

instances 下面如果有 interval_times 配置,表示 interval 的倍数,比如ping监控,有些地址采集频率是 15 秒,有些可能想采集的别太频繁,比如 30 秒,那就可以把interval配置成 15,把不需要频繁采集的那些 instances 的 interval_times 配置成 2

2.2.4 配置采集标签 labels

instances 下面的 labels 和 config.toml 中的 global.labels 的作用类似,只是生效范围不同,都是为时序数据附加标签,instances 下面的 labels 是附到对应的实例上,global.labels 是附到所有时序数据上

2.3 高级配置

2.3.1 过滤指定采集指标

拿 http_response 这个插件来做个演示,http_response.toml 的配置样例如下:

[[instances]]
targets = [
     "https://flashcat.cloud"
]

采集的数据如下:

ulric@192 categraf % ./categraf --test --inputs http_response
...
16:27:08 http_response_cert_expire_timestamp agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 1688947199
16:27:08 http_response_response_code agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 200
16:27:08 http_response_response_time agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 0.227738958
16:27:08 http_response_result_code agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 0

假设,我想 drop 掉以 timestamp 结尾的指标,可以这么配置:

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_drop = ["*timestamp"]

重新测试,可以看到结果中少了 http_response_cert_expire_timestamp 这个指标了。metrics_drop 是个数组,每一项可以支持通配符。

那如果我只想保留以 timestamp 结尾的指标,忽略其他指标,应该怎么配置呢?样例如下:

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_pass = ["*timestamp"]

重新测试,你会发现,结果中只有 http_response_cert_expire_timestamp 这一条指标了,另外 3 条指标则都被忽略了。

2.3.2 采集指标添加前缀

所有针对 flashcat.cloud 的探测指标,统一增加 ulricqin_ 的前缀:

[[instances]]
targets = [
     "https://flashcat.cloud"
]

metrics_name_prefix = "ulricqin_"

测试结果如下:

16:37:39 ulricqin_http_response_response_time agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 0.203779417
16:37:39 ulricqin_http_response_result_code agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 0
16:37:39 ulricqin_http_response_cert_expire_timestamp agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 1688947199
16:37:39 ulricqin_http_response_response_code agent_hostname=192.168.10.121 method=GET target=https://flashcat.cloud 200
2.3.3 采集指标数据转换

比如某些插件采集的数据可能是可枚举的字符串,字符串无法写入 Prometheus 生态的时序库,此时要把这些可枚举的字符串转换为数字。

[[processor_enum]]
  metrics = ["*status"]
  [processor_enum.value_mappings]
    up = 1
    down = 0

这个意思是:针对 status 结尾的指标,采集到了两个值,一个是 up 一个是 down,都是字符串,然后通过 processor_enum 把字符串转换成了不同的数字。

2.3.4 Categraf 自身指标采集

即 Categraf 这个 Agent 服务自身的监控数据。

touch input.self_metrics/self_metrics.toml

# 需手动创建self_metrics.toml文件(默认没有)

测试:

./categraf --test --inputs self_metrics

image-20240112222841424

开启后,categraf 会将自身的资源指标,包括cpu 内存使用量、打开了多少文件描述符、使用了多少 groutine、threads、gc 信息等推送到 remote write backend。

三、常用插件

3.1 基础指标采集

所谓基础指标采集,就是下载并安装好 Categraf 后,就自动为我们采集 CPU、内存、磁盘、磁盘IO、网络等。

涉及到的采集插件为:

  • cpu:采集cpu指标,包括cpu用户态/系统态使用量、中断、软中断等指标
  • mem:采集内存指标,包括内存使用量、总量、cache、buffer、 available等指标
  • disk:采集各个磁盘分区的空间/inode的使用量情况
  • diskio:采集磁盘io指标,包括读写速率,读写次数,读写延迟等
  • net:采集网络指标,包括网卡流量,包数,错误数等

这些基础监控在实际测试/生产都是有用的,保持默认足以。

3.2 mysql

1、功能

MySQL 监控采集插件,核心原理就是连到 MySQL 实例,执行一些 sql,解析输出内容,整理为监控数据上报。

场景:多实例 MySQL、主从等情况时,采集 Agent 端配置多个 [[instances]] 即可,如:

[[instances]]
address = "10.2.3.6:3306"
username = "root"
password = "1234"
labels = { instance="n9e-10.2.3.6:3306" }

[[instances]]
address = "10.2.6.9:3306"
username = "root"
password = "1234"
labels = { instance="zbx-10.2.6.9:3306" }

[[instances]]
...

2、案例

vim input.mysql/mysql.toml
[[instances]]
address = "10.xxx.xx.17:3306"
username = "root"
password = "xxxxxxxx"

# # set tls=custom to enable tls
parameters = "tls=false"

extra_status_metrics = true
extra_innodb_metrics = false
gather_processlist_processes_by_state = false
gather_processlist_processes_by_user = false
gather_schema_size = true
gather_table_size = false
gather_system_table_size = false
gather_slave_status = true

# # timeout
timeout_seconds = 3

# # interval = global.interval * interval_times
interval_times = 1

# important! use global unique string to specify instance
labels = { instance="myn9e-10.206.0.17:3306" }
./categraf --test --inputs mysql

# 会获取当前MySQL实例的所有库数据相关数据(innodb存储、bufferpool等)

3.3 redis

1、功能

慢日志、持久化大小等。

2、案例

vim conf/input.redis/redis.toml
[[instances]]
address = "127.0.0.1:6379"
username = ""
password = ""
pool_size = 2

# 是否开启slowlog 收集
gather_slowlog = true
# 最多收集少条slowlog
slowlog_max_len = 100
# 收集距离现在多少秒以内的slowlog
# 注意插件的采集周期,该参数不要小于采集周期,否则会有slowlog查不到
slowlog_time_window=30

image-20240112225434629

3.4 nginx

1、功能

Nginx 作为 web 服务器、反向代理服务器时的数据采集。

2、案例 - 以简单的 web 为例

**条件一:**nginx服务需要启用http_stub_status_module模块

第三方模块下载地址:

nginx_upstream_check_module:https://github.com/yaoweibin/nginx_upstream_check_module

ngx_devel_kit-0.3.0:https://github.com/vision5/ngx_devel_kit/releases/tag/v0.3.0

lua-nginx-module-0.10.13:https://github.com/openresty/lua-nginx-module/releases/tag/v0.10.13

nginx-module-vts:https://github.com/vozlt/nginx-module-vts/releases

ngx-fancyindex-0.5.2:https://github.com/aperezdc/ngx-fancyindex/releases/tag/v0.5.2

# 推荐源码编译方式安装模块,如不清楚要安装哪些模块,可参考:
cd /opt/nginx-1.20.1 && ./configure \
--prefix=/usr/share/nginx \
--sbin-path=/usr/sbin/nginx \
--modules-path=/usr/lib64/nginx/modules \
--conf-path=/etc/nginx/nginx.conf \
--error-log-path=/var/log/nginx/error.log \
--http-log-path=/var/log/nginx/access.log \
--http-client-body-temp-path=/var/lib/nginx/tmp/client_body \
--http-proxy-temp-path=/var/lib/nginx/tmp/proxy \
--http-fastcgi-temp-path=/var/lib/nginx/tmp/fastcgi \
--http-uwsgi-temp-path=/var/lib/nginx/tmp/uwsgi \
--http-scgi-temp-path=/var/lib/nginx/tmp/scgi \
--pid-path=/var/run/nginx.pid \
--lock-path=/run/lock/subsys/nginx \
--user=nginx \
--group=nginx \
--with-compat \
--with-threads \
--with-http_addition_module \
--with-http_auth_request_module \
--with-http_dav_module \
--with-http_flv_module \
--with-http_gunzip_module \
--with-http_gzip_static_module \
--with-http_mp4_module \
--with-http_random_index_module \
--with-http_realip_module \
--with-http_secure_link_module \
--with-http_slice_module \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_sub_module \
--with-http_v2_module \
--with-mail \
--with-mail_ssl_module \
--with-stream \
--with-stream_realip_module \
--with-stream_ssl_module \
--with-stream_ssl_preread_module \
--with-select_module \
--with-poll_module \
--with-file-aio \
--with-http_xslt_module=dynamic \
--with-http_image_filter_module=dynamic \
--with-http_perl_module=dynamic \
--with-stream=dynamic \
--with-mail=dynamic \
--with-http_xslt_module=dynamic \
--add-module=/etc/nginx/third-modules/nginx_upstream_check_module \
--add-module=/etc/nginx/third-modules/ngx_devel_kit-0.3.0 \
--add-module=/etc/nginx/third-modules/lua-nginx-module-0.10.13 \
--add-module=/etc/nginx/third-modules/nginx-module-vts \
--add-module=/etc/nginx/third-modules/ngx-fancyindex-0.5.2

# 根据cpu核数
make -j2
make install

# 注意:第三方模块nginx_upstream_check_module lua-nginx-module nginx-module-vts 都是相关插件所必备的依赖。

**条件二:**nginx 启用 stub_status 配置

vim /etc/nginx/conf.d/default.conf
server {
    listen       80;
    server_name  10.206.0.17;

    location / {
        root   /usr/share/nginx/html;
        index  index.html index.htm;
    }

    location /status {
        stub_status on;
    }
}

开始采集:urls 中写入你的 server_name + url

vim conf/input.nginx/nginx.toml
## collect interval
# interval = 15

## Set the mapping of extra tags in batches
[mappings]
# "http://192.168.0.216:8000/nginx_status" = { "job" = "local" }
# "https://www.baidu.com/ngx_status" = { "job" = "baidu" }

[[instances]]
## An array of Nginx stub_status URI to gather stats.
urls = [
    "http://10.206.0.17/status/"   # 在此处配置
]

## append some labels for series
# labels = { region="cloud", product="n9e" }

## interval = global.interval * interval_times
# interval_times = 1

## Set response_timeout (default 5 seconds)
response_timeout = "5s"

## Whether to follow redirects from the server (defaults to false)
# follow_redirects = false

## Optional HTTP Basic Auth Credentials
#username = "admin"
#password = "admin"

## Optional headers
# headers = ["X-From", "categraf", "X-Xyz", "abc"]

## Optional TLS Config
# use_tls = false
# tls_ca = "/etc/categraf/ca.pem"
# tls_cert = "/etc/categraf/cert.pem"
# tls_key = "/etc/categraf/key.pem"
## Use TLS but skip chain & host verification
# insecure_skip_verify = false

相关参数解释:

curl http://127.0.0.1/status
Active connections: 1 
server accepts handled requests
 78 78 78 
Reading: 0 Writing: 1 Waiting: 0
# Nginx状态解释:
Active connections Nginx正处理的活动连接数5个
server Nginx启动到现在共处理了90837个连接。
accepts Nginx启动到现在共成功创建90837次握手。
handled requests Nginx总共处理了79582次请求。
Reading Nginx读取到客户端的 Header 信息数。
Writing Nginx返回给客户端的 Header 信息数。
Waiting Nginx已经处理完正在等候下一次请求指令的驻留链接,Keep-alive启用情况下,这个值等于active-(reading + writing)。
请求丢失数=(握手数-连接数)可以看出,本次状态显示没有丢失请求。

image-20240112230622452

3.5 net_response

1、功能

TCP 端口存活探测、TCP 网络延迟探测。

2、案例

vim input.net_response/net_response.toml
# # collect interval
# interval = 15

[mappings]
# "127.0.0.1:22"= {region="local",ssh="test"}
# "127.0.0.1:22"= {region="local",ssh="redis"}

[[instances]]
targets = [
#     "127.0.0.1:22",
#     "localhost:6379",
#     ":9090"
    "127.0.0.1:9090"  # 此处添加
]

# # append some labels for series
labels = { env="pre" }  # 标签

# # interval = global.interval * interval_times
interval_times = 1

## Protocol, must be "tcp" or "udp"
## NOTE: because the "udp" protocol does not respond to requests, it requires
## a send/expect string pair (see below).
protocol = "tcp"   # 协议

## Set timeout
timeout = "15s"

## Set read timeout (only used if expecting a response)
read_timeout = "15s"

## The following options are required for UDP checks. For TCP, they are
## optional. The plugin will send the given string to the server and then
## expect to receive the given 'expect' string back.
## string sent to the server
# send = "ssh"
## expected string in answer
# expect = "ssh"
./categraf --test --inputs net_response

image-20240112235902553

3.6 exec

1、功能

如果input目录下的插件无法满足采集需求或者有特殊场景需要自定义实现指定业务的监控。

监控脚本采集到监控数据之后通过相应的格式输出到stdout,categraf截获stdout内容,解析之后传给服务端。

前面我们说了,exec 插件是支持自定义指标名称的,而其他插件都是以其插件名开头的。

2、数据格式

influx、prometheus、falcon

influx 格式

mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3

influx格式说明

  • mesurement,定义指标名称(或者前缀),比如 connections;
  • mesurement后面是逗号,逗号后面是标签,如果没有标签,则mesurement后面不需要逗号
  • 标签是k=v的格式,多个标签用逗号分隔,比如region=beijing,env=test
  • 标签之后是空格
  • 空格之后是属性字段,多个属性字段用逗号分隔
  • 属性字段是字段名=值的格式,在categraf里只能是数字

最终,mesurement和各个属性字段名称拼接成metric名字。

falcon格式

[
    {
        "endpoint": "test-endpoint",
        "metric": "test-metric",
        "timestamp": 1658490609,
        "step": 60,
        "value": 1,
        "counterType": "GAUGE",
        "tags": "idc=lg,loc=beijing"
    },
    {
        "endpoint": "test-endpoint",
        "metric": "test-metric2",
        "timestamp": 1658490609,
        "step": 60,
        "value": 2,
        "counterType": "GAUGE",
        "tags": "idc=lg,loc=beijing"
    }
]

timestamp、step、counterType,这三个字段在categraf处理的时候会直接忽略掉,endpoint会放到labels里上报。

prometheus 格式

echo '# HELP demo_http_requests_total Total number of http api requests'
echo '# TYPE demo_http_requests_total counter'
echo 'demo_http_requests_total{api="add_product"} 4633433'

其中 # 注释的部分,其实会被 categraf 忽略,不要也罢。

这里要注意的是,标签值必须用双引号引起,否则报错,如果你的标签值是一个变量,你必须转义引号

echo "demo_http_requests_total{api=\"add_product\"} 4633433"

3、案例

编写脚本(这里以 prometheus 数据格式为例):

vim /opt/tools/test.sh
echo '# buyu service heartbeat'
echo 'proc_status{env="pro",servername="buyu"} 1'

开始采集:

vim conf/input.exec/exec.toml
# # collect interval
# interval = 15

[[instances]]
# # commands, support glob
commands = [
    "/opt/tools/test.sh"
]

# # timeout for each command to complete
# timeout = 5

# # interval = global.interval * interval_times
# interval_times = 1

# # choices: influx prometheus falcon
# # influx stdout example: mesurement,labelkey1=labelval1,labelkey2=labelval2 field1=1.2,field2=2.3
data_format = "prometheus"

image-20240112233044929

总结

还有很多很多采集插件(如日志采集插件 mtail,已经被集成到 Categraf 了),后续用到了继续分享!

—END

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

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

相关文章

C#编程-在线程中使用同步

在线程中使用同步 在线程应用程序中,线程需要相互共享数据。但是,应用程序应该确保一个线程不更改另一个线程使用的数据。考虑有两个线程的场景。一个线程从文件读取工资,另一个线程尝试更新工资。当两个线程同时工作时,数据就会受损。下图显示了两个线程同时访问一个文件…

【JAVA】concurrentHashMap和HashTable有什么区别

🍎个人博客:个人主页 🏆个人专栏:JAVA ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 同步性质: 性能: 允许空键值(Allow Nulls): 迭代器(Iter…

Flask+ Dependency-injecter+pytest 写测试类

最近在使用这几个在做项目,因为第一次用这个,所以不免有些问题。总结下踩的坑 1.测试类位置 首先测试类约定会放在tests里面,不然有可能发生引入包的问题,会报错某些包找不到。 2. 测试类依赖注入 这里我就用的真实的数据库操作…

[AutoSar]BSW_OS 01 Autosar OS入门(一)

目录 关键词平台说明一、Autosar OS 的位置二、Autosar OS 与OSEK三、TASK 关键词 嵌入式、C语言、autosar、OS、BSW 平台说明 项目ValueOSautosar OSautosar厂商vector芯片厂商TI编程语言C,C编译器HighTec (GCC) 一、Autosar OS 的位置 如在[AutoSar]基础部分 a…

如何使用统计鸟网站统计分析网站流量来源?

统计鸟官网地址:https://www.tongjiniao.com/ 站长必备!网站数据统计,流量监测平台 提供网站数据统计分析、搜索关键词、流量访问来源等服务 深入分析用户点击习惯,为智能化运营网站提供更好的用户体验 目录 一、注册账号信息 二…

电位器的基本知识

一、电位器简介 电位器是一种可调的电子元件。它是由一个电阻体和一个转动或滑动系统组成。当电阻体的两个固定触电之间外加一个电压时,通过转动或滑动系统改变触点在电阻体上的位置,在动触点与固定触点之间便可得到一个与动触点位置成一定关系的电压。…

DFT中的SCAN、BIST、ATPG基本概念

DFT中的SCAN、BIST、ATPG基本概念 SCAN 定义 扫描路径法是一种针对时序电路芯片的DFT方案,目标是在不影响正常功能的情况下来能够提高可控性和可观测性。 原理 原理是将时序电路可以模型化为一个组合电路网络和带触发器(Flip-Flop,简称FF)的时序电路…

【开源】基于JAVA的数据可视化的智慧河南大屏

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统展示四、核心代码4.1 数据模块 A4.2 数据模块 B4.3 数据模块 C4.4 数据模块 D4.5 数据模块 E 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的数据可视化的智慧河南大屏,包含了GDP、…

蚁群算法(ACO)解决旅行商(TSP)问题的python实现

TSP问题 旅行商问题(Travelling Salesman Problem, 简记TSP,亦称货郎担问题):设有n个城市和距离矩阵D [dij],其中dij表示城市i到城市j的距离,i, j 1, 2 … n,则问题是要找出遍访每个城市恰好一次的一条回…

c#多线程中使用SemaphoreSlim

SemaphoreSlim是一个用于同步和限制并发访问的类,和它类似的还有Semaphore,只是SemaphoreSlim更加的轻量、高效、好用。今天说说它,以及如何使用,在什么时候去使用,使用它将会带来什么优势。 代码的业务是&#xff1a…

InseRF: 文字驱动的神经3D场景中的生成对象插入

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

UE5 简易MC教程学习心得

https://www.bilibili.com/video/BV12G411J7hV?p13&spm_id_frompageDriver&vd_sourceab35b4ab4f3968642ce6c3f773f85138 ———— 目录 0.摧毁逻辑学习 1.发光材质灯方块 2.封装。想让子类 不更改父类的变量。 3.材质命名习惯。 0.摧毁逻辑学习 达到摧毁的条件…

多国管理中心多语言区块链源码一元夺宝程序仿趣步奕跑/原生计步器/原生人脸识别

前后台分开的,后台是TP3.2的框架了。 目前把整体UI 改版黄色系风格,集成了一元夺宝程序,用户数据同步趣步,效果看起来很棒,另外加入股票走势图(K线图),目前已经继承人脸识别&#xf…

数据结构——二叉树(先序、中序、后序及层次四种遍历(C语言版))超详细~ (✧∇✧) Q_Q

目录 ​​​​​​​ 二叉树的定义: *特殊的二叉树: 二叉树的性质: 二叉树的声明: 二叉树的先序遍历: 二叉树的中序遍历: 二叉树的后序遍历: 二叉树的层序遍历: 二叉树的节…

【工具使用-A2B】32通道24bit传输的配置方法

一,简介 本文记录A2B总线上压缩为24bit的方法和如何计算是否超带宽的方法。 二,具体操作 2.1 计算是否超带宽的方法 确认传输带宽占比 2.2 32通道24bit配置 Downstream Compression选择Disable。 三,总结 本文主要介绍,如…

如何在Spring Boot中使用EhCache缓存

1、EhCache介绍 在查询数据的时候,数据大多来自于数据库,我们会基于SQL语句与数据库交互,数据库一般会基于本地磁盘IO将数据读取到内存,返回给Java服务端,我们再将数据响应给前端,做数据展示。 但是MySQL…

红队专题-Golang工具ChYing

Golang工具ChYing 招募六边形战士队员原chying工具代码分析并发访问控制并发 原子 写入读取 通道嵌套映射结构初始化启动代理服务器重启代理服务器 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 原chying工具代码分析 前有 Chying 后有…

什么是云服务器,阿里云优势如何?

阿里云服务器ECS英文全程Elastic Compute Service,云服务器ECS是一种安全可靠、弹性可伸缩的云计算服务,阿里云提供多种云服务器ECS实例规格,如经济型e实例、通用算力型u1、ECS计算型c7、通用型g7、GPU实例等,阿里云百科aliyunbai…

C++|44.智能指针

文章目录 智能指针unique_ptr特点一——无法进行复制 shared_ptr特点一——可复制特点二——计数器(用于确定删除的时机) 其他 智能指针 通常的指针是需要特殊地去申请对应的空间,并在不使用的时候还需要人工去销毁。 而智能指针相对普通的指…

2024 1.6~1.12 周报

一、上周工作 论文研读 二、本周计划 思考毕业论文要用到的方法或者思想,多查多看积累可取之处。学习ppt和上周组会内容、卷积神经网络。 三、完成情况 1. 数据训练的方式 1.1 迁移学习 迁移学习是一种机器学习方法,把任务 A 训练出的模型作为初始模…