手游公司运维之升级zabbix到2.2.3版本

去年由于时间精力和人员有限,我在线上服务器搭建了一个zabbix server 2.0对所有服务器作了基本的监控。并没有根据业务实际情况作业务层面上的监控,以及没有添加zabbix server和zabbix proxy和zabbix agent的启动脚本。去年主要是代码上线发布这一块太折腾人了,一次代码上线发布涉及多个部门,包括策划,程序和测试,而且各个部门相互依赖,加班都得一起耗在那。3月份我花了大力气和策划,程序和测试部门一起商量规范了上线流程,并利用开源软件Rundeck+Shell脚本的方式搭建了内部测试平台和代码正式上线平台。总算不用去年那样苦逼了。4月份的工作重点主要是调整监控,包括检查各个区服的配置文件语法,各个区服的模拟登陆监控,BI相关的redis key监控等等。好了,闲话不多说,下面主要从几个方面谈谈zabbix。

一 什么是zabbix?

  zabbix一个开源企业级的监控工具,它能够对成千上万的服务器,虚拟机和网络设备进行实时监控,它将收集到的数据存入到数据库中以进行数据分析。它提供丰富的图形界面显示功能,包括图表,网络拓扑图等。我选择zabbix最大的理由在于zabbix同时也是一个分布式的监控工具,利用zabbix的proxy功能可以将不同地点的服务器监控数据汇集到一起进行分析。zabbix的官方网站地址是http://www.zabbix.com/ 。可以通过官方网站了解更多信息。


二 zabbix的功能和特性

 1.监控所有信息

使用zabbix可以很容易的监控服务器,网络设备,和各种应用,并收集准确的统计和性能数据。

利用zabbix agent可以很容易的监控到各种设备的各项性能指标,包括CPU,内存,磁盘和进程等信息。对于没法安装agent的设备,可以利用snmp agent进行监控,对于无法安装zabbix agent和snmp agent的设备可以利用zabbix的agentless monitoring功能监控FTP,HTTP,SMTP,DNS等这样的标准服务。

zabbix支持自定义监控脚本,可以用shell,python或perl编写适合自身业务的监控脚本。

使用zabbix可以监控多种数据库的详细信息,包括MySQL,MongoDB,Oracle,Microsoft SQL Server等。

使用zabbix的Java网关可以监控Tomcat,JBoss等Java应用服务器。

通过zabbix内置的web监控支持,可以监控外部网站,内部网站等的可用性,响应时间和下载速度等

如果被监控的硬件设备支持IPMI访问,利用zabbix可以收集温度,风扇速度等数据。此外,zabbix可以利用IPMI命令远程开启或关闭设备。

 2.zabbix是一个企业级的监控工具

   小到几十台,大到几万台设备,zabbix都有很好的性能表现。

   利用zabbix proxy可以达到分布式监控的目的,可以集中监控多个位置的服务器。

   zabbix可以和其他一些自动化系统配置管理工具如puppet,chef等整合,并且可以通过LDAP或SSO进行登录认证。

Proxy

 3.zabbix有很强大的自动发现功能

  当需要监控的服务器数量太多时,手动添加管理太麻烦了,zabbix提供三种方式来自动发现被管理设备和作出相应的监控管理操作。

  1)网络发现功能

 zabbix可以根据设定的发现规则定期的扫描外部服务或zabbix agent(被动监控模式)并作出一些预先定义好的动作,比如发送通知给指定用户,添加或删除主机监控,启用或停止主机监控,添加到一个分组或从一个分组中移除或执行远程脚本等操作。

  2)低级发现功能

 利用zabbix的低级发现功能,zabbix可以自动的为需要监控的设备创建监控项目,创建触发器,和创建图标等。

  3)zabbix agent的自动注册功能

 只要一台设备上安装了zabbix agent并配置正确,zabbix server可以自动的监控这台设备,而不用手动去添加任何监控项目。

 4.zabbix有丰富的API

     通过zabbix的API可以和各种外部系统进行整合,如Puppet,SaltStack,JIRA等。还可以进行二次开发。


