Zabbix监控应用

news2024/11/12 13:17:06

目录

一.监控tomcat

二.Zabbix监控TCP

三.zabbix监控nginx

 四.snmp监控

五.监控web

六.聚合图形


一.监控tomcat

1.在tomcat服务器上安装zabbix-agent服务

[root@node2 etc]#vim  zabbix_agentd.conf
94 Server=192.168.240.13   #指向当前zabbix server
##### Passive checks related #被动检查相关配置

### Option: ListenPort
ListenPort=10050 #监听端口  默认的无需修改

119 StartAgents=3
#启动3个进程收集数据

146 Hostname=192.168.240.11
#指定名称 一般使用 IP地址, 等会需要使用

systemctl restart  zabbix-agent.service
systemctl status zabbix-agent.service 

2.修改配置文件

vim /usr/local/tomcat/bin/catalina.sh
#一般加在116行
CATALINA_OPTS="$CATALINA_OPTS  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.240.11" 

systemctl restart   tomcat
systemctl status tomcat
ss -napt|grep 12345

CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote                				#启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345     				#默认启动的JMX端口号,要和zabbix添加主机时候的端口一致即可
-Dcom.sun.management.jmxremote.authenticate=false 			#不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false					#不使用ssl认证
-Djava.rmi.server.hostname=x.x.x.x" 						#tomcat主机自己的IP地址,不要写zabbix服务器的地址

3.通过jconsole 验证JMX数据

在windows安装windows版本的JDK,安装过程略,安装完成之后点击安装目录的jconsole.exe,比如C:\ProgramFiles\Java\jdk1.8.0_221\bin\jconsole.exe

4.配置zabbixserver

在主服务器上配置启动1javagateway

[root@localhost data]#vim /apps/zabbix_server/sbin/zabbix_java/settings.sh 
#不需要修改

35 START_POLLERS=5  #启动5个线程去采集java数据
43 TIMEOUT=30       #一个数据的超时时间30s
[root@localhost data]#/apps/zabbix_server/sbin/zabbix_java/startup.sh 
# 启动服务
[root@localhost data]#ss -antp |grep 10052

配置zabbix-server对接java-gateway

[root@localhost data]#vim /apps/zabbix_server/etc/zabbix_server.conf
281 JavaGateway=192.168.240.13    #指明gateway地址
298 StartJavaPollers=5            #开启多少个进程去收集java服务器的信息

289 JavaGatewayPort=10052         # 默认不用改

systemctl restart zabbix-server
#快照起不来  重启机器   
#重启后不要忘记开启  javagateway

/apps/zabbix_server/sbin/zabbix_server 
ss -natp |grep 10051

5.web页面配置

二.Zabbix监控TCP

TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务,TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。

在建立连接的时候,所谓的客户端与服务端是相对应的,即要看是谁主动连接的谁,如果A主动连接B那么A就是客户端而B是服务端,如果返过来B主动连接A,那么B就是客户端而A就成了服务端。

