阿里云-云小站(无限量代金券发放中)
【腾讯云】云服务器、云数据库、COS、CDN、短信等热卖云产品特惠抢购

Zabbix API与PHP的配置

424次阅读
没有评论

共计 5014 个字符,预计需要花费 13 分钟才能阅读完成。

因为最近线上的 Hadoop 集群从 mrv1 升级到 mrv2 了,监控模板也跟着变动了。。

线上是 200 台左右的集群,模块采用了 link 的方式来添加,即一个模板下 link 大量的模块,然后主机添加到这个模板里。

Zabbix API 与 PHP 的配置

编辑推荐:

安装部署分布式监控系统 Zabbix 2.06 http://www.linuxidc.com/Linux/2013-07/86942.htm

《安装部署分布式监控系统 Zabbix 2.06》http://www.linuxidc.com/Linux/2013-07/86942.htm

CentOS 6.3 下 Zabbix 安装部署 http://www.linuxidc.com/Linux/2013-05/83786.htm

Zabbix 分布式监控系统实践 http://www.linuxidc.com/Linux/2013-06/85758.htm

CentOS 6.3 下 Zabbix 监控 apache server-status http://www.linuxidc.com/Linux/2013-05/84740.htm

CentOS 6.3 下 Zabbix 监控 MySQL 数据库参数 http://www.linuxidc.com/Linux/2013-05/84800.htm

 

这样算下来一台机器差不多有 215 个 item.

为了增加 NM 的监控,也采用了 link 的方式来连接模板,在页面上 link 时发现一直返回一个空白页。

为了快速上线,改变了下方法,使用了 host.update 的 api,直接把 host link 到 NM 的模板。

回过头来看这个问题:

在通过页面 link 模板时,其实也是调用了 zabbix template 相关的 api(具体调用了 template.update 方法)

直接通过脚本来调用 api 测试:

测试脚本

#!/usr/bin/env Python

import urllib2

import sys

import json

def requestJason(url,values):

    data = json.dumps(values)

    print data

    req = urllib2.Request(url, data, {‘Content-Type’: ‘application/json-rpc’})

    response = urllib2.urlopen(req, data)

    data_get = response.read()

    output = json.loads(data_get)

    print output

    try:

        message = output[‘result’]

    except:

        message = output[‘error’][‘data’]

        quit()

    print json.dumps(message) 

    return output

def authenticate(url, username, password):

    values = {‘jsonrpc’: ‘2.0’,

              ‘method’: ‘user.login’,

              ‘params’: {

                  ‘user’: username,

                  ‘password’: password

              },

              ‘id’: ‘0’

              }

    idvalue = requestJason(url,values)

    return idvalue[‘result’]

def getTemplate(hostname,url,auth):

    values = {‘jsonrpc’: ‘2.0’,

              ‘method’: ‘template.get’,

              ‘params’: {

                  ‘output’: “extend”,

                  ‘filter’: {

                      ‘host’: hostname

                  }

              },

              ‘auth’: auth,

              ‘id’: ‘2’

              }

    output = requestJason(url,values)

    print output[‘result’][0][‘hostid’]

    return  output[‘result’][0][‘hostid’]

def changeTemplate(idx,id_list,url,auth):

    values = {‘jsonrpc’: ‘2.0’,

              ‘method’: ‘template.update’,

              ‘params’: {

                “templateid”:idx,           

                “templates”:id_list

              },

              ‘auth’: auth,

              ‘id’: ‘2’

              }

    output = requestJason(url,values)

    print output

def main():

    id_list = []

    hostname = “linuxidc_Template_OS_Linux_Hadoop_Datanode_Pro”

    url = ‘xxxx’

    username = ‘admin’

    password = ‘xxxx’

    auth = authenticate(url, username, password)

    idx = getTemplate(hostname,url,auth)

    temlist = [‘linuxidc_Template_LB_Tengine_8090′,’linuxidc_Template_Redis_6379′,’linuxidc_Template_Redis_6380′,’linuxidc_Template_Redis_6381′,’linuxidc_Template_Redis_6382′,’linuxidc_Template_Redis_6383’]

    for tem in temlist:

        idtemp = getTemplate(tem,url,auth)

        id_list.append({“templateid”:idtemp})

    print id_list

    #id_list = [{“templateid”:’10843′},{“templateid”:”10554″},{“templateid”:”10467″},{“templateid”:”10560″},{“templateid”:”10566″},{“templateid”:”10105″}]

    changeTemplate(idx,id_list,url,auth)

