Bootstrap

zabbix的原理详解及其搭建

 

 

 

一.Zabbix简介   

Zabbix 是一款功能强大的分布式开源监控系统,线上用的也比较多,个人感觉是cacti和nagios的整合,又天生自带分布式监控,大批量主机运维监控优势明显

 

       zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

       zabbix由zabbix server与可选组件zabbix agent两部门组成。

       zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视。

       zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

 

Zabbix 通过 C/S模式采集数据,通过B/S模式在web端展示和配置。

被监控端:主机通过安装 agent 方式采集数据,网络设备通过SNMP方式采集数据

Server 端:通过收集SNMP和agent发送的数据,写入数据库(MySQL,ORACLE等),

再通过 php+apache 在 web 前端展示

 

zabbix的主要特点:

          - 安装与配置简单,学习成本低

          - 支持多语言(包括中文)

          - 免费开源

          - 自动发现服务器与网络设备

          - 分布式监视以及WEB集中管理功能

          - 可以无agent监视

          - 用户安全认证和柔软的授权方式

          - 通过WEB界面设置或查看监视结果

          - email等通知功能

         等等

 

 

Zabbix主要功能:

         - CPU负荷

         - 内存使用

         - 磁盘使用

         - 网络状况

         - 端口监视

         - 日志监视

Zabbix运行条件:

  Server:Zabbix Server需运行在LAMP(Linux+Apache+Mysql+PHP)环境下,对硬件要求低。

  Agent:目前已有的agent基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows。

  SNMP:支持各类常见的网络设备

1.2 Zabbix功能

 具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库性能监控、FTP等通用协议监控、多种告警方式、详细的报表图表绘制) 支持自动发现网络设备和服务器;支持分布式,能集中展示、管理分布式的监控点;扩展性强,server提供通用接口,可以自己开发完善各类监控。

1.3 优劣势

  优点:开源,无软件成本投入;Server对设备性能要求低(实际测试环境:虚拟机CentOS5,2GCPU 1G内存,监控5台设备,CPU使用率基本保持在10%以下,内存剩余400M以上);支持设备多;支持分布式集中管理;开放式接口,扩展性强。

  缺点:中文资料较少。

 

官方也提供了安装资料:http:///wiki/howto/monitor

 

 

 

默认的用户名为 admin,密码是zabbix

使用 zabbix 进行监控之前,要理解zabbix监控的流程。

一次完整的监控流程可以简单描述为:

Host Groups(设备组)->Hosts(设备)->Applications(监控项组)->Items(监控项)->Triggers

(触发器)->Actions(告警动作)->Medias(告警方式)->User Groups(用户组)->Users

(用户)

 

 

1.Server
zabbix系统核心进程,轮询并捕获数据、发送通知等。是zabbix agent和zabbix proxy汇报数据的对象。server自身可远程检测网络服务。所有的前后端配置、统计信息、可操作数据存储于此。包含server、前段界面和后端DB几部分。

2.Agent
部署在被监控主机上用于监控本地资源和应用并向zabbix server汇报结果。使用本地系统调用故非常高效。

 

2.  有主动和被动两种检测模式。被动模式下agent根据server或proxy的具体请求来返回数 据。主动模式下先主动由server获取监控项列表在检测并返回新的数据。采用主动或被动检测取决于相应监控项的配置。angentd 的作用就是获取 host 数据,然后将收集到的数据发送给 server(主动模式)。或者是server 主动来拿取数据(被动模式)。

3.Proxy
可以自由选择部署或者不部署,主要用于分担server的负载。在集中化监控远程位置、分支、网络的场景中是很好的解决方案。可从被监控设备收集数据缓存在proxy本地后传递给其所属的zabbix server。proxy需要单独的数据库。

host
需要被监控的设备,如交换机、路由器、WEB服务器、DB服务器等

host group
被监控设备的逻辑分组,如DB服务器一组、WEB服务器一组等。可包含主机和模板。用于权限控制

item
需要被监控的项,如CPU空闲率、某一块磁盘的使用率等

trigger
用于评估收到的监控值是否超出设定的阈值的逻辑表达式

event
如trigger状态改变等值得注意的事件

action
预先定义的响应event的一系列operations

escalation
执行action中的operations的定制场景;一连串的发送通知、执行远程命令

media
传递notification的方式

notification
通过media发送给用户的关于某个event的消息

remote command
在被监控机器上触发并自动执行的预定义命令

template
用于简化和加速主机上大规模监控任务的部署。包含一系列项目,如items, triggers, graphs, screens, applications, low-level discovery rules

application
逻辑组中的一组items

web scenario
一个或多个HTTP request用以检查web站点可用性

frontend
zabbix的web界面

