Day02-zabbix自定义监控详解

Day02-zabbix自定义监控详解

  • 十、弥补监控死角-自定义监控
    • 10.1 概述
    • 10.2 自定义监控全流程
      • 1)客户端
        • a)通过命令、脚本取出对应的值
        • b)创建键值与重启
      • 2)服务端
        • a)服务端手动测试
        • b) web页面:创建监控项
        • c)web页面:触发器
        • d)web页面:添加图形
      • 3)自定义监控小结
    • 10.3 常用键值与触发器函数
      • 1)键值
      • 2)触发器函数
      • 3)触发器依赖
    • 10.4 自定义监控-参数案例
      • 1)客户端
      • 2)服务端
      • 3)小结
    • 10.5 使用模板
      • 1)创建模板
      • 2)添加自定义监控项
      • 3)复制触发器与图形
      • 4)模板关联主机
      • 5)配置linux客户端键值
      • 6)调试
      • 7)小结
  • 11、监控告警那点事
    • 11.1 告警分类
    • 11.2 邮件报警
      • 1)全流程
      • 2)个人邮箱准备(略)
      • 3)配置发件人
      • 4)配置收件人
      • 5)什么条件下给用户发送邮件?(条件/动作)
      • 6)邮箱告警小结
    • 11.3 微信报警
      • 1) 全流程
      • 2)准备环境 1-3
      • 3)配置发件人
      • 4)配置收件人
      • 5)整体测试
      • 6)小结
  • 今日总结

十、弥补监控死角-自定义监控

10.1 概述

  • 我们通过zbx客户端+各种模板实现监控。

  • linux zabbix agent模板

    • cpu
    • 磁盘
    • 内存,swap
    • 网络,网卡
    • 系统负载
    • 进程数量
    • 用户登录数量
    • 系统运行时长
  • 自定义监控应用场景:

    • 模板中没有我们所要的监控项
    • 默认的模板中监控项过多。
  • web01 监控80端口是否存在? 自定义监控

10.2 自定义监控全流程

  • 客户端:书写命令或脚本,修改配置文件。

  • 服务端:测试,web页面操作。

步骤流程
客户端linux:通过命令、脚本取出对应的值
linux:根据zbx要求按照格式,书写配置文件,创建键值键值key用于获取客户端数据
linux:重启客户端客户端测试键值是否可用zabbix_agent2 -t
服务端linux:服务端测试键值是否可用zabbix_get
web页面:键值与监控项关联
web页面:测试
web页面:图形
web页面:触发器(报警)是否发出警告
需要根据情况决定是否设置

1)客户端

a)通过命令、脚本取出对应的值
  • 监控80端口是否存在? 自定义监控

在这里插入图片描述

