天天看点

2017年5月 企业面试 zabbix 常见问题

Zabbix 简介

Zabbix 是一个企业级的开源分布式监控解决方案, 由一个国外的团队持续维护更新, 软件可以自由下载使用, 运作团队靠提供收费的技术支持赢利。

官方网站http://www.zabbix.com 官方文档:

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

 zabbix运行条件                            

1.Zabbix Server需运行在 LAMP(Linux+Apache+Mysql+PHP)环境下对硬件要求低 ;                   2.Agent:目前已有的agent基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、windows。       3.SNMP:支持各类常见的网络设备

  Zabbix 功能       

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

  优势劣势

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

zabbix组件

    了解完zabbix特性之后,本该进入zabbix安装教程,但是我觉得在安装之前我们很有必要了解一下zabbix进程组成结构,默认情况下zabbix包含5个程序:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选,这个需要另外安装。下面来分别介绍下他们各自的作用。

zabbix_agentd 

客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等

zabbix_get 

zabbix工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令。通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内容的方式来做故障排查。

zabbix_sender 

zabbix工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。于是我们在脚本执行完毕之后,使用sender主动提交数据。

zabbix_server 

zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server 

备注:当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。

zabbix_proxy 

zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到server里。

zabbix_java_gateway 

zabbix2.0之后引入的一个功能。顾名思义:

Java  网关,类似agentd,但是只用于Java方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。

zabbix小结 告警与维护配置

zabbix的告警通知非常灵活,支持的通知类型有Email、Jabber、sms、script 。其在设备需要修护时,同样可以提供同nagios 一样的设备维护期间,暂停告警的功能有,而且其相对于nagios 更加灵活。本篇就针对zabbix的告警和设备维护功能进行下说明。

一、media types 告警通知

本篇以脚本通知为例进行说明

  1、配置AlertScriptsPath

 # vim /etc/zabbix/zabbix_server.conf找到# AlertScriptsPath=${datadir}/zabbix/alertscripts 行,增加如下内容AlertScriptsPath=/etc/zabbix/alertscripts      

配置完成后,需要重启zabbix_server服务生效,在后面media type 写入的脚本名称就会从上面的配置目录中查找并执行。

2、创建media type

步骤为:登录 zabbix web 页面------Administration--------Media types--------Create Media Type(右上角)  ,如下图:

http://www.361way.com/wp-content/uploads/2014/07/mediatype.png https://s5.51cto.com/wyfs02/M02/97/8D/wKiom1kvs3STDeGVAAANTkKZa0A402.png-wh_500x0-wm_3-wmp_4-s_3776283155.png https://s2.51cto.com/wyfs02/M01/97/8F/wKioL1kvs6TyRZkZAAAv4oNQFF0745.png-wh_500x0-wm_3-wmp_4-s_2070908856.png
2017年5月 企业面试 zabbix 常见问题

配置完成后,save保存即可。

3、创建Action

步骤为:登录 zabbix web 页面---- Configuration ---- Actions ---- Create action , 如下图

2017年5月 企业面试 zabbix 常见问题
2017年5月 企业面试 zabbix 常见问题

subject为发送主题,message为发送内容(通过message内容的自定义,可以例如在告警时,将其他相关信息也进行通知,可以从侧面了解整个主机的运行情况---某次面试时面试官曾提过的需求),这两者的内容都可以很方便的进行更改。勾选了Recovery message 选项,会在监控项恢复时也会给一个恢复的提示。

http://www.361way.com/wp-content/uploads/2014/07/conditions.png
2017年5月 企业面试 zabbix 常见问题

condeitions 选项中设置的是触发通知的条件,默认情况下只有A、B两项 ,这里可以设置触发级别、主机组、主机、触发值、应用等 。举例说明下:

1、可以根据告警级别进行通知,如severity 级别大于等于average时,通知OPS运维人员,级别为Disater时通知部门经理或者BOSS (这需要配置两个action);

2、也可以根据时间进行定义,如只在工作时间进行告警通知;

3、如果你喜欢的话,也可以指定不同主机组通知到不同的人;

而且所有条件之间的关系可以是AND或者OR ,默认情况下都是AND,即所有条件都满足时,触发通知。

注:个别主机,如DB主机,晚上有备份任务导致晚上某段时间过载(同时又不是所有主机都这样,又不想增大触发条件的话),可以在configuation ---hosts 里的items 选项里配置通知的时间范围,那里也有 time period 配置选项(从另一方面也反映了zabbix的灵活,有宏观调控,也有微观调控,适用性很强) 。不过要尽可能的都在actions 里进行配置,因为这一般查看具体条件都是在这里 。

下图是action的Operations部分,该项是必填项: 

http://www.361way.com/wp-content/uploads/2014/07/operations.png
2017年5月 企业面试 zabbix 常见问题

Operation details 是一个比较强的配置项,这里主要有三个知识点---Escalations、remote command 和 event acknowledged,其中Escalations、remote command比较重要 。

