监控(zabbix)配置管理也可以很简单

Posted eking运维中心

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了监控(zabbix)配置管理也可以很简单相关的知识,希望对你有一定的参考价值。

  • 作者: 张伟

  • 时间:2018-03-15

  • 分类: 技术分享

首先有个活

    活:给所有主机加上一项"操作系统TCP连接数"的数据采集配置
敲定采集方式

再查下监控系统中各主机数量


· Windows主机:*23台
· Linux主机:*82台

    (有点凶哦,不少呢)


其中windows主机可以直接配置,linux主机需要更新下zabbix agent配置


zabbix服务端配置

(加起来都好多台,在页面上一个个点是不可能的,这辈子都不可能一个个点的)


    直接看zabbix api文档,找到操作方法:host.get以及host.messadd
    zabbix api的接口连接只有一个,变换下post json内容就好了


    只会python,先写个类,以后也能用到
    AccessApi.py  # API调用
    ParserData.py  # 生成相应的json数据


    然后开始准备本次工作的脚本


# coding:utf-8
 
 """
 Author: zhangwei
 File: 给已有服务器添加新模板.py
 Create: 2018/3/12 11:27
 Description:
 """
 
 from EkingZabbix import AccessApi
 from EkingZabbix import ParserData
 from EkingZabbix import *
 import json
 import time
 import sys
 
 if __name__ == '__main__':
 
     """
     南数的
     tmpl_id = ['13***']
     data_file = 'ns_win.csv'
     """
 
     """
     北数的
     zabbix_host = bj
     tmpl_id = ['12***']
     data_file = 'bj_win.csv'
     """
 
     zabbix_host = hk
     tmpl_id = ['13***']
     data_file = 'hk_linux.csv'
 
     tmpl_name = 'Network.TCP.Conn.linux'
 
     # main
     my_task = AccessApi.Conn()
     token = my_task.login(host=zabbix_host)
 
     # 登录
     if token:
 
         # 主机添加新的模板
         host_info = open(data_file, encoding="utf8").read().splitlines()
         count = 0
         for info in host_info:
             count += 1
             info = info.strip().split(',')
             hostid = info[0]
             hostname = info[1]
 
             # 获取一份原始的主机模板信息
             hostids = [hostid]
             hosts = ParserData.Hosts()
             host_get_tmpl = hosts.get_host_templates(token=token,hostids=
              hostids)
             result = my_task.api(post_data=host_get_tmpl)
             result = json.loads(result.text)
             for res in result['result']:
            msg_host = '[{}]-[{}],Before'.format(res['hostid'], res['name'])
                 msg_all = msg_host
                 for tmpl in res['parentTemplates']:
                 msg_all = '{},[{}]-[{}]'.format(msg_all,
                              tmpl['templateid'],
                              tmpl['name'])
                 # 检查主机是否已经配置,已经配置的忽略
                 if tmpl_id[0] in msg_all and tmpl_name in msg_all:
                     exec_add = False
                     print('{},Ignore'.format(msg_all))
                 else:
                     exec_add = True
                     print(msg_all)
 
             # exec_add = False  # switch 执行开关
             if exec_add:
                 # 增加指定模板
           add_template = hosts.add_new_template(token=token,
                                       hostids=hostids,
                                       templateids=tmpl_id)
                 result = my_task.api(post_data=add_template)
                 # 再获取一次主机的模板信息
                 result = my_task.api(post_data=host_get_tmpl)
                 result = json.loads(result.text)
                 for res in result['result']:
            msg_host = '[{}]-[{}],After'.format(res['hostid'],
                     res['name'])
                     msg_all = msg_host
                     for tmpl in res['parentTemplates']:
                     msg_all = '{},[{}]-[{}]'.format(msg_all,
                                 tmpl['templateid'],
                                 tmpl['name'])
                     print(msg_all)
                 # print(msg_all)
                 if count < 10:
                     interval = 30
                 elif count < 20:
                     interval = 20
                 elif count < 10:
                     interval = 10
                 else:
                     interval = 1
                 time.sleep(interval)
 
         print(count)
     # 退出
     result = my_task.logout()


    后面改下主机信息文档,zabbix链接,以及模板ID三个变量就好了。
多少机器一次搞定,还有执行频率调整,发现错误及时中止,不用跑路...
    人性化输出,实时查看比对,避免出错;

[10195]-[192.168.1.1],Before,[10110]-[OS]

[10195]-[192.168.1.1],After,[10110]-[OS],[13383]-[Network.TCP.Conn.windows]