1.TCP端口连接的11种状态

  • CLOSED:端口默认是关闭状态。

  • LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。

  • SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短暂,正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,服务器返回给客户端SYN确认之后就会将在自己的端口置为SYN_RCVD。

  • SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为SYN_SENT。

  • ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。

  • FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。

  • FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态

  • TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(MaxSegment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。

  • CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。

  • CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。

  • LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即可以进入到CLOSED可用状态了。

2.自定义监控项

[root@localhost zabbix]# vim  /apps/zabbix/etc/zabbix_agentd.conf

283 ### Option: UserParameter
284 #       User-defined parameter to monitor. There can be several user-defined parameters.
285 #       Format: UserParameter=<key>,<shell command>
286 #       See 'zabbix_agentd' directory for examples.
287 #
288 # Mandatory: no
289 # Default:
290 # UserParameter=

UserParameter=test,/usr/bin/echo  hello
#修改290 行或者新加一行  命令最好绝对路径
systemctl restart   zabbix-agent.service 

在主服务器验证
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test"
hello

3.添加脚本

vim  /apps/zabbix/etc/zabbix_agentd.conf
# Mandatory: no
# Default:
# UserParameter=
UserParameter=test,/usr/bin/bash  /data/tcp.sh
systemctl restart   zabbix-agent.service 
 vim tcp.sh
#!/bin/bash
echo 100

4.主服务器上测试

[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test"
100

5.脚本传参数

[root@localhost data]# vim tcp.sh

#!/bin/bash
echo $1

[root@localhost zabbix]# vim  /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash  /data/tcp.sh $1

6.服务端测试

[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[20]"
20
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[30]"
30

7.调用多个

vim tcp.sh
#!/bin/bash
echo $1  $2
vim  /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash  /data/tcp.sh $1 $2
systemctl restart   zabbix-agent.service

服务端测试
/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[30,300]"

8.脚本判断

vim tcp.sh
#!/bin/bash
num=$1
if [ $num == "cpu" ];then
 echo 88
fi

vim  /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash  /data/tcp.sh $1 
systemctl restart   zabbix-agent.service

服务端测试
/apps/zabbix_server/bin/zabbix_get -s 192.168.240.11 -p 10050 -k "test[cpu]"

9.监控tcp连接

准备脚本

#!/bin/bash
tcp_conn_status(){
  TCP_STAT=$1
  ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
  TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
  if [ -z $TCP_NUM ];then
    TCP_NUM=0
  fi
  echo $TCP_NUM
}

main(){
 case $1 in
 tcp_status)
   tcp_conn_status $2;
   ;;
 esac
}

main $1 $2

bash tcp_status.sh  tcp_status ESTAB
bash tcp_status.sh  tcp_status TIME-WAIT
chmod +x  tcp_status.sh

测试脚本 

修改客户端配置文件

[root@localhost etc]# vim zabbix_agentd.conf
UserParameter=linux_tcp[*],/usr/bin/bash  /data/tcp.sh $1 $2

systemctl restart   zabbix-agent.service 
systemctl status   zabbix-agent.service

在主服务器上验证

[root@localhost ~]#/apps/zabbix_server/bin/zabbix_get  -s 192.168.240.11 -p 10050 -k "linux_tcp_status["tcp_status","TIME-WAIT"]"

[root@localhost ~]#/apps/zabbix_server/bin/zabbix_get  -s 192.168.240.11 -p 10050 -k "linux_tcp_status["tcp_status","ESTAB"]"

在web上设置添加模板

 在模板上添加监控项

三.zabbix监控nginx

客户机:192.168.240.11

服务器:192.168.240.13

1.客户机安装nginx

[root@localhost data]# yum install epel-release.noarch  -y
[root@localhost data]# yum install nginx -y 

2.修改nginx配置文件

[root@localhost data]# vim /etc/nginx/nginx.conf 、
location /status {
         stub_status;
          }
[root@localhost data]# nginx -t 
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
[root@localhost data]# systemctl restart nginx

浏览器访问 

3.准备脚本

#!/bin/bash 


nginx_status_fun(){ #函数内容
	NGINX_PORT=$1 #端口,函数的第一个参数是脚本的第二个参数,即脚本的第二个参数是段端口号
	NGINX_COMMAND=$2 #命令,函数的第二个参数是脚本的第三个参数,即脚本的第三个参数是命令
	nginx_active(){ #获取nginx_active数量,以下相同,这是开启了nginx状态但是只能从本机看到
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Active' | awk '{print $NF}'
        }
	nginx_reading(){ #获取nginx_reading状态的数量
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Reading' | awk '{print $2}'
       }
	nginx_writing(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Writing' | awk '{print $4}'
       }
	nginx_waiting(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| grep 'Waiting' | awk '{print $6}'
       }
	nginx_accepts(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $1}'
       }
	nginx_handled(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $2}'
       }
	nginx_requests(){
        /usr/bin/curl "http://127.0.0.1:"$NGINX_PORT"/status/" 2>/dev/null| awk NR==3 | awk '{print $3}'
       }
  	case $NGINX_COMMAND in
		active)
			nginx_active;
			;;
		reading)
			nginx_reading;
			;;
		writing)
			nginx_writing;
			;;
		waiting)
			nginx_waiting;
			;;
		accepts)
			nginx_accepts;
			;;
		handled)
			nginx_handled;
			;;
		requests)
			nginx_requests;
		esac 
}