operation details 的 step部分主要和escalations 相关,在监控场景中,如果你一天收到100+的短信告警,真有一天“狼”真来了估计你也不会注意到。有了escalations功能,可以实现如下配置(需配置多条operation):

1、在单位时间内(step duration)发送的总的通知次数(to - from +1  次),并通知到相应的组或人;

2、假如条件1中设置的是1800秒内发送1-5 次给OPS运维人员,结果运维人员在该时间段未能处理;我们就可以再增加一个Operations,指定from 5 to 10 (第5到10条告警)通知给 运维经理 ;我们还可以再增加,第11-15条给BOSS ,第16-20条告警时执行一个远程命令。

escalations部分,可以参看官方文档

第二个知识点就是Operation type部分,类型可以是send message进行通知,也可以是remote command :

remote command 可以支持的操作有IPMI、Custom script、ssh、telnet、Global script (其中前两者只能在zabbix server 或 zabbix proxy上操作),该功能是相当牛B的。如,检测到一个tomcat 服务404,我们就可以利用该功能重启tomcat 服务 。

remote command部分可以查看官方页面

第三个功能主要是为有值班人员或上班时间准备的一个功能,当设置这个条件时,如果一个告警的状态被设置为ACK ,则本次告警的后续通知就会停止 。

在一线运维人员接到告警信息时,在zabbix 的首页上,移到相应告警提示的部分,选择主机的ACK 部分 ,点选 NO ,会跳出一个message的窗口,在message里输入相关信息 ,如:误报、因什么什么原因在调试、已通知到相关责任人等 ,并点击Acknowledge 提交,此时的ACK 状态会变成YES 。本次告警也将停止不再进行。直到本次告警解决,下次再次出现同样告警时,该项又会重新变成ACK 。

Acknowledge部分,可以参看官文页面

二、maintenance 维护

在线场景中,经常会遇到这样的情况:在线产品需要进行升级或其他操作,此时又不想将监控系统的完整告警功能进行全部关闭,只临时关闭在线升级主机的告警。这就可以使用zabbix的maintenance功能。具体配置方式如下:

创建maintenance的步骤为:登录 zabbix web 页面---- Configuration-----Maintenance ----- create maintenance period。

http://www.361way.com/wp-content/uploads/2014/07/maintenance.png

第一选项卡配置的是任务名和一个大范围的时间值,其指定了维护所在的磊的时候段在什么范围。maintenance type 指定在维护期间是否仍进行数据搜集。 

http://www.361way.com/wp-content/uploads/2014/07/periods.png
2017年5月 企业面试 zabbix 常见问题

periods指定的时间段具体的维护时间段,和maintenace中的范围为包含关系。而period type指定了执行的类型,其类型有one time only 一次执行,也有按日、星期或月定期执行 ,如果是后三种方式,date项会变成具体的间隔、开始时间 。无论是何种类型,都有maintenance period length型 ,其指定了具体每次维护的持续时间,如2小时。

hosts & groups 项太多内容,就是选择某组主机或某个主机在维护期间不进行告警通知。

 安装Zabbix过程中出现的问题集:

zabbix 是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。 zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

故障一:

  2637:20151009:050431.719 [Z3001] connection to database 'zabbix' failed: [1045] Access denied for user 'zabbix'@'localhost' (using password: YES)

  2637:20151009:050431.719 database is down: reconnecting in 10 seconds

权限问题,执行下面的SQL语句.

MariaDB [(none)]>  grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';

Query OK, 0 rows affected (0.00 sec)

故障二:

PHP

 time zone    unknown         Fail

    php_value max_execution_time 300

    php_value memory_limit 128M

    php_value post_max_size 16M

    php_value upload_max_filesize 2M

    php_value max_input_time 300

    php_value date.timezone Asia/Shanghai #修改成正确的时区.

[root@localhost zabbix]# service httpd restart

故障三:

zabbix server is not running the information displayed may not be current

selinux 问题

[root@zabbix create]# getenforce 

Enforcing

[root@zabbix create]# setenforce 0

[root@zabbix create]# getenforce  

Permissive

或者

[root@zabbix create]# vim /etc/selinux/config

type=AVC msg=audit(1444450162.226:7610): avc:  denied  { name_connect } for  pid=31941 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket

type=SYSCALL msg=audit(1444450162.226:7610): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=7f95a9345270 a2=10 a3=0 items=0 ppid=31936 pid=31941 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1444450171.586:7611): avc:  denied  { name_connect } for  pid=32146 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket

type=SYSCALL msg=audit(1444450171.586:7611): arch=c000003e syscall=42 success=no exit=-13 a0=b a1=7f95a934dbe0 a2=10 a3=3 items=0 ppid=31936 pid=32146 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

