其他教程

其他教程

Products

当前位置:首页 > 其他教程 >

基于zabbix4.0自定义脚本监控tomcat--多个tomcat端口处理

GG网络技术分享 2025-03-18 16:14 0


大家好,这里是关于[服务器网络中转,端口转发脚本使用教程],[基于zabbix4.0自定义脚本监控tomcat--多个tomcat端口处理]问题的解答,希望对您有所帮助。如果你还想了解更多这方面的信息,请关注本站其他相关内容,共同学习吧!

服务器网络中转,端口转发脚本使用教程

教程大全iptables,服务器中转,端口转发,端口转发脚本,网络中转

服务器网络中转,端口转发脚本使用教程

个人收藏

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/iptables-pf.sh && chmod +x iptables-pf.sh && bash iptables-pf.sh

一下是配置过程的步骤

请输入 iptables 欲转发至的 远程端口 [1-65535] (支持端口段 如 2333-6666, 被转发服务器):

比如输入:10000-11000

欲转发端口 : 10000-11000

请输入 iptables 欲转发至的 远程IP(被转发服务器):

比如输入:223.3.3.3

欲转发服务器IP : 223.3.3.3

请输入 iptables 本地监听端口 [1-65535] (支持端口段 如 2333-6666)
(默认端口: 10000-11000):

比如输入:10000-11000

本地监听端口 : 10000-11000

请输入 本服务器的 公网IP网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP,回车自动检测):

本服务器IP : 1.1.1.1

比如输入:1.1.1.1

请输入数字 来选择 iptables 转发类型:
1. TCP
2. UDP
3. TCP+UDP

(默认: TCP+UDP):

比如输入:3

请检查 iptables 端口转发规则配置是否有误 !

本地监听端口 : 10000-11000
服务器 IP : 223.3.3.3

欲转发的端口 : 10000-11000
欲转发 IP : 1.1.1.1

转发类型 : TCP+UDP

脚本内容备份(防止哪天上面链接里的脚本被删):

#!/usr/bin/env bash

PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin

export PATH

#=================================================

#System Required: CentOS/Debian/Ubuntu

#Description: iptables Port forwarding

#Version: 1.1.1

#Author: Toyo

#=================================================

sh_ver=\"1.1.1\"

Green_font_prefix=\"\\033[32m\" && Red_font_prefix=\"\\033[31m\" && Green_background_prefix=\"\\033[42;37m\" && Red_background_prefix=\"\\033[41;37m\" && Font_color_suffix=\"\\033[0m\"

Info=\"${Green_font_prefix}[信息]${Font_color_suffix}\"

Error=\"${Red_font_prefix}[错误]${Font_color_suffix}\"

Tip=\"${Green_font_prefix}[注意]${Font_color_suffix}\"