[10196]-[192.168.1.1],Before,[10110]-[OS],[10275]-[DB.MSSQL]

[10196]-[192.168.1.1],After,[10110]-[OS],[10275]-[DB.MSSQL],[13383]-[Network.TCP.Conn.windows]




zabbix客户端配置(linux)


linux主机要更新下zabbix_agentd.conf
配置添加一行自定义key
再重启zabbix客户端即可

没有想(懒)法(癌)的同志,这个时候只能一台台来了
部分高级的ssh terminal这时候也可以救救急


    OK,想要自动化的实现。最(没)简(有)单(坑)的情况,所有的zabbix agent应该是标准化安装的
但是天下何处没有坑...


#!/bin/sh
# zhang-w6@haihangyun.com
# zabbix-agentd配置更新
# 20180314

configDir=/usr/local/zabbixagent/conf
configPath=${configDir}/zabbix_agentd.conf
configBackup=${configPath}.`date +%Y%m%d`.`date +%H%M`

running_config=`ps -ef|grep ${configPath}|grep -vc grep`
if [ -f ${configPath} ] && [ ${running_config} -eq 1 ];then
    # confirm config file && execute backup
    cp ${configPath} ${configBackup}
    chk_backup=`md5sum ${configPath} ${configBackup}|awk '{print $1}'|uniq|w
 c -l`
    if [ ${chk_backup} -eq 1 ];then
      # backup success
    if [ ! `grep -l 'linux_tcp_conn'    ${configPath}` ]; then
            echo "UserParameter=linux_tcp_conn[*],netstat -tn|egrep \$1 -c" 
         >> ${configPath}
            diff ${configPath} ${configBackup}
            service zabbix_agentd restart
            echo "zabbixagent_process=`ps -ef|grep zabbix_agentd -c`"
        else
            grep "linux_tcp_conn" ${configPath}
            echo "Exit: config has key \"linux_tcp_conn\""
            ps -ef|grep ${configDir}
        fi
    else
        echo "Exit: backup failed"
    fi
else
    echo "configPath=${configPath},runningConfig=${running_config}"
    echo "Exit: config not match"
fi


此脚本非常贴(谨)心(慎)
先检查agent进程及agent配置是否符合规范
执行备份,并检查备份结果
检查配置文件是否已存在相同配置
最后执行更改并重启


然后关门放saltstack,这道题有2种解题方法:

  1. 使用cp.get_file方法推送脚本到服务器,再使用cmd.run方法执行脚本

  2. 直接使用cmd.run下载和执行脚本


作为一个经(fei)验(chang)丰(lan)富(duo)的工程师,能走1步不走2步


准备1行shell搞定

wget http://*.eking-tech.com/downloads/scripts/20180314-zabbixagentd.sh -O 
/tmp/20180314-zw-zabbixupd.sh && sh /tmp/20180314-zw-zabbixupd.sh

但是还是太天真了。大多数服务器没有安装wget,只能曲线救国,再来

curl http://*.eking-tech.com/downloads/scripts/20180314-zabbixagentd.sh > /t
mp/20180314-zw-zabbixupd.sh 2>/dev/null && sh /tmp/20180314-zw-zabbixupd.sh

搞定,丢到saltstack上执行

salt -G 'os:centos' cmd.run 'curl http://*.eking-tech.com/downloads/scripts/
20180314-zabbixagentd.sh > /tmp/20180314-zw-zabbixupd.sh 2>/dev/null && sh /
tmp/20180314-zw-zabbixupd.sh'

    目前运维自动化平台接入系统不多,只能跑71台,还剩800+,这些机器的兄弟们我帮不到你们了。



总结


此工作从头到尾涉及到了

· 操作系统基础知识:win和linux下获取tcp连接数的方法
· 网络知识:不要傻傻的把listen的tcp统计进去
· 脚本能力:python 及 shell 及 sql
· 运维工具:zabbix 及 saltstack
· 文档阅读:zabbix api 及 saltstack modules


耗费工时

· 文档查阅:0.5h
· 脚本编写及测试:6h
· 执行更新:1.5h
· 更新检查:3h
· 数据整理:3h







以上是关于监控(zabbix)配置管理也可以很简单的主要内容,如果未能解决你的问题,请参考以下文章

Linux监控平台搭建-zabbix

Linux学习总结(五十五)监控zabbix部署 上篇

zabbix安装(server),修改Admin密码

zabbix监控websphere和weblogic

zabbix 配置SNMP监控

Zabbix监控redis配置及宏的使用