main(){ #主函数内容
	case $1 in #分支结构,用于判断用户的输入而进行响应的操作
		nginx_status) #当输入nginx_status就调用nginx_status_fun,并传递第二和第三个参数
			nginx_status_fun $2 $3;
			;;
		*) #其他的输入打印帮助信息
			echo $"Usage: $0 {nginx_status key}"
	esac #分支结束符
}

main $1 $2 $3

4.在客户机测试脚本

bash nginx_status.sh nginx_status  80 active

nginx七个状态

  1. Active connections: 活跃连接数,指当前正在处理的客户端连接数。这包括正在读取、写入、等待或者已经接受但还未处理完毕的连接数。

  2. Reading: 正在读取的连接数。这表示服务器正在从客户端读取数据。

  3. Writing: 正在写入的连接数。这表示服务器正在向客户端发送数据。

  4. Waiting: 等待连接的数量。这表示有多少连接在等待服务器处理请求,可能是由于服务器资源有限或者处理能力不足造成的。

  5. Accepts: 已接受的连接数。这是服务器已经接受的总连接数。

  6. Handled: 已处理的连接数。这是服务器已经成功处理过的连接总数,包括成功处理和失败处理的连接。

  7. Requests: 请求总数。这是服务器收到的所有请求的总数,每一个连接可以包含多个请求。

5.修改zabbix-agent 配置文件

[root@localhost ~]# vim  /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=nginx_status[*],/usr/bin/bash  /data/nginx_status.sh $1 $2 $3

systemctl  restart zabbix-agent.service 

6.在服务器上测试

[root@localhost ~]#zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","active"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","reading"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","writing"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","waiting"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","accepts"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","handled"]"

[root@localhost ~]# zabbix_get  -s 192.168.240.11 -p 10050 -k "nginx_status["nginx_status","80","requests"]"

7.在web上操作

添加nginx模板

添加监控项

创建触发器

创建图行

 四.snmp监控

SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是“简单网络管理协议,SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议,SNMP主要用于网络设备的管理。

SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。

SNMP协议是TCP/IP协议簇的一个应用层协议,在1988年被制定,并被Internet体系结构委员会(IAB,InternetArchitecture Board)采纳作为一个短期的网络管理解决方案,由于SNMP的简单性,在Internet时代得到了蓬勃的发展,1992年发布了SNMPv2版本,以增强SNMPv1的安全性和功能,SNMP的协议版本目前有SNMP v1、SNMP v2c和SNMP v3三种版本,其具体差别如下:

SNMP v1采用团体名(Community Name)认证,团体名用来定义SNMP NMS和SNMP Agent的关系,如果SNMP报文携带的团体名没有得到设备的认可,该报文将被丢弃,团体名起到了类似于密码的作用,用来限制SNMP NMS对SNMPAgent的访问。

SNMP v2c也采用团体名认证,它在兼容SNMP v1的同时又扩充了SNMP v1的功能,它提供了更多的操作类型(批量获取GetBulk和通知请求InformRequest)、支持更多的数据类型(Counter64等)、提供了更丰富的错误代码且能够更细致地区分错误。

SNMP v3提供了基于用户的安全模型(USM,User-Based Security Model)的认证机制,用户可以设置认证和加密功能,认证用于验证报文发送方的合法性,避免非法用户的访问,加密则是对NMS和Agent之间的传输报文进行加密,以免被窃听。通过有无认证和有无加密等功能组合,可以为SNMP NMS和SNMP Agent之间的通信提供更高的安全性。

SNMP数据交互

SNMP管理进程与代理进程之前为了交互信息,定义了5种报文:

get-request操作:从代理进程处提取一个或多个参数值。
get-response操作:返回的一个或多个参数值。这个操作是由代理进程发出的。
trap操作:代理进程主动发出的报文,通知管理进程有某些事情发生。
get-next-request操作:从代理进程处提取一个或多个参数的下一个参数值。
set-request操作:设置代理进程的一个或多个参数值。

实现snmp监控

vim /etc/snmp/snmpd.conf
# sec.name source community
com2sec notConfigUser default 123456 #第一步:设置团体认密码,默认为public