check_iptables(){

iptables_exist=$(iptables -V)

[[ ${iptables_exist} = \"\" ]] && echo -e \"${Error} 没有安装iptables,请检查 !\" && exit 1

}

check_sys(){

if [[ -f /etc/redhat-release ]]; then

release=\"centos\"

elif cat /etc/issue | grep -q -E -i \"debian\"; then

release=\"debian\"

elif cat /etc/issue | grep -q -E -i \"ubuntu\"; then

release=\"ubuntu\"

elif cat /etc/issue | grep -q -E -i \"centos|red hat|redhat\"; then

release=\"centos\"

elif cat /proc/version | grep -q -E -i \"debian\"; then

release=\"debian\"

elif cat /proc/version | grep -q -E -i \"ubuntu\"; then

release=\"ubuntu\"

elif cat /proc/version | grep -q -E -i \"centos|red hat|redhat\"; then

release=\"centos\"

fi

#bit=`uname -m`

}

install_iptables(){

iptables_exist=$(iptables -V)

if [[ ${iptables_exist} != \"\" ]]; then

echo -e \"${Info} 已经安装iptables,继续...\"

else

echo -e \"${Info} 检测到未安装 iptables,开始安装...\"

if [[ ${release} == \"centos\" ]]; then

yum update

yum install -y iptables

else

apt-get update

apt-get install -y iptables

fi

iptables_exist=$(iptables -V)

if [[ ${iptables_exist} = \"\" ]]; then

echo -e \"${Error} 安装iptables失败,请检查 !\" && exit 1

else

echo -e \"${Info} iptables 安装完成 !\"

fi

fi

echo -e \"${Info} 开始配置 iptables !\"

Set_iptables

echo -e \"${Info} iptables 配置完毕 !\"

}

Set_forwarding_port(){

read -e -p \"请输入 iptables 欲转发至的 远程端口 [1-65535] (支持端口段 如 2333-6666, 被转发服务器):\" forwarding_port

[[ -z \"${forwarding_port}\" ]] && echo \"取消...\" && exit 1

echo && echo -e \"欲转发端口 : ${Red_font_prefix}${forwarding_port}${Font_color_suffix}\" && echo

}

Set_forwarding_ip(){

read -e -p \"请输入 iptables 欲转发至的 远程IP(被转发服务器):\" forwarding_ip

[[ -z \"${forwarding_ip}\" ]] && echo \"取消...\" && exit 1

echo && echo -e \"欲转发服务器IP : ${Red_font_prefix}${forwarding_ip}${Font_color_suffix}\" && echo

}

Set_local_port(){

echo -e \"请输入 iptables 本地监听端口 [1-65535] (支持端口段 如 2333-6666)\"

read -e -p \"(默认端口: ${forwarding_port}):\" local_port

[[ -z \"${local_port}\" ]] && local_port=\"${forwarding_port}\"

echo && echo -e \"本地监听端口 : ${Red_font_prefix}${local_port}${Font_color_suffix}\" && echo

}

Set_local_ip(){

read -e -p \"请输入 本服务器的 网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP,回车自动检测外网IP):\" local_ip

if [[ -z \"${local_ip}\" ]]; then

local_ip=$(wget -qO- -t1 -T2 ipinfo.io/ip)

if [[ -z \"${local_ip}\" ]]; then

echo \"${Error} 无法检测到本服务器的公网IP,请手动输入\"

read -e -p \"请输入 本服务器的 网卡IP(注意是网卡绑定的IP,而不仅仅是公网IP):\" local_ip

[[ -z \"${local_ip}\" ]] && echo \"取消...\" && exit 1

fi

fi

echo && echo -e \"本服务器IP : ${Red_font_prefix}${local_ip}${Font_color_suffix}\" && echo

}

Set_forwarding_type(){

echo -e \"请输入数字 来选择 iptables 转发类型:

1. TCP

2. UDP

3. TCP+UDP\\n\"

read -e -p \"(默认: TCP+UDP):\" forwarding_type_num

[[ -z \"${forwarding_type_num}\" ]] && forwarding_type_num=\"3\"

if [[ ${forwarding_type_num} == \"1\" ]]; then

forwarding_type=\"TCP\"

elif [[ ${forwarding_type_num} == \"2\" ]]; then

forwarding_type=\"UDP\"

elif [[ ${forwarding_type_num} == \"3\" ]]; then

forwarding_type=\"TCP+UDP\"

else

forwarding_type=\"TCP+UDP\"

fi

}

Set_Config(){

Set_forwarding_port

Set_forwarding_ip

Set_local_port

Set_local_ip

Set_forwarding_type

echo && echo -e \"——————————————————————————————

请检查 iptables 端口转发规则配置是否有误 !\\n

本地监听端口 : ${Green_font_prefix}${local_port}${Font_color_suffix}

服务器 IP\\t: ${Green_font_prefix}${local_ip}${Font_color_suffix}\\n

欲转发的端口 : ${Green_font_prefix}${forwarding_port}${Font_color_suffix}

欲转发 IP\\t: ${Green_font_prefix}${forwarding_ip}${Font_color_suffix}

转发类型\\t: ${Green_font_prefix}${forwarding_type}${Font_color_suffix}

——————————————————————————————\\n\"

read -e -p \"请按任意键继续,如有配置错误请使用 Ctrl+C 退出。\" var

}

Add_forwarding(){

check_iptables

Set_Config

local_port=$(echo ${local_port} | sed \'s/-/:/g\')

forwarding_port_1=$(echo ${forwarding_port} | sed \'s/-/:/g\')

if [[ ${forwarding_type} == \"TCP\" ]]; then

Add_iptables \"tcp\"

elif [[ ${forwarding_type} == \"UDP\" ]]; then

Add_iptables \"udp\"

elif [[ ${forwarding_type} == \"TCP+UDP\" ]]; then

Add_iptables \"tcp\"

Add_iptables \"udp\"

fi

Save_iptables

clear && echo && echo -e \"——————————————————————————————

iptables 端口转发规则配置完成 !\\n

本地监听端口 : ${Green_font_prefix}${local_port}${Font_color_suffix}

服务器 IP\\t: ${Green_font_prefix}${local_ip}${Font_color_suffix}\\n

欲转发的端口 : ${Green_font_prefix}${forwarding_port_1}${Font_color_suffix}

欲转发 IP\\t: ${Green_font_prefix}${forwarding_ip}${Font_color_suffix}

转发类型\\t: ${Green_font_prefix}${forwarding_type}${Font_color_suffix}

——————————————————————————————\\n\"

}

View_forwarding(){

check_iptables

forwarding_text=$(iptables -t nat -vnL PREROUTING|tail -n +3)

[[ -z ${forwarding_text} ]] && echo -e \"${Error} 没有发现 iptables 端口转发规则,请检查 !\" && exit 1

forwarding_total=$(echo -e \"${forwarding_text}\"|wc -l)

forwarding_list_all=\"\"

for((integer = 1; integer <= ${forwarding_total}; integer++))

do

forwarding_type=$(echo -e \"${forwarding_text}\"|awk \'{print $4}\'|sed -n \"${integer}p\")

forwarding_listen=$(echo -e \"${forwarding_text}\"|awk \'{print $11}\'|sed -n \"${integer}p\"|awk -F \"dpt:\" \'{print $2}\')

[[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e \"${forwarding_text}\"| awk \'{print $11}\'|sed -n \"${integer}p\"|awk -F \"dpts:\" \'{print $2}\')

forwarding_fork=$(echo -e \"${forwarding_text}\"| awk \'{print $12}\'|sed -n \"${integer}p\"|awk -F \"to:\" \'{print $2}\')

forwarding_list_all=${forwarding_list_all}\"${Green_font_prefix}\"${integer}\".${Font_color_suffix} 类型: ${Green_font_prefix}\"${forwarding_type}\"${Font_color_suffix} 监听端口: ${Red_font_prefix}\"${forwarding_listen}\"${Font_color_suffix} 转发IP和端口: ${Red_font_prefix}\"${forwarding_fork}\"${Font_color_suffix}\\n\"

done

echo && echo -e \"当前有 ${Green_background_prefix} \"${forwarding_total}\" ${Font_color_suffix} 个 iptables 端口转发规则。\"

echo -e ${forwarding_list_all}

}

Del_forwarding(){

check_iptables

while true

do

View_forwarding

read -e -p \"请输入数字 来选择要删除的 iptables 端口转发规则(默认回车取消):\" Del_forwarding_num

[[ -z \"${Del_forwarding_num}\" ]] && Del_forwarding_num=\"0\"

echo $((${Del_forwarding_num}+0)) &>/dev/null

if [[ $? -eq 0 ]]; then

if [[ ${Del_forwarding_num} -ge 1 ]] && [[ ${Del_forwarding_num} -le ${forwarding_total} ]]; then

forwarding_type=$(echo -e \"${forwarding_text}\"| awk \'{print $4}\' | sed -n \"${Del_forwarding_num}p\")

forwarding_listen=$(echo -e \"${forwarding_text}\"| awk \'{print $11}\' | sed -n \"${Del_forwarding_num}p\" | awk -F \"dpt:\" \'{print $2}\' | sed \'s/-/:/g\')

[[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e \"${forwarding_text}\"| awk \'{print $11}\' |sed -n \"${Del_forwarding_num}p\" | awk -F \"dpts:\" \'{print $2}\')

Del_iptables \"${forwarding_type}\" \"${Del_forwarding_num}\"

Save_iptables

echo && echo -e \"${Info} iptables 端口转发规则删除完成 !\" && echo

else

echo -e \"${Error} 请输入正确的数字 !\"

fi

else

break && echo \"取消...\"

fi

done

}

Uninstall_forwarding(){

check_iptables

echo -e \"确定要清空 iptables 所有端口转发规则 ? [y/N]\"

read -e -p \"(默认: n):\" unyn

[[ -z ${unyn} ]] && unyn=\"n\"

if [[ ${unyn} == [Yy] ]]; then

forwarding_text=$(iptables -t nat -vnL PREROUTING|tail -n +3)

[[ -z ${forwarding_text} ]] && echo -e \"${Error} 没有发现 iptables 端口转发规则,请检查 !\" && exit 1

forwarding_total=$(echo -e \"${forwarding_text}\"|wc -l)

for((integer = 1; integer <= ${forwarding_total}; integer++))

do

forwarding_type=$(echo -e \"${forwarding_text}\"|awk \'{print $4}\'|sed -n \"${integer}p\")

forwarding_listen=$(echo -e \"${forwarding_text}\"|awk \'{print $11}\'|sed -n \"${integer}p\"|awk -F \"dpt:\" \'{print $2}\')

[[ -z ${forwarding_listen} ]] && forwarding_listen=$(echo -e \"${forwarding_text}\"| awk \'{print $11}\'|sed -n \"${integer}p\"|awk -F \"dpts:\" \'{print $2}\')

# echo -e \"${forwarding_text} ${forwarding_type} ${forwarding_listen}\"

Del_iptables \"${forwarding_type}\" \"${integer}\"

done

Save_iptables

echo && echo -e \"${Info} iptables 已清空 所有端口转发规则 !\" && echo

else

echo && echo \"清空已取消...\" && echo

fi

}

Add_iptables(){

iptables -t nat -A PREROUTING -p \"$1\" --dport \"${local_port}\" -j DNAT --to-destination \"${forwarding_ip}\":\"${forwarding_port}\"

iptables -t nat -A POSTROUTING -p \"$1\" -d \"${forwarding_ip}\" --dport \"${forwarding_port_1}\" -j SNAT --to-source \"${local_ip}\"

echo \"iptables -t nat -A PREROUTING -p $1 --dport ${local_port} -j DNAT --to-destination ${forwarding_ip}:${forwarding_port}\"

echo \"iptables -t nat -A POSTROUTING -p $1 -d ${forwarding_ip} --dport ${forwarding_port_1} -j SNAT --to-source ${local_ip}\"

echo \"${local_port}\"

iptables -I INPUT -m state --state NEW -m \"$1\" -p \"$1\" --dport \"${local_port}\" -j ACCEPT

}

Del_iptables(){

iptables -t nat -D POSTROUTING \"$2\"

iptables -t nat -D PREROUTING \"$2\"

iptables -D INPUT -m state --state NEW -m \"$1\" -p \"$1\" --dport \"${forwarding_listen}\" -j ACCEPT

}

Save_iptables(){

if [[ ${release} == \"centos\" ]]; then

service iptables save

else

iptables-save > /etc/iptables.up.rules

fi

}

Set_iptables(){

echo -e \"net.ipv4.ip_forward=1\" >> /etc/sysctl.conf

sysctl -p

if [[ ${release} == \"centos\" ]]; then

service iptables save

chkconfig --level 2345 iptables on

else

iptables-save > /etc/iptables.up.rules

echo -e \'#!/bin/bash\\n/sbin/iptables-restore < /etc/iptables.up.rules\' > /etc/network/if-pre-up.d/iptables

chmod +x /etc/network/if-pre-up.d/iptables

fi

}

Update_Shell(){

sh_new_ver=$(wget --no-check-certificate -qO- -t1 -T3 \"https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/iptables-pf.sh\"|grep \'sh_ver=\"\'|awk -F \"=\" \'{print $NF}\'|sed \'s/\\\"//g\'|head -1)

[[ -z ${sh_new_ver} ]] && echo -e \"${Error} 无法链接到 Github !\" && exit 0

wget -N --no-check-certificate \"https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/iptables-pf.sh\" && chmod +x iptables-pf.sh

echo -e \"脚本已更新为最新版本[ ${sh_new_ver} ] !(注意:因为更新方式为直接覆盖当前运行的脚本,所以可能下面会提示一些报错,无视即可)\" && exit 0

}

check_sys

echo && echo -e \" iptables 端口转发一键管理脚本 ${Red_font_prefix}[v${sh_ver}]${Font_color_suffix}

-- Toyo | doub.io/wlzy-20 --

${Green_font_prefix}0.${Font_color_suffix} 升级脚本

————————————

${Green_font_prefix}1.${Font_color_suffix} 安装 iptables

${Green_font_prefix}2.${Font_color_suffix} 清空 iptables 端口转发

————————————

${Green_font_prefix}3.${Font_color_suffix} 查看 iptables 端口转发

${Green_font_prefix}4.${Font_color_suffix} 添加 iptables 端口转发

${Green_font_prefix}5.${Font_color_suffix} 删除 iptables 端口转发

————————————

注意:初次使用前请请务必执行 ${Green_font_prefix}1. 安装 iptables${Font_color_suffix}(不仅仅是安装)\" && echo

read -e -p \" 请输入数字 [0-5]:\" num

case \"$num\" in

0)

Update_Shell

;;

1)

install_iptables

;;

2)

Uninstall_forwarding

;;

3)

View_forwarding

;;

4)

Add_forwarding

;;

5)

Del_forwarding

;;

*)

echo \"请输入正确数字 [0-5]\"

;;

esac

基于zabbix4.0自定义脚本监控tomcat--多个tomcat端口处理

概述

zabbix监控tomcat只有一个zabbix-java-gateway,可以部署在zabbix-sever端也可以部署在其他机器上,需要和zabbix-server网络可达。

数了下目前生产的用不同的tomcat端口大概有30个,如果用一个tomcat端口对应一个Tomcat模板那我得整几十个,每个模板对应监控项和触发器也得改,想了想还是放弃了,自己写个脚本来做吧!

考虑到一台应用服务器上最多两个需要监控的tomcat,分别设定tomcat监控模板(12345)和tomcat监控模板(12346),如果一台服务器上有2个需要监控的tomcat,则添加这两个模板进去即可。

今天主要介绍一下怎么自定义脚本去监控tomcat。


1、zabbix客户端配置监控tomcat状态脚本

# cat /etc/zabbix/zabbix_agentd.d/tomcat_status.sh

================================================================================================

#!/bin/bash

#this script is used to get tomcat status

#copyright by hwb

metric=$1

#cmdline-jmxclient.jar包用来获取jmx信息

jarfile=/etc/zabbix/zabbix_agentd.d

#监控tomcat线程、流量、请求

case $metric in

version)

#这里要注意2>&1的用法,没有这个无法输出想要的结果

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:type=Server serverInfo 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

thread_max)

#这里要注意2>&1的用法,没有这个无法输出想要的结果

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=ThreadPool maxThreads 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

thread_current)

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=ThreadPool currentThreadCount 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

thread_busy)

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=ThreadPool currentThreadsBusy 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

http_received)

#单位换算,字节划算成M,代表tomcat接收了多少M流量

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=GlobalRequestProcessor bytesReceived 2>&1|awk '{a[$NF]}END{for(k in a)print k/1024/1024}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

http_sent)

#单位换算,字节换算成M

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=GlobalRequestProcessor bytesSent 2>&1|awk '{a[$NF]}END{for(k in a)print k/1024/1024}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

request_count)

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=GlobalRequestProcessor requestCount 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

request_error)

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=GlobalRequestProcessor errorCount 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

request_time)

output=$(java -jar $jarfile/cmdline.jar - 127.0.0.1:12345 Catalina:name=\\"http-nio*\\",type=GlobalRequestProcessor processingTime 2>&1 | awk '{print $NF}')

if [ "$output" == "" ];then

echo 0

else

echo $output

fi

;;

*)

echo -e "\\e[033mUsage: sh $0 [version|thread_max|thread_current|thread_busy|http_received|http_sent|request_count|request_error|request_time]\\e[0m"

esac

================================================================================================



2、添加自定义参数

# cat /etc/zabbix/zabbix_agentd.d/tomcat.conf

================================================================================================

UserParameter=tomcat.status[*],/etc/zabbix/zabbix_agentd.d/tomcat_status.sh $1

================================================================================================



3、授权

chown -R zabbix:zabbix /etc/zabbix

chmod -R 755 /etc/zabbix



4、重启客户端

systemctl restart zabbix-agent



5、在zabbix服务端测试

zabbix_get -s XX -p 10050 -k tomcat.status[thread_current]

zabbix_get -s xx -p 10050 -k tomcat.status[http_sent]

zabbix_get -s xx -p 10050 -k tomcat.status[request_count]



6、zabbix网页配置监控项

配置监控项后可到配置-主机-监控项(对应模板)查看是否生效

1)tomcat版本

--tomcat版本

名称:Tomcat version

类型:Zabbix客户端

键值:tomcat.status[version]

信息类型:字符

更新间隔:3h

2)tomcat线程

--tomcat最大线程数

名称:tomcat最大线程数

类型:Zabbix客户端

键值:tomcat.status[thread_max]

信息类型:浮点数

单位:

--tomcat当前线程数

名称:tomcat当前线程数

类型:Zabbix客户端

键值:tomcat.status[thread_current]

信息类型:浮点数

单位:

--tomcat繁忙线程数

名称:tomcat繁忙线程数

类型:Zabbix客户端

键值:tomcat.status[thread_busy]

信息类型:浮点数

单位:

3)网络流量统计

--tomcat接收的流量

名称:tomcat接收的流量

类型:Zabbix客户端

键值:tomcat.status[http_received]

信息类型:浮点数

单位:MB

--tomcat发送的流量

名称:tomcat发送的流量

类型:Zabbix客户端

键值:tomcat.status[http_sent]

信息类型:浮点数

单位:MB


4)tomcat请求

--tomcat请求数

名称:tomcat请求数

类型:Zabbix客户端

键值:tomcat.status[request_count]

信息类型:数字

单位:

--tomcat出错请求数

名称:tomcat出错请求数

类型:Zabbix客户端

键值:tomcat.status[request_error]

信息类型:数字

单位:

--tomcat请求时间

名称:tomcat请求时间

类型:Zabbix客户端

键值:tomcat.status[request_time]

信息类型:浮点数

单位:s

更新间隔:1m



7、图形展示如下:



觉得有用的朋友多帮忙转发哦!后面会分享更多devops和DBA方面的内容,感兴趣的朋友可以关注下~


标签:

提交需求或反馈

Demand feedback