使用zabbix4监控ORACLE时时, orabbix插件会报错: Orabbix - received unexpected response ' ' for key 'alive'

修改代码步骤:

// 1 - Download orabbix-src-1.2.3.zip from https://sourceforge.net/projects/orabbix/files/
// 2 - Edit Sender.java file located at ./com.smartmarmot/orabbix/
// 2.1 - Original Code

        Socket zabbix = null;
        OutputStreamWriter out = null;
        InputStream in = null;
        Enumeration<String> serverlist  = zabbixServers.keys();

        while (serverlist.hasMoreElements()){
            String zabbixServer = serverlist.nextElement();
            try {
                zabbix = new Socket(zabbixServer, zabbixServers.get(
                        zabbixServer).intValue());
                zabbix.setSoTimeout(TIMEOUT);

                out = new OutputStreamWriter(zabbix.getOutputStream());
                out.write(message.toString());
                out.flush();

// 2.2 - New code

        Socket zabbix = null;
//      OutputStreamWriter out = null;
        OutputStream out = null;
        InputStream in = null;
        Enumeration<String> serverlist  = zabbixServers.keys();

        while (serverlist.hasMoreElements()){
            String zabbixServer = serverlist.nextElement();
            try {
                zabbix = new Socket(zabbixServer, zabbixServers.get(
                        zabbixServer).intValue());
                zabbix.setSoTimeout(TIMEOUT);

            byte[] data = message.toString().getBytes("UTF-8");

            byte[] header = new byte[] {
            'Z', 'B', 'X', 'D', '\1',
            (byte)(data.length & 0xFF),
            (byte)((data.length >> 8) & 0xFF),
            (byte)((data.length >> 16) & 0xFF),
            (byte)((data.length >> 24) & 0xFF),
            '\0', '\0', '\0', '\0'};

            byte[] packet = new byte[header.length + data.length];
            System.arraycopy(header, 0, packet, 0, header.length);
            System.arraycopy(data, 0, packet, header.length, data.length);

//              out = new OutputStreamWriter(zabbix.getOutputStream());
                out = zabbix.getOutputStream();
                out.write(packet);
                out.flush();

重新编译修复步骤:

git clone https://github.com/snickerjp/orabbix.git

cd orabbix
# download orabbix
#from: https://sourceforge.net/projects/orabbix/

unzip orabbix-1.2.3.zip

# compile
# require. java-1.7.0-openjdk-devel,java-1.8.0-openjdk-devel
javac -cp "orabbix-1.2.3/orabbix-1.2.3.jar:orabbix-1.2.3/lib/*" com/smartmarmot/orabbix/Sender.java
mkdir -p ./build
cp orabbix-1.2.3/orabbix-1.2.3.jar ./build
cd build
jar -xvf orabbix-1.2.3.jar com
cp ../com/smartmarmot/orabbix/Sender.class com/smartmarmot/orabbix/Sender.class
jar -uf orabbix-1.2.3.jar com

参考文档:

https://github.com/smartmarmot/DBforBIX/issues/62

https://github.com/snickerjp/orabbix