type=AVC msg=audit(1444450172.228:7612): avc:  denied  { name_connect } for  pid=32146 comm="httpd" dest=10051 scontext=system_u:system_r:httpd_t:s0 tcontext=system_u:object_r:zabbix_port_t:s0 tclass=tcp_socket

type=SYSCALL msg=audit(1444450172.228:7612): arch=c000003e syscall=42 success=no exit=-13 a0=c a1=7f95a9354a50 a2=10 a3=0 items=0 ppid=31936 pid=32146 auid=4294967295 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=4294967295 comm="httpd" exe="/usr/sbin/httpd" subj=system_u:system_r:httpd_t:s0 key=(null)

type=MAC_STATUS msg=audit(1444450178.657:7613): enforcing=0 old_enforcing=1 auid=0 ses=969

1、web页面无法显示:

原因一:检查系统是否安装apache,以便解析html

原因二:php没有完全安装好

原因三:apache没有提供对php的支持

原因四:apache的配置文件中DocumentRoot的参数值没有改成zabbix的路径,zabbix默认的路径    是/var/www/html/下

解决方案一:安装apache

tar zxvf httpd-2.2.23.tar.gz

cd httpd-2.2.23

./configure --prefix=/usr/local/apache

make && make install

若安装过程中出现错误, 则在编译时入加 --with-included-apr 参数。

解决方案二:完整安装php

安装php时首先要检查系统是否安装了支持zabbix的依赖包,特别GD库的安装,如果gd库没安装会 导致zabbix安装过程出现问题。

<1>安装freetype,libpng,jpeg以便于让php支持GD库(WeatherMap插件必须要较新的GD库支持)

tar -zxvf libpng-1.2.18.tar.gz

./configure --prefix=/usr/local/libpng

tar -zxvf freetype-2.3.5.tar.gz

./configure --prefix=/usr/local/freetype

make &&make install

tar -zxvf jpegsrc.v7.tar.gz

mkdir /usr/local/libjpeg

mkdir /usr/local/libjpeg/bin

mkdir /usr/local/libjpeg/lib

mkdir /usr/local/libjpeg/man

mkdir /usr/local/libjpeg/man/man1

./configure --prefix=/usr/local/libjpeg/ --enable-shared --enable-static

tar -zxvf gd-2.0.28.tar.gz

./configure --prefix=/usr/local/libgd --with-png --with-freetype=/usr/local/freetype/ --with- jpeg=/usr/local/libjpeg/ 

安装完成后,对gd库进行配置:

vi /etc/ld.so.conf

/usr/local/freetype/lib

/usr/local/libjpeg/lib

/usr/local/libgd/lib

ldconfig   --------执行命令,使用动态装入器装载找到的共享库

<2>安装PHP

cd php-5.6.0

  ./configure --prefix=/usr/local/php --with-apxs2=/usr/local/apache/bin/apxs --with- 

MySQL

=/usr/local/mysql/ --with-mysqli=/usr/local/mysql/bin/mysql_config --enable-bcmath --enable- mbstring --enable-sockets --with-gd --with- gettext --with-freetype-dir=/usr/local/freetype/ --with-jpeg- dir=/usr/local/libjpeg/ 

make clean 

安装完后将tar包中的php.ini-development或php.ini-production复制到到/usr/local/php/lib下,并更名为php.ini

-with-apxs2=/usr/local/apache/bin/apxs  支持apache
--with-mysql=/usr/local/mysql/  支持mysql
--with-mysqli=/usr/local/mysql/bin/mysql_config 优化支持mysqli
--enable-bcmath  打开图片大小调整
--enable-mbstring  多字节,字符串的支持
--enable-sockets  打开sockets 支持
--with-gd  打开gd库的支持
--with-gettext  打开gnu的gettext 支持,编码库用到
--with-freetype-dir=/usr/local/freetype/ 打开对freetype字体库的支持
--with-jpeg-dir=/usr/local/libjpeg/  打开对jpeg图片的支持

解决方案三:apache没有提供对php的支持

打开apache的配置文档/usr/local/apache/conf/httpd.conf,修改其中参数

模块中修改为

  DirectoryIndex index.html index.php

模块中添加

AddType application/x-httpd-php .php .php3 .php4

修改完成后需重新启动apache

2、访问目录http://ip/zabbix会显示:

Forbidden  

You don't have permission to access /test/ on this server.

解决方案:

在apache的配置文档中找到,其中定义了Deny from all,可以将其注释,就不会封网段

3、zabbix在安装过程中出现无法找到sock文件的问题

将mysql的socket.sock文件软链接到zabbix的路径

4、登录进zabbix页面中,页面显示如下错误:

ini_set(): Use of mbstring.internal_encoding is deprecated [dashboard.php:21 → require_once() → 

ZBase->run() → ZBase>initLocales() → init_mbstrings() →

 ini_set() in /var/www/html/zabbix/include/locales.inc.php:25]

将路径中/var/www/html/zabbix/include/locales.inc.php的第25行数据注释掉,页面不会显示错误