diff --git a/README.md b/README.md index dad5d30436..621d321c01 100644 --- a/README.md +++ b/README.md @@ -30,7 +30,7 @@ - 吹水组 - https://t.me/mdserver_web - 交流论坛 - https://bbs.midoks.icu -- discord - https://discord.gg/3zXk4mES + ``` 如果出现问题,最好私给我面板信息。不要让我猜。如果不提供,不要提出问题,自行解决。 — 座右铭 Talk is cheap, show me the code. -- linus diff --git a/plugins/zabbix_agent/conf/zabbix_agentd.conf b/plugins/zabbix_agent/conf/zabbix_agentd.conf index 9ffe32e8bf..2dba7375fe 100644 --- a/plugins/zabbix_agent/conf/zabbix_agentd.conf +++ b/plugins/zabbix_agent/conf/zabbix_agentd.conf @@ -4,7 +4,7 @@ LogFileSize=1 ListenIP=0.0.0.0 ListenPort=10050 -EnableRemoteCommands=1 +#EnableRemoteCommands=1 Timeout=3 Server=127.0.0.1 diff --git a/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_examples.conf b/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_examples.conf index 5c0aea9872..d8a09ee648 100644 --- a/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_examples.conf +++ b/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_examples.conf @@ -1,24 +1,25 @@ # Emulating built-in agent parameter 'system.users.num' -UserParameter=system.test,who | wc -l +#UserParameter=system.test,who | wc -l # Get size of a directory # Defaults to /tmp -UserParameter=vfs.dir.size[*],dir="$1"; du -s -B 1 "${dir:-/tmp}" | cut -f1 +#UserParameter=vfs.dir.size[*],dir="$1"; du -s -B 1 "${dir:-/tmp}" | cut -f1 # Total CPU utilisation by all processes with a given name. # Returns empty value if no such processes are present, numeric items will turn unsupported # Defaults to zabbix_agentd -UserParameter=proc.cpu[*],proc="$1"; ps -o pcpu= -C "${proc:-zabbix_agentd}" | awk '{sum += $$1} END {print sum}' +#UserParameter=proc.cpu[*],proc="$1"; ps -o pcpu= -C "${proc:-zabbix_agentd}" | awk '{sum += $$1} END {print sum}' # Mail queue length from mailq -UserParameter=unix_mail.queue,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]' +#UserParameter=unix_mail.queue,mailq | grep -v "Mail queue is empty" | grep -c '^[0-9A-Z]' # Partition discovery on Linux -UserParameter=vfs.partitions.discovery.linux,for partition in $(awk 'NR > 2 {print $4}' /proc/partitions); do partitionlist="$partitionlist,"'{"{#PARTITION}":"'$partition'"}'; done; echo '{"data":['${partitionlist#,}']}' +#UserParameter=vfs.partitions.discovery.linux,for partition in $(awk 'NR > 2 {print $4}' /proc/partitions); do #partitionlist="$partitionlist,"'{"{#PARTITION}":"'$partition'"}'; done; echo '{"data":['${partitionlist#,}']}' # Partition discovery on Solaris (using iostat output) # On Solaris bash usually is not the one linked from /bin/sh, so a wrapper script is suggested -UserParameter=vfs.partitions.discovery.solaris,/somewhere/solaris_partitions.sh +#UserParameter=vfs.partitions.discovery.solaris,/somewhere/solaris_partitions.sh + # Wrapper script (solaris_partitions.sh) contents: ##!/bin/bash #for partition in $(iostat -x | tail +3 | awk '{print $1}'); do diff --git a/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_mysql.conf b/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_mysql.conf index 2d6430e29a..97a4fb1f14 100644 --- a/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_mysql.conf +++ b/plugins/zabbix_agent/conf/zabbix_agentd/userparameter_mysql.conf @@ -6,10 +6,11 @@ #user=zbx_monitor #password= # -UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping -UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status" -UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version -UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases" -UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'" -UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status" -UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status" + +#UserParameter=mysql.ping[*], mysqladmin -h"$1" -P"$2" ping +#UserParameter=mysql.get_status_variables[*], mysql -h"$1" -P"$2" -sNX -e "show global status" +#UserParameter=mysql.version[*], mysqladmin -s -h"$1" -P"$2" version +#UserParameter=mysql.db.discovery[*], mysql -h"$1" -P"$2" -sN -e "show databases" +#UserParameter=mysql.dbsize[*], mysql -h"$1" -P"$2" -sN -e "SELECT SUM(DATA_LENGTH + INDEX_LENGTH) FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_SCHEMA='$3'" +#UserParameter=mysql.replication.discovery[*], mysql -h"$1" -P"$2" -sNX -e "show slave status" +#UserParameter=mysql.slave_status[*], mysql -h"$1" -P"$2" -sNX -e "show slave status" diff --git a/plugins/zabbix_agent/index.html b/plugins/zabbix_agent/index.html index 6b1847c4ae..de22c4356f 100755 --- a/plugins/zabbix_agent/index.html +++ b/plugins/zabbix_agent/index.html @@ -14,6 +14,7 @@