三 zabbix 2.2.3的新特性

  1.增大最大缓存大小到8GB。

  2.更有效的snmp监控

  3.更多信息可以参考https://www.zabbix.com/documentation/2.2/manual/introduction/whatsnew223

http://www.zabbix.com/rn2.2.3.php

四 升级步骤

  1.升级前注意事项

  php版本最低要求从5.1.6提高到5.3.0。目前线上采用5.4

  mysql版本最低要求从5.0.0提高到5.0.3。

  使用php的mysqli扩展替代默认的mysql扩展,php的mysqli扩展信息可以参考

http://www.php.net/manual/en/set.mysqlinfo.php

  需要安装php的gettext扩展用于本地化语言翻译。

  2.停掉zabbi server

killall zabbix_server

  3.备份zabbix数据库

mysqldump -uroot zabbix -p > zabbix_backup.sql

  4.备份zabbix server配置文件,php代码文件和zabbix server程序

cp  -rf /var/www/html/zabbix  /var/www/html/zabbix_backup

    cp zabbix_server.conf zabbix_server.conf.bak

    cp zabbix_server zabbix_server.bak

  5.安装新的zabbix server


 yum install  mysql mysql-devel   libssh2 libssh2-devel  php php-gd  gd gcc  mysql-libs    curl-devel    net-snmp  net-snmp-libs net-snmp-devel    php-mysql   php-mbstring   php-bcmath     php-xmlwriter php-xmlreader php-xml   php-devl  php-pear    openldap-devel

   



 ./configure    --prefix=/usr/local/zabbix/      --enable-server  --enable-proxy  --enable-agent --with-mysql  --enable-ipv6 --with-net-snmp --with-libcurl  --with-ssh2         --with-ldap

    make install 这里需要root权限

6.更改zabbix server的配置文件

    主要更改以下这些参数如:

LogFile=/tmp/zabbix_server.log

    DBName=zabbix

    DBUser=zabbix

    DBPassword=zabbix


 7.安装zabbix的web界面

    配置nginx虚拟主机

server

{

       listen      80;

       server_name zabbix.abc.com;

       access_log  /data/app_data/nginx/logs/zabbix.log main;

       client_max_body_size 5m;


       autoindex off;

       location / {

           root  /var/www/html/zabbix;

           index index.php;

           autoindex off;

       }


       location ~ \.php$ {

           root           /var/www/html/zabbix;

           fastcgi_pass   127.0.0.1:9000;

           fastcgi_index  index.php;

           fastcgi_param  SCRIPT_FILENAME  $document_root/$fastcgi_script_name;

           include        fastcgi_params;

       }

}

     进入到zabbix-2.2.3代码目录

cd zabbix-2.2.3/

cp -rf frontends/php/ /var/www/html/zabbix/


编辑php.ini文件添加以下内容,这些参数在安装web界面的时候会有提示信息,根据提示信息更改配置就行。

memory_limit = 128M

    post_max_size = 16M

    upload_max_filesize=2M

    max_execution_time = 300

    max_input_time = 300

    session.auto_start = 0

    详细安装信息可以参看官方文档

https://www.zabbix.com/documentation/2.2/manual/installation/install

8.添加zabbix server的启动脚本

编写zabbix相关的启动脚本最好的方法就是去更改zabbix的官方rpm或deb包安装后的启动脚本如/etc/init.d/zabbix-server,/etc/init.d/zabbix-agent,/etc/init.d/zabbix-proxy。然后根据自身编译安装的zabbix server或agent的程序路径和配置文件路径去更改启动脚本就行。

如下zabbix-server


