zabbix部署文档以及遇到的问题-阿里云开发者社区

开发者社区> 开发与运维> 正文

zabbix部署文档以及遇到的问题

简介: zabbix的server、代理、agent搭建以及遇到的实际问题

邮政Zabbix部署方案

1、架构设计

考虑到ECS的数量多和扩展性问题,中间使用proxy代理。这样既能减轻server端的性能负载问题,又便于扩展,需要扩展ECS监控,可以基于server端新建proxy,子系统的监控通过proxy处理之后再发送给server端。Zabbix Proxy是实现Zabbix分布式监控的重要组成部分,是连接Zabbix Agent和Zabbix Server的“中间人”、“连接器”、“路由器”等。Zabbix Proxy将来自Agent的数据推送(push)到Zabbix Server或者由Zabbix Server来拿取(fetch)。

与Zabbix Server相比Zabbix Proxy不需要使用或安装GUI(Graphical User Interface、Web Interface),也不需要本地管理(Local administration),具有轻量、易于维护的特点。与Zabbix Server还不相同的就是Zabbix Proxy不生成任何用户通知,所有的用户通知都是由Zabbix Server完成的。
Zabbix Proxy默认服务端口与Zabbix Server相同(TCP:10051),也需要数据库支持。Agent端占用端口(TCP:10050)

2、邮政实际状况
邮政生产环境上一共有子系统16个,大约一共2500台左右的ECS,涉及到监控数量比较多,并且每个子系统的每台ECS的环境也不能保证完全相同,所以计划采用分批监控的方式进行

3、实际方案的部署
1)server端:
新建一台ECS,保证能够跟所有的ESC相通,存储为200G
a)LNMP环境的配置
b)Zabbix_server的软件配置与安装
c)Yum公共源的搭建(可以使用邮政的yum源,后来跟运维了解到)
d)Mariadb数据库的搭建
数据库硬盘空间大小估计:
历史记录,事件记录,趋势数据等数据保存时间为1个月,ECS数目为2500,每台的监控项为20,每60秒刷新一次,一条记录大约占50字节
需要的硬盘空间大约110G左右,所以计划用200G的硬盘
估计依据:http://www.ttlsa.com/zabbix/zabbix-database-space-6-ttlsa/
2)Proxy代理端:
新建一台ECS,同server端一样,存储为200G
计划500台ECS部署一个proxy代理,观察server和proxy的负载情况,再根据实际情况增加或减少每个proxy下ECS的数量
a)Mariadb数据库的搭建
b)Zabbix_proxy的搭建
Proxy为主动模式:主动去请求server端和agent端
zabbix_server端当主机数量过多的时候,由Server端去收集数据,Zabbix可能会出现严重的性能问题:
1、当被监控端到达一个量级的时候,Web操作很卡,容易出现502
2、图层断裂
3、开启的进程(Pollar)太多,即使减少item数量,以后加入一定量的机器也会有问题
所以下面主要往两个优化方向考虑:
1、添加Proxy节点或者Node模式做分布式监控
2、调整Agentd为主动模式

        根据邮政的实际情况选择采用proxy代理主动模式
        配置要点:

启动服务顺序:配置Proxy或Agent时要先在Web中配置Zabbix Server,后启动Proxy或Agent服务;
配置顺序:先配置Server后配置Proxy,最后配置Agent
3)agent端:
涉及到的agent端的数量巨大,所以计划采用pssh分批量处理脚本安装的方法。脚本主要实现:agent端本地yum的编辑、zabbix客户端的搭建(yum安装)、客户端zabbix配置文件的修改并且启动zabbix客户端服务。
将脚本的目录通过批量复制到分批的ECS的/tmp目录下,分批执行脚本。

批量执行的问题:1、pssh的使用首先需要配置互信,可以通过脚本将server端与ECS之间配置免密登录,也可以通过跳板机进行pssh的配置,因为跳板机与所有ECS之间是免密登录的(ssh可以直接连接到ECS)2、环境的问题,分批量处理的环境可能有不同,例如Linux系统的版本,安装包的依赖性,这些可以通过脚本找到这些环境出现问题的ECS,进行服务、yum安装的验证,将错误日志导入到一个文件中,针对环境出现问题的ECS分别解决。
4) web页面:

       目前主要是对ECS的ping和web进行监控