服务

自启动

默认配置

+

子配置

运行日志

相关说明

diff --git a/plugins/zabbix_agent/index.py b/plugins/zabbix_agent/index.py index 01c05abd7c..0597d465b4 100755 --- a/plugins/zabbix_agent/index.py +++ b/plugins/zabbix_agent/index.py @@ -106,9 +106,21 @@ def initAgentConf(): content = contentReplace(content) mw.writeFile(za_dst_path, content) +def initAgentDConf(): + clist = ['userparameter_mysql.conf', 'userparameter_examples.conf'] + dst_dir = '/etc/zabbix/zabbix_agentd.d' + for c in clist: + za_src_tpl = getPluginDir()+'/conf/zabbix_agentd/'+c + dst_path = dst_dir+'/'+c + if not os.path.exists(dst_path): + content = mw.readFile(za_src_tpl) + mw.writeFile(dst_path,content) + def initDreplace(): + init_file = getServerDir() + '/init.pl' if not os.path.exists(init_file): + initAgentDConf() initAgentConf() openPort() mw.writeFile(init_file, 'ok') @@ -190,6 +202,31 @@ def uninstallPreInspection(): return 'ok' +def agentdDefaultConf(): + return '/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf' + + +def agentdConf(): + path = '/etc/zabbix/zabbix_agentd.d' + pathFile = os.listdir(path) + tmp = [] + for one in pathFile: + file = path + '/' + one + tmp.append(file) + return mw.getJson(tmp) + +def agentdReadConf(): + args = getArgs() + data = checkArgs(args, ['file']) + if not data[0]: + return data[1] + + content = mw.readFile(args['file']) + content = contentReplace(content) + return mw.returnJson(True, 'ok', content) + + + if __name__ == "__main__": func = sys.argv[1] if func == 'status': @@ -218,5 +255,11 @@ def uninstallPreInspection(): print(zabbixAgentConf()) elif func == 'run_log': print(runLog()) + elif func == 'agentd_default_conf': + print(agentdDefaultConf()) + elif func == 'agentd_conf': + print(agentdConf()) + elif func == 'agentd_read_conf': + print(agentdReadConf()) else: print('error') diff --git a/plugins/zabbix_agent/install.sh b/plugins/zabbix_agent/install.sh index 17cd991066..0bbaf897b6 100755 --- a/plugins/zabbix_agent/install.sh +++ b/plugins/zabbix_agent/install.sh @@ -8,6 +8,8 @@ export PATH # cd /www/server/mdserver-web && python3 /www/server/mdserver-web/plugins/zabbix_agent/index.py start +# /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf + curPath=`pwd` rootPath=$(dirname "$curPath") rootPath=$(dirname "$rootPath") diff --git a/plugins/zabbix_agent/js/zabbix.js b/plugins/zabbix_agent/js/zabbix.js index 6fd7b3cf2c..00221700f9 100755 --- a/plugins/zabbix_agent/js/zabbix.js +++ b/plugins/zabbix_agent/js/zabbix.js @@ -62,3 +62,126 @@ function zabbixReadme(){ $('.soft-man-con').html(readme); } +//配置修改模版 --- start +function zagentDConfigTpl(_name, version, func, config_tpl_func, read_config_tpl_func, save_callback_func){ + if ( typeof(version) == 'undefined' ){ + version = ''; + } + + var func_name = 'conf'; + if ( typeof(func) != 'undefined' ){ + func_name = func; + } + + var _config_tpl_func = 'config_tpl'; + if ( typeof(config_tpl_func) != 'undefined' ){ + _config_tpl_func = config_tpl_func; + } + + var _read_config_tpl_func = 'read_config_tpl'; + if ( typeof(read_config_tpl_func) != 'undefined' ){ + _read_config_tpl_func = read_config_tpl_func; + } + + + var con = '

