zabbix报错分析
来源:互联网 发布:淘宝自动确认收货是几天 编辑:程序博客网 时间:2024/05/22 17:51
zabbix报错分析
报错信息如下:
3128:20150429:114455.871 history data from active proxy on “115.29.182.109” failed: proxy “jinrong” not found
查找源码
[root@monitor src]# grep “history data from active proxy” * -r|more
zabbix_server/trapper/trapper.c: zabbix_log(LOG_LEVEL_WARNING, “history data from active proxy on \”%s\” failed: %s”,
得出是trapper.c 导致。
分析trapper.c
/****************************************************************************** * * * Function: recv_proxyhistory * * * * Purpose: processes the received values from active proxies * * * ******************************************************************************/static void recv_proxyhistory(zbx_sock_t *sock, struct zbx_json_parse *jp){ const char *__function_name = "recv_proxyhistory"; zbx_uint64_t proxy_hostid; char host[HOST_HOST_LEN_MAX], *error = NULL; int ret; zabbix_log(LOG_LEVEL_DEBUG, "In %s()", __function_name); if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error))) { zabbix_log(LOG_LEVEL_WARNING, "history data from active proxy on \"%s\" failed: %s", get_ip_by_socket(sock), error); goto out; } update_proxy_lastaccess(proxy_hostid); ret = process_hist_data(sock, jp, proxy_hostid, error, sizeof(error));out: zbx_send_response(sock, ret, error, CONFIG_TIMEOUT); zbx_free(error); zabbix_log(LOG_LEVEL_DEBUG, "End of %s()", __function_name);}
也就是说 get_active_proxy_id(jp, &proxy_hostid, host, &error)) 这个函数执行不正确的话,会报上面的错。
问题又转化为 get_active_proxy_id的执行了。
继续搜索 get_active_proxy_id 这个函数的源码文件,
[root@monitor src]# grep get_active_proxy_id * -rBinary file libs/zbxdbhigh/libzbxdbhigh.a matchesBinary file libs/zbxdbhigh/libzbxdbhigh_a-proxy.o matcheslibs/zbxdbhigh/proxy.c: * Function: get_active_proxy_id *libs/zbxdbhigh/proxy.c:int get_active_proxy_id(struct zbx_json_parse *jp, zbx_uint64_t *hostid, char *host, char **error)Binary file zabbix_server/trapper/proxyhosts.o matcheszabbix_server/trapper/proxydiscovery.c: if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error)))zabbix_server/trapper/trapper.c: if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error)))zabbix_server/trapper/trapper.c: if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error)))Binary file zabbix_server/trapper/trapper.o matchesBinary file zabbix_server/trapper/proxydiscovery.o matchesBinary file zabbix_server/trapper/proxyconfig.o matcheszabbix_server/trapper/proxyautoreg.c: if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error)))zabbix_server/trapper/proxyconfig.c: if (SUCCEED != get_active_proxy_id(jp, &proxy_hostid, host, &error))Binary file zabbix_server/trapper/proxyautoreg.o matchesBinary file zabbix_server/trapper/libzbxtrapper.a matcheszabbix_server/trapper/proxyhosts.c: if (SUCCEED != (ret = get_active_proxy_id(jp, &proxy_hostid, host, &error)))Binary file zabbix_server/zabbix_server matches
可以看到是在libs/zbxdbhigh/proxy.c 文件中定义
/****************************************************************************** * * * Function: get_active_proxy_id * * * * Purpose: extract a proxy name from JSON and find the proxy ID in database. * * The proxy must be configured in active mode. * * * * Parameters: jp - [IN] JSON with the proxy name * * hostid - [OUT] proxy host ID found in database * * host - [IN] buffer with minimum size * * 'HOST_HOST_LEN_MAX' * * error - [OUT] error message * * * * Return value: SUCCEED - proxy ID was found in database * * FAIL - an error occurred (e.g. an unknown proxy or the * * proxy is configured in passive mode * * * * Author: Alexander Vladishev * * * ******************************************************************************/int get_active_proxy_id(struct zbx_json_parse *jp, zbx_uint64_t *hostid, char *host, char **error){ DB_RESULT result; DB_ROW row; char *host_esc; int ret = FAIL, status; if (SUCCEED == zbx_json_value_by_name(jp, ZBX_PROTO_TAG_HOST, host, HOST_HOST_LEN_MAX)) { if (FAIL == zbx_check_hostname(host)) { *error = zbx_dsprintf(*error, "invalid proxy name \"%s\"", host); return ret; } host_esc = DBdyn_escape_string(host); result = DBselect( "select hostid,status" " from hosts" " where host='%s'" " and status in (%d,%d)" ZBX_SQL_NODE, host_esc, HOST_STATUS_PROXY_ACTIVE, HOST_STATUS_PROXY_PASSIVE, DBand_node_local("hostid")); zbx_free(host_esc); if (NULL != (row = DBfetch(result)) && FAIL == DBis_null(row[0])) { if (SUCCEED == is_uint31(row[1], &status)) { if (HOST_STATUS_PROXY_ACTIVE == status) { ZBX_STR2UINT64(*hostid, row[0]); ret = SUCCEED; } else { *error = zbx_dsprintf(*error, "proxy \"%s\" is configured in passive mode", host); } } else THIS_SHOULD_NEVER_HAPPEN; } else *error = zbx_dsprintf(*error, "proxy \"%s\" not found", host); DBfree_result(result); } else *error = zbx_strdup(*error, "missing name of proxy"); return ret;}
分析这段源码,也就是说hosts表中查不到的时候是会报 proxy \”%s\” not found 的。
hosts表结构
MySQL [zabbix]> desc hosts;
+——————–+———————+——+—–+———+——-+
| Field | Type | Null | Key | Default | Extra |
+——————–+———————+——+—–+———+——-+
| hostid | bigint(20) unsigned | NO | PRI | NULL | |
| proxy_hostid | bigint(20) unsigned | YES | MUL | NULL | |
| host | varchar(64) | NO | MUL | | |
| status | int(11) | NO | MUL | 0 | |
| disable_until | int(11) | NO | | 0 | |
| error | varchar(128) | NO | | | |
| available | int(11) | NO | | 0 | |
| errors_from | int(11) | NO | | 0 | |
| lastaccess | int(11)
分析
观察hosts表数据,其实发现status 就是主机状态,HOST_STATUS_PROXY_ACTIVE ,HOST_STATUS_PROXY_PASSIVE 为主动,被动模式的代理,结合zabbix的理论,active 模式的proxy ,只需要配置proxy的名字,不需要配置ip 或者dns 名,是会主动建立和server的连接的。那么现在建立连接的时候没有在hosts表中发现配置,就会报 proxy not found的的错误。联想到之前确实删除过proxy配置,然而机器上面的proxy 还在运行,所以会导致这种情况。但是之前2.2.3都没有这样的报警的。要么是2.2.9里面新push的代码。
处理
在dm 配置中加上原来jinrong的那个proxy 配置之后,zabbix server不在报这样的错。处理完毕。
后记
源码还是要尝试着看,毕竟是“源码面前了无秘密”。不一定要完全理解。
- zabbix报错分析
- zabbix fping报错
- zabbix安装报错
- zabbix 报错
- zabbix 2.4 报错汇总
- yum 安装zabbix报错
- zabbix安装报错记录
- zabbix网页登录报错
- zabbix安装报错集锦
- zabbix常见报错问题处理
- 部署zabbix客户端报错信息
- ubuntu安装zabbix后,启动报错,zabbix_server is disabled in /etc/default/zabbix-server.
- zabbix监控报错zabbix server is not running: the information displayed may not be current
- zabbix server 报错 zabbix server is not running: the information displayed may not be current
- Zabbix 报错 [113] No route to host
- zabbix-3.0导入percona模板报错 【转】
- zabbix源码阅读分析
- zabbix监控报错zabbix server is not running: the information displayed may not be current的解决
- linux shell 字符串操作(长度,查找,替换)详解
- Linux问题集
- 代码块
- mybatis使用注意事项
- Appium小试
- zabbix报错分析
- C++primer2.3 复合类型指针和引用
- java Timer与TimerTask的真正原理&使用介绍
- Sorting array elements by date
- Weka使用过滤器
- Appium windows环境搭建
- Axis2调用webservice开启session管理
- js:cnzz页面统计代码阅读
- Python之网络编程