主机的添加,可以通过批量自动发现机器,发现的条件为zabbix_agent端,然后配置动作,将主机添加到群组,并且链接一个ICMP ping模板。web模板zabbix没有自带,可以通过导入web模板,再链接web模板,或者将web监控在ICMP ping模板上添加。链接ping模板之后就自动监控web。这样的话,就要把需要web监控的ECS和不需要web监控的ECS分开来执行添加ping模板,并且需要监控的ECS还要分别于子系统归类处理。

4、回退方案
回退方案是针对各个模块进行的回退,哪个模块出现问题就回退哪个模块,如果是想要整体进行回退的话,推荐先回退web界面、agent端、proxy端、server端,倒着进行回退。

1)server端
a)对于yum安装的包,可以yum –remove卸载相应的依赖包
b)PHP服务的安装文件在/usr/local/php,直接删除这个目录,PHP服务文件/etc/init.d/php-fpm直接删除
c)NGINX服务的所有文件在/usr/local/nginx,直接删除这个目录
d)MySQL数据库通过yum安装,直接yum remove mariadb-server mariadb
e)Zabbix_server安装在/usr/local/zabbix直接删除这个目录,删除zabbix用户和组 groupdel zabbix、userdel zabbix,在/etc/services删除最后四行zabbix的端口配置,删除zabbix_server的服务文件/etc/init.d/zabbix_*
f)杀死进程 killall zabbix*,killall php ,killall nginx
g)删除本地yum源配置 rm -f /etc/yum.repos.d/local_yum.repo,之前的.repo文件在/etc/yum.repos.d/backup目录里面有备份
2)proxy代理端
a)安装目录在/usr/local/zabbix,之间删除这个目录,删除服务/etc/init.d/zabbix*
b)卸载数据库yum –y remove mariadbserver mariadb
c)杀死进程 killall zabbix_proxy
d)删除本地yum源配置 rm -f /etc/yum.repos.d/local_yum.repo,之前的.repo文件在/etc/yum.repos.d/backup目录里面有备份
3)agent端
客户端的安装过程都在脚本里面:

!/bin/bash

install zabbix-agent script

about files in /tmp/os_zabbix-agent

当前时间戳

log_time=date +%Y-%m-%d_%H:%M:%S
host_ip=ifconfig | grep "^eth0" -A 1 |tail -1 |awk '{print $2}'

获取本机IP判断服务器的信息文件是否存在

touch /tmp/zabbix_agent_install.log

if ! cat /root/monitor/info.conf >>/dev/null

then

echo -e "${log_time} ${host_ip} can not find /root/monitor/info.confnlogout ${host_ip}nnn" >>/tmp/zabbix_agent_install.log

exit

fi

获取本机的信息

ip=cat /root/monitor/info.conf |awk '{print $4}'

natip=cat /root/monitor/info.conf |awk '{print $3}'

ecs_name=cat /root/monitor/info.conf |awk '{print $2}'

搭建本地yum