b)创建键值与重启
[root@lb01 ~]# grep -i include /etc/zabbix/zabbix_agent2.conf 
### Option: Include
#	You may include individual files or all files in a directory in the configuration file.
#	Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
# Include=
Include=/etc/zabbix/zabbix_agent2.d/*.conf
# Include=/usr/local/etc/zabbix_agent2.userparams.conf
# Include=/usr/local/etc/zabbix_agent2.conf.d/
# Include=/usr/local/etc/zabbix_agent2.conf.d/*.conf
# Include configuration files for plugins
Include=./zabbix_agent2.d/plugins.d/*.conf# 1. 写入自定义key(键值)
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
#命名最好就是 单词+"." (点)
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
# 2. 重启客户端
[root@lb01 ~]# systemctl restart zabbix-agent2.service
# 3. 客户端本地测试键值
[root@lb01 ~]# zabbix_agent2 -t ngx.port
ngx.port                                      [s|1]
# s表示类型 文字
# 1表示结果 键值的结果

温馨提示:zabbix_agent2.conf里面有

Include=/etc/zabbix/zabbix_agent2.d/*.conf

修改后记得重启zbx客户端

2)服务端

a)服务端手动测试
[root@m02-zbx-server ~]# yum install zabbix-get -y
# zabbix_get 向客户端要指定键值的数据。
zabbix_get命令
-s客户端ip地址
-p客户端端口号(默认是10050)
-k指定键值
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
1
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k ngx.port
0
b) web页面:创建监控项
  • 把客户端创建的键值与zbx服务端监控项关联起来。
  • 创建监控项

在这里插入图片描述

  • 配置监控项名字,填写:键值
    • 信息类型:这里键值结果都是数字,选择数字(无正负即可),如果有小数选择浮点类型,如果是字符,选择字符串。
    • 更新间隔:这里调整为5s秒,生产环境非必须尽量增长间隔比如1m,10m,1h等等

在这里插入图片描述

  • 历史数据与趋势数据
历史数据与趋势数据说明推荐配置
历史数据(history)保留时长:每个更新间隔获取到的数据推荐空间不乐观 可以设置为30d
趋势数据(trend)保留时长:记录数据变化的趋势,占用空间较少推荐保留更长时间 3650d
  • 监控项配置信息汇总

在这里插入图片描述

  • 进行监控项测试
  • 温馨提示:处处有测试,保证数据可用。
  • 测试结果

在这里插入图片描述

  • 添加监控项完成,查看添加的监控项

  • 这里的图形是zbx替我们根据数据自动创建的。

在这里插入图片描述
在这里插入图片描述

c)web页面:触发器
  • 根据监控项获取的数值(内容),决定是否要告警、是否要提示异常。

  • trigger扳机

  • 创建触发器

在这里插入图片描述

  • 配置触发器名字,严重程度和表达式

在这里插入图片描述

  • 表达式配置详情

在这里插入图片描述

  • 添加完成后的触发器配置

在这里插入图片描述

  • 出现故障后的提示

在这里插入图片描述

d)web页面:添加图形
  • 添加图形

在这里插入图片描述

  • 配置图形名字与添加监控项

在这里插入图片描述

  • 查看图形的预览(监控项要已经获取到数据才行)

在这里插入图片描述

  • 检查图形

在这里插入图片描述

3)自定义监控小结

  • 用一句话形容自定义监控:只要能通过命令、脚本取出来的东西就可以自定义监控。

  • 自定义监控流程:

    • 客户端 通过命令/脚本取出想要内容,UserParameter创建键值key,写入配置文件,客户端检测(zabbix_agent)
    • 服务端 命令测试键值(zabbix_get) ,web页面: 添加监控项 ,添加触发器,添加图形
    • web调试

10.3 常用键值与触发器函数

1)键值

  • 在监控项中使用,键值用于获取数据
常用键值说明
agent.hostname主机名 获取的是客户端配置文件中指定的主机名
system.hostname主机名 系统的主机名 类似于hostname
agent.ping服务端与客户端是否通畅 通1 不通非1
net.if.in[if,<mode>]网络接口上传(进入)流量统计。返回 整数 if表示网卡名字 可以忽略。
net.if.out[if,<mode>]流出流量统计。返回整数
proc.num[<name>,<user>,<state>,<cmdline>,<zone>]进程数。返回整数
name进程名字
user用户
state进程状态
cmdline进程对应的命令
net.tcp.port[,port]检查是否能建立 TCP 连接到指定端口。
返回 0 - 不能连接;1 - 可以连接
  • 案例过滤僵尸进程数量
state 写为 zomb 
zabbix_get -s 172.16.1.7 -p 10050 -k proc.num[,,zomb]
zabbix_get -s 172.16.1.7 -k net.if.in[eth0,]
zabbix_get -s 172.16.1.7 -k proc.num[nginx]
zabbix_get -s 172.16.1.7 -k net.tcp.port[,80]

zbx客户端键值
链接: https://www.zabbix.com/documentation/6.0/zh/manual/config/items/itemtypes/zabbix_agent

2)触发器函数

  • 写在触发器表达式中.用于设置报警条件.
  • 触发器函数要结合键值(监控项).
功能(函数)说明
对比与比较
last()最近值 (最新的值),取出最近一些值
nodata()是否有数据
diff()是否发生变化 一般配合md5check()
进行计算
avg()平均值
min()最小值
max()最大值
  • 分析案例: 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除
#倒数第1个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#1)
<>
#倒数第2个 /etc/passwd 的md5值
last(/lb01/vfs.file.cksum[/etc/passwd,sha256],#2)# 倒数第1个md5的值和倒数第2个md5的是 如果不相等了,则报警.
# 目的是用来检查/etc/passwd的变化情况,间接检查是否有用户增加或删除.
  • 书写触发器案例 swap
    • 条件1:swap总大小大于0(系统有swap)
    • #条件2:swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
#1. 找出满足要求的键值
system.swap.size[,total]) #取出swap总数
last(/web01/system.swap.size[,used])  #swap使用大小#条件swap总大小大于0
last(/web01/system.swap.size[,total])>0#条件swap当前使用的大小大于0(没有直接可以使用的监控项,这里调整为当前swap空闲率小于100)
last(/web01/system.swap.size[,pfree])<100#表示并且
-a   ==> and 
-o   ==> or#2.完整的表达式
last(/web01/system.swap.size[,total])>0 and last(/web01/system.swap.size[,used])>0

在这里插入图片描述

max(/Zabbix server/vm.memory.size[available],5m)<{$MEMORY.AVAILABLE.MIN} and last(/Zabbix server/vm.memory.size[total])>0 # 最近5分钟可用内存小于 指定的值
max(/Zabbix server/vm.memory.size[available],5m) < {$MEMORY.AVAILABLE.MIN} 
# and 并且
# 内存大小大于0 
last(/Zabbix server/vm.memory.size[total])>0

3)触发器依赖

  • 内存不足

  • 开始占用swap

  • 网络断开

  • ping

  • port

https://www.zabbix.com/documentation/6.0/zh/manual/config/triggers/dependencies

10.4 自定义监控-参数案例

  • 目标:检查指定用户是否存在异地登录。

  • 最简单想法:检查指定用户登录的ip地址。进行对比

在这里插入图片描述

  • 选择命令:

  • w who只能显示当前此时此刻,登录情况。

  • lastlog 实现

  • 键值:实现取出指定用户的登录的ip地址。

  • 服务端:web页面触发器做对比。

1)客户端

  • 使用命令
lastlog |grep root |awk '{print $3}'  
# root未来可能是其他用户.
  • 书写键值key
[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $3}'[root@lb01 ~]# systemctl restart zabbix-agent2.service 
[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
root             pts/1    10.0.0.1         一 56 12:30:07 +0800 2024[root@lb01 ~]# cat /etc/zabbix/zabbix_agent2.d/web.conf 
#自定义监控的格式
#UserParameter=起个名字,命令或脚本
UserParameter=ngx.port,ss -lntup |grep -w 80|wc -l
UserParameter=user.login[*],lastlog -u "$1"|awk 'NR==2{print $$3}'  # 两个$$符号
  • 如果使用自定义键值传参,awk取列的时候要使用$$列。

  • 如果没有传参,awk正常使用即可。

  • 理解自定义键值的传参

在这里插入图片描述

2)服务端

[root@m02-zbx-server ~]# zabbix_get -s 172.16.1.5 -k user.login[root]
10.0.0.1
  • web 添加监控项

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • web 触发器
最近1个值和上一个值是否一致(不一致)
last(/lb01/user.login[root],#1) <> last(/lb01/user.login[root],#2)

在这里插入图片描述

  • 查看

在这里插入图片描述

在这里插入图片描述

3)小结

  • 自定义监控,带参数。
  • 带参数+awk取列。($$取列)
  • 优先使用zbx内置key和模板中监控项。
  • 多看看模板中的监控项和触发器规则。{$XXXX}

10.5 使用模板

  • 通过创建自定义模板实现,监控项,触发器,图形批量使用。
  • 步骤
    • 创建模板
    • 添加自定义监控项᲼
    • 添加触发器
    • 添加图形
    • 模板关联主机
    • 客户端配置自定义键值

1)创建模板

在这里插入图片描述

  • 创建模板(模板名字要是英文的)

在这里插入图片描述

  • 检查模板信息

在这里插入图片描述

2)添加自定义监控项

  • 进入主机中复制即可

  • 选择要复制的监控项,选择复制即可(可批量多选)

在这里插入图片描述

  • 选择复制到模板中

在这里插入图片描述

  • 检查模板中监控项部分:多了2个监控项

在这里插入图片描述

在这里插入图片描述

3)复制触发器与图形

  • 主机–>触发器

在这里插入图片描述

  • 复制

在这里插入图片描述

  • 检查模板

在这里插入图片描述

  • 复制图形与复制触发器与监控项一致

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

4)模板关联主机

  • 进入主机中,批量选择要添加模板的主机,批量更新

在这里插入图片描述

  • 添加模板关联主机成功

在这里插入图片描述

  • 错误提示:

  • unkown metric xxxx 未知的键值(监控项)

  • 原因:客户端没有对应的自定义的键值.

  • 解决:复制过去对应的键值即可.

在这里插入图片描述

5)配置linux客户端键值

  • 分发键值配置文件到db01和nfs01
  • 重启zbx客户端

6)调试

  • 给监控项设置标记,方便分类
  • 温馨提示: zbx 5.x 及之前 应用集,zbx 6.x 叫标记。都是用于分类

7)小结

  • 找到1台主机进行测试标记,监控项,触发器,图形。。。
  • 然后创建模板,把对应的内容复制到模板中。
  • 模板关联主机
  • 键值的配置文件发过去

11、监控告警那点事

11.1 告警分类

报警方式企业应用场景
发邮件个人邮箱企业邮箱,免费使用
企业微信-告警应用(机器人)需要使用企业微信,免费
OA系统( 钉钉,飞鸽,…)与阿里云,免费
短信0.045元/条左右 (阿里云短信服务) 收费
电话收费
第三方报警工具/平台: onealert (省事)只需要配置onealert的平台信息,免费使用(限制),收费

11.2 邮件报警

1)全流程

  • 个人邮箱/企业邮箱
  • 开启个人邮箱 smtp功能 获取授权码
  • 发件人:配置zabbix 报警媒介类型
  • 收件人:配置 用户 接收报警
  • 发件条件:配置动作

2)个人邮箱准备(略)

  • 配置个人邮箱

在这里插入图片描述

3)配置发件人

  • a:配置发件人-报警媒介

在这里插入图片描述

在这里插入图片描述

  • 告警邮件内容: Messages template

  • 故障告警信息
    在这里插入图片描述

  • 故障恢复告警信息

在这里插入图片描述

  • 添加完成

在这里插入图片描述

#信息类型是: 问题( 发生故障 ) 
主题:   故障名称: {EVENT.NAME}
消息: 
故障始于 时间: {EVENT.TIME} 日期: {EVENT.DATE}
故障名称: {EVENT.NAME}
故障主机: {HOST.NAME}
严重程度: {EVENT.SEVERITY}
额外信息: {EVENT.OPDATA}
故障ID: {EVENT.ID}
触发器地址: {TRIGGER.URL}#信息类型是: Problem recov 故障解决的时候主题: 故障解决 in {EVENT.DURATION}: {EVENT.NAME}消息:
故障已经解决 时间: {EVENT.RECOVERY.TIME} 日期: {EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障持续时间: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
  • 进行测试

在这里插入图片描述

  • 提示发送成功
    在这里插入图片描述

  • 检查邮箱内容
    在这里插入图片描述

4)配置收件人

  • 本质:zbx的用户、用户组。

  • 对所有人员进行分组

    • 运维组 : lidao@qq.com
    • 开发组: lidaokaifa@qq.com
    • 老大组: lidaoboss@qq.com
  • b:收件人

  • 添加收件人信息

在这里插入图片描述

  • 配置收件人

在这里插入图片描述

  • 配置完成

在这里插入图片描述

5)什么条件下给用户发送邮件?(条件/动作)

  • c:动作–启用
    • 触发器动作

在这里插入图片描述

  • 启动即可

在这里插入图片描述

  • 已启用

在这里插入图片描述

  • 制造故障检查仪表盘

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 检查邮件

在这里插入图片描述

在这里插入图片描述

6)邮箱告警小结

  • 分组,用户
  • 配置发件人: 报警媒介类型
  • 配置收件人: 个人用户配置中添加报警媒介
  • 配置动作:(触发器动作)
    • 发送故障的提示
    • 发送故障恢复的提示

11.3 微信报警

1) 全流程

  • 微信报警,短信,电话,钉钉 自定义脚本报警

  • 通过脚本(py,shell),调用对方api接口(输入接口需要的信息,访问与使用api接口)

  • 企业微信

  • 企业微信id和告警机器人id和secret

  • 使用脚本(shell/python)调用企业微信api接口: python 输入收件人 信息

  • 发件人: 报警媒介(告警机器人)

  • 收件人: 个人 媒体类型

  • 动作: 已经完成

2)准备环境 1-3

#1.企业微信 id号
企业ID
ww6ac68d5d41044330#2.创建1个报警机器人(应用)
##机器人的id(应用id)  
AgentId
1000005##应用密码  
Ss7VFx8Mkzm8XABMNqVRp31zxNnxhbJ_rJzz8sPDgk4
#修改微信报警的脚本
vim /usr/local/share/zabbix/alertscripts/wechat.py#!/usr/bin/env python
#-*- coding: utf-8 -*-
#author: oldboy-linux
#date: 2021
#description: Zabbix Wechat Alerts Scripts
import requests
import sys
import os
import json
import logging
logging.basicConfig(level = logging.DEBUG, format = '%(asctime)s, %(filename)s, %(levelname)s, %(message)s',datefmt = '%a, %d %b %Y %H:%M:%S',filename = os.path.join('/tmp','wechat.log'),filemode = 'a')#id和secret需要修改
corpid='wxd074861951c67ba6'
appsecret='QtraZrI936DZ0jZ3aSWTZ-lFVheAMgLmq3toM4B9U1A'
agentid=1
#获取accesstoken
token_url='https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + appsecret
req=requests.get(token_url)
accesstoken=req.json()['access_token']
#发送消息
msgsend_url='https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + accesstoken#脚本参数
#touser=sys.argv[1]
toparty=sys.argv[1]
subject=sys.argv[2]
#toparty='3|4|5|6'
message=sys.argv[2] + "\n\n" +sys.argv[3]
params={
#       "touser": touser,"toparty": toparty,"msgtype": "text","agentid": agentid,"text": {"content": message},"safe":0
}
req=requests.post(msgsend_url, data=json.dumps(params))# 书写日志/tmp/wechat.log
logging.info('sendto:' + toparty + ';;subject:' + subject + ';;message:' + message)chmod +x /usr/lib/zabbix/alertscripts/wechat.py#安装python环境
yum install -y python3 python3-pip
通过pip3 命令安装requests依赖.
pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple requests#测试
python3 wechat.py 用户的id或组id 标题 内容 '下雨了'  '打雷下雨收衣服'
Traceback (most recent call last):
File "/usr/lib/zabbix/alertscripts/wechat.py", line 7, in <module>import requests
ImportError: No module named requests
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
pip install requests#web页面 发件人:报警媒介类型
{ALERT.SENDTO}  #发给谁
{ALERT.SUBJECT} #报警标题
{ALERT.MESSAGE} #报警内容故障目前已经解决时间: {EVENT.RECOVERY.TIME} 日期
{EVENT.RECOVERY.DATE}
故障名称: {EVENT.NAME}
故障经历多久: {EVENT.DURATION}
故障主机: {HOST.NAME}
故障级别: {EVENT.SEVERITY}
故障ID: {EVENT.ID}
{TRIGGER.URL}
#web页面 收件人:接收用户
#Web页面 配置-->动作
  • 需要去企业微信后台,开通白名单

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 错误提示:
故障提示:
python3 wechat-v2-lidao996.py lidao996  "webisdown" "nginx is down"
Traceback (most recent call last):File "wechat-v2-lidao996.py", line 7, in <module>import requests
ModuleNotFoundError: No module named 'requests'
故障解决:
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
新的安装方法:
python3 -m pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple

3)配置发件人

{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
  • 添加报警媒介类型

在这里插入图片描述

  • 添加报警内容模板

在这里插入图片描述

  • 测试发件人

在这里插入图片描述

4)配置收件人

在这里插入图片描述

在这里插入图片描述

5)整体测试

  • 制造新的故障

在这里插入图片描述

在这里插入图片描述

6)小结

  • 企业微信

  • 企业微信id和告警机器人id和secret

  • 使用脚本(shell/python3)调用企业微信api接口: python 输入收件人 信息

  • 发件人: 报警媒介类型

  • 收件人: 个人 媒体类型

  • 动作: 已经完成

  • 补充:通过微信脚本,发送到指定用户。

今日总结

链接: https://www.processon.com/view/link/62a6fb42e401fd5a4d63d3bc

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

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

相关文章

本地部署eXtplorer文件管理器并安装内网穿透构建私人云存储服务器

文章目录 1. 前言2. eXtplorer网站搭建2.1 eXtplorer下载和安装2.2 eXtplorer网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1.Cpolar云端设置3.2.Cpolar本地设置 4.公网访问测试5.结语 1. 前言 通过互联网传输文件&#xff0c;是互联网最重要的应用之一&#xff0c;无论是…

websevere服务器从零搭建到上线(一)|阻塞、非阻塞、同步、异步

文章目录 数据准备(阻塞和非阻塞)、数据读写(同步和异步)小总结&#xff08;陈硕老师的总结&#xff09; 知识拓展同步执行实例异步编程实例 八股 数据准备(阻塞和非阻塞)、数据读写(同步和异步) 无论是什么样的IO都包含两个阶段&#xff1a;数据准备和数据读写。 我们的网络IO…

1.6 Java全栈开发前端+后端(全栈工程师进阶之路)-前置课程Jdbc编程,使用Java通过Jdbc对数据库进行基础操作

原理图 用java代码实现连接数据库&#xff08;mysql&#xff09;的操作 因为数据库连接需要使用到API和URL&#xff0c;下面简单介绍下API和URL的概念&#xff0c; API&#xff1a; Application Programming Interface应用程序编程接口&#xff0c;就是一套类库 Java中的AP…

KaiwuDB 解析器之语义解析

KaiwuDB 解析器介绍 解析器是数据库系统的重要组成部分之一&#xff0c;主要的功能是将客户端输入的 SQL 语句分解为语法单元&#xff0c;然后将这些语法单元转化成数据库内部可识别的数据结构&#xff0c;最终生成数据库可以执行的计划。 KaiwuDB 的一条 SQL 执行的整个生命…

SQL 基础 | AVG 函数的用法

在SQL中&#xff0c;AVG()是一个聚合函数&#xff0c;用来计算某个列中所有值的平均值。 它通常与GROUP BY子句一起使用&#xff0c;以便对分组后的数据进行平均值计算。 AVG()函数在需要了解数据集中某个数值列的中心趋势时非常有用。 以下是AVG()函数的一些常见用法&#xff…

Java集合排序

1. 集合排序API 1.1 集合排序概述 集合排序是指对一个集合中的元素按照特定规则进行重新排列&#xff0c;以使得集合中的元素按照预定义的顺序呈现。 在集合排序中&#xff0c;通常需要定义一个比较规则&#xff0c;这个比较规则用于决定集合中的元素在排序后的顺序。元素之间…

本地部署开源白板工具Excalidraw并结合内网穿透远程绘制流程图

文章目录 1. 安装Docker2. 使用Docker拉取Excalidraw镜像3. 创建并启动Excalidraw容器4. 本地连接测试5. 公网远程访问本地Excalidraw5.1 内网穿透工具安装5.2 创建远程连接公网地址5.3 使用固定公网地址远程访问 本文主要介绍如何在Ubuntu系统使用Docker部署开源白板工具Excal…

渗透测试工具--awvs

安装 pull 这个镜像&#xff0c;注&#xff1a;内部映射端口 3443 软件页面 UserName: awvsawvs.lan PassWord: Awvsawvs.lan 或 使用以下命令无脑安装 bash <(curl -sLk https://www.fahai.org/aDisk/Awvs/check.sh) xrsec/awvs:preview 样式如下 若未成功&#xff0…

【网络原理】HTTPS 的工作过程

系列文章目录 【网络通信基础】网络中的常见基本概念 【网络编程】网络编程中的基本概念及Java实现UDP、TCP客户端服务器程序&#xff08;万字博文&#xff09; 【网络原理】UDP协议的报文结构 及 校验和字段的错误检测机制&#xff08;CRC算法、MD5算法&#xff09; 【网络…

面试集中营—Redis架构篇

一、Redis到底是多线程还是单线程 1、redis6.0版本之前的单线程&#xff0c;是指网络请求I/O与数据的读写是由一个线程完成的&#xff1b; 2、redis6.0版本升级成了多线程&#xff0c;指的是在网络请求I/O阶段应用的多线程技术&#xff1b;而键值对的读写还是由单线程完成的。所…

【prometheus】Pushgateway安装和使用

目录 一、Pushgateway概述 1.1 Pushgateway简介 1.2 Pushgateway优点 1.3 pushgateway缺点 二、测试环境 三、安装测试 3.1 pushgateway安装 3.2 prometheus添加pushgateway 3.3 推送指定的数据格式到pushgateway 1.添加单条数据 2.添加复杂数据 3.SDk-prometheus-…

C语言 举例说明循环嵌套

今天 我们来说循环的嵌套 如果一个循环体内 又包含了另一个循环结构 我们称之为循环的嵌套 我们之前学的 While do-while for 都可以进行相互的嵌套 如下图 在 While 循环语句中再嵌套一个 While 循环语句 do-while 中嵌套 do-while for中嵌套 for 例如 我们做一个九九乘法…

Oracle Database 23ai 正式发布,超级巨兽(集关系型、向量、文档、图、缓存、分布式数据库一体的全能数据库)

Oracle23c改名为Oracle23ai&#xff0c;也意味着Oracle数据库正式从Cloud进入AI时代。Oracle23ai版本是一个超级巨兽&#xff0c;简单总结下&#xff1a; AI能力&#xff1a;内置向量数据库&#xff0c;内置ONNX模型数据处理&#xff0c;内置Text2SQL&#xff0c;内置的机器学习…

QT5之lambda+内存回收机制

使用lambda需要 配置c11 所以在点.pro文件里面配置添加如下 CONFIG c11 使用到qDebug 打印包含头文件 #include<QDebug> lambda 表达式使用 代替槽如下 #include "mainwidget.h" #include<QPushButton> #include<QDebug> mainWidget::mainWid…

js模块化:修改导入模块的内容,会有影响吗?

起因 element-ui的popper组件相关的层级&#xff0c;是使用popup-manager来统一管理的。 之前试图在自己的组件里导入并使用element-ui的popup-manager&#xff0c;但是层级老是和element-ui组件的层级冲突&#xff0c;看了下源码&#xff0c;竟意外发现&#xff0c;使用popu…

毕业设计参考-PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序,OpenCV、Modbus通信、YOLO目标检测综合应用

“PyQt5-YOLOv8-鱼头鱼尾鱼长测量程序”是一个特定的软件程序&#xff0c;用于通过图像处理和目标检测技术来测量鱼类的长度。 视频效果&#xff1a; 【毕业设计】基于yolo算法与传统机器视觉的鱼头鱼尾识别_哔哩哔哩_bilibili 这个程序结合了多种技术&#xff1a; 1. OpenCV…

【Linux极简教程】常见实用命令不断更新中......

【Linux极简教程】常见实用命令不断更新中...... 常见问题1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dpkg) 常见问题 1.Waiting for cache lock: Could not get lock /var/lib/dpkg/lock. It is held by process xxxx(dp…

【Docker】★★★

docker 的网络模式 ●host模式&#xff1a;使用 --nethost 指定 容器与宿主机共享网络命名空间、ip和端口 ●container模式&#xff1a;使用 --netcontainer:NAME_or_ID 指定 新建的容器共享已有容器的网络命名空间、ip和端口 ●none模式&#xff1a;使用 --netnone 指定 不进行…

阿里实习生:面试阿里其实并没有那么难。

愉快的五一假期已经结束了, 又要投入到学习和工作当中了。 今天分享一位同学在阿里的Go后端实习面经详解, 希望对你有帮助。 Go里有哪些数据结构是并发安全的&#xff1f; 并发安全就是程序在并发的情况下执行的结果都是正确的&#xff1b; Go中数据类型分为两大类&#xff…

24年最新抖音、视频号0成本挂机,单号每天收益上百,可无限挂

详情介绍 这次给大家带来5月份最新的短视频挂机项目&#xff0c;简单易上手&#xff0c;而且不需要任何投入&#xff0c;经过测试收益非常可观&#xff0c;软件完全免费&#xff0c;特别适合没有时间但是想做副业的家人们