Zabbix

2017-11-23  本文已影响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
上一篇下一篇

猜你喜欢

热点阅读