if __name__ == ‘__main__’:

    main()

脚本结果:

urllib2.HTTPError: HTTP Error 500: Internal Server Error

因为 api 其实是发送了一个 jason 格式的 post 请求,手动使用 curl 来验证:

curl  -vvv -i -X POST -H ‘Content-Type:application/json’ -d

‘{“params”: {“templates”: [{“templateid”: “10117”}, {“templateid”: “10132”}, {“templateid”: “10133”}, {“templateid”: “10134”},

{“templateid”: “10135”}, {“templateid”: “10136”}], “templateid”: “10464”}, “jsonrpc”: “2.0”, “method”: “template.update”, “auth”: “421a04b400e859834357b5681a586a5f”, “id”: “2”}’

http://zabbix.idc.linuxidc.com/api_jsonrpc.php

返回 500 错误(即后端 php 处理时遇到错误导致), 调整 php 的配置,把日志改成 debug 格式:

php-fpm.conf:

log_level = debug

在 error log 中发现如下错误:

[04-May-2014 14:04:32.115189] WARNING: pid 6270, fpm_request_check_timed_out(), line 271: [pool www] child 6294, script ‘/apps/svr/zabbix/wwwroot/api_jsonrpc.php’ (request: “POST /api_jsonrpc.php”) executing too slow (1.269946 sec), logging

[04-May-2014 14:04:32.115327] DEBUG: pid 6270, fpm_got_signal(), line 72: received SIGCHLD

[04-May-2014 14:04:32.115371] NOTICE: pid 6270, fpm_children_bury(), line 227: child 6294 stopped for tracing

[04-May-2014 14:04:32.115385] NOTICE: pid 6270, fpm_php_trace(), line 142: about to trace 6294

[04-May-2014 14:04:32.115835] NOTICE: pid 6270, fpm_php_trace(), line 170: finished trace of 6294

[04-May-2014 14:04:32.115874] DEBUG: pid 6270, fpm_event_loop(), line 409: event module triggered 1 events

[04-May-2014 14:04:35.318614] WARNING: pid 6270, fpm_stdio_child_said(), line 166: [pool www] child 6294 said into stderr: “NOTICE: sapi_cgi_log_message(), line 663: PHP message: PHP Fatal error:  Allowed memory size of 134217728 bytes exhausted (tried to allocate 512 bytes) in /apps/svr/zabbix/wwwroot/api/classes/CItem.php on line 1088”

[04-May-2014 14:04:35.318665] DEBUG: pid 6270, fpm_event_loop(), line 409: event module triggered 1 events

即在做 link 模板时,需要把相关的数据放在 php 的内存中,而默认的设置是 128M,如果在 item 和 host 比较多的时候,很容易就会超过这个限制。

更改为

memory_limit = 1280M

重新测试,返回了 502 Bad Gateway 错误,即后端执行超时导致。

error log:

[04-May-2014 14:50:21.318071] WARNING: pid 4131, fpm_request_check_timed_out(), line 281: [pool www] child 4147, script ‘/apps/svr/zabbix/wwwroot/api_jsonrpc.php’ (request: “POST /api_jsonrpc.php”) execution timed out (10.030883 sec), terminating

执行时间超过 request_terminate_timeout 设置。导致 502 产生。

更改 request_terminate_timeout = 1800(默认是 10s),max_execution_time = 0(默认 30s),重新测试。ok.

小结

zabbix 不同于一般的线上应用,在调用 api 做更新时,是一个 batch 的行为,对内存和执行时间有一定的要求。

因此要合理的设置 php 的相关参数,在 debug 的时候调低日志级别并开启 slow log 来方便定位问题。

ZABBIX 的详细介绍 :请点这里
ZABBIX 的下载地址 :请点这里

