前言
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
zabbix组件主要分两个: zabbix-server和zabbix-agent。支持的监控协议有ICMP,IPMI,SNMP,HTTP以及zabbix协议(zabbix协议是最常使用的协议用来监控各被监控端)。
收集的数据存放在数据库中,数据库支持mysql,oracle等等。
第三个组件:zabbix web gui这个接口提供web页面来监控和管理各被监控端。
第四个组件:zabbix proxy(实现分布式监控专用组件非必要组件,被监控服务器超过一千以上可以使用此组件。)
本次实验逻辑架构如下
相关组件介绍
zabbix_get进程去客户端收集数据,
zabbix_agentd进程通过监听在一个套接字上接收
zabbix_get的请求,通过zabbix_sender将
数据收集发送给服务器端,数据保存在zabbix数据库中,
zabbix_get这种方法主要用于测试,通过写脚本或远程执行命令的方式。
zabbix server自己自动会周期性的去被监控端收集数据,收集哪些数据在服务器端事先定义。
zabbix server ,zabbix database,zabbix web gui 可以部署在一台服务器上,为了提升性能可以放在不同主机上。
zabbix一些常用术语
host(主机):要监控的网络设备,可由IP或DNS名称指定
host group(主机组):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用(大致了解下就可以了)。
item(监控项):这个从名字上可以理解,具体要监控哪些指标由它定义。
trigger(触发器):就是超过了定义的合理范围,这家伙就会报警。
event(事件):这都是触发器产生的。
action(动作):对事件如何应对,比如要执行哪些操作。
escalation(报警升级):如果在定义的5分钟没反应,从warning级别升到high级别,就是要提醒别人要尽快处理。
media(媒介):发送报警的手段和通道,如Email。
remote command(远程命令):预定义的命令,可在被监控主机处于某个特定条件下时自动执行。
template(模板):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至单个主机。(这个概念不理解不过没关系的,只要具体会怎么操作就可以了)
application(应用):一组item的集合。
以上术语的关系可以用下图表示(大致明白就行):
上图中的poller这个进程就是去各客户端获取数据的。
zabbix产生的数据主要由四部分组成:
配置数据(忽略)
历史数据:50bytes
历史趋势数据: 128bytes
事件数据:130bytes
历史数据:采样生成的数据
历史趋势数据:每小时的最大值、最小值、平均值、统计
通过对以上数据的计算,可以得出我们需要一个多大的zabbix数据库,来定制磁盘硬件。
具体算法:
假设有60000个监控项,那每秒中处理的数据就有60000/60=1000条
历史数据大小=天数X每秒钟处理的数据量X24X3600X50Bytes
趋势数据:
每一个趋势128Bytes,
大小=天数X监控项X24X128Bytes
事件数据:
每个占据130Bytes
大小:天数X86400X130(假设每秒中产生一个事件)
本次实验的zabbix软件版本
装下面这个版本,红框内选中的
http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/
实验所需机器3台,系统环境如下
3台机器,一台做zabbix-server,一台作为zabbix-agent,一台作为zabbix-proxy
[root@linux-node1 ~]# uname -rm 2.6.32-504.el6.x86_64 x86_64 [root@linux-node1 ~]# cat /etc/redhat-release CentOS release 6.6 (Final) [root@linux-node1 ~]#
安装zabbix相关包
复制链接地址,下载wget
noarch表明与处理器无关,src是源码包需要编译
执行如下命令,在Zabbix Server和Zabbix Agent上
mkdir /tools -p cd /tools/ wget http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm
查看这个包安装了哪些
[root@linux-node1 tools]# rpm -ql zabbix-release /etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX /etc/yum.repos.d/zabbix.repo /usr/share/doc/zabbix-release-2.4 /usr/share/doc/zabbix-release-2.4/GPL [root@linux-node1 tools]#
它创建了一个zabbix.repo文件
[root@linux-node1 tools]# cat /etc/yum.repos.d/zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=http://repo.zabbix.com/zabbix/2.4/rhel/6/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=http://repo.zabbix.com/non-supported/rhel/6/$basearch/ enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX gpgcheck=1 [root@linux-node1 tools]#
Zabbix Server服务器安装如下包
[root@linux-node1 tools]# yum install zabbix zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql zabbix-agent -y Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Package zabbix-2.4.8-1.el6.x86_64 already installed and latest version Package zabbix-server-2.4.8-1.el6.x86_64 already installed and latest version Package zabbix-web-2.4.8-1.el6.noarch already installed and latest version Package zabbix-server-mysql-2.4.8-1.el6.x86_64 already installed and latest version Package zabbix-web-mysql-2.4.8-1.el6.noarch already installed and latest version Package zabbix-agent-2.4.8-1.el6.x86_64 already installed and latest version Nothing to do [root@linux-node1 tools]#
由于Zabbix Server把数据存到mysql里,因此还需要安装mysql相关包
[root@linux-node1 tools]# yum install -y mysql-server mysql Loaded plugins: fastestmirror, refresh-packagekit, security Setting up Install Process Loading mirror speeds from cached hostfile Package mysql-server-5.1.73-8.el6_8.x86_64 already installed and latest version Package mysql-5.1.73-8.el6_8.x86_64 already installed and latest version Nothing to do [root@linux-node1 tools]#
启动mysqld
[root@linux-node1 tools]# /etc/init.d/mysqld start Starting mysqld: [ OK ] [root@linux-node1 tools]#
复制配置文件替换默认的
[root@linux-node1 tools]# cp /usr/share/mysql/my-medium.cnf /etc/my.cnf cp: overwrite `/etc/my.cnf'? y [root@linux-node1 tools]#
在[mysqld]模块最后加入字符集的相关参数
character-set-server = utf8 init-connect = 'SET NAMES utf8' collation-server = utf8_general_ci
加入之后如下
[mysqld] port = 3306 socket = /var/lib/mysql/mysql.sock skip-locking key_buffer_size = 16M max_allowed_packet = 1M table_open_cache = 64 sort_buffer_size = 512K net_buffer_length = 8K read_buffer_size = 256K read_rnd_buffer_size = 512K myisam_sort_buffer_size = 8M character-set-server = utf8 init-connect = 'SET NAMES utf8' collation-server = utf8_general_ci
重启mysql
[root@linux-node1 tools]# /etc/init.d/mysqld restart Stopping mysqld: [ OK ] Starting mysqld: [ OK ] [root@linux-node1 tools]#
登录mysql查看
[root@linux-node1 tools]# mysql Welcome to the MySQL monitor. Commands end with ; or g. Your MySQL connection id is 3 Server version: 5.1.73-log Source distribution Copyright (c) 2000, 2013, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or 'h' for help. Type 'c' to clear the current input statement. mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | test | +--------------------+ 3 rows in set (0.00 sec) mysql>
官网有关于Zabbix建库相关脚本
MySQL shell> mysql -uroot -p<password> mysql> create database zabbix character set utf8 collate utf8_bin; mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>'; mysql> quit; shell> mysql -uzabbix -p<password> zabbix < database/mysql/schema.sql # stop here if you are creating database for Zabbix proxy shell> mysql -uzabbix -p<password> zabbix < database/mysql/images.sql shell> mysql -uzabbix -p<password> zabbix < database/mysql/data.sql
建库和授权用户操作如下
mysql> create database zabbix character set utf8 collate utf8_bin; Query OK, 1 row affected (0.00 sec) mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix'; Query OK, 0 rows affected (0.00 sec) mysql> exit Bye [root@linux-node1 tools]#
导入脚本操作如下
[root@linux-node1 tools]# cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/ data.sql images.sql schema.sql [root@linux-node1 tools]# cd /usr/share/doc/zabbix-server-mysql-2.4.8/create/ [root@linux-node1 create]# ls data.sql images.sql schema.sql [root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <schema.sql [root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <images.sql [root@linux-node1 create]# mysql -uzabbix -pzabbix zabbix <data.sql [root@linux-node1 create]#
检查
[root@linux-node1 create]# mysql -uzabbix -pzabbix -e 'use zabbix;show tables;' +-----------------------+ | Tables_in_zabbix | +-----------------------+ | acknowledges | | actions | | alerts | | application_template | | applications | | auditlog | | auditlog_details | | autoreg_host | | conditions | | config | | dbversion | | dchecks | | dhosts | | drules | | dservices | | escalations | | events | | expressions | | functions | | globalmacro | | globalvars | | graph_discovery | | graph_theme | | graphs | | graphs_items | | group_discovery | | group_prototype | | groups | | history | | history_log | | history_str | | history_text | | history_uint | | host_discovery | | host_inventory | | hostmacro | | hosts | | hosts_groups | | hosts_templates | | housekeeper | | httpstep | | httpstepitem | | httptest | | httptestitem | | icon_map | | icon_mapping | | ids | | images | | interface | | interface_discovery | | item_condition | | item_discovery | | items | | items_applications | | maintenances | | maintenances_groups | | maintenances_hosts | | maintenances_windows | | mappings | | media | | media_type | | opcommand | | opcommand_grp | | opcommand_hst | | opconditions | | operations | | opgroup | | opmessage | | opmessage_grp | | opmessage_usr | | optemplate | | profiles | | proxy_autoreg_host | | proxy_dhistory | | proxy_history | | regexps | | rights | | screens | | screens_items | | scripts | | service_alarms | | services | | services_links | | services_times | | sessions | | slides | | slideshows | | sysmap_element_url | | sysmap_url | | sysmaps | | sysmaps_elements | | sysmaps_link_triggers | | sysmaps_links | | timeperiods | | trends | | trends_uint | | trigger_depends | | trigger_discovery | | triggers | | user_history | | users | | users_groups | | usrgrp | | valuemaps | +-----------------------+ [root@linux-node1 create]#
配置文件修改
修改apache相关配置
zabbix Server默认用的apache,安装Zabbix Server时,它自动帮我们装好了apache
修改apache配置文件里zabbix.conf文件的时区,并取消注释。这里可以vim修改,也可以采用sed替换
[root@linux-node1 conf.d]# cd /etc/httpd/conf.d/ [root@linux-node1 conf.d]# ls mod_dnssd.conf php.conf README welcome.conf zabbix.conf [root@linux-node1 conf.d]# grep -n timezone zabbix.conf 19: # php_value date.timezone Europe/Riga [root@linux-node1 conf.d]# vim zabbix.conf [root@linux-node1 conf.d]# grep -n timezone zabbix.conf 19: php_value date.timezone Asia/Shanghai [root@linux-node1 conf.d]#
查看下相关配置
[root@linux-node1 conf.d]# head -10 zabbix.conf # # Zabbix monitoring system php web frontend # Alias /zabbix /usr/share/zabbix <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Order allow,deny
看看都有哪些东西
到这个目录下ls一下,看到都是php代码。zabbix前端都是php写的
它的server端是c和c++写的
[root@linux-node1 conf.d]# cd /usr/share/zabbix/ [root@linux-node1 zabbix]# ls acknow.php chart.php index.php report5.php actionconf.php charts.php items.php report6.php adm.gui.php conf js robots.txt adm.housekeeper.php conf.import.php jsLoader.php screenconf.php adm.iconmapping.php dashboard.php jsrpc.php screenedit.php adm.images.php dashconf.php latest.php screens.php adm.macros.php discoveryconf.php locale scripts_exec.php adm.other.php discovery.php maintenance.php scripts.php adm.regexps.php disc_prototypes.php map.php search.php adm.triggerdisplayoptions.php events.php maps.php services.php adm.triggerseverities.php fonts media_types.php setup.php adm.valuemapping.php graphs.php overview.php slideconf.php adm.workingtime.php history.php popup_bitem.php slides.php api_jsonrpc.php host_discovery.php popup_httpstep.php srv_status.php applications.php hostgroups.php popup_media.php styles audio hostinventoriesoverview.php popup_period.php sysmap.php auditacts.php hostinventories.php popup.php sysmaps.php auditlogs.php host_prototypes.php popup_right.php templates.php authentication.php host_screen.php popup_trexpr.php tr_comments.php browserwarning.php hosts.php popup_usrgrp.php tr_events.php chart2.php httpconf.php profile.php trigger_prototypes.php chart3.php httpdetails.php proxies.php triggers.php chart4.php httpmon.php queue.php tr_logform.php chart5.php image.php report1.php tr_status.php chart6.php images report2.php tr_testexpr.php chart7.php imgstore.php report3.php usergrps.php chart_bar.php include report4.php users.php [root@linux-node1 zabbix]#
[root@linux-node1 conf.d]# /etc/init.d/httpd start Starting httpd: [ OK ] [root@linux-node1 conf.d]#
修改Zabbix Server默认配置文件
因为zabbix存mysql数据,所以要改下server端的配置文件,server端和mysql打交道
[root@linux-node1 conf.d]# cd /etc/zabbix/ [root@linux-node1 zabbix]# ls web zabbix_agentd.conf zabbix_agentd.d zabbix_server.conf [root@linux-node1 zabbix]# vim zabbix_server.conf
修改DBHost 和DBName
用户名和密码
通过浏览器安装配置zabbix-server
浏览器里输入如下链接
http://10.0.1.161/zabbix
看到如下界面进行安装
点击Finish自动跳转到了登录界面
默认的用户名是Admin,密码是zabbix
登录成功,第一件事就是改密码
zabbix server 还没运行,上面提示说明这个前端页面不仅仅访问数据库,还访问zabbix server
[root@linux-node1 zabbix]# /etc/init.d/zabbix-server start Starting Zabbix server: [ OK ] [root@linux-node1 zabbix]#
Zabbix Server本身也要监控自己
接下来运行一个agent端,先修改agent配置文件
vim /etc/zabbix/zabbix_agentd.conf
启动agent
[root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf [root@linux-node1 ~]# /etc/init.d/zabbix-agent start Starting Zabbix agent: [ OK ] [root@linux-node1 ~]#
zabbix的web界面介绍
一些仪表盘解释
Actions 是故障了要通知,怎么通知呢,在这里配置
比如配置发短信,发邮件,还能配置让它执行命令,比如reboot
screens是一些图片效果
slide shows是幻灯片,比如你有3个大屏,但是只有一个屏幕,你可以让它来回切换
Maps 你可以做一个架构图
Discovery 和自动化部署有关,
IT services :sla(SLA:Service-Level Agreement的缩写,意思是服务等级协议),比如我保证网站可用率 99%。(管理体系相关)你今年的sla达标了么等
[root@linux-node1 ~]# netstat -lntp |grep 100 tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 5846/zabbix_agentd tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 5692/zabbix_server tcp 0 0 :::10050 :::* LISTEN 5846/zabbix_agentd tcp 0 0 :::10051 :::* LISTEN 5692/zabbix_server [root@linux-node1 ~]#
也可以使用lsof命令查看
[root@linux-node1 ~]# lsof -i:10050 COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME zabbix_ag 5846 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5846 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5848 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5848 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5849 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5849 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5850 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5850 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5851 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5851 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5852 zabbix 4u IPv4 24785 0t0 TCP *:zabbix-agent (LISTEN) zabbix_ag 5852 zabbix 5u IPv6 24786 0t0 TCP *:zabbix-agent (LISTEN) [root@linux-node1 ~]# lsof -i:10051
JMX 监控jvm的
IPMI监控硬件的。监控IPMI性能比较差,经常获取不到数据
监控项多了可能会慢,比如监控一项。温度,就不用监控风扇了。风扇不转了温度肯定上来了
Proxy:表示zabbix支持分布式的。
enabled勾选的话,表示打开监控。监控Zabbix Server,也可以不勾选,返回界面之后点击Enable
宏
它在做snmp监控的时候用,简单来说,就是给一个变量设置一个值
主机资产,zabbix提供了一个资产管理的功能,默认是关闭状态,可以选manual手动填,也可以选
Automatic自动,在创建items的时候,可以把得到的值映射到资产里面,这个功能比较鸡肋,比如下面网卡只有两个,我服务器要是4个网卡呢
点击就启用了
application和item以及graph介绍
application类似items监控项的监控组,就是组的概念
监控间隔。60秒
历史保留的天数7天
趋势图保留的天数,365天
点一下enabled就把这一项关闭了,关闭后就不监控这一项了
如果有个东西老报警。你就可以把它关闭了
鼠标放触发器上,看到条件表达式,每五分钟,超过300 什么值就报警
添加node2到监控里
在linux-node2上装zabbix客户端
mkdir /tools -p cd /tools/ wget http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm rpm -ivh zabbix-release-2.4-1.el6.noarch.rpm yum install zabbix-agent -y
自定义监控和图表
zabbix服务端是不支持windows的,只有客户端支持windows
下面地址可以下载windows客户端监控。
它是个exe文件,配置个zabbix.conf文件
它有2个参数需要注意下
http://www.zabbix.com/download2
修改linux-node2的Zabbix agent配置文件
vim /etc/zabbix/zabbix_agentd.conf
启动agent
[root@linux-node2 tools]# /etc/init.d/zabbix-agent start Starting Zabbix agent: [ OK ] [root@linux-node2 tools]#
另外让它开机启动,可以选择加入rc.local
[root@linux-node2 ~]# echo "/etc/init.d/zabbix-agent start" >>/etc/rc.local [root@linux-node2 ~]#
如下
host-name这里必须写正确的,显示的名称可以随便写,但是建议规范点
选择模板
模板里带有好多监控项,触发器,图形。因为模板太多了。上百个,就搞成搜索的了
搜索linux
上面的是基于agent监控的,下面是基于snmp监控的,就不用装agent了
等一会变绿色了
在监控里查看主机是否有数据了
选择主机
通过拖动这里也可以改变时间范围,查看历史数据
点击这里可以隐藏下面的Zoom时间栏
这个agent ping 不是icmp的ping,而是通过agent ping的。agent发个请求看它返回不返回
自定义监控项并加入到监控页面上
以上都是模板带的监控项,如何自定义一个监控项呢
自定义监控项有2个步骤
1、改配置文件,在里面写上自定义的监控项
2、web页面加上
获取命令如下
[root@linux-node2 ~]# uptime 06:29:23 up 22 min, 1 user, load average: 0.00, 0.00, 0.00 [root@linux-node2 ~]# uptime | awk -F ' ' '{print $5}' 1 [root@linux-node2 ~]#
修改linux-node2的配置文件
vim /etc/zabbix/zabbix_agentd.conf
修改下面地方
逗号隔开
保证这个key在整个系统是唯一的,command可以换成脚本
另外这个用户自定义的参数返回值最大是512KB,不能超过这个
UserParameter=login-user,uptime |awk -F ' ' '{print $4}'
这里注意下,下面截图是错的,应该是$4
保存,重启
[root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf [root@linux-node2 ~]# /etc/init.d/zabbix-agent restart Shutting down Zabbix agent: [ OK ] Starting Zabbix agent: [ OK ] [root@linux-node2 ~]#
服务端测试下能否获取这个客户端自定义的值
zabbix-get命令。之前没装,补上
[root@linux-node1 ~]# zabbix_get -bash: zabbix-get: command not found [root@linux-node1 ~]# yum install zabbix-get -y
查看帮助用法
[root@linux-node1 ~]# zabbix_get usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key> [root@linux-node1 ~]# zabbix_get --help Zabbix get v2.4.8 (revision 59539) (20 April 2016) usage: zabbix_get [-hV] -s <host name or IP> [-p <port>] [-I <IP address>] -k <key> Options: -s --host <host name or IP> Specify host name or IP address of a host -p --port <port number> Specify port number of agent running on the host. Default is 10050 -I --source-address <IP address> Specify source IP address -k --key <key of metric> Specify key of item to retrieve value for -h --help Display help information -V --version Display version number Example: zabbix_get -s 127.0.0.1 -p 10050 -k "system.cpu.load[all,avg1]" [root@linux-node1 ~]#
获取方式如下
[root@linux-node1 ~]# zabbix_get -s 10.0.1.162 -k login-user 1 [root@linux-node1 ~]#
客户端克隆一个会话,服务端继续取值,这就是一个自定义的key,当然你里面写什么都可以
[root@linux-node1 ~]# zabbix_get -s 10.0.1.162 -k login-user 2 [root@linux-node1 ~]#
get命令获取成功,才能加。准备加到web上
点击进去
点击Items,显示如下
点击右上角的Create item
name可以和key不一样,但是key必须是之前设置的,右边select是选择系统自带的key
Data type 中decimal是10进制的意思
units 是单位的意思。zabbix默认会把1000换算成1k的
如果勾选这里,上面的数会乘以文本框里的东西
不太重要的key建议设置5分钟,太频繁没什么用,反而引起zabbix性能下降
下面设置了就以下面为准
描述的东西能写最好写
点击Add
有数据了
点击+ 可以加入到收藏里,然后在仪表盘查看