监控(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种解题方法:
使用cp.get_file方法推送脚本到服务器,再使用cmd.run方法执行脚本
直接使用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)配置管理也可以很简单的主要内容,如果未能解决你的问题,请参考以下文章