zabbix安装及使用

Zabbix组件构成

Zabbix主要有几个组件构成,分别介绍如下。
(1)Zabbix serverZabbix server是Zabbix的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。它主要负责接收客户端发送的报告和信息,同时,所有配置、统计数据及配置操作数据均由其组织进行。
(2)Zabbix Database StorageZabbix Database Storage主要用于存储数据,所有配置信息和Zabbix收集到的数据都被存储在数据库中。常用的存储设备有MySQL、Oracle、SQLite等。
(3)Zabbix Web界面Zabbix Web界面是Zabbix提供的GUI接口,通常(但不一定)与Zabbix server运行在同一台物理机器上。
(4)Zabbix proxy代理服务器Zabbix proxy代理服务器是一个可选组件,常用于分布监控环境中,代理server可以替Zabbix server收集性能和可用性数据,汇总后统一发往Zabbix server端。
(5)Zabbix agent监控代理Zabbix agent部署在被监控主机上,能够主动监控本地资源和应用程序,并负责收集数据发往Zabbix server端或Zabbix proxy端。

Zabbix服务进程

根据功能和用途,默认情况下Zabbix包含5个进程,分别是zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外还有一个zabbix_java_gateway是可选的功能,需要另外安装。下面分别介绍它们各自的作用。

(1)zabbix_agentd
zabbix_agentd是Zabbix agent监控代理端守护进程,此进程收集客户端数据,例如,CPU负载、内存、硬盘、网络使用情况等。
(2)zabbix_get
zabbix_get是Zabbix提供的一个工具,通常在Zabbix server或者Zabbix proxy端执行,用来获取远程客户端信息。这其实是Zabbix server去Zabbix agent端拉取数据的过程,此工具主要用来进行用户排错。例如,在Zabbix server端获取不到客户端的监控数据时,可以使用zabbix_get命令测试获取客户端数据来做故障排查。
(3)zabbix_sender
zabbix_sender也是Zabbix提供的一个工具,用于发送数据给Zabbix server或者Zabbix proxy。这其实是Zabbix agent端主动推送监控数据到Zabbix server端的过程,通常用于耗时比较长的检查或者有大量主机(千台以上)需要监控的场景。此时通过主动推送数据到Zabbix server,可以在很大程度上减轻Zabbix server的压力和负载。
(4)zabbix_proxy
zabbix_proxy是Zabbix proxy的代理守护进程。功能类似Zabbix server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交或者被提交到Zabbixserver上。
(5)zabbix_java_gateway
zabbix_java_gateway是Zabbix2.0之后引入的一个功能。顾名思义:Java网关,主要用来监控Java应用环境,类似zabbix_agentd进程。需要特别注意的是,它只能主动去推送数据,而不能等待Zabbix Server或者Zabbix Proxy来拉取数据。它的数据最终会给到Zabbix Server或者Zabbix Proxy上。
(6)zabbix_server
zabbix server是整个Zabbix系统的核心进程。其他进程zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到Zabbix server来统一进行处理。

安装、部署Zabbix监控平台

这里用源码方式安装Zabbix server,而通过RPM包方式安装Zabbix agent。

Zabbix Web端是基于Apache或Nginx服务器和PHP脚本语言进行构建的,要求Apache1.3.12或以上版本,PHP5.4.0或以上版本,同时对PHP扩展包也有要求,例如,GD要求2.0或以上版本,LibXML要求2.6.15或以上版本。Zabbix的数据存储支持多种数据库,可以是MySQL、Oracle、PostgreSQL、SQLite等,这里选择MySQL数据库作为后端存储。Zabbix要求MySQL5.0.3或以上版本,同时需要InnoDB引擎。

1.lnmp环境部署

(1)安装Nginx
查看之前的nginx安装,笔记记录。

(2)MySQL的安装(或者mariadb)
这里安装的MySQL,这里使用MySQL5.7.26版本。为了简单方便快速起见,这里使用MySQL官方的yum源进行安装,地址为https://repo.mysql.com,如果要安装MySQL5.7版本,可下载对应版本的yum源,然后在操作系统上安装即可。yum源安装完成后,可通过yum在线安装MySQL,安装过程如下:
在这里插入图片描述
MySQL启动后,系统会自动为root用户设置一个临时密码,可通过grep"password"/var/log/mysqld.log命令获取MySQL的临时密码。

其中,=rpFHM0F_hap就是临时密码。通过此密码即可登录系统。MySQL5.7版本后,对密码安全性加强了很多,临时密码只能用于登录,登录后需要马上修改密码,不然无法执行任何SQL操作,同时,对密码长度和密码强度有了更高要求。通过SQL命令可查看密码策略信息:
在这里插入图片描述
默认,validate_password_length是对密码长度的要求,默认是8。validate_password_policy是对密码强度的要求,有LOW(0)、MEDIUM(1)和STRONG(2)3个等级,默认是1,即MEDIUM,表示设置的密码必须符合长度,且必须含有数字、小写或大写字母、特殊字符。

有时候,只是为了自己测试,不想密码设置得那么复杂,如只想设置root的密码为123456。必须修改两个全局参数:首先,修改validate_password_policy参数的值:

在这里插入图片描述
由于默认要求的密码长度是8,所以还需要修改validate_password_length的值,此参数最小值为4,修改如下:
在这里插入图片描述
上面两个全局参数修改完成后,就可以重置MySQL的root密码了,执行如下命令:
在这里插入图片描述
(3)安装PHP
安装PHP步骤和过程如下所述。
(1)依赖库安装。执行如下命令安装依赖库:

[root@zabbix ~]# yum install libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel curl curl-devel openssl openssl-devel openldap openldap-devel

(2)编译安装PHP7。执行如下命令安装PHP7:

[root@zabbix php-7.3.5]# ./configure --prefix=/application/php-7.3.5 --enable-fpm --with-fpm-user=nginx --with-fpm-group=nginx --with-pdo-mysql=mysqlnd --with-mysqli=mysqlnd --with-zlib --with-curl --with-gd --with-gettext --enable-bcmath --enable-sockets --with-ldap --with-jpeg-dir --with-png-dir --with-freetype-dir --with-openssl --enable-mbstring --enable-xml --enable-session --enable-ftp --enable-pdo --enable-tokenizer --enable-zip 

configure php的时候出现可能会出现下面错误而退出:


configure: error: Cannot find ldap libraries in /usr/lib

解决办法:

cp -frp /usr/lib64/libldap* /usr/lib/


然后再./configure ...即可

可能出现错误:configure: error: Please reinstall the libzip distribution

解决方法:

wget https://libzip.org/download/libzip-1.5.2.tar.gz
 
tar -zxf libzip-1.5.2.tar.gz
 
cd libzip-1.5.2
 
mkdir build
 
cd build 
 
cmake ..
 
make -j4
 
make install
一般出现这个-bash: make: command not found提示,是因为安装系统的时候使用的是最小化mini安装,系统没有安装make、vim等常用命令,直接yum安装下即可。

yum -y install gcc automake autoconf libtool make

如果发现 cmake没有安装,可以下面方法进行安装
1、安装gcc等必备程序包(已安装则略过此步)
yum install -y gcc gcc-c++ make automake 

2、安装wget (已安装则略过此步)
yum install -y wget

3、获取CMake源码包
wget https://cmake.org/files/v3.12/cmake-3.12.0-rc1.tar.gz

4、解压CMake源码包
tar -zxvf cmake-3.12.0-rc1.tar.gz

5、进入cmark的源码目录
cd cmake-3.12.0-rc1

6、运行当前目录下的一个文件
./bootstrap

7、运行命令(这步时间有点长)
gmake

8、进行安装
gmake install

9、安装完成,可阅读install_manifest.txt查看具体都安装了什么,还可以通过cmake --version 查看cmake版本号,如果输出版本号,则安装成功。

可能出现错误:php安装执行configure报错error: off_t undefined; check your library configuration

解决方法:
vim /etc/ld.so.conf 
#添加如下几行
/usr/local/lib64
/usr/local/lib
/usr/lib
/usr/lib64 
#保存退出
:wq
ldconfig -v # 使之生效

可能出现错误:php安装make出现“collect2:error:ldreturned1exitstatus

错误提示:
collect2: error: ld returned 1 exit status

解决办法:
在PHP源码目录下 vi Makefile 找到 EXTRA_LIBS 行,在行末添加 ‘ -llber ‘ 保存退出再次make即可

EXTRA_LIBS 行:

EXTRA_LIBS = -lcrypt -lz -lexslt -lcrypt -lrt -lmysqlclient -lmcrypt -lldap -liconv

-lfreetype -lpng -lz -ljpeg -lcurl -lz -lrt -lm -ldl -lnsl -lxml2 -lz -lm -ldl -lssl

-lcrypto -lcurl -lxml2 -lz -lm -ldl -lssl -lcrypto -lxml2 -lz -lm -ldl -lxml2 -lz -

lm -ldl -lcrypt -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -lz -lm -ldl -lxml2 -

lz -lm -ldl -lxslt -lxml2 -lz -ldl -lm -lcrypt -llber

(3)配置php引擎的配置文件php.ini,找到PHP的配置文件php.ini,

两个模板,开发环境下更多的是开启日志、调试信息,而生产环境下都是关闭状态。

拷贝PHP配置文件到PHP默认目录,并更改文件名称为php.ini:
[root@zabbix php-7.3.5]# pwd
/server/tools/php-7.3.5
[root@zabbix php-7.3.5]# ll php.ini-*
-rw-r--r-- 1 nginx nginx 71648 430 2019 php.ini-development
-rw-r--r-- 1 nginx nginx 71920 430 2019 php.ini-production
[root@zabbix php-7.3.5]# cp php.ini-production /application/php/lib/php.ini
[root@zabbix php-7.3.5]# 

然后修改如下内容:
在这里插入图片描述
将php-fpm.service复制到/usr/lib/systemd/system,即可使用systemd管理php-fpm

[root@zabbix ~]# cp /home/tools/php-7.3.5/sapi/fpm/php-fpm.service /usr/lib/systemd/system

(4)配置lnmp环境
修改Nginx配置文件nginx.conf,添加PHP-FPM的整合配置,这里仅仅给出与PHP-FPM整合的配置,内容如下:

[root@zabbix ~]# cat /usr/local/nginx-1.14.2/conf/nginx.conf
worker_processes  1;
events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;
    keepalive_timeout  65;


    server {
        listen       80;
        server_name  localhost;
        location ~ \.php$ {
            root           html;
            fastcgi_pass   127.0.0.1:9000;
            fastcgi_index  index.php;
            include        fastcgi.conf;
        }

    }
}
[root@zabbix ~]# 

