jstat无法使用的问题
因为java是tomcat启动的,所以使用jstat命令,报not found错误。
解决方法,网上很多都不行,以下可以
![](https://img.laitimes.com/img/9ZDMuAjOiMmIsIjOiQnIsICN4cTM1YzM1EjNyMDM2EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
简单的说,就是sudo -u tomcat /usr/java/jdk/bin/jstat -gcutil 22631
2.vim /etc/sudoers
增加这两行
<code>zabbix ALL=(tomcat) NOPASSWD:</code><code>/bin/netstat</code><code>,</code><code>/usr/bin/omreport</code><code>,</code><code>/usr/java/jdk/bin/jstat</code><code>,</code><code>/usr/bin/python</code>
<code>tomcat ALL=(ALL) NOPASSWD:</code><code>/bin/kill</code><code>,</code><code>/bin/chown</code><code>,</code><code>/usr/java/jdk/bin/jstat</code><code>,</code><code>/usr/bin/python</code><code>,</code><code>/bin/netstat</code><code>,</code><code>/usr/bin/omreport</code>
就是zabbix必须sudo成tomcat
3.jstat的输出变化
java1.8取消了永久区
<code>sudo</code> <code>-u tomcat </code><code>/usr/java/jdk/bin/jstat</code> <code>-gc 22631</code>
<code> </code><code>S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT </code>
<code>19968.0 20992.0 0.0 4810.3 88576.0 42080.7 393216.0 32415.5 43952.0 42767.3 5296.0 5074.8 25 0.428 2 0.150 0.578</code>
与1.7的不同,去掉了Perm
MC:方法区大小
MU:方法区使用大小
CCSC:压缩类空间大小
CCSU:压缩类空间使用大小
4.zabbix agentd配置变化
<code>cat</code> <code>/usr/local/zabbix/etc/zabbix_agentd</code><code>.conf.d</code><code>/discovery_java_status</code><code>.conf </code>
<code>UserParameter=java.discovery,</code><code>/usr/bin/python</code> <code>/usr/local/zabbix/bin/java_discovery</code><code>.py</code>
<code>UserParameter=java.discovery_status[*],</code><code>/usr/bin/python</code> <code>/usr/local/zabbix/bin/jstat_status</code><code>.py $1 $2</code>
cd /usr/local/zabbix/bin
<code>cat</code> <code>java_discovery.py</code>
<code>#/usr/bin/python</code>
<code>#This script is used to discovery disk on the server</code>
<code>import</code> <code>subprocess</code>
<code>import</code> <code>os</code>
<code>import</code> <code>socket</code>
<code>import</code> <code>json</code>
<code>import</code> <code>glob</code>
<code> </code>
<code>java_names_file=</code><code>'java_names.txt'</code>
<code>javas=[]</code>
<code>if</code> <code>os.path.isfile(java_names_file):</code>
<code># print 'java_names_file exists!'</code>
<code>#####</code>
<code>##### here should use % (java_names_file) instead of using the python variable java_names_file directly inside the ''' ''' quotes</code>
<code> </code><code>args=</code><code>''</code><code>'awk -F'</code><code>:</code><code>' '</code><code>{print $1</code><code>':'</code><code>$2}</code><code>' %s'</code><code>''</code> <code>% (java_names_file)</code>
<code> </code><code>t=subprocess.Popen(args,shell=True,stdout=subprocess.PIPE).communicate()[0]</code>
<code>elif</code> <code>glob.glob(</code><code>'/opt/xx/*_tomcat'</code><code>) and not os.path.isdir(</code><code>'/opt/logs/logstash'</code><code>) and not os.path.isdir(</code><code>'/opt/app/elasticsearch/config'</code><code>):</code>
<code> </code><code>t=subprocess.Popen(</code><code>'cd /opt/xx && ls *_tomcat|grep _tomcat'</code><code>,shell=True,stdout=subprocess.PIPE)</code>
<code> </code>
<code>for</code> <code>java </code><code>in</code> <code>t.stdout.readlines():</code>
<code> </code><code>if</code> <code>len(java) != 0:</code>
<code> </code><code>javas.append({</code><code>'{#JAVA_NAME}'</code><code>:java.strip(</code><code>'\n'</code><code>).strip(</code><code>':'</code><code>)})</code>
<code>print json.dumps({</code><code>'data'</code><code>:javas},indent=4,separators=(</code><code>','</code><code>,</code><code>':'</code><code>))</code>
自己做修改,修改命令 cd /opt/xx && ls *_tomcat|grep _tomcat
这里说明以下,tomcat应用最好起统一的名字,比如xx_tomcat等,这样写脚本起来方便。
<code>cat</code> <code>jstat_status.py</code>
<code>#!/usr/bin/python</code>
<code>import</code> <code>sys</code>
<code>__maintainer__ = </code><code>"John Wang"</code>
<code>jps = </code><code>'/usr/java/jdk/bin/jps'</code>
<code>jstat = </code><code>'/usr/java/jdk/bin/jstat'</code>
<code>zabbix_sender = </code><code>"/usr/local/zabbix/bin/zabbix_sender"</code>
<code>zabbix_conf = </code><code>"/usr/local/zabbix/etc/zabbix_agentd.conf"</code>
<code>send_to_zabbix = 1</code>
<code>ip=os.popen(</code><code>"ifconfig|grep 'inet '|grep -v '127.0'|xargs|awk -F '[ :]' '{print $3}'"</code><code>).readline().rstrip()</code>
<code>serverip=</code><code>"你的zabbix服务端ip"</code>
<code>#"{#JAVA_NAME}":"tomcat_web_1"</code>
<code>def usage():</code>
<code> </code><code>""</code><code>"Display program usage"</code><code>""</code>
<code> </code><code>print </code><code>"\nUsage : "</code><code>, sys.argv[0], </code><code>" java_name alive|all"</code>
<code> </code><code>print </code><code>"Modes : \n\talive : Return pid of running processs\n\tall : Send jstat stats as well"</code>
<code> </code><code>sys.</code><code>exit</code><code>(1)</code>
<code>class Jprocess:</code>
<code> </code><code>def __init__(self, arg):</code>
<code> </code><code>self.pdict = {</code>
<code> </code><code>"jpname"</code><code>: arg,</code>
<code> </code><code>}</code>
<code> </code><code>self.zdict = {</code>
<code> </code><code>"Heap_used"</code> <code>: 0,</code>
<code> </code><code>"Heap_ratio"</code> <code>: 0,</code>
<code> </code><code>"Heap_max"</code> <code>: 0,</code>
<code> </code><code>"Perm_used"</code> <code>: 0,</code>
<code> </code><code>"Perm_ratio"</code> <code>: 0,</code>
<code> </code><code>"Perm_max"</code> <code>: 0,</code>
<code> </code><code>"S0_used"</code> <code>: 0,</code>
<code> </code><code>"S0_ratio"</code> <code>: 0,</code>
<code> </code><code>"S0_max"</code> <code>: 0,</code>
<code> </code><code>"S1_used"</code> <code>: 0,</code>
<code> </code><code>"S1_ratio"</code> <code>: 0,</code>
<code> </code><code>"S1_max"</code> <code>: 0,</code>
<code> </code><code>"Eden_used"</code> <code>: 0,</code>
<code> </code><code>"Eden_ratio"</code> <code>: 0,</code>
<code> </code><code>"Eden_max"</code> <code>: 0,</code>
<code> </code><code>"Old_used"</code> <code>: 0,</code>
<code> </code><code>"Old_ratio"</code> <code>: 0,</code>
<code> </code><code>"Old_max"</code> <code>: 0,</code>
<code> </code><code>"YGC"</code> <code>: 0,</code>
<code> </code><code>"YGCT"</code> <code>: 0,</code>
<code> </code><code>"YGCT_avg"</code> <code>: 0,</code>
<code> </code><code>"FGC"</code> <code>: 0,</code>
<code> </code><code>"FGCT"</code> <code>: 0,</code>
<code> </code><code>"FGCT_avg"</code> <code>: 0,</code>
<code> </code><code>"GCT"</code> <code>: 0,</code>
<code> </code><code>"GCT_avg"</code> <code>: 0,</code>
<code> </code>
<code> </code><code>def chk_proc(self):</code>
<code># ps -ef|grep java|grep tomcat_web_1|awk '{print $2}'</code>
<code># print self.pdict['jpname']</code>
<code> </code><code>pidarg = </code><code>''</code><code>'ps -ef|grep java|grep %s|grep -v grep|awk '</code><code>{print $2}</code><code>' '</code><code>''</code> <code>%(self.pdict[</code><code>'jpname'</code><code>]) </code>
<code> </code><code>pidout = subprocess.Popen(pidarg,shell=True,stdout=subprocess.PIPE) </code>
<code> </code><code>pid = pidout.stdout.readline().strip(</code><code>'\n'</code><code>) </code>
<code> </code><code>if</code> <code>pid != </code><code>""</code> <code>:</code>
<code> </code><code>self.pdict[</code><code>'pid'</code><code>] = pid</code>
<code># print "Process found :", java_name, "with pid :", self.pdict['pid']</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>self.pdict[</code><code>'pid'</code><code>] = </code><code>""</code>
<code># print "Process not found"</code>
<code> </code><code>return</code> <code>self.pdict[</code><code>'pid'</code><code>]</code>
<code> </code><code>def get_jstats(self):</code>
<code> </code><code>if</code> <code>self.pdict[</code><code>'pid'</code><code>] == </code><code>""</code><code>:</code>
<code> </code><code>return</code> <code>False</code>
<code> </code><code>self.pdict.update(self.fill_jstats(</code><code>"-gc"</code><code>))</code>
<code> </code><code>self.pdict.update(self.fill_jstats(</code><code>"-gccapacity"</code><code>))</code>
<code> </code><code>self.pdict.update(self.fill_jstats(</code><code>"-gcutil"</code><code>))</code>
<code># print "\nDumping collected stat dictionary\n-----\n", self.pdict, "\n-----\n"</code>
<code> </code><code>def fill_jstats(self, opts):</code>
<code># print "\nGetting", opts, "stats for process", self.pdict['pid'], "with command : sudo", jstat, opts, self.pdict['pid'] ,"\n"</code>
<code> </code><code>jstatout = subprocess.Popen([</code><code>'sudo'</code><code>,</code><code>'-u'</code><code>,</code><code>'tomcat'</code><code>, jstat, opts, self.pdict[</code><code>'pid'</code><code>]], stdout=subprocess.PIPE)</code>
<code> </code><code>stdout, stderr = jstatout.communicate()</code>
<code> </code><code>legend, data = stdout.</code><code>split</code><code>(</code><code>'\n'</code><code>,1)</code>
<code> </code><code>mydict = dict(zip(legend.</code><code>split</code><code>(), data.</code><code>split</code><code>()))</code>
<code> </code><code>return</code> <code>mydict</code>
<code> </code><code>def compute_jstats(self):</code>
<code> </code><code>self.zdict[</code><code>'S0_used'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S0U'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'S0_max'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S0C'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'S0_ratio'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S0'</code><code>]),</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'S1_used'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S1U'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'S1_max'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S1C'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'S1_ratio'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'S1'</code><code>]),</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Old_used'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'OU'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Old_max'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'OC'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Old_ratio'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'O'</code><code>]),</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Eden_used'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'EU'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Eden_max'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'EC'</code><code>]) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Eden_ratio'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'E'</code><code>]),</code><code>'0.2f'</code><code>) </code>
<code># self.zdict['Perm_used'] = format(float(self.pdict['PU']) * 1024,'0.2f')</code>
<code># self.zdict['Perm_max'] = format(float(self.pdict['PC']) * 1024,'0.2f')</code>
<code># self.zdict['Perm_ratio'] = format(float(self.pdict['P']),'0.2f')</code>
<code> </code>
<code> </code><code>self.zdict[</code><code>'Heap_used'</code><code>] = </code><code>format</code><code>((float(self.pdict[</code><code>'EU'</code><code>]) + float(self.pdict[</code><code>'S0U'</code><code>]) + float(self.pdict[</code><code>'S1U'</code><code>]) + float(self.pdict[</code><code>'OU'</code><code>])) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Heap_max'</code><code>] = </code><code>format</code><code>((float(self.pdict[</code><code>'EC'</code><code>]) + float(self.pdict[</code><code>'S0C'</code><code>]) + float(self.pdict[</code><code>'S1C'</code><code>]) + float(self.pdict[</code><code>'OC'</code><code>])) * 1024,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'Heap_ratio'</code><code>] = </code><code>format</code><code>(float(self.zdict[</code><code>'Heap_used'</code><code>]) / float(self.zdict[</code><code>'Heap_max'</code><code>])*100,</code><code>'0.2f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'YGC'</code><code>] = self.pdict[</code><code>'YGC'</code><code>]</code>
<code> </code><code>self.zdict[</code><code>'FGC'</code><code>] = self.pdict[</code><code>'FGC'</code><code>]</code>
<code> </code><code>self.zdict[</code><code>'YGCT'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'YGCT'</code><code>]),</code><code>'0.3f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'FGCT'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'FGCT'</code><code>]),</code><code>'0.3f'</code><code>)</code>
<code> </code><code>self.zdict[</code><code>'GCT'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'GCT'</code><code>]),</code><code>'0.3f'</code><code>) </code>
<code> </code>
<code> </code><code>if</code> <code>self.pdict[</code><code>'YGC'</code><code>] == </code><code>'0'</code><code>:</code>
<code> </code><code>self.zdict[</code><code>'YGCT_avg'</code><code>] = </code><code>'0'</code>
<code> </code><code>else</code><code>: </code>
<code> </code><code>self.zdict[</code><code>'YGCT_avg'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'YGCT'</code><code>])</code><code>/float</code><code>(self.pdict[</code><code>'YGC'</code><code>]),</code><code>'0.3f'</code><code>)</code>
<code> </code><code>if</code> <code>self.pdict[</code><code>'FGC'</code><code>] == </code><code>'0'</code><code>:</code>
<code> </code><code>self.zdict[</code><code>'FGCT_avg'</code><code>] = </code><code>'0'</code>
<code> </code><code>else</code><code>:</code>
<code> </code><code>self.zdict[</code><code>'FGCT_avg'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'FGCT'</code><code>])</code><code>/float</code><code>(self.pdict[</code><code>'FGC'</code><code>]),</code><code>'0.3f'</code><code>)</code>
<code> </code><code>if</code> <code>self.pdict[</code><code>'YGC'</code><code>] == </code><code>'0'</code> <code>and self.pdict[</code><code>'FGC'</code><code>] == </code><code>'0'</code><code>:</code>
<code> </code><code>self.zdict[</code><code>'GCT_avg'</code><code>] = </code><code>'0'</code>
<code> </code><code>self.zdict[</code><code>'GCT_avg'</code><code>] = </code><code>format</code><code>(float(self.pdict[</code><code>'GCT'</code><code>])/(float(self.pdict[</code><code>'YGC'</code><code>]) + float(self.pdict[</code><code>'FGC'</code><code>])),</code><code>'0.3f'</code><code>) </code>
<code> </code>
<code> </code><code># print "Dumping zabbix stat dictionary\n-----\n", self.zdict, "\n-----\n"</code>
<code> </code><code>def send_to_zabbix(self, metric):</code>
<code>#### {#JAVA_NAME} tomcat_web_1 </code>
<code>#### UserParameter=java.discovery,/usr/bin/python /opt/app/zabbix/sbin/java_discovery.py</code>
<code>#### UserParameter=java.discovery_status[*],/opt/app/zabbix/sbin/jstat_status.sh $1 $2 $3 $4 </code>
<code>#### java.discovery_status[tomcat_web_1,Perm_used]</code>
<code>#### java.discovery_status[{#JAVA_NAME},Perm_used]</code>
<code> </code><code>key = </code><code>"java.discovery_status["</code> <code>+ self.pdict[</code><code>'jpname'</code><code>] + </code><code>","</code> <code>+ metric + </code><code>"]"</code>
<code> </code><code>if</code> <code>self.pdict[</code><code>'pid'</code><code>] != </code><code>""</code> <code>and send_to_zabbix > 0:</code>
<code> </code><code>#print key + ":" + str(self.zdict[metric])</code>
<code> </code><code>try:</code>
<code> </code>
<code> </code><code>subprocess.call([zabbix_sender, </code><code>"-c"</code><code>, zabbix_conf, </code><code>"-k"</code><code>, key, </code><code>"-o"</code><code>, str(self.zdict[metric])], stdout=FNULL,stderr=FNULL, shell=False) </code>
<code> </code><code>except OSError, detail:</code>
<code> </code><code>print </code><code>"Something went wrong while exectuting zabbix_sender : "</code><code>, detail</code>
<code> </code><code>print </code><code>"Simulation: the following command would be execucted :\n"</code><code>, zabbix_sender, </code><code>"-c"</code><code>, zabbix_conf, </code><code>"-k"</code><code>, key, </code><code>"-o"</code><code>, self.zdict[metric], </code><code>"\n"</code>
<code>accepted_modes = [</code><code>'alive'</code><code>, </code><code>'all'</code><code>]</code>
<code>if</code> <code>len(sys.argv) == 3 and sys.argv[2] </code><code>in</code> <code>accepted_modes:</code>
<code> </code><code>java_name = sys.argv[1]</code>
<code> </code><code>mode = sys.argv[2]</code>
<code>else</code><code>:</code>
<code> </code><code>usage()</code>
<code>#Check if process is running / Get PID</code>
<code>jproc = Jprocess(java_name) </code>
<code>pid = jproc.chk_proc()</code>
<code>if</code> <code>pid != </code><code>""</code> <code>and mode == </code><code>'all'</code><code>:</code>
<code> </code><code>jproc.get_jstats()</code>
<code> </code><code># print jproc.zdict</code>
<code> </code><code>jproc.compute_jstats() </code>
<code> </code><code>FNULL = </code><code>open</code><code>(os.devnull, </code><code>'w'</code><code>)</code>
<code> </code><code>for</code> <code>key </code><code>in</code> <code>jproc.zdict:</code>
<code> </code><code>#print key,jproc.zdict[key]</code>
<code> </code><code>jproc.send_to_zabbix(key)</code>
<code> </code><code>FNULL.close()</code>
<code> </code><code>print pid</code>
<code> </code><code>print 0</code>
<code>说明,跟参考文章的不同点</code>
<code>1.</code><code>'sudo'</code> <code>改成</code><code>'sudo'</code><code>,</code><code>'-u'</code><code>,</code><code>'tomcat'</code>
<code>2.注释perm段,因为jdk1.8 jstat输出没有了</code>
<code>3.send_to_zabbix 提示TypeError: cannot concatenate </code><code>'str'</code> <code>and </code><code>'int'</code> <code>objects</code>
<code>self.zdict[metric]换成str(self.zdict[metric])</code>
<code>4.[zabbix_sender, </code><code>"-c"</code><code>, zabbix_conf, </code><code>"-k"</code><code>, key, </code><code>"-o"</code><code>, str(self.zdict[metric])], stdout=FNULL,stderr=FNULL, shell=False)</code>
<code>这行改为</code>
<code>[zabbix_sender, </code><code>"-c"</code><code>, zabbix_conf, </code><code>"-k"</code><code>, key, </code><code>"-o"</code><code>, str(self.zdict[metric]), </code><code>"-z"</code><code>, serverip, </code><code>"-s"</code><code>, ip]</code>
<code>原因在于zabbix_sender 发送数据的需要指定-s,具体参考上面ttlsa的链接</code>
5.重启zabbix_agentd
6.模板的话
7.zabbix_get和zabbix_send 测试
zabbix_get
/usr/local/zabbix/bin/zabbix_get -s $ip -p 10050 -k java.discovery_status[你的应用名字,all]
zabbix_send
/usr/local/zabbix/bin/zabbix_sender -c /usr/local/zabbix/etc/zabbix_agentd.conf -k "java.discovery_status[你的应用名字,GCT_avg]" -o '0.021' -s xx -z serverip
xx表示为zabbix_agentd里面的hostname,这里要注意一下
如果你这个hostname与web界面不一样,那么/var/log/zabbix_agentd.log(log是排错的重要手段)会报错,no active checks on server [xx:10051]: host [xx] not found
最好改成一致
hostname=你的客户端ip,我的web界面都是ip(太low了,需要改成ip+服务,看起来方便)
8.模板我改成了30分钟,正常30分钟出图
<a href="http://s1.51cto.com/wyfs02/M00/8A/96/wKioL1g09smD6xLWAAGy6q_hH4Y467.png-wh_500x0-wm_3-wmp_4-s_1681240738.png" target="_blank"></a>
首先看最新数据,有没有应用集,有那么你就成功了。
坑太多了,如果有问题,提出一起谈论下。
后期,这个脚本还是要修改的,增加第三步jstat输出的四个变量
最后提醒,一定要确认zabbix是否能获取数据
sudo -u zabbix /usr/bin/python /usr/local/zabbix/bin/jstat_status.py xx_tomcat all
因为碰到有几台机器不能出图,所以做一下最后的check
1.cat /etc/hosts
ip hostname
2.cat /etc/sudoers
zabbix ALL=(tomcat) NOPASSWD:/bin/netstat,/usr/bin/omreport,/usr/java/jdk/bin/jstat,/usr/bin/python
tomcat ALL=(ALL) NOPASSWD:/bin/kill,/bin/chown,/usr/java/jdk/bin/jstat,/usr/bin/python,/bin/netstat,/usr/bin/omreport
3.sudo -u zabbix /usr/bin/python /usr/local/zabbix/bin/jstat_status.py xx_tomcat all
没有数据,很有可能是zabbix权限问题。排查的第一点。终于完成了。
最后更新 2017.1.4
步骤一定要按评论里面一步步操作
sudo -u zabbix /usr/local/zabbix/bin/zabbix_sender -c /usr/local/zabbix/etc/zabbix_agentd.conf -k "java.discovery_status[xx_tomcat,GCT_avg]" -o '0.022' -s xx -z xx
当你尝试zabbix_sender的时候,我在线上,有几台没有出图。
原因在于,xx_tomcat是可以的,但是如果是这样xx-xx-xx_tomcat是会fail的
如果你用strace跟踪zabbix_sender
<a href="http://s5.51cto.com/wyfs02/M00/8C/73/wKiom1hss0mQ8FYjAACKtRb0X_M198.png-wh_500x0-wm_3-wmp_4-s_1800269666.png" target="_blank"></a>
最终只有2和0的区别,其他没显示,strace跟踪不行。
3.如果要调试,请参考
gdb 调试zabbix_server解决zabbix_sender不成功的问题
<a href="https://www.tiege.me/?p=188" target="_blank">https://www.tiege.me/?p=188</a>
此文章总结了根本原因
1、类型一定要是zabbix_trap类型;
2、allowed ip要填写zabbix_sender的ip地址,如果有多个,使用,分割;
3、zabbix_sender命令中的-s参数hostname要和server的web界面上一致;
终于完了。
本文转自 liqius 51CTO博客,原文链接:http://blog.51cto.com/szgb17/1812342,如需转载请自行联系原作者