view systemview included .1.3.6.1.2.1.1
view systemview included .1.3.6.1.2.1.25.1.1 #创建一个view,并对其授权可访问的OID范围
view systemview included .1. #自定义授权,否则zabbix server无法获取数据

access notConfigGroup “” any noauth exact systemview none none #将组notConfigGroup关联至systemview 从而完成对组的授权

systemctl restart snmpd

如何测试OID:

snmpwalk是SNMP的一个工具,它使用SNMP的GET请求查询指定OID(SNMP协议中的对象标识)入口的所有OID树信息,并显示给用户。通过snmpwalk也可以查看支持SNMP协议(可网管)的设备的一些其他信息,比如cisco交换机或路由器IP地址、内存使用率等,也可用来协助开发SNMP功能。

要使用snmpwalk需要先按照net-snmp软件包中

yum -y install net-snmp-utils  net-snmp 
snmpwalk -h
USAGE: snmpwalk [OPTIONS] AGENT [OID]
–h:显示帮助。
–v:指定snmp的版本, 1或者2c或者3。
–c:指定连接设备SNMP密码。
–V:显示当前snmpwalk命令行版本。
–r:指定重试次数,默认为0次。
–t:指定每次请求的等待超时时间,单为秒,默认为3秒。
–l:指定安全级别:noAuthNoPriv|authNoPriv|authPriv。
–a:验证协议:MD5|SHA。只有-l指定为authNoPriv或authPriv时才需要。
–A:验证字符串。只有-l指定为authNoPriv或authPriv时才需要。
–x:加密协议:DES。只有-l指定为authPriv时才需要。
–X:加密字符串。只有-l指定为authPriv时才需要

在主服务器上安装snmp

yum -y install  net-snmp net-snmp-utils

在主服务器上查看客户机上内存

snmpwalk -v 2c  -c public   192.168.240.11  .1.3.6.1.4.1.2021.4.4.0

CPU 负载:
1 minute Load: .1.3.6.1.4.1.2021.10.1.3.1
5 minute Load: .1.3.6.1.4.1.2021.10.1.3.2
15 minute Load: .1.3.6.1.4.1.2021.10.1.3.3
内存使用:
Total Swap Size: .1.3.6.1.4.1.2021.4.3.0
Available Swap Space: .1.3.6.1.4.1.2021.4.4.0
Total RAM in machine: .1.3.6.1.4.1.2021.4.5.0
Total RAM used: .1.3.6.1.4.1.2021.4.6.0
Total RAM Free: .1.3.6.1.4.1.2021.4.11.0
Total RAM Shared: .1.3.6.1.4.1.2021.4.13.0
Total RAM Buffered: .1.3.6.1.4.1.2021.4.14.0
Total Cached Memory: .1.3.6.1.4.1.2021.4.15.0
硬盘使用:
Path where the disk is mounted: .1.3.6.1.4.1.2021.9.1.2.1
Path of the device for the partition: .1.3.6.1.4.1.2021.9.1.3.1
Total size of the disk/partion (kBytes): .1.3.6.1.4.1.2021.9.1.6.1
Available space on the disk: .1.3.6.1.4.1.2021.9.1.7.1
Used space on the disk: .1.3.6.1.4.1.2021.9.1.8.1
Percentage of space used on disk: .1.3.6.1.4.1.2021.9.1.9.1
Percentage of inodes used on disk: .1.3.6.1.4.1.2021.9.1.10.1
系统信息:
sysDescr 1.3.6.1.2.1.1.1
sysObjectID 1.3.6.1.2.1.1.2
sysUpTime 1.3.6.1.2.1.1.3
sysContact 1.3.6.1.2.1.1.4
sysName 1.3.6.1.2.1.1.5
CPU 信息:
percentage of user CPU time: .1.3.6.1.4.1.2021.11.9.0
raw user cpu time: .1.3.6.1.4.1.2021.11.50.0
percentages of system CPU time: .1.3.6.1.4.1.2021.11.10.0
raw system cpu time: .1.3.6.1.4.1.2021.11.52.0
percentages of idle CPU time: .1.3.6.1.4.1.2021.11.11.0
raw idle cpu time: .1.3.6.1.4.1.2021.11.53.0
raw nice cpu time: .1.3.6.1.4.1.2021.11.51.0

