1.查看数据

2.中文乱码

字体原因

红色框内

如何解决

安装文泉驿微米黑(常用中文字体)

[root@zabbix ~]$ yum install -y wqy-microhei-fonts

[root@zabbix ~]$ ll /usr/share/fonts/wqy-microhei/
total 5060
-rw-r–r– 1 root root 5177387 May 25 2009 wqy-microhei.ttc

[root@zabbix ~]$ cd /code/zabbix/assets/fonts/
[root@zabbix /code/zabbix/assets/fonts]$ ll
total 740
-rw-r–r– 1 nginx nginx 756072 Apr 16 19:00 DejaVuSans.ttf
[root@zabbix /code/zabbix/assets/fonts]$ mv DejaVuSans.ttf DejaVuSans.ttf.bak

[root@zabbix /code/zabbix/assets/fonts]$ cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc  /code/zabbix/assets/fonts/DejaVuSans.ttf DejaVuSans.ttf

[root@zabbix /code/zabbix/assets/fonts]$ ll
total 5060
-rw-r–r– 1 nginx nginx 5177387 Aug 21 22:14 DejaVuSans.ttf

3. Zabbix-客户端-创建Key

zabbix_agent2 -p 是 Zabbix Agent 2 的一个重要命令,用于 列出所有支持的内置监控键值(built-in keys)及其详细信息。这些内置键值是 Zabbix 预定义的、无需额外配置即可直接使用的监控项,用于采集系统、服务等基础指标

命令作用解析

zabbix_agent2:Zabbix 代理程序(第二代代理,性能更优,支持更多功能)。

-p(或 –print):参数用于打印所有支持的监控键值(包括内置键和用户自定义键,若有),并显示键值的类型、描述、参数要求等

