zabbix二次开发集成运维平台展现监控图表

前沿:

    集群控制平台已经要慢慢的灰度上线了,出问题的时候,才找点bug,时间有点空闲。正好看了下zabbix的数据库,产生了自己想做一套能更好的展现zabbix的页面。

   zabbix的强点大家都感觉或者用出感觉了,确实很是方便。曾经的我,跟着公司的团队开发过一套不小的监控系统,看过我博客的人应该留意到那个用redis mongodb,后期改用golang,0mq支撑业务的监控平台。

    其实对比起来,我个人还是喜欢zabbix,虽然和团队一起很爽,爽也只是设计一套监控平台框框,里面的东西填写起来那可真是吐血。。。 随着看zabbix的文档深入,越发的觉得,zabbix做的真不错。   但是大家有没有觉得,对于不熟系zabbix的人,让他一下在看zabbix的数据,绝对是有点发蒙,他数据展现的有点不清不白的,当然有过配置和运维经验的人,一眼就能看出哪是哪里。


旁边cdn部门在讨论东西的时候,我发现他们的那个报表不直观,而且不高端。。。

   对于zabbix,我用的最多的反而是api,在上个公司做了一个简练的针对zabbix的api接口,可以迅速的增删改查主机,虽然时不时的抽风,但是那绝对我自己对zabbix理解的问题。


我期待的样子

1.   权限用公司的权限管理系统,集中单点登录。

2.   登录后输入ip地址,可以看到这个ip地址所属的情况,比如内存,cpu,流量等等。

3.   根据业务线做好分组,这样dba组的人,一登录就可以看到dba所属的服务器状况。

4.   数据库采用zabbix的从库,这样就能很好的免除了压力。

当然写完前三个大需求就成一个项目了,目标定的是很远,但是精力是有限。

我们可以先来个简单了,从数据库里面取出item监控项的时间和值,然后用前端的图表进行画图。


我们首先要从mysql里面取值,Zabbix中存储历史数据的表是以history开头的,目前zabbix 2.06 中主要有一下几张表。

>>>>>history              Numeric(float)

>>>>>history_log           -log

>>>>>history_str           -Character

>>>>>history_text          -text

>>>>>history_uint          -Numeric(unsigned)

通过数据库可以看到这个值的 item 时间 value ns



wKioL1M0TOSzjGP6AAPbfunNU-w820.jpg


我们看下zabbix的针对eth0监控的图表

wKioL1M0UXKjaB-lAATIUVnak4k081.jpg


流量的统计,这里只是简单的把数据塞到了jinja2的模板里面,然后用highcharts画图的 。

wKiom1M0UXLy0MUHAAH7SXCyvzM800.jpg


我们再来看看zabbix的几个主要的表:

一看就懂,在咱们创建主机的那几个选项。。。要留意下hostid,这个hostid在其他表做了数据字段的关联。

mysql> 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)             | NO   |     | 0       |       |
| ipmi_authtype      | int(11)             | NO   |     | 0       |       |
| ipmi_privilege     | int(11)             | NO   |     | 2       |       |
| ipmi_username      | varchar(16)         | NO   |     |         |       |
| ipmi_password      | varchar(20)         | NO   |     |         |       |
| ipmi_disable_until | int(11)             | NO   |     | 0       |       |
| ipmi_available     | int(11)             | NO   |     | 0       |       |
| snmp_disable_until | int(11)             | NO   |     | 0       |       |
| snmp_available     | int(11)             | NO   |     | 0       |       |
| maintenanceid      | bigint(20) unsigned | YES  | MUL | NULL    |       |
| maintenance_status | int(11)             | NO   |     | 0       |       |
| maintenance_type   | int(11)             | NO   |     | 0       |       |
| maintenance_from   | int(11)             | NO   |     | 0       |       |
| ipmi_errors_from   | int(11)             | NO   |     | 0       |       |
| snmp_errors_from   | int(11)             | NO   |     | 0       |       |
| ipmi_error         | varchar(128)        | NO   |     |         |       |
| snmp_error         | varchar(128)        | NO   |     |         |       |
| jmx_disable_until  | int(11)             | NO   |     | 0       |       |
| jmx_available      | int(11)             | NO   |     | 0       |       |
| jmx_errors_from    | int(11)             | NO   |     | 0       |       |
| jmx_error          | varchar(128)        | NO   |     |         |       |
| name               | varchar(64)         | NO   | MUL |         |       |
+--------------------+---------------------+------+-----+---------+-------+
30 rows in set (0.00 sec)
mysql>

查询下: 可以得到我的hostid是 10085, 你为啥不是10086,不然以后再也不为花费发愁了 !!!

*************************** 25. row ***************************
            hostid: 10085
      proxy_hostid: NULL
              host: 192.168.1.120
            status: 0
     disable_until: 0
             error:
         available: 0
       errors_from: 0
        lastaccess: 0
     ipmi_authtype: -1
    ipmi_privilege: 2
     ipmi_username:
     ipmi_password:
ipmi_disable_until: 0
    ipmi_available: 0
snmp_disable_until: 0
    snmp_available: 0
     maintenanceid: NULL
maintenance_status: 0
  maintenance_type: 0
  maintenance_from: 0
  ipmi_errors_from: 0
  snmp_errors_from: 0
        ipmi_error:
        snmp_error:
 jmx_disable_until: 0
     jmx_available: 0
   jmx_errors_from: 0
         jmx_error:
              name: 192.168.1.120