在web上操作

更改自动发现时间,不宜太长

五.监控web

六.聚合图形

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

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

相关文章

Web 性能入门指南-3.5 优化单页应用程序 (SPA)

&#x1f338; 欢迎来到前端后花园&#xff01;这里是一个温馨的小角落&#xff0c;专为热爱前端技术的你打造。没有华丽的辞藻&#xff0c;只有真诚的分享。希望你能在这里找到实用的内容&#xff0c;学到新知识&#xff0c;同时也欢迎你畅所欲言&#xff0c;分享你的思考和见…

【Linux学习 | 第1篇】Linux介绍+安装

文章目录 Linux1. Linux简介1.1 不同操作系统1.2 Linux系统版本 2. Linux安装2.1 安装方式2.2 网卡设置2.3 安装SSH连接工具2.4 Linux和Windows目录结构对比 Linux 1. Linux简介 1.1 不同操作系统 桌面操作系统 Windows (用户数量最多)MacOS ( 操作体验好&#xff0c;办公人…

jenkins替换配置文件

1.点击首页的【Manage Jenkins】-【Manage Plugins】&#xff0c;在选项【Available plugins】安装 Config File Provider Plugin &#xff0c;安装后重启jenkins 2.安装完成后会有这个图标&#xff0c;点进去 3.点击新建&#xff0c;选择自定义&#xff0c;填入要替换的文件…

C语言 | Leetcode C语言题解之第268题丢失的数字

题目&#xff1a; 题解&#xff1a; /* 求和运算 */ /* 对[0,n]求和, 减去数组每个元素, 得出丢失的元素 */ int missingNumber(int* nums, int numsSize){int i;int sum numsSize;for (i 0; i < numsSize; i) {sum i - nums[i];}return…

【Spring】SpringRetry重试机制和Spring异步任务发送操作结合应用场景实操,通俗易懂

平时调用一些第三方接口或者内部接口&#xff0c;可能出现处理异常或者超时或者意外因素&#xff0c;我们可以使用重试机制来为用户提高体验。 1.引用依赖 <dependency><groupId>org.springframework.retry</groupId><artifactId>spring-retry</a…

【单片机毕业设计选题24079】-基于单片机的室内通风系统

系统功能: 系统分为手动和自动模式&#xff0c;上电默认为自动模式&#xff0c;自动模式下系统根据采集到的传感器值 自动控制&#xff0c;温度过低后自动开启加热&#xff0c;湿度过低后自动开启继电器加湿&#xff0c;获取到烟雾值大于设定值或获取到的CO值大于设定的CO值时…

视图,存储过程和触发器

目录 视图 创建视图&#xff1a; 视图的使用 查看库中所有的视图 删除视图 视图的作用&#xff1a; 存储过程&#xff1a; 为什么使用存储过程&#xff1f; 什么是存储过程&#xff1f; 存储过程的创建 创建一个最简单的存储过程 使用存储过程 删除存储过程 带参的存储…

【已解决 Python】 TypeError: can only concatenate list (not “int”) to list

【已解决 Python】 TypeError: can only concatenate list (not “int”) to list 在Python编程中&#xff0c;TypeError: can only concatenate list (not "int") to list是一个常见的错误。此错误表明你尝试将一个整数&#xff08;int&#xff09;与列表&#xff…

初识redis:通用命令

今天我们简单介绍一些关于redis的基础命令。 目录 get 和 set 全局命令 keys EXISTS del&#xff08;delete&#xff09; expire TTL Redis的key过期策略是怎么实现的&#xff1f; type get 和 set 连接到云服务器后&#xff0c;通过redis-cli命令进入到redis客户端…

7月21日读Neuroimage Denoiser

Neuroimage Denoiser for removing noise from transient 1 fluorescent signals in functional imaging. Summary Neuroimage Denoiser&#xff0c;这是一种新型的基于U-Net的模型&#xff0c;可以有效去除显微镜记录中瞬时局部荧光信号的噪声。该模型使去噪过程与记录频率和…

sql注入 mysql 执行命令 sql注入以及解决的办法

我们以前很可能听过一个词语叫做SQL注入攻击&#xff0c;其是威胁我们系统安全的最危险的因素之一&#xff0c;那么到底什么是SQL注入攻击呢&#xff1f;这里我会用一个最经典最简单的例子来跟大家解释一下&#xff1a; 众所周知&#xff0c;我们的sql语句都是有逻辑的&#xf…

Python爬虫:代理ip电商数据实战

引言&#xff1a;数据访问管理引发的烦恼 作为一名Python博主&#xff0c;爬虫技能对于获取和分析数据至关重要&#xff0c;经常爬一下&#xff0c;有益身心健康嘛。爬虫技术对很多人来说&#xff0c;不仅仅是一种工具&#xff0c;更像是一种艺术&#xff0c;帮助我们从互联网…

大模型入门学习笔记(非常详细)零基础入门到精通,收藏这一篇就够了

一、认识大模型 1.1 从人工智能到大模型的演变 学完本文后&#xff0c;你将能够&#xff1a; 掌握大模型的特点、重要概念以及工作方式 了解大模型的基本概况和产品矩阵 了解大模型&#xff0c;尤其是大语言模型的应用场景和示例 大模型是人工智能领域的一个重要里程碑&a…

C++相关概念和易错语法(23)(set、仿函数的应用、pair、multiset)

1.set和map存在的意义 &#xff08;1&#xff09;set和map的底层都是二叉搜索树&#xff0c;可以达到快速排序&#xff08;当我们按照迭代器的顺序来遍历set和map&#xff0c;其实是按照中序来遍历的&#xff0c;是排过序的&#xff09;、去重、搜索的目的。 &#xff08;2&a…

展馆导览系统架构解析,从需求分析到上线运维

在物质生活日益丰富的当下&#xff0c;人们对精神世界的追求愈发强烈&#xff0c;博物馆、展馆、纪念馆等场所成为人们丰富知识、滋养心灵的热门选择。与此同时&#xff0c;人们对展馆的导航体验也提出了更高要求&#xff0c;展馆导览系统作为一种基于室内外地图相结合的位置引…

STM32智能农业监测与控制系统教程

目录 引言环境准备智能农业监测与控制系统基础代码实现&#xff1a;实现智能农业监测与控制系统 4.1 数据采集模块 4.2 数据处理与分析模块 4.3 通信与网络系统实现 4.4 用户界面与数据可视化应用场景&#xff1a;农业监测与优化问题解决方案与优化收尾与总结 1. 引言 智能农…

电脑基础知识 | 电脑的基本组成

电脑作为我们日常工作和娱乐的重要工具&#xff0c;扮演着举足轻重的角色。当我们谈论电脑的基本组成时&#xff0c;其实是在探讨电脑硬件和软件两个核心部分。硬件是电脑看得见、摸得着的物理设备&#xff0c;而软件则是运行在这些硬件之上的程序和指令。两者相辅相成&#xf…

深入浅出mediasoup—WebRtcTransport

mediasoup 提供了多种 transport&#xff0c;包括 WebRtcTransport、PipeTransport、DirectTransport、PlainTransport 等&#xff0c;用来实现不同目的和场景的媒体通信。WebRtcTransport 是 mediasoup 实现与 WebRTC 客户端进行媒体通信的对象&#xff0c;是 mediasoup 最重要…

Electron案例解析——切换主题颜色的案例

效果图 核心 Electron的 nativeTheme.themeSource属性&#xff0c;值是string。有三个参数&#xff1a;system, light 和 dark&#xff0c;用来覆盖、重写Chromium内部的相应的值 Election的api描述值nativeTheme.themeSource被用来覆盖、重写Chromium内部的相应的值system, …

swagger-ui.html报错404

问题1&#xff1a;权限受限无法访问 由于采用的Shiro安全框架&#xff0c;需要在配置类ShiroConfig下的Shiro 的过滤器链放行该页面&#xff1a;【添加&#xff1a;filterChainDefinitionMap.put("/swagger-ui.html", "anon");】 public ShiroFilterFact…