[root@zabbix ~]$ zabbix_agent2 -p | awk ‘/^[a-z]+\./{print $1}’
agent.hostname
agent.ping
agent.variant
agent.version
system.localtime[utc]
system.run[echo
web.page.get[localhost,,80]
developers. 
web.page.perf[localhost,,80]
web.page.regexp[localhost,,80,OK]
vfs.file.size[/etc/passwd]
vfs.file.time[/etc/passwd,modify]
vfs.file.exists[/etc/passwd]
vfs.file.contents[/etc/passwd]
vfs.file.regexp[/etc/passwd,root]
vfs.file.regmatch[/etc/passwd,root]
vfs.file.md5sum[/etc/passwd]
vfs.file.cksum[/etc/passwd]
vfs.file.owner[/etc/passwd]
vfs.file.permissions[/etc/passwd]
vfs.file.get[/etc/passwd]
vfs.dir.size[/var/log]
vfs.dir.count[/var/log]
vfs.dir.get[/var/log]
net.dns[,zabbix.com]
net.dns.record[,zabbix.com]
net.tcp.dns[,zabbix.com]
net.tcp.dns.query[,zabbix.com]
net.tcp.port[,80]
net.tcp.listen[80]
net.tcp.service[ssh,127.0.0.1,22]
net.tcp.service.perf[ssh,127.0.0.1,22]
net.tcp.socket.count[,80]
net.udp.listen[68]
net.udp.service[ntp,127.0.0.1,123]
net.udp.service.perf[ntp,127.0.0.1,123]
net.udp.socket.count[,53]
system.users.num
log.count[logfile]
logrt.count[logfile]
zabbix.stats[127.0.0.1,10051]
kernel.maxfiles
kernel.maxproc
kernel.openfiles
vfs.fs.size[/,free]
vfs.fs.inode[/,free]
vfs.fs.discovery
vfs.fs.get
vfs.dev.write[sda,operations]
net.if.in[lo,bytes]
net.if.out[lo,bytes]
net.if.total[lo,bytes]
net.if.collisions[lo]
net.if.discovery
vm.memory.size[total]
proc.cpu.util[inetd]
proc.num[inetd]
proc.mem[inetd]
system.cpu.switches
system.cpu.intr
system.cpu.util[all,user,avg1]
system.cpu.load[all,avg1]
system.cpu.num[online]
system.cpu.discovery
system.uname
system.hw.chassis
system.hw.cpu
system.hw.devices
system.hw.macaddr
system.sw.arch
system.sw.os
system.sw.packages
system.swap.size[all,free]
system.swap.in[all]
system.swap.out[all]
system.uptime
system.boottime
modbus.get[tcp://localhost]
system.hostname

awk 脚本 /^[a-z]+\./{print $1} 的作用:

^[a-z]+\.:正则表达式,匹配以小写字母开头、后跟一个或多个小写字母、再跟一个点(.) 的行(这是 Zabbix 内置监控项的典型命名格式,如 system.、vfs.、net. 等)。

{print $1}:打印符合条件的行的第一个字段(即监控项的键,如 system.cpu.load[all,avg1]、vfs.file.size[/etc/passwd])。

输出内容说明

执行命令后,会输出类似以下格式的信息(以常见内置键为例)

system.cpu.load[average1]                    [float]  System cpu load average (1 minute)
system.cpu.load[average5]                    [float]  System cpu load average (5 minutes)
system.cpu.load[average15]                   [float]  System cpu load average (15 minutes)
vm.memory.size[total]                        [int]    Total memory size in bytes
vm.memory.size[available]                    [int]    Available memory size in bytes
vm.memory.size[used]                         [int]    Used memory size in bytes
disk.space[/,total]                          [int]    Total disk space on / in bytes
disk.space[/,free]                           [int]    Free disk space on / in bytes
disk.space[/,used]                           [int]    Used disk space on / in bytes
net.if.in[eth0,bytes]                        [int]    Incoming bytes on interface eth0
net.if.out[eth0,bytes]                       [int]    Outgoing bytes on interface eth0

每行包含 3 部分核心信息

键值名称(如 system.cpu.load[average1]):监控项的唯一标识,部分键值需要参数(如 [average1] 表示 1 分钟负载)。

数据类型(如 [float][int]):返回值的数据类型(浮点数、整数等)。

描述:键值的功能说明(如 “1 分钟系统 CPU 负载”)

实用场景

查询可用监控项:当你需要配置新监控项时,用此命令确认 Zabbix Agent 2 支持哪些内置键,避免使用不存在的键值。

验证键值参数:部分键值需要指定参数(如 disk.space[/,free] 中的 / 表示根分区),通过输出可明确参数格式。

排查监控项问题:若某个监控项提示 “不支持的键值”,可通过此命令确认该键是否存在或参数是否正确

常用内置键值举例

键值名称 用途 参数说明
system.cpu.load[averageN] 系统 CPU 负载 N 为 1/5/15(分钟)
vm.memory.size[param] 内存使用情况 param 为 total/available/used 等
disk.space[fs,param] 磁盘空间 fs 为文件系统(如 /),param 为 total/free/used 等
net.if.in[if,param] 网卡入站数据 if 为网卡名(如 eth0),param 为 bytes/packets 等
system.uptime 系统运行时间 无参数

Zabbix 内置了大量监控键值(key),覆盖系统资源、网络、磁盘、进程等场景。以下是 最常用的核心 key 分类整理,方便快速配置监控项

系统资源监控

key 名称 参数说明 描述(返回值) 用途场景
system.cpu.load[averageN] N 为 1/5/15(分钟) 系统 CPU 负载平均值(浮点型) 监控 CPU 负载趋势
system.cpu.util[,user] 第二个参数:user(用户态)、system(系统态)、idle(空闲)等 CPU 使用率(百分比) 监控 CPU 各状态占比
system.uptime 无参数 系统运行时间(秒) 监控服务器稳定运行时长
system.uname 无参数 系统信息(内核版本、主机名等字符串) 记录服务器基本信息

内存监控

key 名称 参数说明 描述(返回值) 用途场景
vm.memory.size[total] total(总内存)、available(可用)、used(已用)、free(空闲)等 内存大小(字节) 监控总内存 / 可用内存
vm.memory.util[used] used(已用占比)、available(可用占比)等 内存使用率(百分比) 监控内存使用趋势

磁盘监控

key 名称 参数说明 描述(返回值) 用途场景
disk.space[fs,total] fs 为文件系统(如 //data);第二个参数:total(总空间)、free(空闲)、used(已用)等 磁盘空间大小(字节) 监控磁盘总容量 / 剩余空间
disk.space[fs,usedp] fs 同上;usedp 为已用百分比 磁盘使用率(百分比) 磁盘空间告警(如超过 80%)
vfs.fs.inode[/,usedp] fs 为文件系统;usedp 为 inode 已用百分比 inode 使用率(百分比) 避免 inode 耗尽导致无法创建文件

网络监控

key 名称 参数说明 描述(返回值) 用途场景
net.if.in[if,bytes] if 为网卡名(如 eth0ens33);bytes(字节)、packets(数据包)、errors(错误数)等 网卡入站数据量 / 错误数 监控网络流入流量 / 异常
net.if.out[if,bytes] 参数同上 网卡出站数据量 / 错误数 监控网络流出流量 / 异常
net.tcp.listen[port] port 为端口号(如 80、443) 端口监听状态(1 = 监听,0 = 未监听) 监控服务端口是否存活

进程与服务监控

key 名称 参数说明 描述(返回值) 用途场景
proc.num[process] process 为进程名(如 nginxmysql 进程数量(整数) 监控进程是否运行(数量 > 0)
net.udp.port[port] port 为 UDP 端口号 UDP 端口监听状态(1 = 监听,0 = 未监听) 监控 UDP 服务(如 DNS)
system.service.state[name] name 为服务名(如 nginx.service 服务状态(running/stopped 等字符串) 监控系统服务运行状态

日志与文件监控

key 名称 参数说明 描述(返回值) 用途场景
vfs.file.size[path] path 为文件路径(如 /var/log/messages 文件大小(字节) 监控日志文件是否过大
vfs.file.exists[path] path 为文件 / 目录路径 文件是否存在(1 = 存在,0 = 不存在) 监控关键文件是否丢失
log[/var/log/nginx/error.log,error] 第一个参数为日志路径,第二个为关键字 包含关键字的日志行数(最新匹配) 监控错误日志中的异常关键字

文件基础属性监控

key 名称 参数说明 返回值类型 描述与用途
vfs.file.exists[path] path:文件 / 目录的绝对路径(如 /etc/passwd 整数 1 = 存在,0 = 不存在
👉 监控关键文件是否丢失(如配置文件、证书)
vfs.file.size[path] path:文件路径 整数(字节) 文件大小
👉 监控日志文件是否过大(如 /var/log/messages
vfs.file.mtime[path] path:文件路径 整数(时间戳) 文件最后修改时间(Unix 时间戳)
👉 监控文件是否被更新(如配置文件篡改检测)
vfs.file.ctime[path] path:文件路径 整数(时间戳) 文件最后状态变更时间(权限 / 所有者修改)
👉 监控文件权限是否被异常修改
vfs.file.mode[path] path:文件路径 字符串 文件权限(如 0644
👉 确保关键文件权限合规(如 /etc/sudoers 权限是否为 0440)

文件内容与完整性监控

key 名称 参数说明 返回值类型 描述与用途
vfs.file.md5sum[path] path:文件路径 字符串 文件的 MD5 哈希值
👉 监控文件内容是否被篡改(如核心配置文件)
vfs.file.sha256sum[path] path:文件路径 字符串 文件的 SHA256 哈希值
👉 更高安全性的内容完整性校验
vfs.file.contents[path] path:文件路径 字符串 文件内容(仅适合小文件)
👉 监控配置文件中的关键参数(如 nginx.conf 中的端口配置)
log[file,regexp] file:日志文件路径;regexp:关键字(如 error 整数 匹配关键字的最新行数(仅监控新增内容)
👉 监控日志中的错误 / 警告信息(如 Nginx 错误日志)
logrt[file_pattern,regexp] file_pattern:滚动日志匹配(如 /var/log/nginx/access_*.log);regexp:关键字 整数 匹配滚动日志中关键字的最新行数
👉 监控按时间分割的日志(如按天生成的访问日志)

目录监控

key 名称 参数说明 返回值类型 描述与用途
vfs.dir.size[path] path:目录路径 整数(字节) 目录总大小(含子目录)
👉 监控备份目录 / 临时目录大小(如 /tmp/backup
vfs.dir.count[path,pattern] path:目录路径;pattern:文件匹配(如 *.log,可选) 整数 目录下匹配模式的文件数量
👉 监控日志目录下的文件数是否过多(如 /var/log 下的 .log 文件)
vfs.dir.perm[path] path:目录路径 字符串 目录权限(如 0755
👉 确保目录权限合规(如 /var/www 权限是否为 0755)

实用场景举例

监控关键配置文件是否被篡改:
用 vfs.file.md5sum[/etc/nginx/nginx.conf] 记录哈希值,当值变化时触发告警(文件被修改)。
监控日志文件增长过快:
用 vfs.file.size[/var/log/mysql/error.log] 配置阈值(如超过 1GB 告警)。
检测服务是否生成新日志:
用 vfs.file.mtime[/var/log/redis/redis.log] 监控最后修改时间,若长时间未更新(如 24 小时),可能服务异常。
监控临时目录文件数量:
用 vfs.dir.count[/tmp,*.tmp] 当 .tmp 文件数超过 1000 时告警(可能存在内存泄漏)

内置键值key

[root@web01 ~]$ zabbix_agent2 -p

如访问时没有权限如何处理

[root@zabbix ~]$ zabbix_get -s web01 -k vfs.file.contents[/etc/shadow]
ZBX_NOTSUPPORTED: Cannot open file /etc/shadow: open /etc/shadow: permission denied

提权(客户端)

[root@web01 ~]$ visudo

[root@web01 ~]$ tail -2 /etc/sudoers
zabbix ALL=(ALL) NOPASSWD: ALL

4.自定义监控

书写格式

/etc/zabbix/zabbix_agent2.conf

Option: UserParameter
# User-defined parameter to monitor. There can be several user-defined parameters.
# Format: UserParameter=<key>,<shell command>
# See ‘zabbix_agentd’ directory for examples.
#
# Mandatory: no
# Default:
# UserParameter=

格式:UserParameter=<key>,<shell command>

<key>:监控项的唯一标识(在 Zabbix 前端配置时需要使用此 key),命名建议简洁且有意义(如 system.disk.usage、app.response.time)。

<shell command>:实际执行的 shell 命令 / 脚本,其输出结果将作为监控项的采集值(需确保命令能稳定返回有效值,如数字、字符串等)。

特性:

可配置多个 UserParameter,每个对应一个独立的监控项。

非必填项(默认无配置),需根据业务需求手动添加

端口

客户端

[root@web01 ~]$ vim /etc/zabbix/zabbix_agent2.d/web.conf
[root@web01 ~]$ systemctl restart zabbix-agent2.service
[root@web01 ~]$ tail -1 /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=nginx.dk,ss -lntup |grep -wc 80

服务端

[root@zabbix ~]$ zabbix_get -s web01 -k nginx.dk
2

权限

客户端

[root@web01 ~]$ cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=conf.shadow,sudo wc -l /etc/shadow|cut -d ” ” -f1

[root@web01 ~]$ systemctl restart zabbix-agent2.service

服务端

[root@zabbix ~]$ zabbix_get -s web01 -k conf.shadow
39

添加监控

触发器

5.创建监控一些相关说明

1. Zabbix 客户端

  • 工作方式:被动模式。Zabbix 服务器主动向被监控主机的 Zabbix agent 发送请求(如用 zabbix_get 命令),agent 接收请求后返回系统 / 应用指标(如 CPU、内存、磁盘使用率)。
  • 适用场景:监控已安装 Zabbix agent 的服务器(Linux/Windows 等),适合 小规模、网络稳定 的环境(由服务器主导采集节奏)。

2. Zabbix 客户端 (主动式)

  • 工作方式:主动模式。Zabbix agent 主动向服务器 / Proxy推送数据,无需服务器先发起请求。
  • 适用场景:监控 大规模主机(减少服务器请求压力)、跨防火墙环境(agent 主动连服务器,无需开放入站端口)。需在 agent 配置文件中指定服务器地址。

3. 简单检查

  • 工作方式:Zabbix 服务器直接执行基础检查,无需 agent 或其他代理。
  • 典型场景:
    • ICMP ping(检查主机网络可达性);
    • TCP 端口检查(如 80 端口是否开放,判断 Web 服务是否存活)。
  • 特点:用于 基础可用性监控(网络设备、服务端口的 “存活检测”)。

4. SNMP 代理

  • 工作方式:基于 SNMP 协议(支持 v1/v2c/v3),向支持 SNMP 的设备(交换机、路由器等)发送请求,通过 OID(对象标识符) 获取指标(如接口流量、设备温度)。
  • 前提条件:设备需开启 SNMP 服务,配置 共同体(Community,v1/v2c) 或 认证信息(v3)。
  • 适用场景:监控网络设备、不支持 Zabbix agent 的专用设备(如打印机、工业设备)。

5. SNMP trap

  • 工作方式:Zabbix 作为SNMP trap 接收器,接收设备主动发送的陷阱(Trap)消息。
  • 典型场景:设备发生异常(如接口 down、温度超限)时,主动向 Zabbix 推送告警,无需 Zabbix 主动查询。
  • 特点:用于 实时接收设备异常通知,需配置 trap 处理程序(如snmpd服务、Zabbix trap 脚本)。

6. Zabbix 内部

  • 工作方式:监控 Zabbix 服务器自身的内部指标,通过内置键值(如 zabbix[hosts] 表示已配置主机数,zabbix[triggers] 表示触发器数量)获取数据。
  • 适用场景:监控 Zabbix 服务器的 运行状态与内部统计信息(如服务器负载、配置项数量)。

7. Zabbix 采集器

  • 工作方式:接收 外部程序主动推送的数据(如通过 zabbix_sender 工具、自定义脚本向 Zabbix 发送数据)。
  • 适用场景:自定义数据采集(如业务系统订单量、日志解析结果等,由外部程序主动上报)。

8. 外部检查

  • 工作方式:Zabbix 服务器 / Proxy 执行 外部脚本 / 命令(需放在 Zabbix 配置的 ExternalScripts 目录),脚本输出结果作为监控值。
  • 适用场景:自定义监控(如解析业务日志、调用特殊 API、执行复杂命令获取指标)。

9. 数据库监控

  • 工作方式:直接连接数据库(MySQL、PostgreSQL、Oracle 等),执行 SQL 查询获取指标(如连接数、慢查询数、表数据量)。
  • 前提条件:需配置数据库连接信息(地址、端口、用户名、密码),SQL 查询结果需为 单个数值(如 SELECT COUNT(*) FROM table)。
  • 适用场景:监控数据库性能、业务表状态等。

10. HTTP 代理

  • 工作方式:发送 HTTP/HTTPS 请求 到指定 URL,根据响应内容(状态码、响应时间、页面内容)生成指标。
  • 典型场景:
    • 网站可用性(状态码是否为 200);
    • API 接口响应时间;
    • 页面关键词匹配(如检查 “服务正常” 是否存在)。
  • 适用场景:Web 服务、API 接口的监控。

11. IPMI 客户端

  • 工作方式:通过 IPMI 协议 与服务器的 BMC(基板管理控制器)通信,获取 硬件级指标(CPU 温度、风扇转速、电源状态、磁盘健康度)。
  • 特点:无需依赖操作系统或 agent,即使服务器关机 也能采集硬件数据;需服务器支持 IPMI 并配置 IPMI 网络。
  • 适用场景:服务器硬件状态监控。

12. SSH 客户端

  • 工作方式:通过 SSH 协议 远程登录目标主机,执行命令(如 df -h 查磁盘、top 查 CPU)并解析输出。
  • 适用场景:监控 无法安装 Zabbix agent 但支持 SSH 的设备(如网络设备、嵌入式系统),安全性比 Telnet 高。

13. TELNET 客户端

  • 工作方式:通过 Telnet 协议 远程登录目标主机执行命令。
  • 特点:与 SSH 类似,但 Telnet 是 明文传输,安全性低;适用于老旧设备或临时调试场景。

14. JMX agent 代理程序

  • 工作方式:通过 JMX 协议 连接 Java 应用(如 Tomcat、JVM),获取 JVM 内存、线程、类加载等指标。
  • 前提条件:Java 应用需开启 JMX 远程连接(配置 com.sun.management.jmxremote 等参数),Zabbix 通过 JMX 端口(默认 12345)采集数据。
  • 适用场景:Java 应用服务器(如 Tomcat)、JVM 进程的监控。

15. 可计算的

  • 工作方式:基于 已有监控项的数值,通过公式(四则运算、函数)计算生成新指标(如 (已用空间 / 总空间) * 100 得到磁盘使用率)。
  • 特点:不实际采集数据,依赖其他监控项结果,在 Zabbix 服务器端计算。
  • 适用场景:需要 “二次加工” 的指标(如聚合、比率计算)。

16. 相关项目

  • 工作方式:依赖 “主监控项” 的原始数据,提取多个子指标(如主监控项采集日志,相关项目用正则从日志中分别提取 “错误数”“警告数”)。
  • 特点:减少重复采集(一次采集,多次提取),提高效率。

17. 脚本

  • 工作方式:执行 Zabbix 服务器 / Proxy 上的 自定义脚本 获取数据,与 “外部检查” 类似,但更灵活(可在 Web 界面配置脚本参数)。
  • 适用场景:复杂业务逻辑的自定义指标采集。

Zabbix 日常监控中最常用的类型及其典型

1. Zabbix agent(被动模式)

  • 典型场景:监控已安装 Zabbix agent 的服务器(Linux/Windows)的系统基础指标(CPU 使用率、内存占用、磁盘空间、进程状态等)。
  • 特点:服务器主动向 agent 发请求,适合小规模、网络稳定的环境。

2. Zabbix agent (主动式)

  • 典型场景:监控大规模主机集群(如数百台服务器),或跨防火墙环境(agent 主动连服务器,无需开放入站端口)。
  • 特点:agent 主动推送数据,减轻服务器请求压力。

3. SNMP 代理

  • 典型场景:监控网络设备(交换机、路由器、防火墙)的接口流量、设备温度、端口状态等;或监控不支持 Zabbix agent 的 IoT 设备、工业设备。
  • 特点:依赖设备的 SNMP 服务,需配置共同体(community)或认证信息(v3)。

4. 外部检查 / 脚本

  • 典型场景:自定义业务指标监控(如解析业务日志中的错误数、调用内部 API 获取订单量、执行 Shell/Python 脚本采集特殊指标)。
  • 特点:灵活适配非标监控需求,脚本需放在 Zabbix 配置的 ExternalScripts 目录。

5. HTTP 代理

  • 典型场景:监控Web 服务可用性(状态码是否为 200)、API 接口响应时间(如 RESTful API 的请求耗时)、页面关键词匹配(如 “服务正常” 是否存在)。
  • 特点:模拟浏览器请求,支持 HTTP/HTTPS,可配置请求头、认证信息。

6. SSH 客户端

  • 典型场景:监控无法安装 Zabbix agent 但支持 SSH 的设备(如老旧网络设备、嵌入式系统),远程执行命令(如 df -h 查磁盘、top 查进程)并解析输出。
  • 特点:安全性高于 Telnet(加密传输),需配置 SSH 用户名 / 密码或密钥。

7. 数据库监控

  • 典型场景:监控数据库性能(如 MySQL 连接数、慢查询数、InnoDB 缓冲池命中率)、业务表数据量(如用户表行数)。
  • 特点:直接连接数据库执行 SQL 查询,需配置数据库地址、端口、账号密码。

8. 简单检查

  • 典型场景:基础可用性监控,如ICMP ping 检测主机是否在线、TCP 端口检查(如 80/443 端口是否开放)。
  • 特点:无需 agent,服务器直接执行检查,适合快速判断服务是否存活。
这些类型覆盖了服务器、网络设备、Web 服务、数据库、自定义业务等绝大多数监控场景,是日常配置中最常选用的类型。

 

 

 

常见问题

1.脚本/命令执行时间问题

zabbix默认限制命令或脚本执行时间不能超过
修改 服务端和客户端 Timeout选项

[root@web01 ~]$ cat /etc/zabbix/zabbix_agent2.d/web.conf
UserParameter=conf.shadow,sudo wc -l /etc/shadow|cut -d ” ” -f1
UserParameter=sleep,sleep 20

[root@zabbix ~]$ zabbix_get -s web01 -k sleep
ZBX_NOTSUPPORTED: Timeout while executing a shell script. (ZBX_NOTSUPPORTED执行 shell 脚本

解决方案

[root@zabbix ~]$ grep ‘Timeout’ /etc/zabbix/zabbix_agent2.conf
### Option: Timeout
# Spend no more than Timeout seconds on processing
# Timeout=3
### Option:PluginTimeout
# Timeout for connections with external plugins.
# PluginTimeout=

修改

 

作者 dmxsp

发表回复

您的电子邮箱地址不会被公开。