提示:Ctrl+F 搜索关键字,Ctrl+G 查找下一个,Ctrl+S 保存,Ctrl+Shift+R 查找替换!

\ + \ + \ + \ + '; + $(".soft-man-con").html(con); + + function getFileName(file){ + var list = file.split('/'); + var f = list[list.length-1]; + return f + } + + var fileName = ''; + $.post('/plugins/run',{name:_name, func:_config_tpl_func,version:version}, function(data){ + var rdata = $.parseJSON(data.data); + for (var i = 0; i < rdata.length; i++) { + $('#config_tpl').append(''); + } + + $('#config_tpl').change(function(){ + var selected = $(this).val(); + if (selected != '0'){ + var loadT = layer.msg('配置模版获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + fileName = selected; + var _args = JSON.stringify({file:selected}); + $.post('/plugins/run', {name:_name, func:_read_config_tpl_func,version:version,args:_args}, function(data){ + layer.close(loadT); + var rdata = $.parseJSON(data.data); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + + $("#textBody").empty().text(rdata.data); + $(".CodeMirror").remove(); + var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { + extraKeys: { + "Ctrl-Space": "autocomplete", + "Ctrl-F": "findPersistent", + "Ctrl-H": "replaceAll", + "Ctrl-S": function() { + $("#textBody").text(editor.getValue()); + pluginConfigSave(fileName,save_callback_func); + } + }, + lineNumbers: true, + matchBrackets:true, + }); + editor.focus(); + $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); + $("#onlineEditFileBtn").unbind('click'); + $("#onlineEditFileBtn").click(function(){ + $("#textBody").text(editor.getValue()); + pluginConfigSave(fileName, save_callback_func); + }); + },'json'); + } + }); + + },'json'); + + var loadT = layer.msg('配置文件路径获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + $.post('/plugins/run', {name:_name, func:func_name,version:version}, function (data) { + layer.close(loadT); + + var loadT2 = layer.msg('文件内容获取中...',{icon:16,time:0,shade: [0.3, '#000']}); + fileName = data.data; + $.post('/files/get_body', 'path=' + fileName, function(rdata) { + layer.close(loadT2); + if (!rdata.status){ + layer.msg(rdata.msg,{icon:0,time:2000,shade: [0.3, '#000']}); + return; + } + $("#textBody").empty().text(rdata.data.data); + $(".CodeMirror").remove(); + var editor = CodeMirror.fromTextArea(document.getElementById("textBody"), { + extraKeys: { + "Ctrl-Space": "autocomplete", + "Ctrl-F": "findPersistent", + "Ctrl-H": "replaceAll", + "Ctrl-S": function() { + $("#textBody").text(editor.getValue()); + pluginConfigSave(fileName,save_callback_func); + } + }, + lineNumbers: true, + matchBrackets:true, + }); + editor.focus(); + $(".CodeMirror-scroll").css({"height":"300px","margin":0,"padding":0}); + $("#onlineEditFileBtn").click(function(){ + $("#textBody").text(editor.getValue()); + pluginConfigSave(fileName,save_callback_func); + }); + },'json'); + },'json'); +} +