mkdir /tmp/yum.bak
mv /etc/yum.repos.d/* /tmp/yum.bak/
mv /tmp/os_zabbix-agent/local_yum.repo /etc/yum.repos.d/
yum -y install unixODBC >>/dev/null

判断本地yum是否搭建成功

if ! yum list |grep vim >>/dev/null
then

echo -e  "${log_time} ${host_ip} yum repo is error!\nlogout  ${host_ip}\n\n\n"  >>/tmp/zabbix_agent_install.log

fi

判断系统版本

redhat_release_num=cat /etc/redhat-release |awk '{print $4}' | awk -F. '{print $1}'
if (( ${redhat_release_num} != 7 ))
then

echo -e  "${log_time} ${host_ip} system version is not 7!\nlogout  ${host_ip}\n\n\n"  >>/tmp/zabbix_agent_install.log
exit

fi

安装zabbix客户端,判断是否安装成功

rpm -ivh /tmp/os_zabbix-agent/zabbix-* >>/dev/null
if (( $? != 0 ))
then

echo -e  "${log_time} ${host_ip} rpm -ivh  is error!\nlogout  ${host_ip}\n\n\n"  >>/tmp/zabbix_agent_install
exit

fi

修改zabbix配置文件

mv /etc/zabbix/zabbix_agentd.conf /tmp/yum.bak/
mv /tmp/os_zabbix-agent/zabbix_agentd.conf /etc/zabbix/
sed -i "/ServerActive/a Hostname=${host_ip}" /etc/zabbix/zabbix_agentd.conf
systemctl start zabbix-agent >>/dev/null
systemctl enable zabbix-agent >>/dev/null

a)zabbix-agent取消开机启动,并且删除zabbix配置文件
systemctl disable zabbix-agent
rm –rf /etc/zabbix/

b)卸载zabbix客户端
rpm –e /tmp/os_zabbix-agent/zabbix-*

c)删除本地yum,以及相应的安装文件
yum -y remove unixODBC
rm –f /etc/yum.repos.d/local_yum.repo
mv /tmp/yum.bak/*.repo /etc/yum.repos.d/

d)删除创建的错误日志和备份目录、以及传输的安装文件
rm –f /tmp/zabbix_agent_install.log
rm –rf /tmp/yum.bak
rm –rf /tpm/os_zabbix-agent/
4) web页面

直接删除创建的主机、动作、自动发现、主机群组、以及ICMP ping模板上对应的网络监控。当然,如果server端进行了回退,web页面也就无法显示了。

5、对生产的影响
通过实验的zabbix客户端top命令发现,zabbix客户端对于ECS系统的cpu和内存的影响几乎为0

6、测试测试

7、总结分析
由于server端已经搭建完成,之后搭建的难点在:
1、agent端的部署,ECS的环境不一样,系统的版本不一样,只通过脚本很难实现将全部的ECS部署好agent端,这就需要手动进行客户端的搭建。
2、数据库的性能问题,随着ECS数量的增加,数据库需要扩容和优化,可以将数据库迁移到RDS上,方便管理
3、server端的容量问题,ECS数量增加,监控项的增加,需要的磁盘容量就增加
4、yum源的问题,由于自己搭建的yum源是centos7的版本的,遇到其他版本的需要单独处理,经过查找发现所有ECS的非centos7的系统不超过10台。遇到centos其他版本的可以使用邮政的yum源(一开始不清楚邮政有5/6/7的yum源),Redhat版本的就需要单独处理了
5、proxy端的性能问题,计划每500台ECS搭建一个proxy代理,再根据实际负载情况修改ECS的数量
八、出现的问题汇总:
1、在proxy端或者server端指定RDS的时候,需要输入RDS的ip,并且端口号不是默认的3306,而是对应的RDS的实际端口号。
解决方法:在server和proxy配置文件中指定实际的端口号
2、搭建完客户端之后发现server的日志有报错,大体意思就是server端通过端口连接客户端失败
解决方法:将server端和proxy端的配置文件中默认端口对应的ip由0.0.0.0改为本机的ip地址。自己的理解是0.0.0.0默认的端口对应所有的ip,而不是邮政的内网ip。
3、注意不同vpc下面的ECS是不相通的,所以proxy要跟server端在同一个proxy下面
4、可以在proxy端或者server端搭建一个agent客户端用来通过模板检测proxy或者server的性能情况,通过模板发现了zabbix busy discover processes 跟zabbix busy icmp pinger processes 两个参数已经接近100%
解决方法:ping和discover进程太忙,于是修改配置文件,将Start discovers =10,Start pingers=20,参数就降下来了。
5、在编译安装proxy遇到了报错,mysql library not found
解决方法:缺少相应的包mysql-devel,可以通过yum安装,但是在安装过程中发现与系统的版本不一致,于是直接将mariadb*卸载掉重新安装。此类问题都是缺少相应的依赖包,网上搜索找到对应的包安装就可以
6、安装客户端的时候注意把客户端的serveractive指定为新的proxy,所以批量安装客户端的时候需要修改serveractive为对应的proxy的ip。
7、添加完agent的ICMP ping监控之后,发现没有显示出数据,查看proxy的日志发现没有ping对应的工具
解决方法:安装fping安装包
8、在给proxy的RDS导数据的时候一定只要导入schema.sql文件,导入其他的文件会报错

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章