免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 7714 | 回复: 7
打印 上一主题 下一主题

zabbix源代码分析之ODBC [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-06-17 11:06 |只看该作者 |倒序浏览
本帖最后由 dagun 于 2011-06-20 16:06 编辑

本人在研究ZABBIX过程中,通过ODBC监控MYSQL,但是有ZABBIX子进程退出问题,问题出现在(日志内容:ODBC fetch这里)
看了一下代码,如下:
ZBX_ODBC_RESULT        odbc_DBselect(ZBX_ODBC_DBH *pdbh, const char *query)
{
        SQLCHAR
                err_stat[10],
                err_msg[100];

        SQLINTEGER
                err_int;

        SQLSMALLINT
                err_msg_len;

        SQLRETURN        retcode;
        SQLSMALLINT
                i = 0,
                col_num = 0;

        clean_odbc_strerror();

        odbc_free_row_data(pdbh);

        zabbix_log(LOG_LEVEL_DEBUG, "ODBC select [%s]", query);

        retcode = SQLExecDirect(pdbh->hstmt, (SQLCHAR*) query, SQL_NTS);

        if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) goto lbl_err_exit;

        retcode = SQLNumResultCols(pdbh->hstmt, &col_num);//为什么这里col_num值为0呢,我把ODBC这段代码剥离出来,单独形成程序测试,是可以获取到结果的,并且这个参数为2,
        if (retcode != SQL_SUCCESS && retcode != SQL_SUCCESS_WITH_INFO) goto lbl_err_exit;

        pdbh->col_num  = col_num;

        pdbh->row_data = zbx_malloc(pdbh->row_data, sizeof(char*) * col_num);
        memset(pdbh->row_data, 0, sizeof(char*) * col_num);

        pdbh->data_len = zbx_malloc(pdbh->data_len, sizeof(SQLINTEGER) * col_num);
        memset(pdbh->data_len, 0, sizeof(SQLINTEGER) * col_num);

        for(i=0; i < col_num; i++)
        {
                pdbh->row_data = zbx_malloc(pdbh->row_data, MAX_STRING_LEN);
                SQLBindCol(pdbh->hstmt, i+1, SQL_C_CHAR, pdbh->row_data, MAX_STRING_LEN, &pdbh->data_len);
        }

        zabbix_log(LOG_LEVEL_DEBUG, "selected %i cols", col_num);

        return (ZBX_ODBC_RESULT) pdbh;

lbl_err_exit:

        SQLGetDiagRec(SQL_HANDLE_STMT,
                        pdbh->hstmt,
                        1,
                        err_stat,
                        &err_int,
                        err_msg,
                        sizeof(err_msg),
                        &err_msg_len
                        );

        set_last_odbc_strerror("Failed selection [%s] (%d)", err_msg, err_int);

        zabbix_log(LOG_LEVEL_ERR, "%s", get_last_odbc_strerror());

        return NULL;
}

但是在zabbix_server中就会有这个问题,大家可以讨论一下?我无语了,难道是要配置mysql吗???

论坛徽章:
0
2 [报告]
发表于 2011-06-20 09:01 |只看该作者

论坛徽章:
0
3 [报告]
发表于 2011-06-20 16:07 |只看该作者
为什么单独做个程序测试就OK,在zabbix里就不行呢???

论坛徽章:
0
4 [报告]
发表于 2011-06-23 09:01 |只看该作者
难道传说中的 CU就这样子嘛,没人解答问题 ,哪怕留言也是一种鼓励阿。哎。。。

论坛徽章:
0
5 [报告]
发表于 2011-06-27 09:08 |只看该作者
怎么也没人支持下呢?

论坛徽章:
0
6 [报告]
发表于 2011-10-10 23:07 |只看该作者

论坛徽章:
3
金牛座
日期:2014-06-14 22:04:062015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:49:45
7 [报告]
发表于 2011-10-11 13:44 |只看该作者
回复 1# dagun


    要是能整一个系列的完整分析就好了。

论坛徽章:
0
8 [报告]
发表于 2011-10-18 17:28 |只看该作者
回复 7# dreamice


    这个问题没解决啊,困扰一年多了。。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP