一、概述

1.为什么选择Zabbix?

Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。

以上一段摘抄于Zabbix官方手册,根据我自己的使用经验,我认为上述描述有些含蓄,Zabbix不止能够监控网络参数、服务器健康等,它几乎能监控你能想到的任何服务器、软件或应用的任何指标,并通过触发器和其他zabbix组件为这些指标配置及时的邮件、短信等告警,并且提供了强大的可视化功能。

就我个人来讲,Zabbix只有配置底层监控脚本时需要耗费点精力,其灵活性和功能碾压市面上绝大多数商用or开源监控软件,并且足以作为一个大型公司的监控骨架,例如之前看到的一篇58的分布式监控产品介绍,看完之后的感想基本就是:这产品提供的功能如果用Zabbix搭我上我也行!在接下来的几篇笔记中我也会逐一示例如何搭建一个完整的数据库监控系统。

我从官网上随便copy了一副Zabbix可以达到的效果图:(zabbix的界面支持中文本例只是copy的官方示例)

2.关于Zabbix的架构

Zabbix的组件有以下几个:

Zabbix Server、Zabbix proxy、Zabbix agent、数据库、Zabbix web界面。

其中agent是安装于各个被监控主机的客户端,负责收集监控信息。server是负责接收监控信息并进行数据存储和web页面渲染的,proxy是可选的安装组件可以代替server进行监控信息收集从而分担负载或者说充当到server的跳板机,数据库是存储监控信息的,web页面则是进行监控信息的展示、提供诸如添加主机、创建用户等等的页面操作功能。

熟悉Zabbix的数据流是灵活使用Zabbix的基础,从上述描述可以大致知道Zabbix的数据流,这其中涉及到的一些对象名非常重要,将会贯穿整个Zabbix的配置和使用。

  • 监控项(item)是server上负责接收数据信息的,其结构就是一个指定了返回数据类型的key-value,key名字自定义,对应的value就是获取监控值的脚本命令。

  • 监控项超过某个阈值之后需要告警,为了实现这种告警就需要为监控项创建触发器(trigger),默认的trigger被触发后告警自动显示在仪表板(dashboard)。

  • 默认告警是显示在仪表板(dashboard)的,为了实现短信或邮件告警,就需要创建告警媒介(media types),同时还需要为用户添加告警媒介这样才能将告警发送至用户的邮箱。

  • 为了更好地对监控项进行分类,可以把相似的监控项放在同一个应用集(applications)中。

  • 为了更好的对主机进行分类,可以将功能相同的主机放在同一个host group中。

3.本例的安装环境

CentOS release 6.10 (Final),内核版本2.6.32-754.el6.x86_64。

Zabbix Server IP:10.0.0.200,mysql数据库已经预先安装,版本是5.7.26(有一些向8.0看齐的坑,建议安装5.7.22及以下的版本)。

本例中web服务器使用LAMP环境,因此安装httpd。

Zabbix的安装有多种方式(rpm,容器安装等),本例中使用可以自定义位置和启动项的源码安装方式。

4.本例的主要参考网址

 
二、Zabbix安装配置

1.下载安装包

wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/3.4.15/zabbix-3.4.15.tar.gz

如果上述地址失效,到https://www.zabbix.com/download寻找相应的zabbix安装包。

2.解压源码tar包,创建zabbix用户(server、agent端都需要创建用户)

groupadd --system zabbix
useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
tar -zxvf zabbix-3.4.15.tar.gz

3.安装依赖包

yum -y install pcre pcre-devel libevent libevent-devel OpenIPMI OpenIPMI-devel libssh2 libssh2-devel net-snmp-devel libcurl libcurl-devel unixODBC-devel libxml2-devel

4.Server端LAMP架构的安装

4.1 安装php,zabbix服务端程序由php编写,因此需要安装php依赖。

参考:https://www.zabbix.com/documentation/3.4/manual/installation/requirements

//php解释器版本需要>=5.4版本才可以,本例中安装5.6版本的php(如果是Centos7版本请尝试安装php7.0及以上版本,5.x版本的php在linux7上的支持度很差)。
//首先安装相关的yum源,然后安装php相关的包。
#Linux 6:
rpm -Uvh http://mirror.webtatic.com/yum/el6/latest.rpm
yum -y --nogpgcheck install php56w php56w-gd php56w-bcmath php56w-xml php56w-mbstring php56w-ldap php56w-mysql
#Linux 7:
rpm -Uvh http://mirror.webtatic.com/yum/el7/epel-release.rpm http://mirror.webtatic.com/yum/el7/webtatic-release.rpm
yum -y --nogpgcheck install php72w php72w-gd php72w-bcmath php72w-xml php72w-mbstring php72w-ldap php72w-mysql
//如果发现报错也不要慌,一般是你已经安装了其他源里的php,yum list|grep php一下,然后把已安装的非base源里的php全部卸载(先确保没有被其他应用在使用)。
//当然用其他源里的php也可以,只要能保证满足官网的那些php requirements即可。
//如果上述yum源也失效了,那么到网上搜索下其他的php的yum源。

