zabbix-进阶-3

发布时间:2019-09-18 07:26:13编辑:auto阅读(1612)

    第三章;发现,自动注册和web监控

    报警实现:应该使用专用的邮箱服务实现,使用专用的账号和密码

    :使用飞信机器人,使用脚本实现发信息

    action动作:conditionoperationremotecommandsend message

    item:数据项()-->mysql server保存在数据库中-->web gui

    key:是serveragent上获取数据时所需要的标记,

    //一个key可以生成多个item

    //用户参数,userParameter=<key[*]>,<command>

    //key也可以接受参数

    //keyitem并非是一一对应的

    trigger:激发动作,action//trigger定义某个item的阈值,key

    动作:condition条件,operation (remote command,send message)

    完整的监控:添加主机(主机组)-->添加item(内置的简单图形)--->trigger(event)-->

    action(发通知(通知信息中包括大量的宏)condition,operation(step)

    Item:自己建立的,

    trigger:定义一个合理的范围,超出阈值,就产生event(OK--->problem)

    action:可以是发信息,或者远程命令,一旦恢复后,还需要problem-->OK

      :通知信息大量使用宏,需要条件和操作  

    action:一个trigger未必就执行operation还要看条件,还需要满足condition才可以

    :在action.Operation中定义steps,定义step duratiion//报警升级的实现

    :在action.Recovery中没有steps

    trigger可以引起事件,但是必须满足action.condition才可以

    Media typeemailExternal Script,Jabber,SMS, //最常用的就是前两个,外部脚本可以实现调用外部的应用发送信息

    Meidagoogle_mail,our_mail等,媒介是具体的实体

    //itemtrigger是主机级别的,需要定义在主机或者木板上

    //action:不是在主机级别因为,当多个主机监控同一个指标的时候,可以定义一个action让多个主机上的同一个指标,同事报警,::可以定义多个主机监控同一个指标时的操作

    //action.condition可以定义 host.group,trigger,hosts等同时监控

    信息的发送目标:zabbix用户,每个用户的系方式,自定义发送的目标

    Graph将同一类的item数据项,展示在同一个图形中;

    screen:将多个graph,放在一个大屏幕中

    map:通过图形定义各个节点间的拓扑关系,地图

    Template批量监控每一个主机

    添加主机,直接把主机套用模板即可建议多做几个模板,每个模板只关注几个指标,然后

    添加主机的时候,只要多关联几个指标就可以了

    可以把一个主机关联多个模板,模板可以嵌套,模板和主机是同一个级别

    也可以定义itemapplicationtriggergraph

    discovery

    发现的方式:

    agent

    agentlesssshping//无代理方式

    SNMP

    JMX:专用于监控java虚拟机的环境,tomcat默认并不支持jmx,需要为toomcat添加特定的类,官网下载,安装,重启 //假如只监控tomcat的连接数,正在打开的网页数,就不在需要JMX 脚本即可

    zabbix的网络发现功能可基于如下信息进行

    IP range

    根据服务(FTPSSHWEBPOP3IMAPTCP

    zabbix agent发来的信息,agent可以

    SNMP代理实现

    Discovery过程阶段discovery-->action

    Discovery中的事件:

    service upservice down

    host up,host down

    service discovered,service lost

    host discovered,host lost

    action{condition,operation}添加主机,关联模板

    sending notification:发送通知

    adding/removing hosts:添加或者删除主机

    adding hosts to a group:添加主机到组

    Enabling /disabled hosts:激活或者失效一个组

    removing hosts from a group

    linking hosts to/unlinking from a template

    remote scripts

    网络发现中添加时会自动创建interface
    1.the services detected //例如基于SNMP检测成功,则会创建SNMP借口

    2.如果某服务同时响应了agentsnmp则,会创建两种接口

    3.如果同一种发现机制(如agentd返回非唯一数据,第一个接口为默认,其他的额外接口

    4.即便是某主机开始时只有agent接口,后来又通过SNMP发现了它,同样会为其添加额外的SNMP借口

    5.不同主机-返回相同的数据,则第一个主机将被添加,余下的主机会被当做第一个主机的额外借口


    实验:自动发现,环境:zabbix_server,另外一台主机,新建立的主机,

    //server200client101server指定为serverzabbix-agent启用

    1.新建模板

    test template

    Test  group //组名

    //不在模板中定义,discovery,在其他地方定义

    2.创建item--trigger--graph

    //agentdagent.conf上有:UserParameter=memory.usage[*],/bin/cat /proc/meminfo | awk '/^$1:/{print $$2}' 这个记录,建议在server上使用agent-get命令测试效果

    //zabbix_get -s 10.0.0.101-k "agent.ping" //是一个key,对方的一个key

    创建3item

    //确保itemkey能够使用

    memory.usage[MemAvailable]  //*1024

    memory.usage[MemFree]//*1024

    memory.usage[Active]//*1024

    memory.usage[Inactive]//*1024

    创建trigger

    Name : free memory too low

    SeverityHigh //high级别的报警

    Expression:

         Item:test-template: memory.usage[MemFree]

         FunctionAverage value of a period T is < N

         Last off(T) : 30 //最后30s的平均值,小于51M

         TIme shift:

         N:  51200 //51M小于51M为阈值,默认单位为k

    OK event generationNone //不会附带产生其他的问题

    创建 graph

    Namemem-usage-depaly

    3.配置configuration->discovery--->create discovery //discovery创建

    Namelinux_in localhost

    DIscover by proxy No proxy

    ip range : 10.0.0.100-10.0.0.101  //自己的ip也要包含在内

    Delay (in sec) :120 //延迟

    check New:

    check type: zabbix agent

    key:memory.usage[MemFree]//这里的key是作为辅助手段,添加主机

    //这里的discovery只能发现,但是发现完以后,选哟action

    Device uniqueness criteria:IP address设备的唯一标识符为IP

    4.配置action //discovery只能发现,但是发现之后做什么,他们并不知道

    configuration--action-event source{discovery}---create action

    action:

    name:auto discovery linux in localnet

    conditionHost IP.:10.0.0.100-10.0.0.101 //当满足条件的时候,才会添加到进来

    Discovery status = Discovered //当状态是发现的时候,才会添加

    Discovery rule = linux_in_localhost //这个条件是discovery中定义的

    operation

    Add host

    Link tooard templates test server/test template

    //monitoring--dashboard上,可以看到有没有主机发现

    果:能够发现主机,但是不能够检测其状态

    5.//创建tom,加入CTO组,tom可以接受,任何类别的邮件

    Send totom@localhost //servertom这个系统用户

    创建mediaadministrator--media types-->创建新的media types

    创建user groupadministrator-users-create users groups

    创建user

    user:加入刚创建的组

    media

    typelocal media find

    send totom@localhost

    //serveruseradd tom ,添加用户tom

    排错:主要基于,configuration{hosts,actions,discovery}

    注意:一定要查看是否configuration-hosts有自定义的itemriggers

    //问题,只能在dashboard上看到有主机存活,但是不能添加到host

    //最终新开启了一台主机后,自动发现成功

    //解决方法:action中的conditionDiscovery status = Discovered删除即可解决

    //因为这个是已经发现很久了,然后状态已经发生改变了,不是discovered的了

    //重新启动,

    //错误zabbix_get [43432]: Get value error: cannot connect to [[10.0.0.101]:10050]: [113] No route to host

    [root@localhost ~]# zabbix_get -s 10.0.0.101 -k "memory.usage[MemFree]"

    方法:iptable -F //关掉防火墙即可

    6.定义另外一个actionauto_remove

    createa actions

    name remove host

    conditionshost ip 10.0.0.100-102

     Discovery status = Lost  

    Operationsremove host

    //agentsystemctl  zabbix-agent stop 停止该服务即可

     

    步骤小结:

    创建模板(item,trigger,graph)----创建discovery-----创建action

     

     

     

    问题:

    自动remove没有

     

    Agent自动注册:

    1.Zabbix支持active agent的自动注册(auto-resistration)功能,通常用于此前agent失效后的重新上线

    2.也可基于active  agent的自动注册机制添加被动检测,这会通过active agent注册时提供的“listen IP

    listen port进行

    3.Server端在收到自动注册请求以后以接受到的IPPort为接口属性

    网络发现:配置active agent自动注册

    Configuration--actions--Event sourceatuo registration--create action

    Actionadd host/link to template   

    Condition

    Operation:只用定义operation,无需定义condition

    此外:配置agent的工作属性,并重启agent

    Zabbix-agentd..conf

    ServerActive=172.16.100.15 //指向server

    //以后

    //然后在这里service agent stop

     

     

    Web监控:

    1.创建步骤的web监控需要先定义一个web方案(scenarios

    Web方案包括一个或多个HTTP请求或“步骤{step}}

    步骤{step}的执行过程按照预先定义的顺序进行执行

    2.通过web监控可以获取一下信息

    整个web方案中,所有step的平均下载速度

    失败的step

    失败的报错信息

    3.web方案的具体step中,可以按需使用如下信息

    step的下载速度

    回应时间

    回应状态码

    4.zabbix可以检测 获取到的HTML页面中是否包含预设的字符串,也可以实现登录和页面点击

    实现:

    1.创建两个页面 1.html,cp /var/log/message /var/log/www/html/2.html
    chmod  644 /var/ww/html/*.html

    2.创建一个新的applicationname web-test

    Configuration---hosts--web:选中web

    Scenario

    Steps:  //URL写对,required codes200即可

    Authentication

    //monitoring中可以看到

    //Scenario自动创建的item

    web.test.in[Scenario,,bps],下载速度

    web.test.fail[Scenario],失败步数

    web.test.error[Scenario],最后一次错误码

    但是假如需要自定义的话,调用的话,需要替换Scenario为自己定义的web名字

    例如:创建触发器:

    {host.web.test.fail[www.magedu.com].last(0)}#0 //最后一个错误码不为0#不等于0,证明失败了

    {host:web.test.in[www.magedu.com].last(0)}<10000 //

    //step 自动创建的items

    web.test.in[Scenario,Step,bps],下载速度

    web.test.time[Scenario,Step] 响应时间

    web.test.error[Scenario,Step],返回码,第几个页面的返回码

    {zabbix:web.test.time[www.magedu.com,Home].last(0)}>3

    //configuration-host--trigger自定义trigger的的时候:Expression中可以看到web自动创建的item

    举例:

    Item10.0.0.101: Response code for step "1.html" of scenario "web-test

    FunctionLast most recentT value is > N

    N3//响应的时间的阈值为3s

     

    第四章:

    Zabbix分布式监控

    上千台主机,多个proxy汇总消息,然后汇总到server

    Zabbix的三种架构

    Server--agent

    Serer-node-agent //早期的了

    Server-proxy--agent //zabbix1.8之后使用了proxy

    Proxy or Node?

    代理proxy用于本区域数据收集,并将数据发送给server//不分析,不监控,也不展示

    节点node提供完整的Zabbix server用以建立分布式监控中的层级

    //node是一个完整的监控平台,可以直接在node上直接web



    wKioL1gmminBJ5R8AAEpeatxJ80935.png-wh_50


    Maintenance:维护 //centralised集中化,//embedded嵌入式

    Proxy不提供GUI,但是node

    Node需要手动创建DB,但是proxy是在server

    //proxy的数据采集,是从server拿到以后自行创建的

    Centralised configuration:集中化管理,proxy可以实现,Node需要单独配置每一个node需要单独监控的对象

    Proxy node对比

    1.node本身是一台server,它有完整的web页面,完整的数据库,它将数据源源不断传送给Master

    2.Proxy只有一个proxydaemon进程,Proxy也有自己的数据库,但它的数据库只会保存一定的时间的数据,它与Master通信是将一批信息打包后发送到MasterMaster讲这些数据mergeMaster数据库

    3.Mater-Proxy相比Master-Node的优点,

    1.Proxy压力小,数据库之存储一定时间的数据

    2.Master压力变小,数据不是源源不断获取,减小IO压力

    3.架构更清晰,易维护

    //DB,web,master压力,发送数据:{不断发送|打包发送}

    //proxy的话:只需要导入schema.sq,而不需要导入data.sql,p_w_picpath.sql

    :不需要自己配置,从server上复制配置,只负责保存一段时间的数据,过一阵把数据打包发过去即可

    //node的话,三个数据库都要导入,需要安装web界面,还需要自己配置自己安装哪些界面

    Frontend:前端,用户通过前段查看数据

    Server-Proxy-CLient模型

     

    //node:独立配置,独立DB,独立frontendmaster只负责把其汇总即可


    wKioL1gmmiqTNO5vAANFv3iouOw231.png-wh_50


    Server:也需要收集node的配置信息,在node上修改的configuration必须要同步到server

    Server-Node-client特性:

    1.解决host过多时单台Server面临性能瓶颈,使用多个instance(每个node),每个instance都是一个独立的zabbix

    2.支持热插拔,nodeserver的连接可以随时断开,但不影响node的正常运行

    3.Node定时给Server发送configurationhistoryevent

    4.Server定时给Node发送configuration //Nodeserver需要定时同步配置等信息

    5.所有配置变更只有在Node节点操作,不能再Server操作

    6.支持树状结构,Node又可以是个Server

    //6.意思是,node可以继续分封,自己的子child,然后自己成为server,但是自己又是一个node

    Server-Proxy-Client模型:轻量级

    Proxy没有独立的配置文件,需要从server上,获取server指定给自己监控的hostitem

    周期性的定期发送给server,由server保存在server.DB

    Proxy不会向Server同步configuration,只会接受

    Proxy的数据库定时会将数据传送给ServerProxy本地数据库只保存最近没有发送的数据

    //已经发送的数据不再保存

    wKiom1gmmiuAM13HAALE7ymi9rE594.png-wh_50

     

    Zabbix Proxy的功能:

    1.监控远程区域

    2.监控那些具有非可靠通信的位置

    3.减轻server的压力

    4.分布式维护

    注意:

    1.zabbix proxy必须使用一个单独的数据库,就算是放在同一个主机上,也已定不能喝server使用同一个数据库

    2.proxy指向zabbix server的数据库会破快配置信息

    Zabbix的特性:

    ProxyLocalBufferProxyOfflineBuffer//负责配置数据保存多长时间

    Proxy仅仅是一个数据收集器,不分析,不处理事件,活着发送报警信息

    wKiom1gmmiyTuggtAAGgAwgGofw189.png-wh_50

     

    实验:zabbix-proxy实现

    //ntpdate 10.0.0.1时间一定要一致

    Server200 proxy100agent:141//53监控141

     Proxy:只需要安装:zabbix-proxyzabbix-proxy-MySQLzabbix-agentzabbix

    1.Proxy:proxy暂时不安装agent

    安装mysql,创建database:库名,随便起,例如:zabbix_proxy,

     create database zabbix_proxy default character set utf8;

    Grant all  on zabbix_proxy.*  to zbproxy@10.0.0.% identifide by zbproxy

     insert into mysql.user(host,password,user) value ('10.0.0.*',password('zbproxy'),'zbproxy');

    mysql -uzbproxy -pzbproxy -h10.0.0.53 //测试结果

    Flush privileges

    //yum install http://mirrors.163.com/centos/7/extras/x86_64/Packages/epel-release-7-5.noarch.rpm

    Yum install zabbix-proxy zabbix-proxy-mysql //安装zabbix-proxy,会有依赖,使用yum安装

    //rpm -ql zabbix-proxy-mysql,需要导入数据库

    Mysql :只需要导入schema.sql即可

    mysql -uzbproxy -pzbproxy -h10.0.0.53 zabbix_proxy < /usr/share/doc/zabbix-proxy-mysql-2.4.8/create/schema.sql

    //导入数据库

    2..proxyvim /etc/zabbix/zabbix_proxy.conf

    [root@localhost yum.repos.d]# grep -v  "^#" /etc/zabbix/zabbix_proxy.conf | grep -v "^$"

    Server=10.0.0.200,172.16.1.1 //允许来拉取数据的主机的IP地址

    ServerActive=127.0.0.1,172.16.1.1

    //主动通知来拉取数据的主机的IP地址(只有serveragent在同一主机时才有127.0.0.1

    Hostname=server.zhou.com  //需与主机名保持一致

    这个配置和该机器实际的主机名没有关系,但必须和zabbix server中添加该机器的时候的主机名一致,否则zabbix server获取不到信息

    Hostname=10.0.0.53 //这个将会被server识别

    DBHost=10.0.0.53

    DBName=zabbix_proxy

    DBUser=zbproxy

    DBPassword=zbproxy

    ConfigFrequency=1  //zabbix proxy向服务器检索配置数据信息的频率,

    DataSenderFrequency=60 //zabbix proxy发送收集的数据给zabbix server的频率tart zabbix-proxy

    netstat -tunlp | grep zabbix  //它也监控在server上,因为他自己也相当于server端,在被动模式下,该参数将来被忽略

    3agent.

    Yum -y install zabbix-agent //安装agent

     vim /etc/zabbix/zabbix_agentd.conf

    Server 指向proxyip,而不是server

    ServerActive指向proxyip,而不是server

    Hostname

    UserParameter=test.Mem[*],/usr/bin/cat /proc/meminfo | awk '/$1:/{print $$2}' //提供测试用

    systemctl enable zabbix-agent

     systemctl start zabbix-agent

     

    4.server 上添加被监控主机,

    首先得让server知道有一个proxy

    Administration--proxy--create proxy

    Proxy name: 尽量使用ip,除非能够解析到主机

    Proxy mode:

    Active:proxy主动到server拉取配置文件 ,一般使用

    Passive:等到server想自己发发送配置文件

    Host:不要添加其他主机

    proxy上测试agent错误:

    [root@localhost yum.repos.d]# zabbix_get -s 10.0.0.141 -k "test.if"

    zabbix_get [21365]: Get value error: cannot connect to [[10.0.0.141]:10050]: [113] No route to host

    解决方式: //很有可能是虚拟机的问题

    1.iptables -Fiptables-save

    2.Setenforce 0

    3.Shutdown -h now

    4.Pkill zabbix-agent ;systemctl restart zabbix-agent

     

    然后,添加被监控主机:create hosts

    Host name:10.0.0.141

    Visible name:agent-141

    New group:proxy-discovery:1

    Agent interfaces:10.0.0.141

    Monitored by proxy:10.0.0.53 //53代为监控

    //monitoring--Dashboard上的Hosts tatus上看结果,就能发现已经能够检测得到

    创建一个item进行测试:

     

     

    注意事项:

    //tail /var/log/zabbix/zabbix_proxy.log    //随时查看日志

    1.proxy的配置文件的Hostname=   //必须和Administrator--proxy中定义的主机名一致

    2.通过agentserverserver active都需要指定为proxyip

    3.加快serverproxy的同步
    zabbix-proxy.conf //配置文件

    ConfigFrequency=1 //拉取配置文件,默认是3600s

    DataSenFrequency=1 //默认是1s

    ProxyLocalBuffer=0  //本地数据保存多长时间,0:不保存

    ProxyOfflineBuffer=1 //proxy联系不到server后数据保存多长时间,1:1小时

    //agent上有自定义监控mysqlUserParameter

    ///etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf

    项目案例:

    wKioL1gmmi3yG1vfAAEnFxlVAtQ330.png-wh_50

     

    ConfigFrequency=300  DataSenderFrequency=60  //只需要在proxy上配置

    Zabbix-server上需要的操作:添加proxy,添加host.proxy为主动模式,

    Agent上修改配置后,需要重启agent服务

    关键是在zabbix server的前端创建代理节点的名字时,该名字应和zabbix代理配置文件中指定的Hostname值相同 .配置zabbixproxy的配置文件zabbix_proxy.conf

    该文件中有两个重要的参数:

    ConfigFrequency=60      #zabbix proxy 向服务器检索配置数据信息的频率,在被动模式下该参数将被忽略

    DataSenderFrequency=60  #zabbix proxy发送收集的数据给zabbix server的频率

     

    配置完毕

    现在server上,建立proxy,然后建立host.proxy

     

    问题:serverproxy上获取不到agent的数据

    1.server端与proxy端时间不同步  //ntpdate 120.25.108.11

        2.server端分配的缓存不够

        3.server端分配的线程不够

        4.server端负载比较大{CPU,IO,MEM}

    1.查看zabbix_server有没有出现 Zabbix poller processes more than 75% busy 告警

    2.htop iotop iostat  //查看服务器的负载情况

    3.  vim /usr/local/zabbix/etc/zabbix_server.conf

            StartPollers=500

            StartPollersUnreachable=50

            StartTrappers=30

            StartDiscoverers=6

            CacheSize=1G

            CacheUpdateFrequency=300

            StartDBSyncers=20

            HistoryCacheSize=512M

            TrendCacheSize=256M

            HistoryTextCacheSize=80M

            ValueCacheSize=1G

    4.  crontab -e

            */3 */1 * * * /usr/sbin/ntpdate -u 202.120.2.101 &> /dev/null

    重启server端和proxy服务

     


    两个问题:

    1.Too many processes on Zabbix server

    2.Serverproxy上获取不到数据  //agentserver指向proxy

    3.报警机制的实现

    4.Zabbix-node-agent实现

    Proxy常见问题:

         1.proxyHostnameserverweb里面配置的名称不一样。这样一定要注意了无论是proxyserver  还是agentserver  Hostname都要相同的

     

    附件:zabbix_proxy.conf文件详解

    1.ProxyMode=0  //0位默认,主动,1位被动

    2.Server=IP地址  #说明:此参数用于设置zabbix ServerIP地址。在主动模式下,二级代理将采集到的数据传送到此IP所在服务端。#但被模式下,此参数被忽略

    3.#说明:system.hostnameZABBIX内置的一个自动获取主机名的方法,为了方便配置,建议打开此参数而关闭Hostname参数#

    4. HostnameItem=system.hostname //system.hostnameZABBIX内置的一个自动获取主机名的方法,为了方便配置,建议打开此参数而关 闭Hostname参数#

    5.LogFileSize=1 //当日志文件达到多少M时便轮转并自动覆盖

    6. StartPollersUnreachable=1 //说明:用于设置诸如SNMP STRAPPER场景提交来的数据的接收进程数,若客户机SNMP TRAPPER技术较多,建议加大此参数值

    7.//http://www.bkjia.com/xtzh/926118.html   地址

     

    //serverproxy上接受不到信息的解决

    注:在server上添加proxy后,server才能收到配置信息

    //tail /var/log/zabbix/zabbix_proxy.log  这样才能收到 消息

    然后会自动建立一条

    wKioL1gmmi2yQfjdAAANWWGlBY4295.png-wh_50

     

    Agent

    Server:为proxy

    Serveractive:为proxy

    Proxyserverzabbix.server

    /etc/zabbix/proxy/zabbix_proxy.conf

    Server:zabbix-serverip

    /etc/zabbix/proxy/zabbix_agent.conf

    Server

    Server.active  //都是zabbix--serverip地址

    //需要说明的是,理论没有问题,只是虚拟机的问题

     


关键字