zabbix下监控结果返回中文乱码的解决

在Zabbix中返回监控结果。监控语句直接在pLSQL中查询,结果有中文,该中文是乱码,设置NLS_LANG后,发现可以显示中文。

但是在zabbix上无法设置NLS_LANG.  只有在zabbix的odbc.ini配置中设置。设置后为

该设置的参考文档为:

https://www.easysoft.com/developer/interfaces/odbc/linux.html#env_unixodbc

Setting ODBC driver environment variables automatically

  • DMEnvAttr/SQL_ATTR_UNIXODBC_ENVATTR

    This is a setting for the data source in the odbc.ini file. This is used to set ODBC environment attributes. The form is:

        DMEnvAttr = ATTRIBUTE_NAME=value
        
    

    and if VALUE might contain spaces:

        DMEnvAttr = ATTRIBUTE_NAME={value}
        
    

    where ATTRIBUTE_NAME is the name of an ODBC environment attribute (e.g. SQL_ATTR_CONNECTION_POOLING).

    unixODBC defines a new environment attribute for itself called SQL_ATTR_UNIXODBC_ENVATTR. If your driver needs some environment variables defined to run (e.g. ORACLE_HOME, DB2INSTANCE) you can set them via SQL_ATTR_UNIXODBC_ENVATTR like this:

        DMEnvAttr = SQL_ATTR_UNIXODBC_ENVATTR={envvar=value;envar=value}
        
    

    e.g.

        DMEnvAttr =
          SQL_ATTR_UNIXODBC_ENVATTR=
           {ORACLE_HOME=/opt/OraHome} 
        
    

    which sets the ORACLE_HOME environment variable to /opt/OraHome before loading the Oracle® ODBC driver.

  • DMConnAttr and DMStmtAttr

    These unixODBC specific data source attributes work like DMEnvAttr (above). The format is:

        DMConnAttr = CONNECTION_ATTRIBUTE=value
        DMStmtAttr = STATEMENT_ATTRIBUTE=value
        
    
    where:
    • CONNECTION_ATTRIBUTE is the name of an ODBC connection attribute (e.g. SQL_ATTR_CONNECTION_TIMEOUT).
    • STATEMENT_ATTRIBUTE is the name of an ODBC statement attribute (e.g. SQL_ATTR_NOSCAN).
    • "value" is the value you want to set the attribute to. e.g. SQL_ATTR_CONNECTION_TIMEOUT=30 or SQL_ATTR_NOSCAN=SQL_NOSCAN_OFF.

    e.g.

        DMConnAttr = SQL_ATTR_AUTOCOMMIT=SQL_AUTOCOMMIT_OFF
        
    
    N.B.

    If you prefix the attribute name with a '*' then this fixes the value of that attribute i.e. in any attempt by the application to set that attribute the value specified by the application will be ignored and unixODBC will replace the value with that specified in the DMxxxAttr.

另外,在监控的时候,SQL语句返回的值有多个行,比如状态1,状态2,状态3总共三行,但是zabbix只能显示1行。

解决方法是使用wmsys.wm_concat函数进行转换(注意下返回值类型) 。语句类型如下:

select to_char(wmsys.wm_concat(field_name)) from t  where is_lock = 1 

还有一个需求,就是监控某些值,当存在的时候返回值,不存在的时候返回提示“不存在”(zabbix返回null的时候会报错)。

语句类似如下:

select nvl((select to_char(wmsys.wm_concat(field_name)) from t  where is_lock = 1) ,'没有返回值') from dual 

-- 备注 ,wmsys.wm_concat函数和listagg函数的用法,查询结果是一样的。

select to_char(wmsys.wm_concat(field_name)) from t;
select listagg(field_name,',') within group (order by id) from t; --listagg函数中没有逗号,查询的结果也没有逗号

listagg参考文档(11.2.0.3版本的):

https://docs.oracle.com/cd/E24693_01/server.11203/e17118/functions089.htm

END

-- 2019-10-12 add ,监控表空间的。

BB@test>select listagg(t1.COL1,';') from (
select t.tbs || ','|| t.tbs_size || 'G'  as COL1 from (
SELECT A.TABLESPACE_NAME tbs ,
         NVL(B.FREE_SPACE, 0) tbs_size
    FROM (SELECT TABLESPACE_NAME, trunc(SUM(BYTES) / 1024 / 1024/1024 ,2) TOTAL_SPACE
            FROM DBA_DATA_FILES
           GROUP BY TABLESPACE_NAME) A,
         (SELECT TABLESPACE_NAME, trunc(SUM(BYTES / 1024 / 1024/1024  ),2) FREE_SPACE
            FROM DBA_FREE_SPACE
           GROUP BY TABLESPACE_NAME) B
   WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME(+)) t) t1  2    3    4    5    6    7    8    9   10   11  ;

LISTAGG(T1.COL1,';')
------------------------------------------------------------------------------------------------------------------------
SYSTEM,0G;SYSAUX,.04G;UNDOTBS1,.28G;TBS_HMW,.38G;USERS,3.86G;LOB_TBS,.99G;TEST_NEEDBACKUP,.19G

BB@test>

行列转换(有点瑕疵)

select listagg(username,'     ') from dba_users where rownum<=5
union all
select listagg(user_id,'      ') from dba_users where rownum<=5
union all
select listagg(account_status,'      ') from dba_users where rownum<=5

END

发布了754 篇原创文章 · 获赞 31 · 访问量 19万+

猜你喜欢

转载自blog.csdn.net/xxzhaobb/article/details/101016307