#!/bin/sh
#
# chkconfig: - 85 15
# description: Zabbix server daemon
#
### BEGIN INIT INFO
# Provides: zabbix-server
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start and stop Zabbix server
# Description: Zabbix server daemon
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
exec=/usr/local/zabbix/sbin/zabbix_server
prog=${exec##*/}
syscf=${0##*/}
lockfile=/var/lock/subsys/$syscf
[ -f /etc/sysconfig/$syscf ] && . /etc/sysconfig/$syscf
config=${CFG_FILE:-/usr/local/zabbix/etc/zabbix_server.conf}
if [ ! -f $config ]; then
    echo "Not starting Zabbix server: Config file $config not found!"
    echo "Check /etc/sysconfig/$syscf"
    exit 3
fi
pidfile=$(grep -e "^PidFile=.*$" $config | cut -d= -f2)
param="-c $config"
start()
{
    echo -n $"Starting Zabbix server: "
    daemon --user zabbix --pidfile "$pidfile" $exec $param
    rv=$?
    echo
    [ $rv -eq 0 ] && touch $lockfile
    return $rv
}
stop()
{
    echo -n $"Shutting down Zabbix server: "
    killproc -p "$pidfile" $prog
    rv=$?
    echo
    [ $rv -eq 0 ] && rm -f $lockfile
    return $rv
}
restart()
{
    stop
    start
}
case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    status)
        status -p "$pidfile" -l $prog $exec
        ;;
    try-restart|condrestart)
        if status -p "$pidfile" -l $prog $exec >/dev/null ; then
            restart
        fi
        ;;
    reload)
        action $"Service ${0##*/} does not support the reload action: " /bin/false
        exit 3
        ;;
    *)
    echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
    exit 2
    ;;
esac


      zabbix-agent启动脚本

     

#!/bin/sh
#
# chkconfig: - 86 14
# description: Zabbix agent daemon
#
### BEGIN INIT INFO
# Provides: zabbix-agent
# Required-Start: $local_fs $network
# Required-Stop: $local_fs $network
# Should-Start: zabbix-server zabbix-proxy
# Should-Stop: zabbix-server zabbix-proxy
# Default-Start:
# Default-Stop: 0 1 2 3 4 5 6
# Short-Description: Start and stop Zabbix agent
# Description: Zabbix agent daemon
### END INIT INFO
# Source function library.
. /etc/rc.d/init.d/functions
exec=/usr/local/zabbix/sbin/zabbix_agentd
prog=${exec##*/}
syscf=${0##*/}
lockfile=/var/lock/subsys/$syscf
[ -f /etc/sysconfig/$syscf ] && . /etc/sysconfig/$syscf
config=${CFG_FILE:-/usr/local/zabbix/etc/zabbix_agentd.conf}
if [ ! -f $config ]; then
    echo "Not starting Zabbix agent: Config file $config not found!"
    echo "Check /etc/sysconfig/$syscf"
    exit 3
fi
pidfile=$(grep -e "^PidFile=.*$" $config | cut -d= -f2)
param="-c $config"
start()
{
    echo -n $"Starting Zabbix agent: "
    daemon --user zabbixagent --pidfile "$pidfile" $exec $param
    rv=$?
    echo
    [ $rv -eq 0 ] && touch $lockfile
    return $rv
}
stop()
{
    echo -n $"Shutting down Zabbix agent: "
    killproc -p "$pidfile" $prog
    rv=$?
    echo
    [ $rv -eq 0 ] && rm -f $lockfile
    return $rv
}
restart()
{
    stop
    start
}
case "$1" in
    start|stop|restart)
        $1
        ;;
    force-reload)
        restart
        ;;
    status)
        status -p "$pidfile" -l $prog $exec
        ;;
    try-restart|condrestart)
        if status -p "$pidfile" -l $prog $exec >/dev/null ; then
            restart
        fi
        ;;
    reload)
        action $"Service ${0##*/} does not support the reload action: " /bin/false
        exit 3
        ;;
    *)
    echo $"Usage: $0 {start|stop|status|restart|try-restart|force-reload}"
    exit 2
    ;;
esac


       自定义编译安装zabbix更改启动脚本主要注意这几行,更加自身情况进行修改

       exec=/usr/local/zabbix/sbin/zabbix_agentd  //编译后的程序路径

       config=${CFG_FILE:-/usr/local/zabbix/etc/zabbix_agentd.conf} //编译后的配置文件路径

        daemon --user zabbixagent --pidfile "$pidfile" $exec $param   //这里的账号名需要是服务器上存在的账号


   9.启动zabbix server  

    sudo service zabbix-server start



       

你可能感兴趣的:(zabbix,rundeck)