zabbix api
允许通过JSON RPC 协议创建、更新和获取zabbix对象如,hosts, items, graphs and others。或者执行其他任务

zabbix server
zabbix核心,履行监控,与zabbix proxies、zabbix client交互、计算trigger、发送notification、存储数据等任务

zabbix agent
部署在被监控主机上用于监控本地资源和应用

zabbix proxy
可代zabbix server收集数据分担处理负载

 

zabbix的配置文件一般有三种:
zabbixserver的配置文件zabbix_server.conf
zabbixproxy的配置文件zabbix_proxy.conf
zabbix_agentd的配置文件zabbix_agentd.conf

 

1.                  zabbix       server的配置文件:

NodeID=0 #分布式节点id号,0代表是独立服务器,默认是被注释掉的,不强制配置
ListenPort=10051 #zabbix server的端口,默认是10051,可以自行修改,
范围是1024-32767 ,一般默认即可
SourceIP=  #连接的源ip地址,默认为空,默认即可
LogFile=/tmp/zabbix_server.log #日志文件的存放位置
LogFileSize=1 #日志文件的大小,单位为MB,当设置为0时,表示不仅行日志轮询,
默认设置为1,默认即可
DebugLevel=3 #指定调试级别,默认即可
PidFile=/tmp/zabbix_server.pid #pid文件的存放位置
DBHost=localhost #数据库主机名,当设置为localhost时,连接mysql通过sock
DBName=zabbix #指定存放zabbix数据数据库的名字
DBUser=zabbix #指定连接数据库的用户名
DBPassword=123456 #用户连接数据库需要的密码
DBSocket=/var/lib/mysql/mysql.sock #前文主机设置为localhost,用户
连接数据库所用的sock位置,
DBPort=3306 #数据库的端口号,当用sock连接时,无关紧要,当通过网络连接时需设置
StartPollers=5 #默认即可
StartIPMIPollers=0 #使用IPMI协议时,用到的参数
StartTrappers=5 #打开的进程数,
StartPingers=1 同上
StartDiscoverers=1
StartHTTPPollers=1
JavaGateway=127.0.0.1 #JavaGateway的ip地址或主机名
JavaGatewayPort=10052 #JavaGateway的端口号
StartJavaPollers=5 #开启连接javagatey的进程数
SNMPTrapperFile=/tmp/zabbix_traps.tmp
StartSNMPTrapper=0 #如果设置为1,snmp trapper进程就会开启
ListenIP=0.0.0.0 #监听来自trapper的ip地址
ListenIP=127.0.0.1
HousekeepingFrequency=1 #zabbix执行Housekeeping的频率,单位为hours
MaxHousekeeperDelete=500 #每次最多删除历史数据的行
SenderFrequency=30 #zabbix试图发送未发送的警报的时间,单位为秒
CacheSize=8M #缓存的大小
CacheUpdateFrequency=60#执行更新缓存配置的时间,单位为秒数
StartDBSyncers=4
HistoryCacheSize=8M
TrendCacheSize=4M
HistoryTextCacheSize=16M
NodeNoEvents=0
NodeNoHistory=0
Timeout=3
TrapperTimeout=300
UnreachablePeriod=45
UnavailableDelay=60
UnreachableDelay=15
AlertScriptsPath=/usr/local/zabbix/shell #脚本的存放路径
FpingLocation=/usr/local/sbin/fping #fping指令的绝对路径
SSHKeyLocation=
LogSlowQueries=0
TmpDir=/tmp
Include=/usr/local/etc/zabbix_server.general.conf
Include=/usr/local/etc/zabbix_server.conf.d/ #子配置文件路径
StartProxyPollers=1 #在zabbix proxy被动模式下用此参数
ProxyConfigFrequency=3600#同上
ProxyDataFrequency=1

 

 

 

 

 

                     Zabbix      agentd的配置文件


PidFile=/tmp/zabbix_agentd.pid #pid文件的存放位置
LogFile=/tmp/zabbix_agentd.log #日志文件的位置
LogFileSize=1 #当日志文件达到多大时进行轮询操作
DebugLevel=3 #日志信息级别
SourceIP= #连接的源ip地址,默认为空,即可
EnableRemoteCommands=0 #是否允许zabbix server端的远程指令,
0表示不允许,
1表示允许
LogRemoteCommands=0 #是否开启日志记录shell命令作为警告0表示不允许,1表示允许
Server=127.0.0.1 #zabbix server的ip地址或主机名,可同时列出多个,需要用逗号隔开
ListenPort=10050 #zabbix agent监听的端口
ListenIP=0.0.0.0 #zabbix agent监听的ip地址
StartAgents=3 #zabbix agent开启进程数
ServerActive=127.0.0.1 #开启主动检查
Hostname=Zabbix server#在zabbix server前端配置时指定的主机名要相同,最重要的配置
RefreshActiveChecks=120 #主动检查刷新的时间,单位为秒数
BufferSend=5 #数据缓冲的时间
BufferSize=100 #zabbix agent数据缓冲区的大小,当达到该值便会发送所有的数据到zabbix server
MaxLinesPerSecond=100 #zabbix agent发送给zabbix server最大的数据行
AllowRoot=0 #是否允许zabbix agent以root用户运行
Timeout=3 #设定处理超时的时间
Include=/usr/local/etc/zabbix_agentd.userparams.conf
Include=/usr/local/etc/zabbix_agentd.conf.d/ #包含子配置文件的路径
UnsafeUserParameters=0 #是否允许所有字符参数的传递
UserParameter= #指定用户自定义参数

               

 

               Zabbix         proxy的配置文件