正文完
星哥玩云-微信公众号
post-qrcode
 0
星锅
版权声明:本站原创文章,由 星锅 于2022-01-20发表,共计5014字。
转载说明:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
【腾讯云】推广者专属福利,新客户无门槛领取总价值高达2860元代金券,每种代金券限量500张,先到先得。
阿里云-最新活动爆款每日限量供应
评论(没有评论)
验证码
【腾讯云】云服务器、云数据库、COS、CDN、短信等云产品特惠热卖中

星哥玩云

星哥玩云
星哥玩云
分享互联网知识
用户数
4
文章数
19351
评论数
4
阅读量
7976534
文章搜索
热门文章
星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛NAS-6:抖音视频同步工具,视频下载自动下载保存

星哥带你玩飞牛 NAS-6:抖音视频同步工具,视频下载自动下载保存 前言 各位玩 NAS 的朋友好,我是星哥!...
星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛NAS-3:安装飞牛NAS后的很有必要的操作

星哥带你玩飞牛 NAS-3:安装飞牛 NAS 后的很有必要的操作 前言 如果你已经有了飞牛 NAS 系统,之前...
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见zabbix!轻量级自建服务器监控神器在Linux 的完整部署指南

再见 zabbix!轻量级自建服务器监控神器在 Linux 的完整部署指南 在日常运维中,服务器监控是绕不开的...
飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛NAS中安装Navidrome音乐文件中文标签乱码问题解决、安装FntermX终端

飞牛 NAS 中安装 Navidrome 音乐文件中文标签乱码问题解决、安装 FntermX 终端 问题背景 ...
阿里云CDN
阿里云CDN-提高用户访问的响应速度和成功率
随机文章
我把用了20年的360安全卫士卸载了

我把用了20年的360安全卫士卸载了

我把用了 20 年的 360 安全卫士卸载了 是的,正如标题你看到的。 原因 偷摸安装自家的软件 莫名其妙安装...
手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板

手把手教你,购买云服务器并且安装宝塔面板 前言 大家好,我是星哥。星哥发现很多新手刚接触服务器时,都会被“选购...
240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

240 元左右!五盘位 NAS主机,7 代U硬解4K稳如狗,拓展性碾压同价位

  240 元左右!五盘位 NAS 主机,7 代 U 硬解 4K 稳如狗,拓展性碾压同价位 在 NA...
星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛NAS硬件02:某鱼6张左右就可拿下5盘位的飞牛圣体NAS

星哥带你玩飞牛 NAS 硬件 02:某鱼 6 张左右就可拿下 5 盘位的飞牛圣体 NAS 前言 大家好,我是星...
仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

仅2MB大小!开源硬件监控工具:Win11 无缝适配,CPU、GPU、网速全维度掌控

还在忍受动辄数百兆的“全家桶”监控软件?后台偷占资源、界面杂乱冗余,想查个 CPU 温度都要层层点选? 今天给...

免费图片视频管理工具让灵感库告别混乱

一言一句话
-「
手气不错
颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

颠覆 AI 开发效率!开源工具一站式管控 30+大模型ApiKey,秘钥付费+负载均衡全搞定

  颠覆 AI 开发效率!开源工具一站式管控 30+ 大模型 ApiKey,秘钥付费 + 负载均衡全...
告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

告别Notion焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁”

  告别 Notion 焦虑!这款全平台开源加密笔记神器,让你的隐私真正“上锁” 引言 在数字笔记工...
让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级

让微信公众号成为 AI 智能体:从内容沉淀到智能问答的一次升级 大家好,我是星哥,之前写了一篇文章 自己手撸一...
星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛NAS-12:开源笔记的进化之路,效率玩家的新选择

星哥带你玩飞牛 NAS-12:开源笔记的进化之路,效率玩家的新选择 前言 如何高效管理知识与笔记,已经成为技术...
免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

免费无广告!这款跨平台AI RSS阅读器,拯救你的信息焦虑

  免费无广告!这款跨平台 AI RSS 阅读器,拯救你的信息焦虑 在算法推荐主导信息流的时代,我们...