Zabbix

作者: 尛尛大尹 | 来源:发表于2017-11-23 21:07 被阅读0次

    1、zabbix 基础介绍:

        监控系统:硬件、软件、业务指标
        sensor:数据指标
                    采样 --> 存储 --> 报警 --> 展示
            采样:             
            存储:
                数据:历史数据、趋势数据
            报警:
                脚本:
                媒介:
            展示:Visual
            
        监控数据采集通道
            SNMP:Simple Network Management Protocol
            ssh/telnet
            IPMI:
            agent:
                master/agent
            JMX:Java Management eXtensions
            
        NMS:
            网络监控系统      
                        开源监控工具:
                cacti, nagios, zabbix, ganglia
                    cacti, nagios
                    zabbix
                    ganglia
                
            数据:
                历史数据:NVPS
                趋势数据
                    
                存储系统:
                    关系型数据库:MySQL
                    rrd:roundrobin database
                    NoSQL:redis/mongodb
                        时间序列存储
                        
        SNMP协议:
            nms/agent
                nms: cli/gui
                agent: service 
            MIB, OID, ...
            
        特性:
            数据采样:
                数据采集通道:snmp, ssh/telnet, agent, ipmi, jmx(java Management eXtensions)
                自定义采样机制:UserPrameter(基于agent实现)
            告警:
                升级:
                    script
                    notification
            数据存储:
                数据存储:mysql/pgsql
            展示:
                实时绘图:graph, screen, slide show, map
            
            支持模板:
            网络自动发现:
            分布式监控:
                Server <--> Proxy <--> agent/ssh/ipmi 
    

    2、zabbix程序的组件:

    Zabbix_server:服务端守护进程;负责接受agent发送的报告信息,所有配置、统计数据以及操作数据均有其组织进行;
    Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
    Proxy:可选组件,常用于分部监控环境中,代理Server收集部分被监控端的监控数据并统一发往Server端;
    Agent:部署在被监控主机上,负责收集本地数据并发往Server端或Porxy端;
    zabbix_agentd:agent守护进程;
    zabbix_proxy:代理服务器,可选组件;
    zabbix_get:命令行工具,手动测试向agent发起数据采集请求;
    zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据;
    zabbix_java_gateway: java网关;
    zabbix_database:MySQL或PostgreSQL;
    zabbix_web:Web GUI
    Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
    

    链接官方文件包下载:


    clipboard1.png clipboard2.png

    zabbix逻辑组件:

            主机组
            主机 
            监控项(item)
                key:实现获取监控的目标上的数据的命令或脚本的名称;
            应用(application):同一类监控项的集合;
            触发器(trigger):表达式;PROBLEM, OK;
            事件(event):
            动作(action):由条件(condition)和操作(operation)组件;
            媒介(media):发送通知的通道;
            通知(notification):
            远程命令(remote command):
            报警升级():
            模板(template):快速定义被监控主机的各监控项的预设项目集合;
            图形(graph):用于展示历史数据或趋势数据的图像;
            屏幕(screen):由多个graph组成;
            
        zabbix安装:
            设置ZBX DB:
                mysql> CREATE DATABASE zabbix CHARSET 'utf8';
                mysql> GRANT ALL ON zabbix.* TO ...;
                
            安装服务端:
                ~]# yum install zabbix-server-mysql-3.0.2-1.el7.x86_64.rpm zabbix-get-3.0.2-1.el7.x86_64.rpm
                
                注意:CentOS 7.0和7.1需要升级trousers程序包;
                
            安装web GUI:
                ~]# yum install httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
                ~]# yum install zabbix-web-3.0.2-1.el7.noarch.rpm zabbix-web-mysql-3.0.2-1.el7.noarch.rpm 
                
            安装agent端:
                 ~]# yum install zabbix-agent-3.0.2-1.el7.x86_64.rpm zabbix-sender-3.0.2-1.el7.x86_64.rpm
    

    设置数据库:

                      #vim /etc/my.cnf.d/server.cnf
                           [server]
                          skip_name_resolve = ON
                          innodb_file_per_table = ON
                          innodb_buffer_pool_size = 256M
                          max_connections = 2000
                          log_bin=/mydata/logs/master-log
                    MariaDB [(none)]> create database zbxdb;
                    MariaDB [(none)]> grant all on zbxdb.* to 'zbxuser'@'172.18.252.%' identified by 'zbxpass';
                     MariaDB [(none)]> flush privileges;
    
        服务端数据库初始化:
            2.x:三个sql脚本;
            3.x:一个sql脚本;
                                ~]# cp /usr/share/doc/zabbix-server-mysql-3.4.4/create.sql.gz ./
                ~]# gzip  -d  create.sql.gz 
                ~]# mysql -uzbxuser -h127.0.0.1 -p zabbix < create.sql  导入数据库
    

    zabbix server配置启动:

            配置文件:/etc/zabbix/zabbix_server.conf
            配置段:
                ~]# grep "^#####" zabbix_server.conf
                ############ GENERAL PARAMETERS ################# 一般性配置  
                ############ ADVANCED PARAMETERS ################ 高级配置
                ####### LOADABLE MODULES ####### 可加载模块
                ####### TLS-RELATED PARAMETERS #######  加密,zabbix默认是明文的,如果想要加密则用这个模块
                
            通用参数:
                ListenPort=10051
                SourceIP=  发出监控数据
                LogType=file
                LogFile=/var/log/zabbix/zabbix_server.log 如果采集不到文件则使用这个日志文件查看(很重要)
                LogFileSize=0    0代表禁止自动滚动,最好设置为滚动
                DebugLevel=3  设置日志日志详细级别,考虑到I/O压力不要设置太小
                
                DBHost=localhost  数据库允许连入的主机
                DBName=zabbix
                DBUser=zabbix
                DBPassword=
                DBSocket=/tmp/mysql.sock
                DBPort=3306
                
        配置zabbix-web:
            配置php的时区设定:(两者选一个即可)
                (1) /etc/php.ini (所有的PHP程序)
                (2) vim /etc/httpd/conf.d/zabbix.conf 
                    php_value date.timezone 
    
    clipboard3.png

    访问URL

                              # systemctl  start httpd.service
                http://HOST/zabbix 
    
    clipboard4.png clipboard5.png clipboard6.png

    安装生成的配置文件:/etc/zabbix/web/zabbix.conf.php

            登录:
                admin/zabbix  初始密码,登陆后请修改
                        Administration --> Users --> Use                
            Monitoring
            Inventory
            Reports
            Configuration
            Administration
    
    
    agent端的配置:(被监控)
        ~]# yum  install zabbix-agent-3.0.2-1.el7.x86_64.rpm  zabbix-sender-3.0.2-1.el7.x86_64.rpm
        
        Unit file: zabbix-agent.service 
    

    配置文件:/etc/zabbix/zabbix_agentd.conf

            ############ GENERAL PARAMETERS #################
            ##### Passive checks related
                被动监控相关配置(主动监控和被动监控由server端决定)
            ##### Active checks related
                主动监控相关配置,agent端主动向server周期性发送数据;
            ############ ADVANCED PARAMETERS #################
            ####### USER-DEFINED MONITORED PARAMETERS #######
                用户自定义监控参数
            ####### LOADABLE MODULES #######
            ####### TLS-RELATED PARAMETERS #######          
        
        ##### Passive checks related
            Server=IP1, IP2, ... 监控本机的server的地址
            ListenPort=10050
            ListenIP=0.0.0.0
            StartAgents=3
        ##### Option: ListenIP  
                        ListenIP=0.0.0.0 允许监听本机的哪个IP
        ##### Active checks related
            ServerActive=IP1[:port], IP2[:port], ...
            Hostname=Unique_HOSTNAME  自己的主机名
                必须与服务器配置的监控主机的主机名称保持一致;
    
                                   Hostname
                                   HostnameItem
                                   HostMetadata
                                   HostMetadataItem 这四项是用来让服务器解析自己的主机
    
    clipboard7.png

    启动服务:

            systemctl start zabbix-agent.service 
    
    clipboard8.png

    3、监控配置:

        术语:host groups --> host --> application --> item --> trigger --> action (conditions, operations)
                graph: 
                simple: 每个item定义完成后自动生成 
                customed:用于将多个item的数据整合于一个图形中展示             
        
        
        items: key+parameter
            key: 
                zabbix内建:
                    type: 
                        agent (server:pull)
                        agent(active) (agent:push)
                        snmp v1
                        ...
                用户自定义(UserParameter)
    

    自定义key:


    clipboard9.png clipboard10.png clipboard11.png

    采集到的数据的类型:

                数值:
                    整数
                    浮点数 
                字符串:
                    字符串
                    文本
                    
    存储的值:
        As is:不对数据做任何处理
        Delta:(simple change),本次采样减去前一次采样的值的结果
        Delta:(speed per second),本次采样减去前一次采样的值,再除以经过的时长;
                
            
            
        trigger:
            界定某特定的item采集到的数据的非合理区间或非合理状态:逻辑表达式 
            
            逻辑表达式,阈值;通常用于定义数据的不合理区间;
                OK:正常 状态 --> 较老的zabbix版本,其为FALSE;
                PROBLEM:非正常 状态 --> 较老的zabbix版本,其为TRUE;
                
                OK --> PROBLEM 
                Recovery:PROBLEM --> OK 
                
            触发器存在可调用的函数:
                nodata()
                last()
                date()
                time() 
                now()
                dayofmonth()
                ...
                
            Severity:严重等级
                Not classified
                Information
                Warning
                Average
                High
                Disaster
                
            触发器表达式:
                {hostname:key[paramters].function(arguments) 
                    >, <, =, #(not equal)...
                    +, -, *, /
                    &, |
                
                {n1.magedu.com:net.if.in[eno16777736,packets].last(#1)}>15
                
            trigger间存在依赖关系:
                zabbix server <--> Router1 <--> Host1
         
         事件机制:
            四种事件源:trigger, discovery, auto registration, internal
         
            
        Media:媒介
            告警信息的传递通道;
            类型:
                Email:邮件
                Script:自定义脚本
                SMS:短信
                Jabber:
                Ez Texting:
                
            接收信息的目标为zabbix用户:
                需要用户上定义对应各种媒介通道的接收方式;
                
        Action:
            conditions: 
                多个条件之间存在逻辑关系;
            operations:
                条件满足时触发的操作;
                    
                send message:
                    (1) Media type:传递信息的通道;
                        (a) Email
                        (b) Script:报警脚本;
                            脚本放置路径:zabbix_server.conf配置文件中AlertScriptsPath参数定义的路径下;
                                /usr/lib/zabbix/alertscripts/
                            zabbix服务器在调用脚本时,会向其传递三个参数:
                                $1:经由此信道接收信息的目标;
                                $2:subject
                                $3:body
                                
                            zabbix 3.0之后的版本,此三个变量定义为内部宏:
                                {ALERT.SENDTO}
                                {ALERT.SUBJECT}
                                {ALERT.MESSAGE}
                                
                    (2) 信息接收人:
                        (a) User Groups
                        (b) Users
                            admin: 
                    
                    
    ###   Python报警脚本示例:
    
                            #!/usr/bin/python
                            #coding:utf-8
    
                            import smtplib
                            from email.mime.text import MIMEText
                            from email.header import Header
                            from email.utils import parseaddr, formataddr
                            import sys
    
                            def formatAddr(s):
                                name, addr = parseaddr(s)
                                return formataddr((Header(name, 'utf-8').encode(), addr))
    
                            def send_mail(to_list,subject,content):
                                mail_host = 'smtp.exmail.qq.com'
                                mail_user = 'USERNAME@DOMAIN.TLD'
                                mail_pass = 'YOUR_PASSWORD'
                                #以上内容根据你的实际情况进行修改
                                msg = MIMEText(content,'','utf-8')
                                msg['Subject'] = Header(subject, 'utf-8').encode()
                                msg['From'] = formatAddr('zabbix监控 <%s>' % mail_user).encode()
                                msg['to'] = to_list
    
                                try:
                                    s = smtplib.SMTP()
                                    s.connect(mail_host)
                                    s.login(mail_user,mail_pass)
                                    s.sendmail(mail_user,to_list,msg.as_string())
                                    s.close()
                                    return True
                                except Exception,e:
                                    print str(e)
                                    return False
    
                            if __name__ == "__main__":
                                send_mail(sys.argv[1], sys.argv[2], sys.argv[3])
                                                                                
                    
                remote command
                    功能:
                        在agent所在的主机上运行用户指定的命令或脚本;例如:
                            重启服务;
                            通过IPMI重启服务器;
                            任何用户自定义脚本中定义的操作; 
                            
                    可执行的命令类型:
                        IPMI
                        ssh 
                        telnet 
                        Custom Script
                        Global Script
                        
                    前提:
                        在agent需要完成的配置:
                            (1) zabbix用户拥有所需要的管理权限;
                                编辑/etc/sudoers文件,注释如下行;
                                Defaults requiretty
                                添加如下行: 
                                zabbix  ALL=(ALL)  NOPASSWD: ALL
                                
                            (2) agent进程要允许执行远程命令; 
                                编辑/etc/zabbix/zabbix_agentd.conf,设置如下配置:
                                EnableRemoteCommands=1
                                
                                重启服务生效;
    

    展示接口:

        graph: simple, custom
        screen:把多个graph整合于同一屏幕进行展示;
        slide show:把多个screen以slide show的方式进行展示
        map:
    

    模板:

        主机配置模板:用于链接至目标主机实现快速监控管理;
            link, unlink, unlink and clear 
            
        模板可继承;
    

    宏:macro,预设的文本替换模式;

        级别:
            全局:Administration --> General --> Macros 
            模板:编辑模板 --> Macros
            主机:编辑主机 --> Macros 
            由大写字母组成
        类型:
            内建:{MACRO_NAME}
                文档:
                    https://www.zabbix.com/documentation/3.4/manual/appendix/macros/supported_by_location
                    
            自定义:{$MACRO_NAME}
                命名方式:大写字母、数字和下划线;
    

    zabbix监控:

        (1) host groups <--> hosts
        (2) items:监控项 <--> applications
        (3) triggers --> trigger events        
            OK <--> PROBLEM
        
        (4) actions:
            CONDITIONS:操作执行的前提条件
                非维护期间;
                由trigger定义;
            OPERATIONS:OK --> PROBLEM
                remote command:
                    ssh/telnet/script/...
                send message:
                    Email, SMS, Jabber, EZ Texting, Script
                    
            RECOVERY OPERATIONS: PROBLEM --> OK
            
        展示方式:
            graph, screen, slide show
            map 
    
    配置主机监控的方法:
        (a) 手工添加; 
        (b) 链接模板;           
    

    网络发现:

        zabbix server扫描指定网络范围内的主机;
        
            发现方式:
                ip地址范围;
                    可用服务(ftp, ssh, http, ...)
                    zabbix_agent的响应;
                    snmp_agent的响应; 
                    
            分两个阶段:
                discovery 
                actions:把discvery events当作前提条件; 
                
            发现:--> discovery events 
                Service, Host 
                
                UP/DOWN, DICOVERED/LOST 
                
            可采取的动作:
                send message, remote command
                add/remove host 
                enable/disable host 
                add host to group
                link  template to host
                ...
    
    clipboard12.png

    5、自定义key:

        item type: 不同的类型适用的接口有可能不同;有些key仅能用在指定的接口之上;
            agent
            agent(active)
            simple
            snmpv1
            snmpv2
            snmpv3
            ssh 
            ...
            
        接口类型:agent, ipmi, snmp, jmx
            
        自定义key:在zabbix agent端的配置文件上由用户通过UserParameter指令定义的key;
            zabbix_agentd.conf文件中
                UserParameter=<key>,<command>
    6、Web监控:
        监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
        
        内建key:
            web.test.in[Scenario,Step,bps]:传输速率
            web.test.time[Scenario,Step]:响应时间
            web.test.rspcode[Scenario,Step]:响应码
            
        
        
    7、主动/被动检测:
        被动检测:相对于agent而言;agent,  server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
        主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
            agent端所需要基本配置:
                ServerActive=
                Hostname=
                
    zabbix_sender发送数据:
        zabbix server上的某主机上,直接定义Item时随便定义一个不与其它已有key冲突的key即可,即item type为“zabbix trapper";
        
        zabbix_sender
            -z zabbix_server_ip
            -p zabbix_server_port
            -s zabbix_agent_hostname 
            -k key
            -o value
    

    可以用主动监测就用主动监测,这样对zabbix压力比较小,可以有效的节约服务器的资源

    8、基于SNMP监控:
    
        SNMP:简单网络管理协议;
            agent/nms
               zabbix主要还是针对agent来监控,只要能够安装zabbix-agent则不用SNMP,SNMP主要用于一些网络设备
        网络设备:交换机,路由器    
    
            读(get, getnext)、写(set)、trap(陷阱);
    
                  为了安全,不能在监控中启用管理功能,即只需启动读功能,不启动写功能
                 在SNMP中需要监听套接字的是被管控端,称为agent端,除了启用trap,才启用nms(网络系统管理的管理端,类似于server端)
            
            161/udp
            162/udp
            
        SNMP版本:V1、V2、V3
    
        MIB:Management Information Base
        OID:Object ID 对象ID(一棵倒置的树)
        
        Linux启用snmp的方法:
            # yum install net-snmp net-snmp-utils 
            配置文件:
                /etc/snmp/snmpd.conf
                定义ACL 
                      OID:
                            .1.3.6.1.2.1.
                                          1.1.0:系统描述信息,SysDesc
                                          1.3.0:监控时间,SysUptime
                                          1.5.0:主机名,SysName
                                          1.7.0:主机提供的服务,SysService
                            
                                           2.1.0:网络接口数目
                                           2.2.1.2:网络接口的描述信息
                                           2.2.1.3:网络接口类型
                                           .....
                       view                systemview          included               .1.3.6.1.2.1.1
                       view                systemview          included               .1.3.6.1.2.1.2      # 网络接口的相关数据
                       view                systemview          included               .1.3.6.1.4.1.2021       # 系统资料负载,memory,disk io,cpu load
                       view                systemview          included               .1.3.6.1.2.1.25.1.1
                
            启动服务:
                systemctl  start  snmpd.service 
                
                测试工具:
                    # snmpget -v 2c  -c  public  HOST  OID
                    # snmpwalk  -v 2c -c public  HOST  OID 
            
        Key <Unique string to be used as reference to triggers> For example, “my_param”.
    
                           获取数据:snmpget -v 2c -c public ownIP  .1.3.6.1.2.1.1.3.0       
                                             snmpwalk -v 2c -c public 172.18.0.68  .1.3.6.1.2.1.1      
    
          /usr/bin/snmpwalk 查询树上的所有节点
          /usr/bin/snmpbulget 查询一组指标
          /usr/bin/snmpbulwalk 获取此节点及以下的子树所有的数据
        
    9、JMX:
        tomcat主机设置(一台主机启动Tomcat)
            监控tomcat:
                /etc/sysconfig/tomcat,添加
             CATALINA_OPTS 表示只对Tomcat有效
             JAVA_OPTS 表示启动JVM就有效
            CATALINA_OPTS="-Djava.rmi.server.hostname=TOMCAT_SERVER_IP -Djavax.management.builder.initial= -Dcom.sun.management.jmxremote=true   -Dcom.sun.management.jmxremote.port=12345  -Dcom.sun.management.jmxremote.ssl=false  -Dcom.sun.management.jmxremote.authenticate=false"     指明监控的主机和IP
        
        zabbix-java-gateway主机设置:(可以和zabbix-server在一台主机上)
    

    zabbix-server不能适配JMX协议客户端,所以要安装zabbix-java-gatewa来代为获取数据
    安装 zabbix-java-gateway程序包,启动服务;

     zabbix-server端设置:
           # vim zabbix-server.conf
            JavaGateway=172.16.0.70
            JavaGatewayPort=10052
            StartJavaPollers=5
    

    徒刑监控添加接口
    可链接模板 Templates/Application --> Templates App Generic Java JMX
    10、Zabbix Proxy的配置:
    server-node-agent
    server-proxy-agent
    减轻zabbix-server压力
    1、配置proxy主机:
    (1) 安装程序包
    zabbix-proxy-mysql zabbix-get
    zabbix-agent zabbix-sender

            (2) 准备数据库
                创建、授权用户、导入schema.sql;
                
            (3) 修改配置文件
                Server=
                    zabbix server主机地址;
                Hostname=
                    当前代理服务器的名称;在server添加proxy时,必须使用此处指定的名称;
                    需要事先确保server能解析此名称;
                DBHost=
                DBName=
                DBUser=
                DBPassword=
                
                ConfigFrequency=10
                DataSenderFrequency=1
                
        2、在server端添加此Porxy
            Administration --> Proxies 
            
        3、在Server端配置通过此Proxy监控的主机;
        
        
        注意:zabbix agent端要允许zabbix proxy主机执行数据采集操作: 
            Server=
        
    zabbix performace tuning:
        nvps:new values per second 
            100w/m, 15000/s
    

    11、调优:
    Database:
    历史数据不要保存太长时长;
    尽量让数据缓存在数据库服务器的内存中;
    触发器表达式:
    减少使用min(), max(), avg();尽量使用last(),nodata();
    数据收集:
    polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping(agent(active));
    数据类型:
    文本型数据处理速度较慢;尽量少收集类型为text或string类型的数据;多使用类型为数值型数据;

    zabbix服务器的进程调优:
    (1) 服务器组件的数量;
    alerter, discoverer, escalator, http poller, hourekeeper, icmp pinger, ipmi polller, poller, trapper,
    configration syncer, ...

                StartPollers=60  被动方式时增大并发量
                StartPingers=10
                                StartHTTPPollers   监控web时启用 
                ...
                StartDBSyncer=5
                    ...
                HousekeepingFrequency 清理过期数据,不宜过于频繁
                                MaxHousekeeperDelete  每次最多可清理的数据
                                CacheUpdateFrequenty 缓存更新的频率
                                如果内存足够大缓存空间尽量调大
    
                      (2) 设定合理的缓存大小 
                                  CacheSize=8M
                                  HistoryCacheSize=16M
                                  HistoryIndexCacheSize=4M
                                  TrendCacheSize=4M
                                   ValueCacheSize=4M
            (3) 数据库优化 
                分表:
                    history_*  保存历史数据的表
                    trends*     保存趋势的表
                    events*     保存事件的表
    
                 Maintenance维护区间,维护区间内不采集数据             
    

    其它解决方案:

    grafana:展示
    collectd:收集
    influxdb:存储
    
    grafana+collectd+influxdb
    
    prometheus:
        exporter:收集
        alertmanager:
    grafana:展示
    
    openfalcon  重量级的监控系统,监控系统比较美观
        
        
            Zabbix share
    

    相关文章

      网友评论

          本文标题:Zabbix

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