Server=192.168.70.133 #指定zabbix server的ip地址或主机名
Hostname=zabbix-proxy-1.35 #定义监控代理的主机名,需和zabbix server前端配置时指定的节点名相同
LogFile=/tmp/zabbix_proxy.log #指定日志文件的位置
PidFile=/tmp/zabbix_proxy.pid #pid文件的位置
DBName=zabbix_proxy #数据库名
DBUser=zabbix #连接数据库的用户
DBPassword=123456#连接数据库用户的密码
ConfigFrequency=60 #zabbix proxy从zabbix server取得配置数据的频率
DataSenderFrequency=60 #zabbix proxy发送监控到的数据给zabbix server的频率

 

 

默认开启 ,现在关闭   server5/6

 

 

 

/etc/init.d/gmetad  stop

   chkconfig gmetad off

   /etc/init.d/gmond  stop

   chkconfig gmond off

   netstat  -antlp

 

 

Zabbix 需要 lamp环境

 

 

 

 

 

                                zabbix

 

server5   zabbix-server

 

安装套件   yum install -y fping-2.4b2-16.el6.x86_64.rpm

                 iksemel-1.4-2.el6.x86_64.rpm

iksemel-utils-1.4-2.el6.x86_64.rpm

php-bcmath-5.3.3-26.el6.x86_64.rpm

php-mbstring-5.3.3-26.el6.x86_64.rpm

zabbix-2.4.5-1.el6.x86_64.rpm

zabbix-agent-2.4.5-1.el6.x86_64.rpm

zabbix-get-2.4.5-1.el6.x86_64.rpm

zabbix-server-2.4.5-1.el6.x86_64.rpm

zabbix-server-mysql-2.4.5-1.el6.x86_64.rpm

zabbix-web-2.4.5-1.el6.noarch.rpm

zabbix-web-mysql-2.4.5-1.el6.noarch.rpm

server6     zabbix-agent

 

scp zabbix-2.4.5-1.el6.x86_64.rpm  zabbix-agent-2.4.5-1.el6.x86_64.rpm  [email protected]:/root

yum install zabbix-2.4.5-1.el6.x86_64.rpm  zabbix-agent-2.4.5-1.el6.x86_64.rpm -y

 

 

 

server5

 

/etc/init.d/mysqld  start    (失败时:  rm -f /var/lib/mysql/mysql.sock )

 cd /var/lib/mysql/

mysql -uroot  -pwestos

 

 create database zabbix character set utf8 collate utf8_bin; 创建数据表

grant all privileges on zabbix.* to zabbix@localhost identified by 'westos';  给zabbix权限  并建立用户

  quit;

cd /usr/share/doc/zabbix-server-mysql-2.4.5/create/

   mysql -uzabbix -pwestos zabbix < schema.sql  请耐心等待

   mysql -uzabbix -pwestos zabbix < images.sql

   mysql -uzabbix -pwestos zabbix < data.sql

cd /etc/zabbix/

 vim zabbix_server.conf

DBPassword=westos  107行 #指定zabbix数据库密码

 cd /etc/httpd/conf.d/

   vim zabbix.conf

 # php_value date.timezone Europe/Riga  28行   如果/etc/php.ini  改过了就不要动 。 应该Aisa/Shanghai

 

 

cd /etc/zabbix/

 

vim zabbix_agentd.conf

Hostname=server5.example.com  137 行

 

/etc/init.d/zabbix-server start

/etc/init.d/httpd  start

/etc/init.d/zabbix-agent start

 

server6

 cd /etc/zabbix/

   vim zabbix_agentd.conf

 Server=172.25.19.5  78行

ServerActive=172.25.19.5  129 行

Hostname=server6.example.com  144行

   /etc/init.d/zabbix-agent  start

 

server 5

cd /etc/zabbix/

 vim zabbix_server.conf

