天天看點

解決Zabbix自定義使用者參數無法擷取到資料的問題

我詳細的提供了如下相關資訊:

自定義的參數是這麼寫的:

1

<code>userparameter=chatter.pid[*],parameter1=$1;parameter2=$2;</code><code>ps</code> <code>-ef | </code><code>grep</code> <code>$parameter1 | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>grep</code> <code>$parameter2 | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>awk</code> <code>'{print $2}'</code>

key是這麼寫的:

<code>chatter.pid[chatter,java]</code>

在指令行中執行以下指令沒有錯,能正确傳回資料:

2

3

<code>parameter1=chatter   </code>

<code>parameter2=java    </code>

<code>ps</code> <code>-ef | </code><code>grep</code> <code>$parameter1 | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>grep</code> <code>$parameter2 | </code><code>grep</code> <code>-</code><code>v</code> <code>grep</code> <code>| </code><code>awk</code> <code>'{print $2}'</code>

但在zabbixserver上執行zabbix_get -s 192.168.100.87 -p 10050 -k "chatter.pid[java,chatter]"卻無法擷取資料,zabbix ui(包括latest data)裡面也沒有資料。

解決Zabbix自定義使用者參數無法擷取到資料的問題

鄧工果然專業,幾秒鐘就看出了問題,大緻回答如下:

自定義的參數這麼寫userparameter=chatter.pid[*],parameter1=$1;parameter2=$2;ps -ef | grep $parameter1 | grep -v grep | grep $parameter2 | grep -v grep | awk '{print $2}'會有問題,可以改為userparameter=chatter.pid[*],ps -ef | grep $1 | grep -v grep | grep $2 | grep -v grep | awk '{print $$2}'然後重新開機zabbix agentd。

實際上隻是将awk中的print $2改為print $$2,因為awk正常情況下是不會使用$$2的,我本着疑人不用用人不疑的态度按照鄧工的方法嘗試,果然奏效!随後鄧工告訴我原因,說這個(userparameter中的shell文法)跟平常所提到的shell不太相同,問題就出在awk的兩個$上。

原來,想要在zabbix裡使用shell位置參數,需要使用$$,不能是$,特别是awk中的位置參數,官方原文如下:

to use positional references unaltered, specify double dollar sign - for example, awk '{print $$2}'. in this case $$2 will actually turn into $2 when executing the command.   

note that positional references with the $ sign are interpreted by zabbix agent regardless of whether they are enclosed between double (“) or single (') quotes.

是以在使用awk處理資料時就注意一下,如果感覺不爽,可以考慮使用cut -f1這樣的文法來代替awk。

--end--