接着,修改PHP-FPM配置文件,启用PHP-FPM默认配置,执行如下操作:
在这里插入图片描述

[root@zabbix ~]# ll /usr/local/php-7.3.5/etc/
总用量 20
-rw-r--r--. 1 root root 1299 612 16:59 pear.conf
-rw-r--r--. 1 root root 5407 612 17:07 php-fpm.conf
-rw-r--r--. 1 root root 5407 612 16:59 php-fpm.conf.default
drwxr-xr-x. 2 root root   46 612 17:07 php-fpm.d
[root@zabbix ~]# 

最后,启动lnmp服务:nginx,php-fpm,mysql(之前已启动)

2.编译安装Zabbix server

安装Zabbix server之前,需要安装一些系统必需的依赖库和插件,这些依赖可通过yum在线安装,同时编译安装zabbix,zabbix源码包可到官网下载,执行如下命令:

依赖包安装
[root@zabbix zabbix-4.0.31]# yum -y install net-snmp net-snmp-devel curl curl-devel libxml2 libevent libevent-devel

接着,创建一个普通用户,用于启动Zabbix的守护进程
[root@zabbix zabbix]# useradd -g zabbix zabbix

zabbix编译安装
[root@zabbix zabbix]# ./configure --prefix=/application/zabbix --with-mysql --with-net-snmp --with-libcurl --enable-server --enable-agent --enable-proxy --with-libxml2
[root@zabbix application]# make && make install

下面解释一下configure的一些配置参数含义。
➢ --with-mysql:表示启用MySQL作为后端存储,如果MySQL客户端类库不在默认的位置(RPM包方式安装的MySQL,MySQL客户端类库在默认位置,因此只需指定--with-mysql即可,无须指定具体路径),需要在MySQL的配置文件中指定路径。指定方法是指定mysql_config的路径,例如,如果是源码安装的MySQL,安装路径为/usr/local/mysql,就可以指定--with-mysql=/usr/local/mysql/bin/mysql_config。
➢ --with-net-snmp:用于支持SNMP监控所需要的组件。
➢ --with-libcurl:用于支持Web监控,VMware监控及SMTP认证所需要的组件,对于SMTP认证,需要7.20.0或以上版本。
➢ --with-libxml2:用于支持VMware监控所需要的组件。另外,编译参数中,--enable-server、--enable-agent、和--enable-proxy分别表示启用Zabbix的server、agent和proxy组件。

由于Zabbix启动脚本路径默认指向的是/usr/local/sbin路径,而Zabbix的安装路径是/application/zabbix,因此,需要提前创建如下软链接:

使用命令 
ln -s  /application/zabbix/sbin/*  /usr/local/sbin/
ln -s  /application/zabbix/sbin/*  /usr/local/bin/
[root@zabbix ~]# ll /usr/local/sbin/
总用量 0
lrwxrwxrwx. 1 root root 38 612 17:38 zabbix_agentd -> /application/zabbix/sbin/zabbix_agentd
lrwxrwxrwx. 1 root root 37 612 17:38 zabbix_proxy -> /application/zabbix/sbin/zabbix_proxy
lrwxrwxrwx. 1 root root 38 612 17:38 zabbix_server -> /application/zabbix/sbin/zabbix_server

[root@zabbix ~]# ll /usr/local/bin/
lrwxrwxrwx. 1 root root       34 612 17:38 zabbix_get -> /application/zabbix/bin/zabbix_get
lrwxrwxrwx. 1 root root       37 612 17:38 zabbix_sender -> /application/zabbix/bin/zabbix_sender

需要注意配置文件是否很正常

3.创建数据库和初始化表

对于Zabbix server和proxy守护进程以及Zabbix前端,都需要连接到一个数据库。Zabbix agent不需要数据库的支持。因此,需要先创建一个用户和数据库,并导入数据库对应的表。先登录数据库,创建一个Zabbix数据库和Zabbix用户,操作如下:

oldboy [(none)]>create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

oldboy [(none)]>grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected, 1 warning (0.00 sec)

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

接下来开始导入Zabbix的表信息,需要执行3个SQL文件,SQL文件在Zabbix源码包中database/mysql/目录下。先进入这个MySQL目录,然后进入SQL命令行,按照如下SQL语句执行顺序导入SQL,执行如下操作:

在这里插入图片描述

4.配置Zabbix server端
Zabbix的安装路径为/application/zabbix,那么Zabbix的配置文件位于/application/zabbix/etc目录下,zabbix_server.conf就是Zabbix server的配置文件,打开此文件,修改如下几个配置项:
在这里插入图片描述
其中,每个选项含义介绍如下。
➢ ListenPort:Zabbix server默认的监听端口。
➢ LogFile:用来指定Zabbix server日志的输出路径。
➢ DBHost:为数据库的地址,如果数据库在本机,可不做修改。
➢ DBName:为数据库名称。
➢ DBUser:为连接数据库的用户名。
➢ DBPassword:为连接数据库对应的用户密码。
➢ ListenIP:为Zabbix server监听的IP地址,也就是Zabbix server启动的监听端口对哪些IP开放。agentd为主动模式时,这个值建议设置为0.0.0.0。
➢ StartPollers:用于设置Zabbix serve服务启动时启动Pollers(主动收集数据进程)的数量。数量越多,则服务端吞吐能力越强,同时对系统资源消耗越大。
➢ StartTrappers:用于设置Zabbix server服务启动时启动Trappers(负责处理agentd推送过来的数据的进程)的数量。agentd为主动模式时,Zabbix Server需要将这个值设置得大一些。
➢ StartDiscoverers:用于设置Zabbix server服务启动时启动Discoverers进程的数量。如果Zabbix监控报Discoverers进程忙时,需要提高该值。
➢ AlertScriptsPath:用来配置Zabbix server运行脚本存放目录,一些供Zabbixserver使用的脚本,都可以放在这里。

接着,还需要添加管理维护Zabbix的脚本并启动服务。可从Zabbix源码包misc/init.d/fedora/core/目录中找到zabbix_server和zabbix_agentd管理脚本,然后复制到/etc/init.d目录下,操作如下:

[root@zabbix ~]# cp /home/tools/zabbix-4.0.31/misc/init.d/fedora/core/zabbix_server /etc/init.d/zabbix_server 
[root@zabbix ~]# cp /home/tools/zabbix-4.0.31/misc/init.d/fedora/core/zabbix_agentd /etc/init.d/zabbix_agentd
同时要给这两个文件添加执行权限,开机启动。

Zabbix server可能会启动失败,抛出如下错误:
在这里插入图片描述
这个问题一般发生在源码方式编译安装MySQL的环境下,可编辑/etc/ld.so.conf文件,添加如下内容:
在这里插入图片描述
其中,/usr/local/mysql是MySQL的安装路径。执行如下操作,即可正常启动Zabbix server:
在这里插入图片描述
5.安装Zabbix-Agent

在这里,我们对需要进行监控的服务器安装Zabbix-Agent,使用RPM包方式进行安装,命令如下:
在这里插入图片描述
也可以先下载,在上传。

配置zabbix_agentd.conf:

Zabbix agent端的配置文件是/etc/zabbix/zabbix_agent.conf,需要修改的内容如下所述。
➢ LogFile=/var/log/zabbix/zabbix_agentd.log #Zabbix agentd日志文件路径。
➢ Server=172.16.213.231 #被动模式,指定Zabbix server端的IP地址(这里也有白名单的作用,若果不指定则任意zabbix服务器端都可以获取zabbix客户端信息)。
➢ StartAgents=3 #指定启动agentd进程的数量,默认是3个。设置为0,表示关闭agentd的被动模式(Zabbix server主动来agent拉取数据)。
➢ ServerActive=172.16.213.231 #启用agentd的主动模式(Zabbix agent主动推送数据到Zabbix server)。启动主动模式后,Agentd将主动将收集到的数据发送到Zabbix server端。ServerActive后面指定的IP就是Zabbix server端的IP。
➢ Hostname=172.16.213.232 #需要监控服务器的主机名或者IP地址。此选择的设置一定要和Zabbix Web端主机配置中对应的主机名一致。
➢ Include=/etc/zabbix/zabbix_agentd.d/#相关配置都可以放到此目录下,自动生效。
➢ UnsafeUserParameters=1 #启用agent端自定义item功能。设置此参数为1后,就可以使用UserParameter指令了。UserParameter用于自定义itme。

6.安装Zabbix GUI

Zabbix Web是PHP代码编写的,因此需要有PHP环境,前面已经安装好了lnmp环境,因此可以直接使用。这里将Zabbix Web安装到/usr/loca/nginx/html目录下,只需将Zabbix Web的代码放到此目录即可。Zabbix Web的代码在Zabbix源码包中的frontends/php目录下,将这个PHP目录复制到/usr/loca/nginx/html目录下并改名为Zabbix即可完成Zabbix Web端的安装。然后做个简单授权,将Zabbix的Web目录授权给系统的nginx用户(这里的用户是安装nginx是添加的,用于管理nginx的用户,用户名按需求配置,不一定有nginx),操作如下:

[root@zabbix ~]# chown -R nginx.nginx /usr/local/nginx-1.14.2/html/zabbix

最后,在浏览器输入http://ip/zabbix,安装程序会检查Zabbix Web运行环境是否满足,单击“Nextstep”按钮进入下一步填写配置页面。配置页面填写后会生成如下配置文件zabbix.conf.php(配置页面需要填写的内容按如下配置文件相应填写即可)

[root@zabbix ~]# cat /usr/local/nginx-1.14.2/html/conf/zabbix.conf.php
<?php
// Zabbix GUI configuration file.
global $DB;

$DB['TYPE']     = 'MYSQL';
$DB['SERVER']   = '127.0.0.1';
$DB['PORT']     = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER']     = 'zabbix';
$DB['PASSWORD'] = 'zabbix';

// Schema name. Used for IBM DB2 and PostgreSQL.
$DB['SCHEMA'] = '';

$ZBX_SERVER      = 'localhost';
$ZBX_SERVER_PORT = '10051';
$ZBX_SERVER_NAME = 'zabbixserver';

$IMAGE_FORMAT_DEFAULT = IMAGE_FORMAT_PNG;
[root@zabbix ~]# 

配置好的信息组成一个配置文件,然后放到Zabbix配置文件目录。如果此目录没有权限的话,就会提示让安装者手动放到指定路径下,这里按照Zabbix的提示进行操作即可。(默认的Zabbix平台登录用户名为Admin,密码为zabbix。)

7.测试Zabbix server监控

如何知道Zabbix server监控已经生效呢,可通过Zabbix server上的zabbix_get命令来完成。在Zabbix server上执行如下命令即可进行测试:

[root@zabbix ~]# /application/zabbix/bin/zabbix_get -s 192.168.3.117 -k "system.uptime"

其中各参数的含义如下所述。
➢ -s:指定Zabbix agent端的IP地址。
➢ -p:指定Zabbix agent端的监听端口。
➢ -k:监控项,即item。
如果有输出结果,表明Zabbix server可以从Zabbix agent获取数据,即配置成功。至此,Zabbix监控平台构建完成了。

-----------------------------------------------我是分割线------------------------------------------------------------

更新内容:测试使用可以使用宝塔面板来安装lnmp环境比较方便

1、使用宝塔面板安装lnmp环境
2、源码安装zabbix
3、配置zabbix GUI

  • 添加站点,这里端口尽量不要使用80
    在这里插入图片描述
  • Zabbix Web的代码在Zabbix源码包中的frontends/php目录下,将这个PHP目录复制到/usr/loca/nginx/html目录下并改名为Zabbix即可完成Zabbix Web端的安装。
  • 授权 chown -R www:www /www/wwwroot/192.163.1.114/
    (这里的www用户和用户组安装宝塔的时候会自动添加的)
  • 在浏览器输入http://ip/zabbix,安装程序会检查Zabbix Web运行环境是否满足
  • 这里出现不满足的项,在 /www/server/php/74/etc/php.ini 处修改
  • 然后设置连接数据库,使用之前导致数据库是设置的密码
  • 测试Zabbix server监控
    /usr/local/zabbix/bin/zabbix_get -s 192.163.1.118 -p 10050 -k “system.uptime”

-------------------------------------------我是分割线---------------------------------------------------------------------

标题模板的管理与使用

模板是Zabbix的核心,因为模板集成了所有要监控的内容以及要展示的图形等。Zabbix的安装部署完成后,自带了很多模板(网络设备模板、操作系统模板、常见应用软件模板

在Zabbix自带的模板中,大部分是可以直接拿来使用的,介绍经常使用的三类模板。
(1)监控系统状态的模板
在这里插入图片描述
(2)监控网络和网络设备的模板
在这里插入图片描述
(3)监控应用软件和服务的模板
在这里插入图片描述
创建应用集
应用集的创建很简单,它其实是一个模板中针对一类监控项的集合,例如,要对CPU的属性进行监控,那么可以创建一个针对CPU的应用集,这个应用集下可以创建针对CPU的多个监控项。

应用集的出现主要是便于对监控项进行分类和管理,在有多个监控项、多种监控类型需要监控的情况下,就需要创建应用集。

创建监控项
监控项是Zabbix监控的基础,默认的模板下都存在了很多监控项。
在这里插入图片描述

每个监控项都对应一个键值,就是具体要监控的内容。键值的写法是有统一规范的,Zabbix针对不同监控项自带了很多键值,用户也可以自定义键值。此外,每个监控项还可以添加对应的触发器,也就是说这个监控项如果需要告警的话,就可以添加一个触发器,触发器专门用来触发告警。当然不是说每个监控项一定要有一个触发器,需要根据监控项的内容而定。

Zabbix可选的监控类型有很多,常用的有Zabbix客户端、Zabbix客户端(主动式)、简单检查、SNMP客户端、Zabbix采集器等类型。Zabbix客户端监控也称为Zabbix客户端(被动式)监控,就是通过在要监控的机器上安装Zabbix agent,然后Zabbix server主动去agent上抓取数据来实现的监控,这是最常用的监控类型。而Zabbix客户端(主动式)监控也需要在被监控的机器上安装Zabbix agent,只不过Zabbix agent会主动汇报数据到Zabbix server,这是与Zabbix客户端(被动式)监控不同的地方。

接着就是对“键值”的设置,这是个难点。键值可以使用Zabbix默认自带的,也可以自定义自己的键值。Zabbix自带了很多键值,可满足90%的需求,例如,这里想对服务器上某个端口的状态做监控,就可以使用net.tcp.service.perf[service,<ip>,<port>]这个键值,此键值就是Zabbix自带的。如果要查看更多Zabbix自带键值,可以单击上图中“键值”选项后面的“选择”按钮,Zabbix自带的键值就可以全部显示出来.

可以看到,Zabbix自带的键值根据监控类型的不同,也分了不同的监控键值种类,每个键值的含义也都做了很详细地描述,可以根据需要监控的内容,选择对应的键值即可。

“net.tcp.service.perf[service,<ip>,<port>]”这个键值用来检查TCP服务的性能,
当服务down时返回0,否则,返回连接服务花费的秒数,此键值既可用在“Zabbix客户端”类型的监控中,
也可用在“简单监控”类型中。这个键值中,net.tcp.service.perf部分是键值的名称,
后面中括号中的内容是键值的监控选项,每个选项含义如下所述。
➢ service:表示服务名,包含SSH、NTP、LDAP、SMTP、FTP、HTTP、POP、NNTP、IMAP、TCP、HTTPS和Telnet。
➢ ip:表示IP地址,默认是127.0.0.1,可留空。
➢ port:表示端口,默认情况为每个服务对应的标准端口,例如,SSH服务是22端口等。

此键值返回的信息类型是浮点型的,因此,在“信息类型”中要选择“浮点数”。在创建监控项中,
还有一个“更新间隔”,这个是用来设置多久去更新一次监控数据,可根据对监控项灵敏度的需求来设定,
默认是30s更新一次。

构建Zabbix监控,推荐的做法是,首先创建一个模板,然后在此模板下创建需要的监控项、触发器等内容,最后在添加主机时直接将此模板链接到每台主机下即可,这样,每台主机就自动链接上了模板中的所有监控项和触发器

创建触发器
触发器是用于故障告警的一个设置。为一个监控项添加触发器后,此监控项如果出现问题,就会激活触发器,触发器将自动连接告警动作,触发告警。
在这里插入图片描述
这里面的难点是表达式的编写,要学会写触发器表达式,首先需要了解表达式中常用的一些函数及其含义。从上图可以看到,有diff、avg、last和nodata等这些标识,这就是触发器表达式中的函数。下面就介绍一下常用的一些触发器表达式函数及其含义。

1.diff参数:不需要参数。支持值类型:float、int、str、text、log。作用:返回值为1表示最近的值与之前的值不同,即值发生变化,0表示无变化。

2.last参数:#num。支持值类型:float、int、str、text、log。作用:获取最近的值,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的。例如,last(0)或last()等价于last(#1),表示获取最新的值,last(#3)表示最近第3个值(并不是最近的三个值)。注意,last函数使用不同的参数将会得到不同的值,#2表示最近第2新的数据。例如,从老到最新值为1、2、3、4、5、6、7、8、9、10,last(#2)得到的值为9,last(#9)得到的值为2。另外,last函数必须包含参数。

3.avg参数:秒或#num。支持类型:float、int。作用:返回一段时间的平均值。例如,avg(5)表示最后5s的平均值,avg(#5)表示最近5次得到值的平均值,avg(3600,86400)表示一天前的1h的平均值。如果仅有一个参数,表示指定时间的平均值,从现在开始算起;如果有第2个参数,表示漂移,从第2个参数前开始算时间。#n表示最近n次的值。

4.change参数:无须参数。支持类型:float、int、str、text、log。作用:返回最近获得值与之前获得值的差值,返回字符串0表示相等,1表示不同。例如,change(0)>n表示最近得到的值与上一个值的差值大于n,其中,0表示忽略参数。

5.nodata参数:秒。支持值类型:any。作用:探测是否能接收到数据,当返回值为1表示指定的间隔(间隔不应小于30s)没有接收到数据,0表示其正常接收数据。

6.count参数:秒或#num。支持类型:float、int、str、text、log。作用:返回指定时间间隔内数值的统计。例如,count(600)表示最近10min得到值的个数,count(600,12)表示最近10min得到值的个数等于12。其中,第1个参数是指定时间段,第2个参数是样本数据。

7.sum参数:秒或#num。支持值类型:float、int。作用:返回指定时间间隔中收集到的值的总和,时间间隔作为第1个参数支持秒或收集值的数目(以#开始)。例如,sum(600)表示在600s之内接收到所有值的和,sum(#5)表示最后5个值的和。在了

创建主机组和主机
这里不过多描述

触发器动作配置
触发器动作配置其实是设置监控项在故障时发出的信息,以及故障恢复后发送的信息,动作的“名称”可以随意设置,动作的状态设置为“已启用”。接着切换到“操作”选项卡,此选项卡是设置监控项在故障时发送信息的标题和消息内容以及一些发送的频率和接收人,

在这个界面中,重点是设置发送消息的“默认操作步骤持续时间”“默认标题”以及“消息内容”。“默认操作步骤持续时间”就是监控项发生故障后,持续发送故障信息的时间,这个时间范围为60~604800,单位是s。
在这里插入图片描述
“默认标题”以及“消息内容”是通过Zabbix的内置宏变量实现的,“默认标题”添加的内容如下:故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!“消息内容”添加的内容如下。

在这里插入图片描述
这里面的变量{TRIGGER.STATUS}、{TRIGGER.SEVERITY}、{TRIGGER.NAME}、{HOST.NAME}等都是Zabbix的内置宏变量,不需要加$就可以直接引用。这些宏变量会在发送信息的时候转换为具体的内容。

“默认标题”以及“消息内容”设置完成后,还需配置消息内容的发送频率和接收人,,“默认标题”添加的内容如下:恢复{TRIGGER.STATUS},服务器:{HOSTNAME1}:{TRIGGER.NAME}已恢复!

监控状态查看

图形显示由于使用的是中文界面,在图形展示数据的时候,可能会在左下角有中文的地方出现乱码,这是默认编码非中文字体导致的,需要简单做一些处理,过程如下所述。
1)进入C:\Windows\Fonts,选择其中任意一种中文字体,如黑体(SIMHEI.TTF)。
2)将Windows下的中文字体文件上传到Zabbix Web目录下的fonts目录(本例是/usr/local/nginx/html/zabbix/assets/fonts)。
3)修改Zabbix的Web前端的字体设置。打开/usr/local/nginx/html/zabbix/include/defines.inc.php文件,找到如下两行:

这里是修改过的:
define(‘ZBX_GRAPH_FONT_NAME’, ‘simhei’); // font file name
define(‘ZBX_FONT_NAME’, ‘simhei’);

------------------------------------------------------我是分割线----------------------------------------------------------

Zabbix自动发现、自动注册和自定义监控的实现

通过Zabbix提供的自动注册和自动发现功能,就可以实现主机的批量添加
。Zabbix的发现包括3种类型。
➢ 自动网络发现(Network discovery)。
➢ 主动客户端自动注册(Active agent auto-registration)。
➢ 低级别发现(low-level discovery)。

Zabbix网络发现基于以下信息。
➢ IP段自动发现。
➢ 可用的外部服务(FTP、SSH、WEB、POP3、IMAP和TCP等)。
➢ 从Zabbix客户端接收到的信息。
➢ 从SNMP客户端接收到的信息。

1.自动发现的原理网络发现由两个步骤组成:发现和动作(action)。Zabbix周期性地扫描在网络发现规则中定义的IP段。根据每一个规则配置自身的检查频率。每一个规则都定义了一个对指定IP段的服务检查集合。动作是对发现的主机进行相关设置的过程,常用的动作有添加或删除主机、启用或停用主机、添加主机到某个组中、发现通知等。

2.配置网络发现规则
单击Web界面的“配置”菜单,然后选择“自动发现”,即可创建一个发现规则,Zabbix会自动扫描192.168.171.149这个IP,测试IP的22端口,如果能获取到数据,那么就把这台主机加入到自动发现规则中。
在这里插入图片描述
自动发现规则添加完成后,接着,就可以添加自动发现动作了。单击Web界面的“配置”菜单,然后选择“动作”,在右上角事件源选择“自动发现”,接着单击“创建动作”按钮,即可创建一个自动发现的动作在这里插入图片描述
在自动发现动作配置界面中,难点是设置自动发现的条件。“计算方式”选择默认的“与/或(默认)”即可。要添加触发条件,可以在“新的触发条件”选项下选择触发条件,触发条件有非常多,这里选择红框内的4个即可。选择完成后,单击“添加”就把选择的触发条件添加到了上面的“条件”选项中。
在这里插入图片描述
除了自动发现条件的设置,还需要设置自动发现后操作的方式
在这里插入图片描述

此界面是设置自动发现主机后,要执行哪些操作,这里重点是设置操作的细节。单击左下角的“新的”按钮可以设置多个操作动作,一般情况下设置4个即可,也就是发现主机后,首先自动将这个主机添加到Zabbix Web上来,然后将“Linux servers”主机组和“Template OS Linux”模板也自动链接到此主机下,最后在Zabbix Web中启用这个主机。

经过三个步骤的操作,Zabbix的自动发现配置就完成了
在这里插入图片描述

主动客户端自动注册

自动注册(agent auto-registration)功能主要用于agent主动且自动向server注册。与前面的Network discovery具有同样的功能,但是这个功能更适用于特定的环境,当有一个条件未知(如agent端的IP地址段、agent端的操作系统版本等信息)时,agent去请求server仍然可以实现主机自动添加到Zabbix Web中的功能。

配置主动客户端自动注册有两个步骤。➢ 在客户端配置文件中设置参数。➢ 在Zabbix Web中配置一个动作(action)。

1.客户端修改配置文件打开客户端配置文件zabbix_agentd.conf,修改如下配置。
➢ Server=192.168.171.148
➢ ServerActive=192.168.171.148 #这里是主动模式下Zabbix server服务器的地址
➢ Hostname=elk_192.168.171.150
➢ HostMetadata=linux zabbix.test。#这里设置了两个元数据,一个是告诉自己是Linux服务器,另一个就是写一个通用的带有公司标识的字符串。自动注册请求发生在每次客户端发送一个刷新主动检查请求到服务器时。请求的延时在客户端中配置文件zabbix_agentd.conf的RefreshActiveChecks参数中指定。第1次请求将在客户端重启之后立即发送。

2.配置网络自动注册规则
单击Web界面的“配置”菜单,然后选择“动作”,在右上角事件源选择“自动注册”,接着单击“创建动作”按钮,即可创建一个自动注册的动作

在自动注册动作配置界面中,难点是设置自动注册的条件。“计算方式”选择默认的“与/或(默认)”即可。要添加触发条件,可以在“新的触发条件”选项下选择触发条件,触发条件有非常多,这里选择框内的两个即可,这两个条件其实都是在Zabbix agent端手工配置上去的。选择完成后,单击“添加”按钮就把选择的触发条件添加到了上面的“条件”选项中。

在这里插入图片描述
除了自动注册条件的设置,还需要设置自动注册后操作的方式
在这里插入图片描述
此界面是设置自动注册主机后,要执行哪些操作,这里重点是设置操作的细节。单击左下角的“新的”按钮可以设置多个操作动作,一般情况下设置4个即可,也就是发现主机后,首选自动将这个主机添加到Zabbix Web上来,然后将“Discovered hosts”主机组和“Template OS Linux”模板也自动链接到此主机下,最后在Zabbix Web中启用这台主机。经过两个步骤的操作,Zabbix的自动注册配置就完成了

低级别发现Low-level discovery(LLD)

在对主机的监控中,可能出现这样的情况,例如,对某主机网卡eth0进行监控,可以指定需要监控的网卡是eth0,而将网卡作为一个通用监控项时,根据主机操作系统的不同,网卡的名称也不完全相同,有些操作系统的网卡名称是eth开头的,而有些网卡名称是em开头的,还有些网卡是enps0开头的。遇到这种情况,如果分别针对不同的网卡名设置不同的监控项,那就太烦琐了,此时使用Zabbix的低级发现功能就可以解决这个问题。

在Zabbix中,支持几种现成类型的数据项发现。
➢ 文件系统发现。➢ 网络接口发现。
➢ SNMP OID发现。
➢ CPU核和状态。下面是Zabbix自带的LLD key。

可以用zabbix-get来查看key获取的数据。对于SNMP,不能通过zabbix-get来验证,只能在Web页面中进行配置使用。下面是zabbix-get的一个例子
在这里插入图片描述
其中,{#IFNAME}是一个宏变量,会返回系统中所有网卡的名字。宏变量可以定义在主机、模板以及全局,宏变量都是大写的。使用宏变量,可以使Zabbix功能更加强大。

在自动发现中使用Zabbix自带的宏,固定的语法格式为:

{#MACRO}

Zabbix还支持用户自定义的宏,这些自定义的宏也有特定的语法:

{$MACRO}

在LLD中,常用的内置宏有{#FSNAME}、{#FSTYPE}、{#IFNAME}、{#SNMPINDEX}、{#SNMPVALUE}等。其中,{#FSNAME}表示文件系统名称,{#FSTYPE}表示文件系统类型,{#IFNAME}表示网卡名称,{#SNMPINDEX}会获取OID中最后一个值,例如:(注意这里要去获取snmp服务的设备)
在这里插入图片描述
那么,{#SNMPINDEX}、{#SNMPVALUE}获取到的值为:
在这里插入图片描述

宏的级别有多种,其优先级由高到低顺序如下。
➢ 主机级别的宏优先级最高。
➢ 第1级模板中的宏。
➢ 第2级模板中的宏。
➢ 全局级别的宏。
因此,Zabbix查找宏的顺序为:首选查找主机级别的宏,如果在主机级别不存在宏设置,那么Zabbix就会去模板中看是否设置有宏。如果模板中也没有,将会查找使用全局的宏。若是在各级别都没找到宏,将不使用宏

Zabbix自定义监控项

当监控的项目在Zabbix预定义的key中没有定义时,可以通过编写Zabbix的用户参数的方法来监控要求的项目item。形象一点说Zabbix代理端配置文件中的User parameters就相当于通过脚本获取要监控的值,然后把相关的脚本或者命令写入到配置文件中的User parameter中,Zabbix server读取配置文件中的返回值,通过处理前端的方式返回给用户

在zabbix_agent.conf文件中开启如下参数:

在这里插入图片描述

启用agent端自定义item功能,设置此参数为1后,就可以使用UserParameter指令了。
UserParameter用于自定义itme。语法格式为:
在这里插入图片描述
其中,UserParameter为关键字,key为用户自定义,key的名字可以随便起,为要运行的命令或者脚本。下面是一个简单的例子:
在这里插入图片描述
此例子表示当在服务器端添加item的key为ping时,代理程序将会永远返回1。再看一个稍微复杂的例子:
在这里插入图片描述
此例子表示当执行mysqladmin -uroot ping命令的时候,如果MySQL存活要返回mysqld is alive。通过grep-c来计算mysqld is alive的个数,如果MySQL存活着,则个数为1,如果不存活,明显mysqld is alive的个数为0,通过这种方法可以来判断MySQL的存活状态。当在服务器端添加item的key为mysql.ping时候,对于Zabbix代理程序,如果MySQL存活,则状态将返回1,否则,状态将返回0。

2.让key接受参数
让key也接受参数的方法使item添加时更具备了灵活性,例如,下面这个系统预定义key:

在这里插入图片描述

其中,mode模式就是用户要接受的参数,当为free时,则返回的为内存的剩余大小,如果为userd时,返回的是内存已经使用的大小。相关语法如下:在这里插入图片描述

Zabbix的主动模式与被动模式

默认情况下,Zabbix server会直接去每个agent上抓取数据,这对于Zabbix agent来说,是被动模式,也是默认的一种获取数据的方式。但是,当Zabbix server监控主机数量过多的时候,由Zabbix server端去抓取agent上的数据,Zabbix server会出现严重的性能问题,主要表现如下。
➢ Web操作很卡,容易出现502错误。
➢ 监控图形中图层断裂。
➢ 监控告警不及时。

主要从两个方面进行优化,分别是:通过部署多个Zabbix proxy模式做分布式监控和调整Zabbix agentd为主动模式

Zabbix agentd主动模式的含义是agentd端主动汇报自己收集到的数据给Zabbix server,这样,Zabbix server就会空闲很多,下面介绍下如何开启agent的主动模式。

Hostname=waf_192.168.171.150
StartAgents=1
ServerActive=192.168.171.148

ServerActive是指定agentd收集的数据往哪里发送;Hostname必须要和Zabbix Web端添加主机时的主机名对应起来,这样Zabbix server端接收到数据才能找到对应关系;StartAgents默认为3,要关闭被动模式,设置StartAgents为0即可,关闭被动模式后,agent端的10050端口也关闭了,这里为了兼容被动模式,没有把StartAgents设为0,如果一开始就是使用主动模式的话,建议把StartAgents设为0,关闭被动模式

2.Zabbix server端配置调整如果开启了agent端的主动发送数据模式,还需要在Zabbix server端修改如下两个参数,保证性能。
➢ StartPollers=10:把这个Zabbix server主动收集数据进程减少一些。
➢ StartTrappers=200:把这个负责处理agentd推送过来数据的进程调大一些。

3.调整模板因为收集数据的模式发生了变化,因此还需要把所有的监控项的监控类型由原来的“Zabbix客户端”改成“Zabbix客户端(主动式)”。

这样经过3个步骤的操作,就完成了主动模式的切换。

  • 3
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值