今晚就先做这出根据数据做图,明天再搞搞别的。

再来说说如何的掌控主机监控项的表。

mysql> desc items;
+-----------------------+---------------------+------+-----+---------+-------+
| Field                 | Type                | Null | Key | Default | Extra |
+-----------------------+---------------------+------+-----+---------+-------+
| itemid                | bigint(20) unsigned | NO   | PRI | NULL    |       |
| type                  | int(11)             | NO   |     | 0       |       |
| snmp_community        | varchar(64)         | NO   |     |         |       |
| snmp_oid              | varchar(255)        | NO   |     |         |       |
| hostid                | bigint(20) unsigned | NO   | MUL | NULL    |       |
| name                  | varchar(255)        | NO   |     |         |       |
| key_                  | varchar(255)        | NO   |     |         |       |
| delay                 | int(11)             | NO   |     | 0       |       |
| history               | int(11)             | NO   |     | 90      |       |
| trends                | int(11)             | NO   |     | 365     |       |
| lastvalue             | varchar(255)        | YES  |     | NULL    |       |
| lastclock             | int(11)             | YES  |     | NULL    |       |
| prevvalue             | varchar(255)        | YES  |     | NULL    |       |
| status                | int(11)             | NO   | MUL | 0       |       |
| value_type            | int(11)             | NO   |     | 0       |       |
| trapper_hosts         | varchar(255)        | NO   |     |         |       |
| units                 | varchar(255)        | NO   |     |         |       |
| multiplier            | int(11)             | NO   |     | 0       |       |
| delta                 | int(11)             | NO   |     | 0       |       |
| prevorgvalue          | varchar(255)        | YES  |     | NULL    |       |
| snmpv3_securityname   | varchar(64)         | NO   |     |         |       |
| snmpv3_securitylevel  | int(11)             | NO   |     | 0       |       |
| snmpv3_authpassphrase | varchar(64)         | NO   |     |         |       |
| snmpv3_privpassphrase | varchar(64)         | NO   |     |         |       |
| formula               | varchar(255)        | NO   |     | 1       |       |
| error                 | varchar(128)        | NO   |     |         |       |
| lastlogsize           | bigint(20) unsigned | NO   |     | 0       |       |
| logtimefmt            | varchar(64)         | NO   |     |         |       |
| templateid            | bigint(20) unsigned | YES  | MUL | NULL    |       |
| valuemapid            | bigint(20) unsigned | YES  | MUL | NULL    |       |
| delay_flex            | varchar(255)        | NO   |     |         |       |
| params                | text                | NO   |     | NULL    |       |
| ipmi_sensor           | varchar(128)        | NO   |     |         |       |
| data_type             | int(11)             | NO   |     | 0       |       |
| authtype              | int(11)             | NO   |     | 0       |       |
| username              | varchar(64)         | NO   |     |         |       |
| password              | varchar(64)         | NO   |     |         |       |
| publickey             | varchar(64)         | NO   |     |         |       |
| privatekey            | varchar(64)         | NO   |     |         |       |
| mtime                 | int(11)             | NO   |     | 0       |       |
| lastns                | int(11)             | YES  |     | NULL    |       |
| flags                 | int(11)             | NO   |     | 0       |       |
| filter                | varchar(255)        | NO   |     |         |       |
| interfaceid           | bigint(20) unsigned | YES  | MUL | NULL    |       |
| port                  | varchar(64)         | NO   |     |         |       |
| description           | text                | NO   |     | NULL    |       |
| inventory_link        | int(11)             | NO   |     | 0       |       |
| lifetime              | varchar(64)         | NO   |     | 30      |       |
+-----------------------+---------------------+------+-----+---------+-------+

咱们来定位下,我的那个eth0 。

mysql> select * from  items where hostid=10084 and name="eth0" \G;
*************************** 1. row ***************************
               itemid: 23329
                 type: 0
       snmp_community:
             snmp_oid:
               hostid: 10084
                 name: eth0
                 key_: net.if.in[eth0,bytes]
                delay: 10
              history: 90
               trends: 365
            lastvalue: 647
            lastclock: 1395938649
            prevvalue: 648
               status: 0
           value_type: 3
        trapper_hosts:
                units:
           multiplier: 0
                delta: 1
         prevorgvalue: 3687436151
  snmpv3_securityname:
 snmpv3_securitylevel: 0
snmpv3_authpassphrase:
snmpv3_privpassphrase:
              formula: 1
                error:
          lastlogsize: 0
           logtimefmt:
           templateid: NULL
           valuemapid: NULL
           delay_flex:
               params:
          ipmi_sensor:
            data_type: 0
             authtype: 0
             username:
             password:
            publickey:
           privatekey:
                mtime: 0
               lastns: 101190560
                flags: 0
               filter:
          interfaceid: 1
                 port:
          description:
       inventory_link: 0
             lifetime: 30
1 row in set (0.00 sec)
ERROR:
No query specified
mysql>



简单说下他的账号,他默认是用md5入库的,可以让新老用户都登录到平台中。


大家觉得文章对你有些作用! 如果想赏钱,可以用微信扫描下面的二维码,感谢!
另外再次标注博客原地址  xiaorui.cc

发表评论

邮箱地址不会被公开。 必填项已用*标注