4.2 安装http,zabbix的web页面展示需要httpd(必须是1.3.12版本及以上)。

yum -y install httpd

4.3 安装mysql(步骤略)

需要注意的是my.cnf文件中一定要添加character_set_server=utf8的选项(或gbk),否则Zabbix无法支持中文界面。此外必须安装mysql时必须安装mysql-devel的包,否则zabbix server可能会安装失败。

5.编译安装Zabbix Server(root用户执行)

./configure --prefix=/usr/local/zabbix --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl
--以上各项含义参考:./configure --help,--enable-server表示安装server,proxy和agent的安装以此类推。
--安装mysql时必须安装mysql-devel否则会编译失败。
make && make install

6.配置mysql数据库

完成zabbix安装后开始初始化数据库的表结构,zabbix提供了data.sql、images.sql、schema.sql这3个sql脚本来初始化mysql数据库,因为zabbix监控的数据都是要存到这个mysql库以便进行web展示的,以上表模板的位置在解压tar包目录下的database/mysql中。

mysql> create database zabbix default charset utf8;
mysql> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
mysql> grant all on zabbix.* to zabbix@'%' identified by 'zabbix';
//需要注意的是虽然zabbix 3.4对mysql版本没要求,但是却要求Innodb存储引擎,因此为避免麻烦尽量装5.5以后的mysql版本吧(默认innodb存储引擎)。

在server端执行全部的脚本:

mysql> source schema.sql
mysql> source images.sql
mysql> source data.sql

7.编辑server端的配置文件

本例中zabbix的安装位置为/usr/local/zabbix,因此server的conf文件为/usr/local/zabbix/etc/zabbix_server.conf。

老版的Zabbix中会有zabbix_agent.conf和zabbix_agentd.conf两个配置文件,这是agent端使用的配置文件,其中前者用超级服务(xinetd)的方式来启动,后者是以独立进程的方式来启动的,无论使用哪种方式都可以启动agent。

3.4版本只保留了zabbix_agentd.conf,本例使用zabbix_agentd来启动agent端:

//处理下配置文件中一大堆的注释,看不习惯:
cd /usr/local/zabbix/etc/
mv zabbix_server.conf zabbix_server.conf.bak
mv zabbix_agentd.conf zabbix_agentd.conf.bak
cat zabbix_server.conf.bak |grep -v "^$"|grep -v "^#">zabbix_server.conf
cat zabbix_agentd.conf.bak |grep -v "^$"|grep -v "^#">zabbix_agentd.conf

vi zabbix_server.conf(在本例中只要加个DBPassword=zabbix即可):

LogFile=/tmp/zabbix_server.log
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
Timeout=4
LogSlowQueries=3000

8.启动zabbix Server

/usr/local/zabbix/sbin/zabbix_server

三、启动并配置zabbix web

