37.1 zabbix笔记

目录

####zabbix:

####ZABBIX:

 ####Zabbix(3)    


 

####zabbix:

    Zabbix is the ultimate enterprise-level software designed for real-time monitoring of millions of metrics collected from tens of thousands of servers, virtual machines and network devices. Zabbix is Open Source and comes at no cost.

    监控系统:硬件、软件、业务指标
        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
                
            v1
            v2c: community,public
            v3
            
            MIB, OID, ...
            

####ZABBIX:


        LTS:2.2, 3.0
            long time support
            
        特性:
            数据采样:
                数据采集通道: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 
            API
            
        zabbix程序的组件:
            zabbix_server:服务端守护进程;
            zabbix_agentd:agent守护进程;
            zabbix_proxy:代理服务器,可选组件;
            zabbix_get:命令行工具,手动测试向agent发起数据采集请求;
            zabbix_sender:命令行工具,运行于agent端,手动向server端发送数据;
            zabbix_java_gateway: java网关;
            zabbix_database:MySQL或PostgreSQL;
            zabbix_web:Web GUI
        
        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
                 
        服务端数据库初始化:
            2.x:三个sql脚本;
            3.x:一个sql脚本;
                ~]# 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 #######    
                
            通用参数:
                ListenPort=10051
                SourceIP=
                LogType=file
                LogFile=/var/log/zabbix/zabbix_server.log
                LogFileSize=0
                DebugLevel=3
                
                DBHost=localhost
                DBName=zabbix
                DBUser=zabbix
                DBPassword=
                DBSocket=/tmp/mysql.sock
                DBPort=3306
                
        配置zabbix-web:
            配置php的时区设定:
                (1) /etc/php.ini 
                (2) /etc/httpd/conf.d/zabbix.conf 
                    php_value date.timezone 
            
            访问URL
                http://HOST/zabbix 
                    
            安装生成的配置文件:/etc/zabbix/web/zabbix.conf.php
            
            登录:
                Admin/zabbix 
                
            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
                被动监控相关配置
            ##### Active checks related
                主动监控相关配置,agent端主动向server周期性发送数据;
            ############ ADVANCED PARAMETERS #################
            ####### USER-DEFINED MONITORED PARAMETERS #######
                用户自定义参数
            ####### LOADABLE MODULES #######
            ####### TLS-RELATED PARAMETERS #######            
        
        ##### Passive checks related
            Server=IP1, IP2, ...
            ListenPort=10050
            ListenIP=0.0.0.0
            StartAgents=3
            
        ##### Active checks related
            ServerActive=IP1[:port], IP2[:port], ...
            Hostname=Unique_HOSTNAME
                必须与服务器配置的监控主机的主机名称保持一致;
            
        启动服务:
            systemctl start zabbix-agent.service 


    监控配置:
        术语: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)
                
            采集到的数据的类型:
                数值:
                    整数
                    浮点数 
                字符串:
                    字符串
                    文本
                    
            存储的值:
                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 = '[email protected]'
                                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
                                
                                重启服务生效;
                                
        总结:
            host groups --> host --> application --> item (key) --> trigger --> action
                
                (1) media type
                (2) user group/user
                
            action operations: 可定义为升级方式;
                send message 
                remote command
                            

    展示接口:
        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}
                命名方式:大写字母、数字和下划线;

                
    自定义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>

        zabbix_get -s 192.168.31.7 -k 'memory.info[MemTotal]'
        [root@cos7 ~ ]#vim /etc/zabbix/zabbix_agentd.d/mem.conf
        UserParameter=memory.info[*],awk '/^$1/{print $$2}' /proc/meminfo

        share.zabbix 网上搜索摸版 https://share.zabbix.com
                
        课外练习:监控nginx服务的各状态信息(status)
            监控php-fpm的各状态信息
            监控redis的各状态信息    
            
            
            
        location /nginx_status {
            stub_status on;
            access_log off;
            allow 127.0.0.1;
            allow ::1;
            deny all;
        }           
            
                    
                
回顾:
    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) 链接模板;
        
    宏:
        全局宏、模板宏、主机宏;
        内建宏({MACRO_NAME})、自定义宏({$MACRO_NAME})

        
