zoukankan      html  css  js  c++  java
  • zabbix的安装(一)监控os资源:内存,cpu,io,负载,带宽

    一、Linux下开源监控系统简单介绍
    1)cacti:存储数据能力强,报警性能差
    2)nagios:报警性能差,存储数据仅有简单的一段可以判断是否在合理范围内的数据长度,储存在内存中。比如,连续采样数据存储,有连续三次不在合理范围内的数据就报警
    3)zabbix:结合上面两种工具的优点,又可以存储数据,又可以报警。

    Zabbix是一个基于Web界面提供分布式系统监视及网络监视功能的企业级开源解决方案。借助Zabbix可很轻松地减轻运维人员们繁重的服务器管理任务,实现业务系统持续运行。
    下面会逐步介绍Zabbix分布式监控系统的部署及使用记录

    二、zabbix特性
    1)数据采样:通过snmp、ssh、telnet、agent、ipmi、jmx等通道采集被监控主机的数据。可以自定义检测机制和自定义时间间隔
    2)实时绘图:展示,读取数据绘图,支持graph,map,screen,幻灯片(slide show)
    3)告警:(升级告警,规定时间内内解决不了的事情往上传)
    4)数据存储:数据库有mysql,pgsql,时间序列数据库等等

    三、程序构成
    1)zabbix_server:服务端守护进程
    2)zabbix_agented:agent端守护进程
    3)zabbix_proxy:代理服务器(可选,分布式才用到)
    4)zabbix_get:命令行工具,手动测试数据采集
    5)zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据
    6)zabbixjavagateway:java网关

    Zabbix的监控流程可以简单描述为:
    数据采集-->数据存储-->数据分析-->数据展示-->监控报警

    其中:
    数据采集:Zabbix通过SNMP、Agent、ICMP、SSH、IPMI等进行数据采集
    数据存储:Zabbix存储在MySQL上,也可以存储在其他数据库
    数据展示:web界面展示、(移动APP、java_php开发一个web界面也可以)
    数据报警:邮件报警、微信报警、短信报警、报警升级机制

    Zabbix的监控配置流程可以简单描述为:
    告警是由一系列的流程组成,首先是触发器达到阀值,产生一个事件,接下来由Action对事件信息进行处理,其中包括两部分:
    第一部分是发送消息,即将告警信息发送给用户。
    第二部分是执行命令,即将事件用命令进行处理,达到对事件故障自动尝试恢复的效果。

    Host groups(主机组)-->Hosts(主机)-->template(模板)-->Applications(监控项组)-->Items(监控项)-->graph(图形) -->screen (图形分组)-->Triggers(触发器)-->Event(事件)-->Actions(处理动作)-->Media types(告警升级|1.执行远程命令2.发送告警邮件)-->User groups(用户组)-->Users(用户)-->Medias(告警邮件)

    在实际生产使用的时候,Items、Trigger、Graph采用模板来进行监控,模板特点就是可以重复的事情一次完成,修改了模板等于修改了所有调用此模板的主机,这样可解放运维的双手.
    Graph不是必需的,因为没有配置图形,数据获取并不影响,获取数据是Items的功能。但是对于使用ZabbixWeb界面用户来说,没有图形等于没有数据,因此重要的Items必须添加必要的图形以做可视化展示。如果想集中查看图形,可以通过screen功能。

    四、zabbix主动模式和被动模式

    zabbix使用proxy代理插件的好处:

    一方面可以监控不可达的远程区域;
    另一方面当监控项目数以万计的时候使用代理可以有效分担zabbix server压力,也简化分布式监控的维护。
     
    说明:
    主动、被动模式都是相对于proxy来说的。
    proxy主动发送数据就是主动模式;
    proxy等待server的请求,再发送数据就是被动模式。
    因为主动模式可以有效减轻zabbix server压力,需要监控的东西很多时一定要把监控模式更改为主动监控
     
    被动模式流程,被动模式一定要记得设置Server = ServerIP
    被动模式工作流程:
    Server 打开一个TCP连接
    Server发送一个key 为agent.ping
    Agent接受这个请求,然后响应< HEADER >< DATALEN >
    Server对接受到的数据进行处理
    TCP连接关闭
     
    主动模式流程,主动模式一定要记得设置ServerActive=ServerIP
    Agent向Server建立一个TCP连接
    Agent请求需要检测的数据列表
    Server响应Agent,发送一个Items列表
    Agent允许响应
    TCP连接完成本次会话关闭
    Agent开始周期性地收集数据
     
    五、基础环境LNMP部署
    1)配置好IP、DNS 、网关,确保使用远程连接工具能够连接服务器
    im /etc/sysconfig/iptables 
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT           
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT      
    特别提示:很多网友把这两条规则添加到防火墙配置的最后一行,导致防火墙启动失败,正确的应该是添加到默认的22端口这条规则的下面
    添加好之后防火墙规则如下所示:

    ---------------------------------------------------------------------------------------------------
    # Firewall configuration written by system-config-firewall 
    # Manual customization of this file is not recommended. 
    *filter 
    :INPUT ACCEPT [0:0] 
    :FORWARD ACCEPT [0:0] 
    :OUTPUT ACCEPT [0:0] 
    -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 
    -A INPUT -p icmp -j ACCEPT 
    -A INPUT -i lo -j ACCEPT 
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT 
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT 
    -A INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT 
    -A INPUT -j REJECT --reject-with icmp-host-prohibited 
    -A FORWARD -j REJECT --reject-with icmp-host-prohibited COMMIT
    ---------------------------------------------------------------------------------------------------
    [root@Zabbix-server ~]# /etc/init.d/iptables restart                     

    3)关闭SELINUX 
    [root@Zabbix-server ~]# vim /etc/selinux/config 
    #SELINUX=enforcing             
    #SELINUXTYPE=targeted      
    SELINUX=disabled               
    [root@Zabbix-server ~]# reboot      //重启后永久生效,或者使用setenforce 0临时生效

    4)系统约定 
    软件源代码包存放位置:/usr/local/src 
    源码包编译安装位置:/usr/local/软件名字

    此处参照:nginx1.10.3+php5.6+mysql5.7.0

    测试完成后,确保nginx,php,mysql都能正常启动,能够访问php页面

    下面正式配置zabbix-3.0.3

    环境说明
    zabbix-server:192.168.1.1     #zabbix的服务端(若要监控本机,则需要配置本机的Zabbix agent)
    zabbix-agent:192.168.1.2     #zabbix的客户端(被监控端,需要配置Zabbix agent)

    一、zabbix-server端的操作记录(192.168.1.1)

    1 创建zabbix运行的用户
    2 安装libcurl和net-snmp
    3 安装Fping
    4 安装zabbix server
    5 Zabbix Server配置与启动
    6 Nginx配置 和 php.ini配置

    groupadd zabbix
    useradd -g zabbix zabbix
    yum -y install libcurl net-snmp
    cd /usr/local/src
    wget -c http://fping.org/dist/fping-3.4.tar.gz
    ./configure
    make && make install
    chown root:zabbix /usr/local/sbin/fping
    chown 4710 /usr/local/sbin/fping
    安装zabbix server
    wget -c http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.3/zabbix-3.0.3.tar.gz
    ./configure --prefix=/usr/local/zabbix --enable-server --enable-agent  --with-mysql=/usr/local/mysql/bin/mysql_config --with-net-snmp --with-libcurl
    --enable-java
    编译时最好带上--enable-java这个参数,方便以后监控tomcat用

    zabbix server配置和启动
    创建zabbix数据库和mysql用户
    >create schema zabbix character set utf8;
    >create user 'zabbix'@'%' identified by '123456';
    >grant all on zabbix.* to 'zabbix'@'%';

    导入Zabbix初始数据:
    cd /usr/local/src/zabbix-3.0.3/database/mysql
    这个下面有三个sql的文档:data.sql images.sql schema.sql
    登录mysql,进行zabbix初始数据导入:
    use zabbix;
    set sql_log_bin=0;
    source ./schema.sql;
    source ./images.sql;
    source ./data.sql;
    set sql_log_bin=1;

    编辑/usr/local/zabbix/etc/zabbix_server.conf:
    [root@Zabbix-server ~]#vim /usr/local/zabbix/etc/zabbix_server.conf
    LogFile=/usr/local/zabbix/logs/zabbix_server.log
    PidFile=/usr/local/zabbix/logs/zabbix_server.pid
    DBHost=192.168.1.1
    DBName=zabbix
    DBUser=zabbix
    DBPassword=123456
    DBPort=3306
    FpingLocation=/usr/local/sbin/fping

    该配置文件定义了php的安装的log的目录,用户名,密码端口,数据库名称

    从安装目录拷贝zabbix_server脚本,并编辑:
    [root@Zabbix-server ~]# cd /usr/local/src
    [root@Zabbix-server src]# cd zabbix-3.0.3
    [root@Zabbix-server zabbix-3.0.3]# cp misc/init.d/fedora/core5/zabbix_server /etc/init.d/
    [root@Zabbix-server zabbix-3.0.3]# mkdir -p /usr/local/zabbix/logs
    [root@Zabbix-server zabbix-3.0.3]# chown -R zabbix:zabbix /usr/local/zabbix
    [root@Zabbix-server zabbix-3.0.3]# vim /etc/init.d/zabbix_server
    [root@Zabbix-server zabbix-3.0.3]# cat /etc/init.d/zabbix_server
    ...
    ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_server"
    CONF_FILE="/usr/local/zabbix/etc/zabbix_server.conf"
    ...
    start() {
    ...
    daemon $ZABBIX_BIN -c $CONF_FILE
    ...
    }

    调整防火墙规则(开放端口10051):
    [root@Zabbix-server ~]# vim /etc/sysconfig/iptables
    ...
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 10051 -j ACCEPT
    ...

    [root@Zabbix-server ~]# /etc/init.d/iptables restart

    启动Zabbix Server:
    [root@Zabbix-server ~]# service zabbix_server start                  

    #也可以直接/usr/local/zabbix/sbin/zabbix_server方式启动

    配置开机自动启动:
    [root@Zabbix-server ~]# chkconfig --add zabbix_server
    [root@Zabbix-server ~]# chkconfig --level 35 zabbix_server on

    Zabbix的Web前端
    在安装目录将frontends拷贝到指定的web root:
    [root@Zabbix-server ~]# mkdir -p /data/www/zabbix
    [root@Zabbix-server ~]# cd /usr/local/src
    [root@Zabbix-server src]# cd zabbix-3.0.3
    [root@Zabbix-server zabbix-3.0.3]#cp -a frontends/php/* /data/www/zabbix/
    [root@Zabbix-server zabbix-3.0.3]# chown -R www:www /data/www/zabbix

    Nginx配置:
    [root@Zabbix-server ~]# cat /usr/local/nginx/conf/vhost/zabbix.conf


    server {
            listen       80;
            server_name  zabbix.zrwm.com;
     
     
            location / {
                root   /data/www/zabbix;
                index  index.php index.html index.htm ;
            }
     
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
     
             
            location ~ .php$ {
                root           /data/www/zabbix;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
                include        fastcgi_params;
            }
     
            
        }

    php.ini配置:
    [root@Zabbix-server ~]# cat /usr/local/php5/etc/php.ini
    ...
    memory_limit = 128M
    post_max_size = 16M
    max_execution_time = 300
    max_input_time = 300
    session.auto_start = 0 ;                   //必须为0
    mbstring.func_overload = 0
    date.timezone = Asia/ShangHai

    注:PHP需要至少开启扩展:gd,bcmath,ctype,libXML,xmlreader,xmlwriter,session,sockets,mbstring,gettext,mysql
    如下,查看是否包括了上面所提到的扩展模块
    [root@Zabbix-server ~]# /usr/local/php5/bin/php -m
    [PHP Modules]
    bcmath
    Core
    ctype
    curl
    date
    dom
    ereg
    fileinfo
    filter
    ftp
    gd
    gettext
    hash
    iconv
    json
    libxml
    mbstring
    mcrypt
    mysql
    mysqli
    openssl
    pcntl
    pcre
    PDO
    pdo_sqlite
    Phar
    posix
    Reflection
    session
    shmop
    SimpleXML
    soap
    sockets
    SPL
    sqlite3
    standard
    sysvsem
    tokenizer
    xml
    xmlreader
    xmlrpc
    xmlwriter
    zip
    zlib

    访问Web界面http://zabbix.zrwm.com,进行相关web配置,配置完成后使用默认用户admin(密码:zabbix)登陆即可.

    在登录web界面后出现一些可能的报错

    1PHP option "max_execution_time" 120 300 failed
    # vim /data/php/lib/php.ini
    max_execution_time = 300    //修改为300
     
    然后重启nginx(若是apache+php,就重启apache)
     
    2PHP bcmath off failed
    解决办法:安装php的bcmath扩展
    # yum install *bcmath* --skip-broken
    # cd /data/software/php-5.6.30/ext/bcmath/
    # /data/php/bin/phize
    # ./configure --with-php-config=/data/php/bin/php-config
    # make && make install
    # vim /data/php/lib/php.ini     添加下面内容
    .....
    extension=/data/php/lib/php/extensions/no-debug-zts-20131226/bcmath.so
     
    然后重启php(若是apache+php,就重启apache)
     
    3about always-populate-raw-post-data must be set -1 的问题:
       PHP option "always_populate_raw_post_data"   on  off failed
    解决办法:
    # vim /data/vhosts/zabbix/include/classes/setup/CFrontendSetup.php      添加下面这一行
    .......
            public function checkPhpAlwaysPopulateRawPostData() {
                    $current = ini_get('always_populate_raw_post_data');
                    $current = -1;                                             //添加这一行内容
     
                    return [
                            'name' => _s('PHP option "%1$s"', 'always_populate_raw_post_data'),
                            'current' => ($current != -1) ? _('on') : _('off'),
                            'required' => _('off'),
                            'result' => ($current != -1) ? self::CHECK_FATAL : self::CHECK_OK,
                            'error' => _s('PHP option "%1$s" must be set to "%2$s"', 'always_populate_raw_post_data', -1)
                    ];

    二、zabbix客户端的操作记录(192.168.1.2)

    安装Zabbix,配置Zabbix agent:
    [root@bastion-IDC ~]# cd /usr/local/src/
    [root@bastion-IDC src]# wget -c wget -c http://sourceforge.net/projects/zabbix/files/ZABBIX%20Latest%20Stable/3.0.3/zabbix-3.0.3.tar.gz/download
    [root@bastion-IDC src]# cd zabbix-3.0.3
    [root@bastion-IDC zabbix-3.0.3]# ./configure --prefix=/usr/local/zabbix --enable-agent
    [root@bastion-IDC zabbix-3.0.3]# make && make install

    [root@bastion-IDC zabbix-3.0.3]# cp misc/init.d/fedora/core5/zabbix_agentd /etc/init.d/

    配置zabbix_agentd:
    [root@bastion-IDC ~]# groupadd zabbix
    [root@bastion-IDC ~]# useradd -g zabbix zabbix
    [root@bastion-IDC ~]# mkdir -p /usr/local/zabbix/logs
    [root@bastion-IDC ~]# chown zabbix:zabbix -R /usr/local/zabbix/
    [root@bastion-IDC ~]# vim /usr/local/zabbix/etc/zabbix_agentd.conf
    [root@bastion-IDC ~]# cat /usr/local/zabbix/etc/zabbix_agentd.conf
    ...
    PidFile=/usr/local/zabbix/logs/zabbix_agentd.pid
    LogFile=/usr/local/zabbix/logs/zabbix_agentd.log
    Server=192.168.1.1
    ListenPort=10050
    ServerActive=192.168.1.1
    Hostname=192.168.1.2                                                          

    [#在192.168.1.2本机的/etc/hosts里做主机映射:“ip  hostname”][也可以设置公网ip]
    Timeout=15
    Include=/usr/local/zabbix/etc/zabbix_agentd.conf.d/
    ...

    配置Zabbix Agent启动脚本:
    [root@bastion-IDC ~]# cat /etc/init.d/zabbix_agentd
    ...
    prog="Zabbix Agent"
    ZABBIX_BIN="/usr/local/zabbix/sbin/zabbix_agentd"
    CONF_FILE="/usr/local/zabbix/etc/zabbix_agentd.conf"
    ...
    start() {
    ...
    daemon $ZABBIX_BIN -c $CONF_FILE
    ...
    }
    ...

    开启防火墙端口10050:
    [root@bastion-IDC ~]# cat /etc/sysconfig/iptables
    ...
    -A INPUT -p tcp -m state --state NEW -m tcp --dport 10050 -j ACCEPT
    ...
    [root@bastion-IDC ~]# /etc/init.d/iptables restart

    启动zabbix_agentd:
    [root@bastion-IDC ~]# /etc/init.d/zabbix_agentd start
    Starting Zabbix Agent: [ OK ]

    配置开机自动启动:
    [root@bastion-IDC ~]# chkconfig --add zabbix_agentd
    [root@bastion-IDC ~]# chkconfig --level 35 zabbix_agentd on

    测试下zabbix agent是否正常工作:
    [root@bastion-IDC ~]# /usr/local/zabbix/sbin/zabbix_agentd -c /usr/local/zabbix/etc/zabbix_agentd.conf -t system.uptime
    system.uptime [u|68301]

    登录zabbix,先在“配置”-“主机”里添加主机监控,监控os资源:内存,cpu,io,负载,带宽等

    注意:下图中的“主机名称”要和zabbix_agentd.conf文件中设置的“Hostname”后面的名称一致!

    配置一段时间,看效果图

    在zabbix界面中,默认要查看多个主机的监控数据时需要不停的切换。其实可以在一个页面中批量查看多个主机的监控项的数据,这就需要使用Screen方法(Screen 的方法是将每个item的graph放到一个屏幕上,即在聚合图形里选择要放在一个screen里的图形,事先创建一个拓扑图。注意选择磁盘空间监控项的图形时,图形样式调整“层积“显示),但是看起来不够明晰;最好是将各机器的同一item放到同一个graph里。比如一个Nginx的组里有10台机器,将这10台机器的内存使用率放到一个graph里,方便在测试时查看。
    在zabbix的前端要创建此类的graph只能通过手工一个一个的加,不能创建此类的templates。在网上有批量创建Screen的针对API的python脚本。

    -------------------------------------------------------------------------------------------------------------------------
    zabbix监控获取数据的途径有简单检查,zabbix agent,snmp。可以通过zabbix agent获取客户机的cpu、内存、磁盘io等监控数据;但是对于交互机(打印机,路由器等网络设备)的监控就要用到snmp协议,snmp通过特定的oid值来获取对应的数据。交换机需要开启snmp协议,通过snmpwalk 可以抓取到数据就可以了(snmpwalk -v 2c -c public *.*.*.*)

    ------------------------------------------------------------------------------------------------------------------------
    使用zabbix的ICMP Ping模版实现对客户端网络状态的监控
    如上正确安装及配置fping,然后在服务端进行zabbix用户测试fping命令
    [root@Zabbix-server ~]# /usr/local/sbin/fping www.baidu.com
    www.baidu.com is alive //说明命令返回成功。

    接着在zabbix监控界面里添加主机设置,并选择添加模版template icmp ping。然后点开这个模块,可以选择想要的监控项的图形

    -----------------------------------------Zabbix监控项CPU Load数值与服务器上uptime的实际值不符合--------------------------------------
    现象说明:
    zabbix监控项cpu load的数值跟被监控机本地uptime显示的负载值对不上,前者数值小于后者。

    产生原因:
    现在服务器的cpu基本都是多核的,但zabbix监控项cpu load参数里默认显示的是一个核心的参数,
    而不是总和,所以两者数值对不上。

    解决办法:
    "配置"->"模板"->"Template OS Linux"->"监控项"->"Processor load (1 min average per core)"
    点开,将system.cpu.load[percpu,avg1]改为system.cpu.load[all,avg1],即将percpu改为all。
    其余5 min和15 min的load监控项的改法一样!保存等几分钟即可显示。

    -----------------------------------添加网络监控项的触发器(报警设置)--------------------------------
    注意:
    网络监控的默认单位是bps,监控报警一般看的是Mbps,需要转为为bps。比如超过8M报警,那触发器的值即为8*1024*1024=8388608

  • 相关阅读:
    再次或多次格式化导致namenode的ClusterID和datanode的ClusterID之间不一致的问题解决办法
    Linux安装aria2
    POJ 3335 Rotating Scoreboard 半平面交
    hdu 1540 Tunnel Warfare 线段树 区间合并
    hdu 3397 Sequence operation 线段树 区间更新 区间合并
    hud 3308 LCIS 线段树 区间合并
    POJ 3667 Hotel 线段树 区间合并
    POJ 2528 Mayor's posters 贴海报 线段树 区间更新
    POJ 2299 Ultra-QuickSort 求逆序数 线段树或树状数组 离散化
    POJ 3468 A Simple Problem with Integers 线段树成段更新
  • 原文地址:https://www.cnblogs.com/fengzhongzhuzu/p/9036289.html
Copyright © 2011-2022 走看看