mkdir /var/www/html/zabbix
cp -ar /root/zabbix-3.4.15/frontends/php/* /var/www/html/zabbix/
--/root/zabbix-3.4.15/是我zabbix解压目录。
service httpd start  --启动httpd

至此可以通过http://10.0.0.200/zabbix来访问zabbix了,10.0.0.200是我Zabbix Server服务器的IP地址。

可以看到有几项php的配置不符合要求,我们改正之:

vi /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = Asia/Shanghai
always_populate_raw_post_data = -1 //这项默认是注释的

重启httpd服务后刷新,全部通过。

填入数据库的账号密码即可。

根据提示我们下载zabbix.conf.php文件,然后放置到指定位置:/var/www/html/zabbix/conf/

最后的登陆界面如下所示:(默认的账号是admin,密码是zabbix)

四、agent客户端安装配置

前边我们已经在agent节点添加了zabbix用户并下载了zabbix源码安装包,这里只需要直接使用即可:

//在本例中server端也要被监控因此也需要安装agent组件,但其实server在编译安装过程中已经包含了agent的功能,因此在server端直接编辑agent配置文件并启动就可以了。
./configure --prefix=/usr/local/zabbix --enable-agent
make && make install
cd /usr/local/zabbix/etc/
mv zabbix_agentd.conf zabbix_agentd.conf.bak
cat zabbix_agentd.conf.bak |grep -v "^$"|grep -v "^#">zabbix_agentd.conf

然后修改/usr/local/zabbix/etc/zabbix_agentd.conf文件:

LogFile=/tmp/zabbix_agentd.log
//passive与active模式的区别在于,前者是server或proxy端主动来获取数据,后者是客户端主动向server/proxy发送数据,因此后者压力更小。
#Server参数表示zabbix server的IP地址,可以有多个,表示agent只会接收来自于此IP的连接,默认的相当于passive模式。
Server=10.0.0.200
#ServerActive参数表示与server进行active check的配置,IP:port格式,可以写多个。
ServerActive=10.0.0.200:10051
//一般server端的监听端口是10051,agent端使用的端口是10050。

所谓active check是指agent主动的请求server,获取监控信息,然后将自己的监控数据返回给server进行展示,需要注意的是进程active check时agent端配置文件里的hostname必须与server里设置的host对象的名字一样,否则agent日志会报active check失败以及host not found的错误,如果不使用active check那么配置文件中的hostname可以与web上不同,但是此时配置文件中需要去掉ServerActive参数,否则agent日志总是会尝试active check但是不通并报错,导致agent日志增长很快。

此外agentd配置文件中的ServerActive只是表明agent端会做active check的操作,但是具体的item项是否会通过active check发送给server还要看item本身的获取类型是否是zabbix agent(active)。

Zabbix的active check是一个两次握手的过程:https://www.zabbix.com/documentation/3.4/manual/appendix/items/activepassive

1.首先agent根据ServerActive参数向server发送active的request。

2.server端将此agent下的所有类型为zabbix agent(active)的item list发送给agent,完成一次握手。

3.接下来agent根据收集的interval(或者说delay)将收集的监控值周期性的发送给server。

4.server端回复一个已收到的信息,这算是二次握手。

//启动agentd:
/usr/local/zabbix/sbin/zabbix_agentd && ps -ef|grep zabbix_agentd
//关闭agentd:
for p in `ps -ef|grep zabbix_agentd|grep -v grep|awk '{print $2}'`;do kill -9 $p;done && ps -ef|grep zabbix_agentd

五、web端主机配置

之前已经完成了zabbix server和agent端的基本配置,但想要实现正常的监控还需要在web端添加所有的agent主机信息(本例中有3个,即2个agent服务器和server端的agent)。

我们先在所有agent节点的配置文件中添加:

Hostname=<为agent自定义的主机名(可以与服务器主机名不一样)或者直接写IP>

然后在web界面的配置-->主机中添加所有需要监控的agent主机,这里添加的主机名称必须与agent配置文件中设置的Hostname一致(如果所有items都不使用active check那么不一样也可以)。官网的原文描述如下:

With Zabbix agent running on the host you are configuring, the agent configuration file parameter Hostname must have the same value as the host name entered here. The name in the parameter is needed in the processing of active checks.

DNS名称可以不填,如果要填就要和/etc/hosts文件或DNS服务中的DNS条目一致。

下例添加的agent主机就是zabbix server本身,因为zabbix server本身也要被监控嘛,可以看到使用的端口是10050(agent端口)。

更新后返回主机页面点击状态的按钮使其成为开启状态(或者在添加主机时直接勾选已启用):

实际上由于zabbix默认的自动发现规则的存在,server端的agent是会被自动发现的,只需要你在agent配置文件中自定义一个Hostname,并配置了active check,那么server端是会自动为你添加主机的,自动发现实际上就是省去了你手动添加主机的步骤,不过客户端还是需要自己布的,如果客户端的部署也能用自动化工具完成的话,那么就可以大大简化部署工作。

至此,zabbix的基本配置已经完毕,以后只需要按需求为主机添加模板或监控项进行监控即可。

Zabbix-3.4简介及安装配置的更多相关文章

  1. twemproxy 简介、安装配置

    twemproxy 简介.安装配置 http://www.xuchanggang.cn/archives/993.html

  2. Maven01——简介、安装配置、入门程序、项目构建和依赖管理

    1 Maven的简介 1.1 什么是maven 是apache下的一个开源项目,是纯java开发,并且只是用来管理java项目的 Svn eclipse   maven量级 1.2 Maven好处 同 ...

  3. MongoDB入门学习笔记之简介与安装配置

    一.MongoDB简介 1.文档数据库 MongoDB是一款开源的文档型非关系数据库,具有高性能.高可靠性和自动扩展等特点.MongoDB中的每一条记录是一个文档,其数据存储结构为键/值对,类似JSO ...

  4. elasticsearch系列一:elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  5. (一)Solr——简介和安装配置

    1. solr简介 1.1 Solr是什么 Solr是apache的顶级开源项目,它是使用java开发 ,基于lucene的全文检索服务器. Solr和lucene的版本是同步更新的,最新的版本是7. ...

  6. Elastic Search快速上手(1):简介及安装配置

    前言 最近开始尝试学习Elastic Search,因此决定做一些简单的整理,以供后续参考,快速上手使用ES. 简介 ElasticSearch是一个基于Lucene的搜索服务器.它提供了一个分布式多 ...

  7. elasticsearch系列一elasticsearch(ES简介、安装&配置、集成Ikanalyzer)

    一.ES简介 1. ES是什么? Elasticsearch 是一个开源的搜索引擎,建立在全文搜索引擎库 Apache Lucene 基础之上 用 Java 编写的,它的内部使用 Lucene 做索引 ...

  8. python简介及安装配置

    概述 python是解释型语言,相对编译型语言,执行效率较低.python是通过c语言编写,官方解释器也是c语言编写cpython,也有其他的如用java编写的jpython.目前有2.0和3.0版本 ...

  9. 004-nginx简介、安装配置【源码安装和mac安装】、基本使用

    一.概述 1.1.Nginx是什么 Nginx是一款轻量级的Web服务器,也是一款轻量级的反向代理服务器[常用]. 1.2.Nginx能干什么 Nginx能干的事情很多,这里简要罗列一些: 1:直接支 ...

随机推荐

  1. jquery.countdown 倒计时插件的学习

    1.第一种简单的使用 第一个时间是你的倒计时截止时间,finalDate格式可以是YYYY/MM/DD MM/DD/YYYY YYYY/MM/DD hh:mm:ss MM/DD/YYYY hh:mm: ...

  2. HihoCoder1449 后缀自动机三·重复旋律6

    描述 小Hi平时的一大兴趣爱好就是演奏钢琴.我们知道一个音乐旋律被表示为一段数构成的数列. 现在小Hi想知道一部作品中所有长度为K的旋律中出现次数最多的旋律的出现次数.但是K不是固定的,小Hi想知道对 ...

  3. B.Beautiful Numbers

    题意:你被给予了一个序列 p = [p1, p2, ..., pn](1 ~ n的整数),如果存在l, r左右端点(1 <= l <= r <= n),使得[pl, pl+1,... ...

  4. C++使用libcurl做HttpClient 和 curl_easy_setopt

    curl_easy_setopt 参数设置 https://curl.haxx.se/libcurl/c/curl_easy_setopt.html  使用libcurl做HttpClient #if ...

  5. AddTransient、AddSingleton、AddScoped的区别

    权重: AddSingleton→AddTransient→AddScoped AddSingleton的生命周期: 项目启动-项目关闭   相当于静态类  只会有一个 AddScoped的生命周期: ...

  6. nginx部署基于http负载均衡器

    nginx跨多个应用程序实例的负载平衡是一种用于优化资源利用率,最大化吞吐量,减少延迟和确保容错配置的常用技术. 环境介绍 配置nginx负载均衡器因会用到多台服务器来进行,所以下面我会用到docke ...

  7. stm32 io操作 头文件规范

    在stm32众多项目开发中,有太多的对io进行操作,若置1或清0,使用官方库提供的函数,固然方便,规范,但是需要包含标准的库,尺寸较大,还得处理不同版本兼容问题,包括io初始化也太繁琐,于是操作原子等 ...

  8. 【Babel】293- 初学 Babel 工作原理

    戳蓝字「前端技术优选」关注我们哦! 前言 babel Babel 对于前端开发者来说应该是很熟悉了,日常开发中基本上是离不开它的. 已经9102了,我们已经能够熟练地使用 es2015+ 的语法.但是 ...

  9. NIO Buffer 内部机理使用姿势

    关于NIO Buffer中4个重要状态属性 position.limit.capacity 与 mark Buffer本身是一个容器,称作缓冲区,里面包装了特定的一种原生类型,其子类包括ByteBuf ...

  10. JSP注册登录页教程

    转载请标明原文地址:http://www.cnblogs.com/zhangyukof/p/6785258.html  一.准备工作 已搭建好的SSH框架工程一个,如果没有,请参考我的上一篇文章< ...