使用docker离线安装zabbix
#!/usr/bin/env/python
# -*- coding: utf-8 -*-
import os
import time
import re
import commands
zabbix_dir = os.path.dirname(os.path.realpath(__file__))
cron_file = '/var/spool/cron/crontabs/root'
zabbix_cmds=[
'useradd zabbix',
'mkdir /var/log/zabbix-agent/ -pv',
'chmod a+rw /var/log/zabbix-agent/',
'mkdir /var/run/zabbix/ -pv',
'chmod a+rw /var/run/zabbix/',
'ufw allow 10050/tcp',
'/etc/init.d/cron restart'
]
load_cmds = [
# 'docker load <zabbix-mysql.tar',
'docker load <zabbix-server.tar',
'docker load <zabbix-web.tar',
]
mysql_cmds=[
'docker run --restart=always --name zabbix-mysql -v %s:/opt -e MYSQL_DATABASE=zabbix -e MYSQL_ROOT_PASSWORD=\"test\" -e TZ=Asia/Shanghai -d storage-shshukun:5050/mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --max-allowed-packet=33554432'%(zabbix_dir),
# 'docker run --name zabbix-mysql -d -v %s:/opt -e MYSQL_ROOT_PASSWORD=\"test\" storage-shshukun:5050/mysql:latest'%(zabbix_dir),
]
start_cmds = ['ufw allow 10050/tcp',
'/etc/init.d/cron restart',
'docker exec zabbix-mysql sh -c \"exec mysql -uroot -ptest zabbix < /opt/zabbix.sql\"',
'docker run --name zabbix-server -p10051:10051 --link zabbix-mysql:mysql -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="test" -d storage-shshukun:5050/zabbix-server:latest',
'docker run --name zabbix-web --link zabbix-mysql:mysql -p6984:80 -p8443:443 --link zabbix-server:zabbix-server -e DB_SERVER_HOST="zabbix-mysql" -e MYSQL_USER="root" -e MYSQL_PASSWORD="test" -e ZBX_SERVER_HOST="zabbix-server" -e PHP_TZ="Asia/Shanghai" -d storage-shshukun:5050/zabbix-web:latest'
]
def cron():
with open(cron_file) as f:
if len(re.findall('\n\*/1 \* \* \* \* python \/home\/devops1\/sk\/delivering-toolset\/zabbix\/ping_aws.py',f.read()))==0:
commands.getoutput('echo \"*/1 * * * * python /home/devops1/sk/delivering-toolset/zabbix/ping_aws.py\">>/var/spool/cron/crontabs/root')
print "crontable add ping asw"
else:
print "ping aws in crontable "
def offline_install_zabbix_agent():
os.chdir(zabbix_dir)
executes(zabbix_cmds)
os.popen('mkdir -p /etc/zabbix/')
# 拷贝zabbix 配置文件到/etc/zabbix/下
print os.popen('cp zabbix_agentd.conf /etc/zabbix/ ')
# 解压zabbix 二进制包到/usr/
print os.popen('tar -zxvf zabbix-3.2.11.tar.gz -C /usr/local').read()
os.chdir('/usr/local/zabbix-3.2.11')
output = commands.getoutput('./configure --enable-agent')
print output
time.sleep(3)
output = commands.getoutput('make install')
print output
def executes(cmds):
for cmd in cmds:
output = commands.getoutput(cmd)
print(output)
time.sleep(3)
def get_service_ip():
ifconfig_info = os.popen('docker exec zabbix-server bash -c \"ifconfig\"').read()
ip = re.findall(r'inet addr:(172+.\d+.\d+.\d+)', ifconfig_info)[0]
return ip
def zabbix_agent_restart():
cmd = 'netstat -ltpn | grep 10050'
result = os.popen(cmd).read()
if result == '':
os.popen('zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf').read()
else:
os.popen('killall -9 zabbix_agentd').read()
os.popen('zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf').read()
def install():
print os.popen("python stop_zabbix_docker.py").read()
#添加ping_aws定时任务
cron()
# 导入docker镜像
executes(load_cmds)
# 启动zabbix-mysql
executes(mysql_cmds)
time.sleep(30)
# 启动zabbix-web-nginx-mysql、mysql
executes(start_cmds)
# 查看docker 容器状态
cmd = 'docker ps -a'
print(os.popen(cmd).read())
# 获取zabbix server ip
ip = get_service_ip()
cmd = 'docker exec zabbix-server bash -c "echo \\"172.17.0.1 zabbix\\" >>/etc/hosts"'
print(os.popen(cmd).read())
# 安装zabbix——agent 客户端
offline_install_zabbix_agent()
os.chdir(zabbix_dir)
# 拷贝配置文件
cmd = 'cp zabbix_agentd.conf /etc/zabbix/'
print os.popen(cmd).read()
cmd = 'sed -i \'s/172.17.0.8/%s/g\' /etc/zabbix/zabbix_agentd.conf' % (ip)
print(os.popen(cmd).read())
# 启动zabbix
zabbix_agent_restart()
print os.popen('netstat -ltpn | grep 10050').read()
print 'install done'
if __name__ == '__main__':
install()
更多推荐
所有评论(0)