2、zabbix工作原理及安装配置

 

Zabbix架构:zabbix基本术语、zabbix安装、配置和应用

Zabbix架构中的组件:

zabbix-server:C语言    zabbix-server和zabbix-agent通过zabbix协议来工作

OS:zabbix-agent:C语言   

zabbix-web:GUI接口,是zabbix的配置接口,监控哪些主机、指标以及如何报警等都需要通过zabbix-web GUI配置,使用http协议或者https协议

zabbix-proxy:分布式监控环境中的专用组件

 

zabbix-database:MySQL,PGSQL(postgreSQL),Oracle,DB2,SQLite(不是zabbix的原生组件)

Zabbix架构描述

zabbix-server对zabbix-agent端收集数据有两种方式:

1、zabbix-server自身直接联系agent端来获取数据,周期性获取数据。

2、使用zabbix-get来获取数据,通过手动写脚本或者在命令行中使用程序收集数据,一般用来测试。

zabbix-agent端 zabbix-agentd 是一个守护进程,包括监听的地址和端口,监听在一个套接字上等待监控端收集数据。

如果zabbix-server定义了工作在被动模式下,agent端就会通过zabbix-sender模式主动发送数据给server端。

对于database的数据设定,可以通过zabbix-web实现提供gui接口,由于web是使用php开发的,所以需要一个LAMP平台,在LAMP平台上部署上zabbix-web,控制人员通过浏览器连入GUI接口,完成对zabbix所要监听的指标进行设定。

无论是使用zabbix-server还是zabbix-agent或者zabbix-proxy都需要为它们提供储存服务。

zabbix-server、Database和zabbix web gui三个可以定义在同一个主机上也可以分别定义在不同的主机上,但是必须要保证sever和web gui必须要连接上Database。

核心组件3部分:

  • zabbix-server
  • database
  • zabbix web gui

zabbix的三种监控机制:

1、server端周期性的发送收集数据的请求给agent端,agent验证没有问题后就把收集好的数据发送到server端

2、pull,对客户端而言是被动监控,对agent端是主动的。server端不再主动向agent端poll(拉取)数据,而是agent端定期向server端send数据,这种机制就是ServerActive机制。 

3、trapper监控机制:server端可能之前并不知道agent端,突然agent端主动向server端发送数据,这就需要server端捕获这些数据。

Zabbix常用术语

1、主机(host):要监控的网络设备,可有IP或DNS名称指定;

2、主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组内的主机和模板不能互相连接;主机组通常在给用户或用户组指派监控权限时使用;

3、监控项(item):一个特定监控指标的相关数据,这些数据来自于被监控对象;item是zabbix进行数据收集的核心,没有item,将没有数据;相对某监控对象来说,每个item都有"key"进行标识

4、触发器(trigger):一个表达式,用于评估某监控对象的某特定item内所接收到的数据是否在合理范围内,即阈值;接收到的数据量大于阈值时,触发器状态将从"OK"转变为"problem",

                  当数据量再次回归到合理范围时,其状态将从"problem"转换回"OK";

5、事件(event):即发生的一个值得关注的事情,例如触发器的状态转变,新的agent或重新上线的agent的自动注册等;

6、动作(action):指对于特定事件事先定义的处理方法,通过包含操作(如发送通知)和条件(何时执行操作);

7、报警升级(escalation):发送报警或执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;

8、媒介(media):发送通知的手段或通道,如Email、jabber或SMS等;

9、通知(notification):通过选定的媒介向用户发送的有关事件的信息;

10、远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;

11、模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule(低级别发现规则,相当消耗资源,一般不用);模板可以直接连接至单个主机;

12、应用(application):一组item的集合;

13、web场景(web scennario):用于检测web站点可用性一个或多个HTTP请求;

14、前端(frontend):zabbix的web接口

Zabbix的逻辑架构

 

zabbix启动的进程

部署zabbix硬件要求 

Zabbix产生的数据主要由四部分组成:(database存储空间如何计算)

配置数据:

历史数据:每一次采集大概有50Bytes

历史趋势数据:每一个采集大概有128Bytes

时间数据:每一个采集大概有130Bytes

Zabbix frontend 前端对于安装软件的要求

Zabbix server 服务器端对于安装软件的要求

安装zabbix服务器端的步骤

1、安装zabbix-server

2、安装zabbix web interface

zabbix部署要求:

如果不使用分布式监控,则zabbix-proxy可以不部署。主要就是zabbix-server和zabbix-agent,其他还有zabbix-web和zabbix-database;

那么要准备好database数据库和LAMP平台,那么LAMP中的M即数据库要指向database。

 

配置环境

监控端: node1:192.168.128.131  安装zabbix-server zabbix-database、zabbix web

被监控端:node2:192.168.128.132  作为第一个被监控端,是agentd的部署节点

被监控端:winXP:作为第二个被监控端,也部署agent端

安装演示

在node1节点即192.168.128.131上安装,这台主机既是zabbix-server、zabbix-agent(要监控自己)、zabbix web、Database,所以在安装程序是就要安装程序包:zabbix-server、zabbix-web和zabbix-agent,

同时这些程序还要依赖其他程序,所以要解决好程序包依赖。之前database已经安装了,这里不再安装。

server端需要的程序有:(注意不同版本需要安装的软件包有差异) 可对比:http://repo.zabbix.com/zabbix/    http://blog.51cto.com/12262646/2108445

zabbix-server-mysql

zabbix-get

web端需要的程序有:

zabbix-web

zabbix-web-mysql

agent端需要的程序有:

zabbix-agent

zabbix-sender

准备数据库 

# yum install mariadb-server   //首先安装数据库服务即database

# vim /etc/my.cnf

innodb_file_per_table = 1 
skip_name_resolve = 1

# systemctl restart mariadb

[root@node1 ~]# mysql    
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 3
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> create database zabbix character set utf8;   //创建zabbix数据库
Query OK, 1 row affected (0.01 sec)

MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'192.168.128.%' identified by '123456';  //创建用户zbxuser,并对此用户授权访问数据库zabbix,以此作为zabbix server/web
Query OK, 0 rows affected (0.00 sec)                                                          //访问这个数据库服务器的一个用户。

MariaDB [(none)]> grant all on zabbix.* to 'zbxuser'@'node1' identified by '123456';   //由于mariadb会对本机主机名做解析,所以允许本机主机访问数据库。
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [(none)]> exit
Bye
[root@node1 ~]# mysql -uzbxuser -h192.168.128.131 -p    //此时新创建的用户是否可以连接数据库
Enter password:  
Welcome to the MariaDB monitor.  Commands end with ; or g.
Your MariaDB connection id is 5
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> exit
Bye

# yum install httpd

安装zabbix即相关程序包

[root@node1 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm 

或者:

[root@node1 yum.repos.d]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

# yum install zabbix-server zabbix-server-mysql zabbix-get zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender  

# cd /etc/zabbix/   //生成如下文件                        //注意server端一般也需要安装server-agent和sender,因为server端也需要监控自己

web  zabbix_agentd.conf  zabbix_agentd.d  zabbix_server.conf

# systemctl start httpd   //在配置zabbix web之前,启动web服务器

# ls /etc/httpd/conf.d/   //注意安装zabbix web后,此目录下会有zabbix.conf文件,但是要重启/重载httpd服务器
   autoindex.conf php.conf README userdir.conf welcome.conf zabbix.conf

导入数据到msqyl中

# ls /usr/share/doc/zabbix-server-mysql-4.0.3/
    AUTHORS ChangeLog COPYING create.sql.gz NEWS README

# zcat create.sql.gz | mysql -uzbxuser -h192.168.128.131 -p123456 zabbix   //将数据导入zabbix

# mysql -uzbxuser -h192.168.128.131 -p   //查看收据是否导入

[root@node1 ~]# mysql -uzbxuser -h192.168.128.131 -p123456
Welcome to the MariaDB monitor. Commands end with ; or g.
Your MariaDB connection id is 1008
Server version: 5.5.60-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.

MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zabbix |
+--------------------+

MariaDB [(none)]> use zabbix;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
MariaDB [zabbix]> show tables;
+----------------------------+
| Tables_in_zabbix           |
+----------------------------+
| acknowledges               |
| actions                    |
| alerts                     |
| application_discovery      |
| application_prototype      |
| application_template       |
| applications               |
.......

  | timeperiods |
  | trends |
  | trends_uint |
  | trigger_depends |
  | trigger_discovery |
  | trigger_tag |
  | triggers |
  | users |
  | users_groups |
  | usrgrp |
  | valuemaps |
  +----------------------------+
  127 rows in set (0.01 sec)

修改zabbix的主配置文件制定mysql服务器的相关操作

# cd /etc/zabbix/

# vim zabbix_server.conf  

# ListenPort=10051   //zabbix默认监听的端口是10051

# SourceIP=   //向外发起连接时,向外界展示的IP,如果有多个需要指定

LogFile=/var/log/zabbix/zabbix_server.log    //日志文件

LogFileSize=0   //日志滚动,0表示禁止

# DebugLevel=3   //日志级别,默认是3

# DBHost=localhost   //数据库服务器节点,默认是localhost,如果database和zabbix在同一个节点即是本机,尽量用localhost,这样通信会更快
DBHost=192.168.128.131  //这里为了演示指定节点IP

DBName=zabbix   //这里确保是之前创建的database的name

DBUser=zbxuser

DBPassword=123456

# find / -name mysql.sock
   /var/lib/mysql/mysql.sock

# DBSocket=/tmp/mysql.sock    //如果基于本机即localhost通信,则此项一定要修改正确,找到mysql.sock的位置
DBSocket=/var/lib/mysql.sock  //由于本次实验前面已经修改基于IP通信,所以此次可以不做修改

后面就是修改zabbix中子进程启动的个数,仍然在zabbix的主配置文件:zabbix_server.conf进行修改,这里不再修改

# rpm -ql zabbix-server-mysql   //到版本3以后已经没有zabix和zabbix-server单独安装包了。

/etc/logrotate.d/zabbix-server

/etc/zabbix/zabbix_server.conf    //主配置文件
/usr/lib/systemd/system/zabbix-server.service   //主程序
/usr/lib/tmpfiles.d/zabbix-server.conf
/usr/lib/zabbix/alertscripts
/usr/lib/zabbix/externalscripts
/usr/sbin/zabbix_server_mysql
/usr/share/doc/zabbix-server-mysql-3.2.11
/usr/share/doc/zabbix-server-mysql-3.2.11/AUTHORS
/usr/share/doc/zabbix-server-mysql-3.2.11/COPYING
/usr/share/doc/zabbix-server-mysql-3.2.11/ChangeLog
/usr/share/doc/zabbix-server-mysql-3.2.11/NEWS
/usr/share/doc/zabbix-server-mysql-3.2.11/README
/usr/share/doc/zabbix-server-mysql-3.2.11/create.sql.gz  
/usr/share/man/man8/zabbix_server.8.gz
/var/log/zabbix
/var/run/zabbix    

# systemctl start zabbix-server   //启动服务

# ss -tunlp   //可以看出zabbix启动了很多的子进程

users:(("zabbix_server",pid=7956,fd=6),("zabbix_server",pid=7955,fd=6),("zabbix_server",pid=7954,fd=6),("zabbix_server",pid=7953,fd=6),("zabbix_server",pid=7952,fd=6),("zabbix_server",pid=7951,fd=6),("zabbix_server",pid=7950,fd=6),("zabbix_server",pid=7949,fd=6),("zabbix_server",pid=7948,fd=6),("zabbix_server",pid=7940,fd=6),("zabbix_server",pid=7939,fd=6),("zabbix_server",pid=7938,fd=6),("zabbix_server",pid=7937,fd=6),("zabbix_server",pid=7936,fd=6),("zabbix_server",pid=7935,fd=6),("zabbix_server",pid=7934,fd=6),("zabbix_server",pid=7933,fd=6),("zabbix_server",pid=7932,fd=6),("zabbix_server",pid=7931,fd=6),("zabbix_server",pid=7930,fd=6),("zabbix_server",pid=7929,fd=6),("zabbix_server",pid=7928,fd=6),("zabbix_server",pid=7927,fd=6),("zabbix_server",pid=7926,fd=6),("zabbix_server",pid=7924,fd=6),("zabbix_server",pid=7923,fd=6),("zabbix_server",pid=7922,fd=6),("zabbix_server",pid=7917,fd=6))

users:(("zabbix_server",pid=7956,fd=7),("zabbix_server",pid=7955,fd=7),("zabbix_server",pid=7954,fd=7),("zabbix_server",pid=7953,fd=7),("zabbix_server",pid=7952,fd=7),("zabbix_server",pid=7951,fd=7),("zabbix_server",pid=7950,fd=7),("zabbix_server",pid=7949,fd=7),("zabbix_server",pid=7948,fd=7),("zabbix_server",pid=7940,fd=7),("zabbix_server",pid=7939,fd=7),("zabbix_server",pid=7938,fd=7),("zabbix_server",pid=7937,fd=7),("zabbix_server",pid=7936,fd=7),("zabbix_server",pid=7935,fd=7),("zabbix_server",pid=7934,fd=7),("zabbix_server",pid=7933,fd=7),("zabbix_server",pid=7932,fd=7),("zabbix_server",pid=7931,fd=7),("zabbix_server",pid=7930,fd=7),("zabbix_server",pid=7929,fd=7),("zabbix_server",pid=7928,fd=7),("zabbix_server",pid=7927,fd=7),("zabbix_server",pid=7926,fd=7),("zabbix_server",pid=7924,fd=7),("zabbix_server",pid=7923,fd=7),("zabbix_server",pid=7922,fd=7),("zabbix_server",pid=7917,fd=7))

修改php的时区

# vim /etc/php.ini   

 [Date]

; Defines the default timezone used by the date functions
; http://php.net/date.timezone
;date.timezone =   //这里默认是不启动的
date.timezone = Asia/Shanghai  //修改为当前主机所在时区

# systemctl restart httpd

在浏览器中输入:http://192.168.128.131/zabbix/setup.php

由于当前server端没有配置agent,所以server端无法监控主机,下面就为server端配置agent。

# vim /etc/zabbix/zabbix_agentd.conf 

Server=127.0.0.1,192.168.128.131   //指明服务器是哪个主机,是基于IP的授权机制,即允许这个IP的zabbix-server来本地获取数据,可以有多个。

ServerActive=127.0.0.1,192.168.128.131 //作为agent端,可以通知server端来获取数据,这里就定义了agent端通知哪个服务器来获取数据,可多个

   //注意127.0.0.1表示本机,如果server端又作为agent时,127.0.0.1一定不能去掉,如果获取server端就无法获取自身的监控数据了。

Hostname=node1  //Hostname是指在对应的节点实现自动发现时(比如agent端自动联系server端时,agent端会告诉server端自己的主机名是什么),因此在zabbix支持由各agent端主动推送数据时,这个Hostname一定要全局唯一,不要与其他agent端的主机名冲突,可以使用DNS解析或主机名。

# systemctl start zabbix-agent   

# ss -tunlp

tcp   LISTEN     0      128                          *:10050                   *:*                   users:(("zabbix_agentd",pid=26330,fd=4),("zabbix_agentd",pid=26329,fd=4),("zabbix_agentd",pid=26328,fd=4),("zabbix_agentd",pid=26327,fd=4),("zabbix_agentd",pid=26326,fd=4),("zabbix_agentd",pid=26325,fd=4),("zabbix_agentd",pid=26324,fd=4))

此时只需要在Status点击Disabled改为Enabled就可以监控zabbix-server了

改为Enabled后就可以对agent做监控了,而后zabbix-server开始探测被监控给主机是否在线,如果在线就检测主机上的各个Items。

在一个主机上配置的条目有很多,其中Items是核心,从上图可以看出Items有64个,这些Items是从zabbix内部模板中来的。

定义一个zabbix监控的其他主机,需要在被监控主机上部署上agent,然后在仪表盘的Hosts中手动Create host,把node2(192.168.128.132)添加进来,示例演示如下:

[root@node2 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/3.2/rhel/7/x86_64/zabbix-release-3.2-1.el7.noarch.rpm

# yum install zabbix-agent zabbix-sender  //只需安装与agent相关的程序包

# vim /etc/zabbix/zabbix_agentd.conf    //修改agent端的文件配置

Server=192.168.128.131   //因为node2只是agent端,不是server端,所以不需要127.0.0.1了

ServerActive=192.168.128.131   

Hostname=node2

# systemctl start zabbix-agent

# ss -tunlp

tcp   LISTEN     0      128                   *:10050          *:*                   users:(("zabbix_agentd",pid=4271,fd=4),("zabbix_agentd",pid=4270,fd=4),("zabbix_agentd",pid=4269,fd=4),("zabbix_agentd",pid=4268,fd=4),("zabbix_agentd",pid=4267,fd=4),("zabbix_agentd",pid=4266,fd=4))

 

 

 

 

原文地址:https://www.cnblogs.com/hanshanxiaoheshang/p/9498355.html