美文网首页linux 运维
1.Zabbix 安装配置

1.Zabbix 安装配置

作者: C86guli | 来源:发表于2016-08-19 18:25 被阅读513次

    Zabbix 安装

    本文是参考 《Zabbix 教程从入门到精通v1.0》 所作的实验。

    大纲:

    一、LNMP 环境配置
    二、zabbix 服务端安装
    三、zabbix 客户端安装配置
    四、zabbix 管理网站配置

    系统环境 CentOS 6.8

    使用的软件版本:

    • MySQL 5.6
    • Nginx 1.10.1
    • PHP 5.6

    一、LNMP 环境配置


    1.1 Nginx 安装
    1.2 PHP 安装及 Nginx 配置
    1.3 MySQL 安装

    1.1 Nginx 安装

    环境准备:

    yum -y groupinstall "Development Tools" "Server Platform Development"
    yum -y install openssl-devel pcre-devel
    groupadd -r nginx
    useradd -r -g nginx nginx
    

    nginx 下载:

    wget http://nginx.org/download/nginx-1.10.1.tar.gz
    

    解压安装:
    [root@vm1 src]# tar -xf nginx-1.10.1.tar.gz

    [root@vm1 src]# cd nginx-1.10.1
    [root@vm1 nginx-1.10.1]# ./configure --prefix=/etc/nginx \
    --sbin-path=/usr/sbin/nginx \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --http-log-path=/var/log/nginx/access.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/run/nginx.lock \
    --user=nginx \
    --group=nginx \
    --with-http_ssl_module \
    --with-http_stub_status_module \
    
    [root@vm1 nginx-1.10.1]# make && make install
    

    测试启动一下:

    [root@vm1 nginx-1.10.1]# nginx
    [root@vm1 nginx-1.10.1]# ss  -nlt
    State      Recv-Q Send-Q           Local Address:Port             Peer Address:Port
    LISTEN     0      128                          *:80                          *:*
    LISTEN     0      128                         :::22                         :::*
    LISTEN     0      128                          *:22                          *:*
    LISTEN     0      100                        ::1:25                         :::*
    LISTEN     0      100                  127.0.0.1:25                          *:*
    

    测试访问:

    [root@vm1 nginx-1.10.1]# curl -I 127.0.0.1
    HTTP/1.1 200 OK
    Server: nginx/1.10.1
    Date: Wed, 17 Aug 2016 03:23:16 GMT
    Content-Type: text/html
    Content-Length: 612
    Last-Modified: Wed, 17 Aug 2016 02:53:16 GMT
    Connection: keep-alive
    ETag: "57b3d19c-264"
    Accept-Ranges: bytes
    

    然后我们准备一个 /etc/init.d/nginx 脚本,方便调用:

    [root@vm1 nginx]# cat /etc/init.d/nginx
    #!/bin/sh
    #
    # nginx        Startup script for nginx
    #
    # chkconfig: - 85 15
    # processname: nginx
    # config: /etc/nginx/nginx.conf
    # config: /etc/sysconfig/nginx
    # pidfile: /var/run/nginx.pid
    # description: nginx is an HTTP and reverse proxy server
    #
    ### BEGIN INIT INFO
    # Provides: nginx
    # Required-Start: $local_fs $remote_fs $network
    # Required-Stop: $local_fs $remote_fs $network
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    # Short-Description: start and stop nginx
    ### END INIT INFO
    
    # Source function library.
    . /etc/rc.d/init.d/functions
    
    if [ -L $0 ]; then
        initscript=`/bin/readlink -f $0`
    else
        initscript=$0
    fi
    
    sysconfig=`/bin/basename $initscript`
    
    if [ -f /etc/sysconfig/$sysconfig ]; then
        . /etc/sysconfig/$sysconfig
    fi
    
    nginx=${NGINX-/usr/sbin/nginx}
    prog=`/bin/basename $nginx`
    conffile=${CONFFILE-/etc/nginx/nginx.conf}
    lockfile=${LOCKFILE-/var/lock/subsys/nginx}
    pidfile=${PIDFILE-/var/run/nginx.pid}
    SLEEPMSEC=${SLEEPMSEC-200000}
    UPGRADEWAITLOOPS=${UPGRADEWAITLOOPS-5}
    RETVAL=0
    
    start() {
        echo -n $"Starting $prog: "
    
        daemon --pidfile=${pidfile} ${nginx} -c ${conffile}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && touch ${lockfile}
        return $RETVAL
    }
    
    stop() {
        echo -n $"Stopping $prog: "
        killproc -p ${pidfile} ${prog}
        RETVAL=$?
        echo
        [ $RETVAL = 0 ] && rm -f ${lockfile} ${pidfile}
    }
    
    reload() {
        echo -n $"Reloading $prog: "
        killproc -p ${pidfile} ${prog} -HUP
        RETVAL=$?
        echo
    }
    
    upgrade() {
        oldbinpidfile=${pidfile}.oldbin
    
        configtest -q || return
        echo -n $"Starting new master $prog: "
        killproc -p ${pidfile} ${prog} -USR2
        echo
    
        for i in `/usr/bin/seq $UPGRADEWAITLOOPS`; do
            /bin/usleep $SLEEPMSEC
            if [ -f ${oldbinpidfile} -a -f ${pidfile} ]; then
                echo -n $"Graceful shutdown of old $prog: "
                killproc -p ${oldbinpidfile} ${prog} -QUIT
                RETVAL=$?
                echo
                return
            fi
        done
    
        echo $"Upgrade failed!"
        RETVAL=1
    }
    
    configtest() {
        if [ "$#" -ne 0 ] ; then
            case "$1" in
                -q)
                    FLAG=$1
                    ;;
                *)
                    ;;
            esac
            shift
        fi
        ${nginx} -t -c ${conffile} $FLAG
        RETVAL=$?
        return $RETVAL
    }
    
    rh_status() {
        status -p ${pidfile} -b ${nginx} ${nginx}
    }
    
    # See how we were called.
    case "$1" in
        start)
            rh_status >/dev/null 2>&1 && exit 0
            start
            ;;
        stop)
            stop
            ;;
        status)
            rh_status
            RETVAL=$?
            ;;
        restart)
            configtest -q || exit $RETVAL
            stop
            start
            ;;
        upgrade)
            rh_status >/dev/null 2>&1 || exit 0
            upgrade
            ;;
        condrestart|try-restart)
            if rh_status >/dev/null 2>&1; then
                stop
                start
            fi
            ;;
        force-reload|reload)
            reload
            ;;
        configtest)
            configtest
            ;;
        *)
            echo $"Usage: $prog {start|stop|restart|condrestart|try-restart|force-reload|upgrade|reload|status|help|configtest}"
            RETVAL=2
    esac
    
    exit $RETVAL
    

    而后为此脚本赋予执行权限:

    # chmod +x /etc/rc.d/init.d/nginx
    

    1.2 PHP 安装及Nginx 配置


    1.sohu镜像下载

    wget http://mirrors.sohu.com/php/php-5.6.10.tar.gz
    

    2.安装依赖包

    确保安装之前有安装gd,png,curl,xml等等lib开发库。如果不确定,执行以下命令:

    yum install gcc make gd-devel libjpeg-devel libpng-devel libxml2-devel bzip2-devel libcurl-devel -y
    

    3.编译安装PHP 5.6.10

    PHP 安装参数:对于 zabbix,下面的模块要特别留意加上:

    extend parameter
    bcmath --enable-bcmath
    mbstring --enable-mbstring
    sockets --enable-sockets
    gd --with-gd
    libxml --with-libxml=/usr/local
    xmlwriter 同上
    xmlreader 同上
    ctype 默认支持
    session 默认支持
    gettext 默认支持

    以下参数支持,ftp,图片函数,pdo等支持,因为使用了php自带的mysqlnd,所以不需要额外安装mysql的lib库了.如果你是64位系统,参数后面加上--with-libdir=lib64,如果不是可以跳过。

    可参考以下参数:

    ./configure --prefix=/usr/local/php-5.6.10 \
    --with-config-file-path=/usr/local/php-5.6.10/etc --with-bz2 --with-curl \
    --enable-ftp --enable-sockets --disable-ipv6 --with-gd \
    --with-jpeg-dir=/usr/local --with-png-dir=/usr/local \
    --with-freetype-dir=/usr/local --enable-gd-native-ttf \
    --with-iconv-dir=/usr/local --enable-mbstring --enable-calendar \
    --with-gettext --with-libxml-dir=/usr/local --with-zlib \
    --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-mysql=mysqlnd \
    --enable-dom --enable-xml --enable-fpm --with-libdir=lib64 --enable-bcmath
    
    make && make install
    

    4.配置php

    为php提供配置文件:

    [root@zabbix php-5.6.10]# cp php.ini-production /usr/local/php-5.6.10/etc/php.ini
    

    打开 php.ini 配置文件,修改如下参数为如下值,否则 zabbix 安装不了。

    max_execution_time = 300
    memory_limit = 128M
    post_max_size = 16M
    upload_max_filesize = 2M
    max_input_time = 300
    date.timezone PRC
    

    为php-fpm提供配置文件:

    [root@zabbix php-5.6.10]# cp /usr/local/php-5.6.10/etc/php-fpm.conf.default /usr/local/php-5.6.10/etc/php-fpm.conf
    

    为php-fpm提供SysV init脚本

    [root@zabbix php-5.6.10]# cp sapi/fpm/init.d.php-fpm /etc/init.d/php-fpm
    [root@zabbix php-5.6.10]# chmod +x /etc/init.d/php-fpm
    

    编辑php-fpm的配置文件:

    # vi /usr/local/php-5.6.10/etc/php-fpm.conf
    

    配置fpm的相关选项为你所需要的值,并启用pid文件(如下最后一行):

    pm.max_children = 50
    pm.start_servers = 5
    pm.min_spare_servers = 2
    pm.max_spare_servers = 8
    pid = /usr/local/php/var/run/php-fpm.pid 
    

    接下来就可以启动php-fpm了:

    # service php-fpm start
    

    使用如下命令来验正(如果此命令输出有中几个php-fpm进程就说明启动成功了):

    # ps aux | grep php-fpm
    

    默认情况下,fpm监听在127.0.0.1的9000端口,也可以使用如下命令验正其是否已经监听在相应的套接字。

    # netstat -tnlp | grep php-fpm
    tcp        0      0 127.0.0.1:9000              0.0.0.0:*                   LISTEN      689/php-fpm 
    

    1.3 MySQL 安装


    简单起见,这里直接安装 mysql-5.1。

    yum install mysql-server mysql-client
    service mysqld start
    

    然后可使用 mysql_secure_installation 修改root密码为 guli123:

    mysql> SELECT User,Host,Password FROM mysql.user;
    +--------+-------------+-------------------------------------------+
    | User   | Host        | Password                                  |
    +--------+-------------+-------------------------------------------+
    | root   | localhost   | *F0BC5A026769654BD0A7EFA74872CA595563919A |
    | root   | 127.0.0.1   | *F0BC5A026769654BD0A7EFA74872CA595563919A |
    +--------+-------------+-------------------------------------------+
    5 rows in set (0.00 sec)
    

    远程测试:

    [root@vm_mac ~]# mysql -u root -h 192.168.0.183 -p
    Enter password: # 输入密码
    ...
    mysql>
    

    测试成功。

    二、zabbix 服务端安装

    zabbix 进程构成


    默认情况下 zabbix 包含 5 个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_s ender、zabbix_server,另外一个 zabbix_java_gateway 是可选,这个需要另外安装。下面来分别介绍下他们各自的作用。

    zabbix_agentd

    客户端守护进程,此进程收集客户端数据,例如 cpu 负载、内存、硬盘使用情况等

    zabbix_get

    zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令。通常用户排
    错。例如在 server 端获取不到客户端的内存数据,我们可以使用 zabbix_get 获取客户端的内容的方式来做故障 排查。

    zabbix_sender

    zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致
    zabbix 超时。于是我们在脚本执行完毕之后,使用 sender 主动提交数据。

    zabbix_server

    zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_jav a_gateway 的数据最终都是提交到 server

    备注:当然不是数据都是主动提交给 zabbix_server,也有的是 server 主动去取数据。

    zabbix_proxy

    zabbix 代理守护进程。功能类似 server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被
    提交到 server 里。为什么要用代理?代理是做什么的?卖个关子,请继续关注运维生存时间 zabbix 教程系列。

    zabbix_java_gateway

    zabbix2.0 之后引入的一个功能。顾名思义:Java 网关,类似 agentd,但是只用于 Java 方面。需要特别注 意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者 proxy。

    2.1 下载安装 zabbix


    所有版本下载地址:http://www.zabbix.com/download.php

    [root@zabbix ~]# wget https://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/2.2.14/zabbix-2.2.14.tar.gz/download
    # tar -xzvf zabbix-2.2.14.tar.gz
    # cd zabbix-2.2.14
    # ./configure --prefix=/usr/local/zabbix-2.2.14/ --enable-server \
    --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
    # make
    # make install
    

    注,这里没有指定配置文件的位置,默认是 PREFIX/etc,在这里即是 /usr/local/zabbix-2.2.14/etc/zabbix_server.conf,如果要指定其他位置,使用 --sysconfdir=DIR 进行指定。

    在 zabbix server 一般充当两个角色:server、angent,所以上面的配置参数也同时加上了--enable-agent。 备注:请安装好 MySQL,snmp,curl 开发库。

    yum install mysql-devel net-snmp-devel libcurl-devel
    

    2.2 创建用户


    为了安全考虑 zabbix 只使用普通用户运行,假如你当前用户叫 ttlsa,那么你运行他,他便使用 ttlsa 身份运行。 但是如果你在 root 环境下运行 zabbix,那么 zabbix 将会主动使用 zabbix 用户来运行。但是如果你的系统没有 名叫 zabbix 的用户,你需要创建一个用户,如下:

    # groupadd zabbix
    # useradd -g zabbix zabbix
    

    2.3 初始化数据库


    zabbix server 与 proxy 需要数据库,angent 不需要。尤其要注意的是 proxy 只需要导入一个 sql 文件,而 server 一共要导入 3 个 sql 文件。我当时在搭建 proxy 的时候导入了 3 个 sql,导致出现报错。后来才发现 proxy 只需要导入一个表结构即可。

    我假想你安装好了 MySQL,用户名为 root,密码为 guli123

    # mysql -uroot -pguli123
    mysql> CREATE DATABASE zabbix DEFAULT CHARSET utf8;
    
    # mysql -uroot -pguli123 -D zabbix < /root/zabbix-2.2.14/database/mysql/schema.sql
    
    # mysql -uroot -pguli123
    mysql> use zabbix
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed
    mysql> show tables;
    +-----------------------+
    | Tables_in_zabbix      |
    +-----------------------+
    | acknowledges          |
    | actions               |
    | alerts                |
    
    ...
    
    | valuemaps             |
    +-----------------------+
    108 rows in set (0.00 sec)
    

    备注:创建数据库请别忘记加 default charset utf8,有可能会导致你出现中文乱码问题,具体问题请查看《zabbix 中文乱码解决方法》

    如果你仅仅是初始化 proxy 的数据库,那么够了。如果初始化 server,那么接着导入下面两个 sql

    # mysql -uroot -pguli123 -D zabbix < /root/zabbix-2.2.14/database/mysql/images.sql
    # mysql -uroot -pguli123 -D zabbix < /root/zabbix-2.2.14/database/mysql/data.sql
    

    为 zabbix 创建一个专用的账户:

    mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
    

    其他数据库(db2\sqlite\oracle)数据库初始化方法参考:<https://www.zabbix.com/documentation/2.2/ manual/appendix/install/db_scripts>

    2.4 配置 zabbix


    配置 zabbix_server 配置文件:

    # vi /usr/local/zabbix-2.2.14/etc/zabbix_server.conf
    DBHost=localhost
    DBUser=zabbix
    DBPassword=zabbix
    DBPort=3306
    

    注,zabbix 日志文件位置也在该文件中配置,默认为 LogFile=/tmp/zabbix_server.log。启动出错时可查看该日志。

    启动 zabbix server:

    # /usr/local/zabbix-2.2.14/sbin/zabbix_server
    

    默认端口 10051

    [root@zabbix etc]# ss -nlt
    State      Recv-Q Send-Q                     Local Address:Port                       Peer Address:Port
    LISTEN     0      128                                    *:10051                                 *:*
    

    三、zabbix 客户端安装配置

    3.1 下载安装客户端


    所有版本下载地址:http://www.zabbix.com/download.php,可以直接下载已经编译好的二进制文件,或者
    也可以源码安装。

    刚才安装 zabbix 服务端的时候已经使用 --enable-agent 选项同时安装了客户端,这里就不用再安装了。

    只编译安装 zabbix 客户端:

    ./configure --enable-agent
    

    在上面的下载页中官方也提供编译好的 zabbix agents,解压后可以直接使用,可以选择对应平台的、对应版本直接下载。

    比如下载 2.2.14 版,Linux 2.6 amd64 的版本:

    wget http://www.zabbix.com/downloads/2.2.14/zabbix_agents_2.2.14.linux2_6.amd64.tar.gz
    

    解压:

    # mkdir /usr/local/zabbix_agents
    # tar -xf zabbix_agents_2.2.14.linux2_6.amd64.tar.gz -C /usr/local/zabbix_agents/
    
    # ls /usr/local/zabbix_agents
    bin  conf  sbin
    

    这种方式安装的 zabbix agents 要求把配置文件 zabbix_agentd.conf 放到 /usr/local/etc 目录下。

    3.2 客户端配置


    客户端配置文件为:/usr/local/zabbix-2.2.14/etc/zabbix_agentd.conf

    # vi /usr/local/zabbix-2.2.14/etc/zabbix_agentd.conf
    Server=127.0.0.1
    ServerActive=127.0.0.1
    Hostname=Zabbix server
    

    其中 Server 和 ServerActive 都指定 zabbixserver 的 IP 地址,不同的是,前者是被动后者是主动。也就是说 S erver 这个配置是用来允许 127.0.0.1 这个 ip 来我这取数据。而 serverActive 的 127.0.0.1 的意思是,客户端 主动提交数据给他。明白了吗?为什么要分主动和被动?后续再来讨论这个问题!

    其他主机安装客户端记得添加 zabbix 用户。

    3.3 启动客户端


    [root@zabbix etc]# /usr/local/zabbix-2.2.14/sbin/zabbix_agentd
    

    默认端口 10050

    [root@zabbix etc]# ss -nlt
    State      Recv-Q Send-Q           Local Address:Port             Peer Address:Port
    LISTEN     0      128                          *:10050                       *:*
    

    四、zabbix 管理网站配置

    4.1 拷贝前端文件


    [root@zabbix etc]# mkdir -pv /data/logs/nginx
    mkdir: created directory `/data'
    mkdir: created directory `/data/logs'
    mkdir: created directory `/data/logs/nginx'
    [root@zabbix etc]# mkdir -pv /data/site/monitor.ttlsa.com/zabbix
    mkdir: created directory `/data/site'
    mkdir: created directory `/data/site/monitor.ttlsa.com'
    mkdir: created directory `/data/site/monitor.ttlsa.com/zabbix'
    [root@zabbix etc]# cp -r /root/zabbix-2.2.14/frontends/php/* /data/site/monitor.ttlsa.com/zabbix/
    [root@zabbix etc]# chown -R zabbix.zabbix /data/site/monitor.ttlsa.com/zabbix/
    

    4.2 配置虚拟主机


    [root@zabbix zabbix]# cat /etc/nginx/nginx.conf
    
    worker_processes  1;
    
    events {
        worker_connections  1024;
    }
    
    
    http {
        include       mime.types;
        default_type  application/octet-stream;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        sendfile        on;
        keepalive_timeout  65;
    
        server {
            listen 80;
            server_name localhost;
            access_log /data/logs/nginx/monitor.ttlsa.com.access.log main;
            index index.html index.php index.html;
            root /data/site/monitor.ttlsa.com;
    
            location / {
                try_files $uri $uri/ /index.php?$args;
            }
    
            location ~ ^(.+.php)(.*)$ {
                fastcgi_split_path_info ^(.+.php)(.*)$;
                include fastcgi.conf;
                fastcgi_pass 127.0.0.1:9000;
                fastcgi_index index.php;
                fastcgi_param PATH_INFO $fastcgi_path_info;
            }
        }
    }
    

    启动 nginx:

    /etc/init.d/nginx start
    

    4.3 在线配置 zabbix


    访问浏览器测试:

    http://192.168.0.183/zabbix
    

    如下是 zabbix 2.2 的安装界面,包括欢迎界面一共 8 步.

    4.3.1 欢迎界面

    Snip20160819_1.png

    4.3.2 php 需求检查

    Snip20160819_2.png

    4.3.3 MySQL 配置

    Snip20160819_3.png

    4.3.4 zabbix 服务端详细信息

    Snip20160819_4.png

    4.3.5 zabbix 安装前信息列表

    Snip20160819_5.png

    4.3.6 安装完成

    如果失败了,一般情况是 php 对 zabbix 没有写权限

    Snip20160819_11.png

    手动下载配置文件,放到 /data/site/monitor.ttlsa.com/zabbix/conf/ 目录下,Retry 一下

    Snip20160819_7.png

    4.3.7 登陆 zabbix

    默认用户名:Admin,密码:zabbix

    Snip20160819_12.png

    如下是 zabbix 首页

    Snip20160819_13.png

    4.3.8 切换到中文界面

    zabbix 自带多种语言包,当然也包含中文。登陆到 zabbix web 控制台默认是英文,对有些英文不好或者习惯中 文的人来说会有不适应。这边也不是讲 zabbix 汉化,实际上是切换到中文版本。

    1. 点击右上角 Profile(配置)
    Snip20160819_14.png
    1. User 标签的 Language 改为 Chinese(zh_CN),点击 save 即可
    Snip20160819_15.png Snip20160819_16.png

    相关文章

      网友评论

      • luckyhua:最后的那个访问地址http://192.168.0.183/zabbix,是内网服务器的ip吗,怎么我按照你的配置完了,我想在本地访问服务器的地址怎么弄
        C86guli:就是安装zabbix的服务器的IP地址。。

      本文标题:1.Zabbix 安装配置

      本文链接:https://www.haomeiwen.com/subject/uyibsttx.html