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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
容器服务 Serverless 版 ACK Serverless,317元额度 多规格
简介:  Zabbix 简介Zabbix 是一个企业级的开源分布式监控解决方案, 由一个国外的团队持续维护更新, 软件可以自由下载使用, 运作团队靠提供收费的技术支持赢利。  官方网站http://www.zabbix.com 官方文档:Zabbix通过C/S模式采集数据,通过B/S模式在web端展示和配置。

 

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(右上角)  ,如下图:

      wKiom1kvs-CApbqAAAAuoHbDfIw488.png



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



3、创建Action

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

wKiom1kvtN7xE3aBAABbCiMU6Fo711.png-wh_50

wKioL1kvtOzCzCotAABfav14u9s780.png-wh_50



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


wKioL1kvs1XSXk0IAAB6SpmhkTY445.png-wh_50


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部分,该项是必填项: 

wKiom1kvtB_j2OJXAAB07wt4Axg572.png-wh_50


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。


           


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

wKiom1kvtF6jw3StAABDTqCSeFE329.png-wh_50

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

make && make install

 

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

make && make install

 

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/ 

make && make install

 

安装完成后,对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 

make && make install

安装完后将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行数据注释掉,页面不会显示错误




相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
相关文章
|
5月前
快速排序--面试最常见问题
快速排序--面试最常见问题
30 1
|
30天前
|
算法 Java 数据中心
探讨面试常见问题雪花算法、时钟回拨问题,java中优雅的实现方式
【10月更文挑战第2天】在大数据量系统中,分布式ID生成是一个关键问题。为了保证在分布式环境下生成的ID唯一、有序且高效,业界提出了多种解决方案,其中雪花算法(Snowflake Algorithm)是一种广泛应用的分布式ID生成算法。本文将详细介绍雪花算法的原理、实现及其处理时钟回拨问题的方法,并提供Java代码示例。
59 2
|
3月前
|
JavaScript 前端开发 Java
常见问题:Go的面试问题和答案(2)
常见问题:Go的面试问题和答案(2)
|
3月前
|
存储 Java 程序员
常见问题:Go的面试问题和答案(1)
常见问题:Go的面试问题和答案(1)
|
5月前
|
存储 NoSQL MongoDB
MongoDB实战面试指南:常见问题一网打尽
MongoDB实战面试指南:常见问题一网打尽
|
4月前
|
设计模式 安全 Java
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
Java面试题:请列举三种常用的设计模式,并分别给出在Java中的应用场景?请分析Java内存管理中的主要问题,并提出相应的优化策略?请简述Java多线程编程中的常见问题,并给出解决方案
102 0
|
5月前
|
Java
Java中的面试常见问题解析
Java中的面试常见问题解析
|
6月前
|
数据采集 算法 网络协议
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
最新Python 面试常见问题(1),2024年最新面试官必问的10个问题
|
5月前
|
存储 算法 数据挖掘
数据结构面试常见问题:解锁10大关键问题及答案解析【图解】
数据结构面试常见问题:解锁10大关键问题及答案解析【图解】
|
6月前
|
SQL 分布式计算 前端开发
10个常见的python面试问题_python面试常见问题
10个常见的python面试问题_python面试常见问题

推荐镜像

更多