回顾:
    host --> host group
    item --> application
    trigger --> trigger event
    action (conditions, operations)
    
    展示接口:graph, screen, slideshow
    
    item: key
        key=keyword,command
        
        UserParameter=key[*],command 
        
    operations:
        remote command
        send message
            media
            zabbix user        
        
    template:
        link
        unlink
        unlink and clear    


                        
####Zabbix(3)    

    发现:network discovery, low level discovery
                
    网络发现:
        zabbix server扫描指定网络范围内的主机;
        
            监控接口:agent, snmp, jmx, ipmi
        
            发现方式:
                ip地址范围;
                    可用服务(ftp, ssh, http, ...)
                    zabbix_agent的响应;
                    snmp_agent的响应; 
                    
            分两个阶段:
                discovery 
                actions:把discovery 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
                ...
            
            lld:low level discovery 底层发现预先设置好的cpu转速等参数

            
        


    Web监控:
        监控指定的站点的资源下载速度,及页面响应时间,还有响应代码;
        
            web Scenario
                web page:
        
        内建key:
            web.test.in[Scenario,Step,bps]:传输速率
            web.test.time[Scenario,Step]:响应时长
            web.test.rspcode[Scenario,Step]:响应码
            
        
        
    主动/被动 检测:
        被动检测:相对于agent而言;agent,  server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;
        主动检测:相对于agent而言;agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
            agent端所需要基本配置:
                ServerActive=
                Hostname=
                HostnameItem=
                
    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
                
    基于SNMP监控:
    
        SNMP:简单网络管理协议;
            agent/nms
            
            读(get, getnext)、写(set)、trap(陷阱);
            
            161/udp
            162/udp
            
        SNMP:
            v1: 1989
            v2c: 1993
            v3: 1998 
            
        MIB:Management Information Base
        OID:Object ID
        
        Linux启用snmp的方法:
            # yum install net-snmp net-snmp-utils 
            配置文件:
                /etc/snmp/snmpd.conf
                定义ACL 
                
                .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”.
        
    JMX:
        tomcat主机设置:
            监控tomcat:
                /etc/sysconfig/tomcat或/etc/tomcat/tomcat.conf文件,添加
                
            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"
        
        zabbix-java-gateway主机设置:
            安装 zabbix-java-gateway程序包,启动服务;
        
        zabbix-server端设置(需要重启服务):
            JavaGateway=172.16.0.70
            JavaGatewayPort=10052
            StartJavaPollers=5
         
        添加监控项:
            jmx[object_name,attribute_name]
                object name - 它代表MBean的对象名称
                attribute name - 一个MBean属性名称,可选的复合数据字段名称以点分隔
            
            示例:
                jmx["java.lang:type=Memory","HeapMemoryUsage.used"]
                
                
        jmx的详细文档:
            https://docs.oracle.com/javase/1.5.0/docs/guide/management/agent.html
            
        
    Zabbix Proxy的配置:
        server-node-agent 
        server-proxy-agent
        
        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
            
        1000+5000=6000X100=60W/60s=10000/s
            
        调优:
            Database:
                历史数据不要保存太长时长;
                尽量让数据缓存在数据库服务器的内存中;
            触发器表达式:减少使用min(), max(), avg();尽量使用last(),nodata();
            数据收集:polling较慢(减少使用SNMP/agentless/agent);尽量使用trapping, agent(active);
            数据类型:文本型数据处理速度较慢;尽量少收集类型为text或string类型的数据;多使用类型为numeric的;
            
        zabbix服务器的进程:
            (1) 服务器组件的数量;
                alerter, discoverer, escalator, http poller, housekeeper, icmp pinger, ipmi polller, poller, trapper, configration syncer, ...
                
                StartPollers=60
                StartPingers=10
                ...
                StartDBSyncer=5
                ...
                
            (2) 设定合理的缓存大小 
                CacheSize=8M
                HistoryCacheSize=16M
                HistoryIndexCacheSize=4M
                TrendCacheSize=4M
                ValueCacheSize=4M
                
            (3) 数据库优化
                分表:
                    history_*
                    trends*
                    events*
                    
                
                
其它解决方案:
    
    grafana:展示
    collectd:收集
    influxdb:存储
    
    grafana+collectd+influxdb
    
    prometheus:
        exporter:收集
        alertmanager:
    grafana:展示
    

    openfalcon    
        
 

猜你喜欢

转载自blog.csdn.net/csdn_immortal/article/details/82799457