#ServerActive=127.0.0.1 注释掉就不用自己向主机发送,hosts没有server5.example.com

 

StartDiscoverers=5  178行

/etc/init.d/zabbix-server restart

 

浏览 172.25.19.5/zabbix

usrname:  Admin    

password: zabbix

 

zabbix server 上激活 zabbix agent自动注册功能

点击 Configuration -> Actions -> Create action按下图所示设置

 

自定义 Action 的名字。

Conditions 选项卡保持默认即可。

Operations 选项卡添加如下:

 

 

Add host:自动注册主机添加到 hosts列表

Add to host groups:自动注册主机加入 linux servers组(组名可以自定义)

Link to templates:自动注册主机应用模板 Template OS linux

点击 Configuration -> Hosts 可以看到新加的主机:

 

Zabbix 的更多功能值得大家一起研究和分享。

来看看 zabbix 是怎样添加服务监控项的,利用zabbix自带的监控模版,以http服务为例:

添加httpd

 

 

1. 点击 Configuration -> Templates 选择需要链接的模版

2. 

3. 选择需要链接的主机 server6example.com

4. 也可以在 Configuration -> Hosts -> server2.example.com -> Templates选择需要的模版

5. 

 

 

  yum install httpd -y

cd /var/www/html/

vim index.html

server6

 

/etc/init.d/httpd start

 

去图形界面添加该模块

 

 

 

添加 mysql

yum install -y mysql-server

/etc/init.d/mysqld start

 mysql -uroot  -pwestos

grant select on nagbd.* to fanan@localhost  identified by 'westos';

flush  privileges;

 

在/etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf文件中指定了zabbix agent如何获取mysql

服务的各种信息,并在/var/lib/zabbix目录中新建“.my.cnf”文件,用以指定zabbix agent 如何登陆数据库,默认使用的是zabbix用户,可以在zabbix_server.conf文件中找到密码。

mkdir /var/lib/zabbix

 cd /var/lib/zabbix/

vim .my.cnf

[mysql]

host = localhost

user = fanan

password = westos

socket = /var/lib/mysql/mysql.sock

[mysqladmin]

host = localhost

user = fanan

password = westos

socket = /var/lib/mysql/mysql.sock

 

 /etc/init.d/zabbix-agent restart

 

去图形界面添加该模块

链接 mysql 监控模版

 

 

点击 Configuration -> Hosts -> zabbix server Graphs可以看到两个新的监控图形

 

 

 

 

 

 

 

 

 

Email 报警

图形界面

 

点击 administration -> Media types -> Email

 

点击 Administration -> Users 进入 Admin 管理员Media选项卡

 

点击configuration -> Actions 点击Triggers  Enabled

 

QQ 邮箱做的实验,由于server5.example.com是没有域名解析的,会被QQ

邮箱挡掉,所以你需要设置 QQ 邮箱反垃圾白名单,把[email protected]发件地址加

入白名单。

 

关掉 httpd mysql ,看是否发短信

 

 

 

110monitor

tar zxf alert-agent-4.1.3.1-linux-x64.tar.gz -C /usr/lib/zabbix/alertscripts/

cd /usr/lib/zabbix/alertscripts/

 cp  alert-agent/plugin/zabbix-plugin/110monitor .

chown  -R zabbix.zabbix *

 

图形界面

点击 administration -> Media types ->create media types

 

点击 Administration -> Users 进入 Admin 管理员Media选项卡

 

点击configuration -> Actions 点击Triggers  create

关掉 httpd mysql ,看是否发短信

 

打开网页:110monitor.com

 

登陆  [email protected]    

      redhat007

 

 

OneAlert 文档 ->集成方法-> zabbix  ->通用性安装

 

 Server 7   zabbix-proxy

zabbix  proxy

Yum install  -y      zabbix-2.4.5-1.el6.x86_64

zabbix-proxy-2.4.5-1.el6.x86_64

zabbix-proxy-mysql-2.4.5-1.el6.x86_64

fping-2.4b2-16.el6.x86_64.rpm

yum install -y  mysql-server

 cd /etc/zabbix/

vim zabbix_proxy.conf

 [   server = 172.25.9.5

Hostname = server7.example.com

DBPassword=westos

 

Configfrequency=600

]

 

 

 

Mysql

create database zabbix_proxy  character set utf8 collate  utf8_bin;

grant all privileges on zabbix_proxy.* to zabbix@localhost identified by 'westos';

 mysql -uzabbix  -pwestos zabbix_proxy < schema.sql

/etc/init.d/zabbix-proxy start

 

 

Server6

Vim  /etc/zabbix/zabbix_agentd.conf

#severactive=172.25.9.5

Server=172.25.9.7

/etc/init.d/zabbix_agent restart

 

 

 

 

 

 

 

;