1.zabbix监控的相关概念
1.为什么要监控
在需要的时刻,提前提醒我们服务器出问题了
当出问题之后,可以找到问题的根源
网站/服务器 的可用性
网站可用性介绍
在软件系统的高可靠性(也称为可用性,英文描述为HA,High Available)里有个衡量其可靠性的标准——X个9,这个X是代表数字3~5。X个9表示在软件系统1年时间的使用过程中,系统可以正常使用时间与总时间(1年)之比,我们通过下面的计算来感受下X个9在不同级别的可靠性差异。
1个9:(1-90%)*365=36.5天,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是36.5天 2个9:(1-99%)*365=3.65天 , 表示该软件系统在连续运行1年时间里最多可能的业务中断时间是3.65天 3个9:(1-99.9%)*365*24=8.76小时,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是8.76小时。 4个9:(1-99.99%)*365*24=0.876小时=52.6分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是52.6分钟。 5个9:(1-99.999%)*365*24*60=5.26分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是5.26分钟。 6个9:(1-99.9999%)*365*24*60*60=31秒, 示该软件系统在连续运行1年时间里最多可能的业务中断时间是31秒
2.监控什么东西
监控一切需要监控的东西,只要能够想到,能够用命令实现的都能用来监控
监控范畴
3.怎么来监控
远程管理服务器
如果想远程管理服务器就有远程管理卡,比如Dell idRAC,HP ILO,IBM IMM
监控硬件
查看硬件的温度/风扇转速,电脑有鲁大师,服务器就有ipmitool。
使用ipmitool实现对服务器的命令行远程管理
yum -y install OpenIPMI ipmitool #->IPMI在物理机可以成功,虚拟机不行 [root@KVM ~]# ipmitool sdr type Temperature Temp | 01h | ns | 3.1 | Disabled Temp | 02h | ns | 3.2 | Disabled Temp | 05h | ns | 10.1 | Disabled Temp | 06h | ns | 10.2 | Disabled Ambient Temp | 0Eh | ok | 7.1 | 22 degrees C Planar Temp | 0Fh | ns | 7.1 | Disabled IOH THERMTRIP | 5Dh | ns | 7.1 | Disabled CPU Temp Interf | 76h | ns | 7.1 | Disabled Temp | 0Ah | ns | 8.1 | Disabled Temp | 0Bh | ns | 8.1 | Disabled Temp | 0Ch | ns | 8.1 | Disabled
查看CPU相关
lscpu、uptime、top、htop vmstat mpstat
其中htop需要安装,安装依赖与epel源。
[znix@clsn ~]$lscpu Architecture: x86_64 CPU op-mode(s): 32-bit, 64-bit Byte Order: Little Endian CPU(s): 1 On-line CPU(s) list: 0 Thread(s) per core: 1 Core(s) per socket: 1 Socket(s): 1 NUMA node(s): 1 Vendor ID: GenuineIntel CPU family: 6 Model: 85 Model name: Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz Stepping: 4 CPU MHz: 2494.150 BogoMIPS: 4988.30 Hypervisor vendor: KVM Virtualization type: full L1d cache: 32K L1i cache: 32K L2 cache: 1024K L3 cache: 33792K NUMA node0 CPU(s): 0
内存使用情况
[znix@clsn ~]$free -h total used free shared buffers cached Mem: 996M 867M 128M 712K 145M 450M -/+ buffers/cache: 271M 725M Swap: 1.0G 0B 1.0G
磁盘的使用情况
df、dd、iotop
[znix@clsn ~]$df -h Filesystem Size Used Avail Use% Mounted on /dev/vda1 40G 24G 15G 62% / tmpfs 499M 20K 499M 1% /dev/shm /dev/vdb1 20G 4.4G 15G 24% /data
监控网络
iftop nethogs
iftop 监控主机间流量 -i 指定监控网卡
nethogs 监控进程流量
4.监控工具总览
mrtg 流量监控出图
nagios 监控
cacti 流量监控出图
zabbix 监控+出图
5.zabbix介绍
Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。
通过上面我们总结的怎么监控,发现一个问题,就是由于硬件的不同,导致我们无法使用统一的方法去监控他们,这个时候,就需要监控程序有一定的通用性,或者说,监控程序需要能够与多种硬件设备通讯,才能满足我们的监控需求,举个例子:如果被监控的对象是一台安装了linux操作系统的服务器,那么我们可以通过ssh或者telnet这种远程工具与被监控对象建立起通讯的通道,可是如果被监控的对象是一台安装了其他操作系统的服务器呢,更甚之,被监控的对象并不是服务器,而只是一台交换机或者路由器呢,所以,zabbix如果想要能够全面的监控这些对象,则需要能够通过各种方法与它们进行通讯。
zabbix支持的通讯方式:
agent:通过专用的代理程序进行监控,与常见的master/agent模型类似,如果被监控对象支持对应的agent,推荐首选这种方式。 ssh/telnet:通过远程控制协议进行通讯,比如ssh或者telnet。 SNMP:通过SNMP协议与被监控对象进行通讯,SNMP协议的全称为Simple Network Management Protocol ,被译为 "简单网络管理协议",通常来说,我们无法在路由器、
交换机这种硬件上安装agent,但是这些硬件往往都支持SNMP协议,SNMP是一种比较久远的、通行的协议,大部分网络设备都支持这种协议,其实SNMP协议的工作方式也可以理
解为master/agent的工作方式,只不过是在这些设备中内置了SNMP的agent而已,所以,大部分网络设备都支持这种协议。 IPMI:通过IPMI接口进行监控,我们可以通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压,温度,风扇状态,电源状态等。 JMX:通过JMX进行监控,JMX(Java Management Extensions,即Java管理扩展),监控JVM虚拟机时,使用这种方法也是非常不错的选择。
监控常用的方式,zabbix agent
刚才提到了zabbix agent,一般情况下,我们将zabbix agent部署到被监控主机上,由agent采集数据,报告给负责监控的中心主机,中心主机也就是master/agent模型中的master,负责监控的中心主机被称为zabbix server,zabbix server将从agent端接收到的信息存储于zabbix的数据库中,我们把zabbix的数据库端称为zabbix database, 如果管理员需要查看各种监控信息,则需要zabbix的GUI,zabbix的GUI是一种Web GUI(图形化界面或图形用户接口),我们称之为zabbix web,zabbix web是使用php编写的,所以,如果想要使用zabbix web展示相关监控信息,需要依赖LAMP环境,不管是zabbix server ,或是zabbix web,他们都需要连接到zabbix database获取相关数据,这样说可能不容易理解,对比下图理解上述概念,就容易许多
zabbix proxy的讲解
当监控规模变得庞大时,我们可能有成千上万台设备需要监控,这时我们是否需要部署多套zabbix系统进行监控呢?如果部署多套zabbix监控系统,那么监控压力将会被分摊,但是,这些监控的对象将会被尽量平均的分配到不同的监控系统中,这个时候,我们就无法通过统一的监控入口,去监控这些对象了,虽然分摊了监控压力,但是也增加了监控工作的复杂度,那么,我们到底该不该建立多套zabbix监控系统从而分摊巨大的监控压力呢?其实,zabbix天生就有处理这种问题的能力,因为zabbix支持分布式监控,我们可以把成千上万台的被监控对象分成不同的区域,每个区域中设置一台代理主机,区域内的每个被监控对象的信息被agent采集,提交给代理主机,在这个区域内,代理主机的作用就好比zabbix server,我们称这些代理主机为zabbix proxy,zabbix proxy再将收集到的信息统一提交给真正的zabbix server处理,这样,zabbix proxy分摊了zabbix server的压力,同时,我们还能够通过统一的监控入口,监控所有的对象,当监控规模庞大到需要使用zabbix proxy时,zabbix的架构如下图,我们可以对比下图,理解上述描述。
zabbix核心组件总结
zabbix agent:部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix server。
zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。
zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。
zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。
zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy代表server端,完成局部区域内的信息收集,最终统一发往server端。
zabbix工作模式
我们知道,agent端会将采集完的数据主动发送给server端,这种模式我们称之为主动模式,即对于agent端来说是主动的。
其实,agent端也可以不主动发送数据,而是等待server过来拉取数据,这种模式我们称之为被动模式。
聪明如你一定已经明白,不管是主动模式还是被动模式,都是对于agent端来说的,而且,主动模式与被动模式可以同时存在,并不冲突。
管理员可以在agent端使用一个名为zabbix_sender的工具,测试是否能够向server端发送数据。
管理员可以在server端使用一个名为zabbix_get的工具,测试是否能够从agent端拉取数据。
2.zabbix的安装
1.环境检查
[root@centos7 ~]# cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@centos7 ~]# uname -r 3.10.0-957.el7.x86_64 #为了不必要的网络问题,我们这里直接关闭selinux和防火墙,如果网络玩的比较溜的话,可以不关。
[root@centos7 ~]# vim /etc/selinux/config #将SELINUX=enforcig改为SELINUX=disabled #检测selinux是否关闭,Disabled为关闭。
[root@centos7 ~]# getenforce Disabled #关闭防火墙
[root@centos7 ~]# systemctl stop firewalld #检查防火墙是否关闭,出现下面标注的地方,则表示已经关闭
[root@centos7 ~]# systemctl status firewalld.service ● firewalld.service - firewalld - dynamic firewall daemon Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sun 2020-09-20 23:44:02 CST; 3s ago Docs: man:firewalld(1) Process: 3267 ExecStart=/usr/sbin/firewalld --nofork --nopid $FIREWALLD_ARGS (code=exited, status=0/SUCCESS) Main PID: 3267 (code=exited, status=0/SUCCESS)
2.安装方式的选择
编译安装 (服务较多,环境复杂)
yum安装(干净环境)
我们这里选择yum的方式进行介绍,后面有时间在进行编译安装介绍
3.配置yum源
官方yum源的配置
#这里需要注意,就是在配置zabbix的源之前,我们需要提前配置好base和epel源,因为安装过程中会用到这些源。我这里配的是阿里的base和epel源,这里的配置方法就不做介绍了
#安装软件仓库配置包,这个包包含了 yum(软件包管理器)的配置文件。
[root@centos7 yum.repos.d]# rpm -ivh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm [root@centos7 yum.repos.d]# cd [root@centos7 ~]# cd /etc/yum.repos.d/ [root@centos7 yum.repos.d]# ls CentOS-Base.repo CentOS-Debuginfo.repo CentOS-Media.repo CentOS-Vault.repo zabbix.repo CentOS-CR.repo CentOS-fasttrack.repo CentOS-Sources.repo epel.repo #这里我们看到yum源已经生成了
[root@centos7 yum.repos.d]# cat zabbix.repo [zabbix] name=Zabbix Official Repository - $basearch baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/ enabled=1 gpgcheck=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 [zabbix-debuginfo] name=Zabbix Official Repository debuginfo - $basearch baseurl=http://repo.zabbix.com/zabbix/4.4/rhel/7/$basearch/debuginfo/ enabled=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591 gpgcheck=1 [zabbix-non-supported] name=Zabbix Official Repository non-supported - $basearch baseurl=http://repo.zabbix.com/non-supported/rhel/7/$basearch/ enabled=1 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX gpgcheck=1
阿里源配置
因为zabbix的镜像毕竟在国外,所以难免就是我们下载的时候会失败。所以我们这个时候可以配一个阿里的镜像。配置如下
#这里的版本可以根据自己的需要改 [root@centos7 yum.repos.d]# cat zabbix.repo [zabbix] name=zabbix baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.4/rhel/7/x86_64/ enabled=1 gpgcheck=0
4.安装zbbix server
我们先从zabbix server开始安装,由于我们使用mysql作为数据库,所以,在安装zabbix4.X的版本的server端时,需要安装zabbix-server-mysql包,在4.X的zabbix版本中,并没有单独的zabbix server端程序包,安装zabbix-server-mysql包即为安装了server端包,同时,我们可以在服务端安装zabbix_get包,以便向agent端发起测试采集数据请求,所以,我们在server端安装如下包。
[root@centos7 ~]# yum install zabbix-server-mysql zabbix-get -y
安装完成上述两个包以后,server即为安装完成,是不是很简单,server端的相关配置我们一会儿再进行。
5.初始化zabbix database
此处我们将mysql与zabbix安装在同一台服务器上,安装mysql的过程此处不再赘述,当我们安装完mysql,需要初始化zabbix的数据库,而在我们安装zabbix server时,其中就包含初始化zabbix数据库的sql脚本。
我们查看刚才安装完成的zabbix-server-mysql,可以看到一个create.sql.gz的包。
解压此包即可获得初始化sql脚本
[root@centos7 ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.10 [root@centos7 zabbix-server-mysql-4.4.10]# gunzip create.sql.gz [root@centos7 zabbix-server-mysql-4.4.10]# ll create.sql -rw-r--r-- 1 root root 9177706 Jun 29 19:55 create.sql
但是需要注意的是,此sql脚本中sql只会在对应的数据库中初始化zabbix所需要的数据库表,但是不会创建zabbix数据库,所以,创建zabbix数据库这一步骤,还是需要我们手动进行的,所以,此处我们先手动创建zabbix的数据库,过程如下。
mysql> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";
Query OK, 0 rows affected, 1 warning (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
zabbix数据库初始化完成后,执行对应sql初始化脚本
[root@centos7 ~]# cd /usr/share/doc/zabbix-server-mysql-4.4.10 [root@centos7 zabbix-server-mysql-4.4.10]# zcat create.sql.gz|mysql -uzabbix -pzabbix zabbix
查看zabbix数据库,发现对应的表已经生成
mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | | zabbix | +--------------------+ 5 rows in set (0.00 sec) mysql> 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 mysql> show tables; +----------------------------+ | Tables_in_zabbix | +----------------------------+ | acknowledges | | actions | | alerts | | application_discovery | | application_prototype | | application_template | | applications | | auditlog | | auditlog_details | | autoreg_host | | conditions | 。。。。。。。。。。。。。。
6.配置zabbix server 端并启动
server端已经安装完毕,并且数据库也已经初始化,现在我们开始配置server端,编辑zabbix server端的配置文件。
[root@centos7 zabbix-server-mysql-4.4.10]# vim /etc/zabbix/zabbix_server.conf
此处列出我们可能会经常修改的参数,如下:
ListenPort=10051
#服务端监听的端口,保持默认即可
SourceIP=
#通过SourceIP参数可以指定服务端的源IP,当server端有多个IP地址时,我们可以指定服务端使用固定的IP与agent端进行通讯,为了安全起见,agent端会基于IP进行一定的访问控制,也就是说agent端只允许指定的IP以server端的身份采集被监控主机的数据,如果IP不对应,则不允许采集被监控主机的数据,所以,当server端有多个IP时,我们可以通过SourceIP参数,指定server端通过哪个IP采集被监控主机的数据。
LogType=file
#通过LogType参数,可以指定通过哪种方式记录日志,此参数可以设置为三种值,system、file、console,system表示将日志发往syslog,file表示使用指定的文件作为日志文件,console表示将日志发往控制台,默认为file。
LogFile=/var/log/zabbix/zabbix_server.log
#当LogType设置为file时,通过LogFile参数设置日志文件位置。
LogFileSize=0
#指明日志文件达到多大时自动滚动,单位为MB,如果设置LogFileSize为50,表示日志大小达到50MB滚动一次,设置为0表示日志文件不会滚动,所有日志保存在一个文件中。
DebugLevel=3
#通过DebugLevel参数可以定义日志的详细程度,即为日志级别。
DBHost=localhost
#通过DBHost参数设置zabbix数据库所在的服务器IP,由于此处zabbix与mysql安装在同一服务器上,所以此处设置为localhost
DBName=zabbix
#通过DBName指定zabbix数据库对应的名称
DBUser=zabbix
#通过DBUser指定zabbix数据库用户名
DBPassword=123123
#通过DBPassword指定zabbix数据库用户的密码
DBPort=3306
#通过DBPort指定zabbix所在数据库服务监听的端口号
DBSocket=/var/lib/mysql/mysql.sock
#如果数据库服务与server端在同一台服务器上,可以通过DBSocket指定数据库本地套接字文件位置,但是需要注意,即使设置了mysql套接字文件的位置,还是需要配合DBHost参数,否则在登录zabbix控制台时,可能会出现警告,在zabbix server的log中,也可能会出现无法连接到数据库的提示。
根据上述的配置参数的解释,根据具体需求进行实际配置即可。
配置完成后,启动zabbix服务端即可,启动后,10051端口已经被监听。
[root@centos7 zabbix-server-mysql-4.4.10]# systemctl start zabbix-server.service [root@centos7 zabbix-server-mysql-4.4.10]# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10051 *:* LISTEN 0 80 :::3306 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10051 :::*
好了,zabbix server已经启动,剩下的就是初始化zabbix设置了,但是初始化zabbix的设置需要zabbix web提供的GUI图形化界面,所以,我们需要先安装zabbix web。
7.安装zabbix web,并启动
zabbix web可以安装在单独的主机上,只要能连接到zabbix database所在的数据库即可,但是此处为了方便,我们将zabbix web与 mysql以及 zabbix server安装在同一台服务器上。
因为zabbix web需要lamp环境,所以,此处我们将会依赖到的环境先安装好。
[root@centos7 zabbix-server-mysql-4.4.10]# yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring httpd php-mysql php-gd php-ldap php-xml -y
完成上述步骤后,安装zabbix web所需要的两个包
[root@centos7 ~]# yum install zabbix-web zabbix-web-mysql -y
查看刚才安装完成的zabbix-web程序包,可以看到,zabbix-web的web应用存放在/usr/share/zabbix中。
[root@centos7 ~]# rpm -ql zabbix-web 。。。。。。 /usr/share/zabbix/locale/tr/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/uk /usr/share/zabbix/locale/uk/LC_MESSAGES /usr/share/zabbix/locale/uk/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/vi /usr/share/zabbix/locale/vi/LC_MESSAGES /usr/share/zabbix/locale/vi/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/zh_CN /usr/share/zabbix/locale/zh_CN/LC_MESSAGES /usr/share/zabbix/locale/zh_CN/LC_MESSAGES/frontend.mo /usr/share/zabbix/locale/zh_TW /usr/share/zabbix/locale/zh_TW/LC_MESSAGES /usr/share/zabbix/locale/zh_TW/LC_MESSAGES/frontend.mo /usr/share/zabbix/maintenance.php /usr/share/zabbix/map.import.php /usr/share/zabbix/map.php 。。。。。。。。
zabbix还是比较贴心的,针对httpd,zabbix-web包中已经包含了对应zabbix文档路径的配置文件。
[root@centos7 ~]# vim /etc/httpd/conf.d/zabbix.conf
可以看到,针对zabbix web的文档路径,此文件中已经为我们准备好了默认配置,如果不使用httpd的虚拟主机(让一台服务器基于IP、主机名或端口号实现提供多个网站服务的技术。),只要将时区稍加改动即可直接使用。
而此处,我们使用httpd的虚拟主机访问zabbix web,所以,将配置文件中的内容改为如下配置,同时将时区修改为亚洲上海。
[root@centos7 ~]# vim /etc/httpd/conf.d/zabbix.conf #下面黄底和红底是修改的部分,其中黄底根据自己需求加,红底是必改的
[root@centos7 ~]# cat /etc/httpd/conf.d/zabbix.conf # # Zabbix monitoring system php web frontend # <VirtualHost 192.168.195.168:80> servername zabbix.qingbai.net documentroot /usr/share/zabbix Alias /zabbix /usr/share/zabbix <Directory "/usr/share/zabbix"> Options FollowSymLinks AllowOverride None Require all granted <IfModule mod_php5.c> 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 max_input_vars 10000 php_value always_populate_raw_post_data -1 php_value date.timezone Asia/Shanghai </IfModule> </Directory> <Directory "/usr/share/zabbix/conf"> Require all denied </Directory> <Directory "/usr/share/zabbix/app"> Require all denied </Directory> <Directory "/usr/share/zabbix/include"> Require all denied </Directory> <Directory "/usr/share/zabbix/local"> Require all denied </Directory> </VirtualHost>
配置完成后,启动httpd服务。
[root@centos7 ~]# systemctl start httpd.service
好了,zabbix web安装配置完成
8.zabbix agent的安装
agent端安装也非常方便,直接被监控主机上安装如下两个包即可。此处被管理主机也已经配置好了zabbix的源,agent版本可以跟server端版本不一致,没有关系,安装即可。注意agent端防火墙什么的,对于新手来讲也建议直接关闭。
[root@centos7 ~]# yum install -y zabbix-agent zabbix-sender
9.zabbix agent配置的介绍
我们查看一下zabbix-agent都安装了哪些文件,当然,最重要的就是zabbix_agentd.conf这个配置文件了。
还记得我们在刚开始介绍zabbix时,说过的"主动模式"与"被动模式"吗?这两种模式的相关配置,都需要在zabbix_agentd.conf中定义,打开这个文件,我们来配置一下最常用的agent端配置。首先,可以看到配置文件中有很多注释,打开配置文件,首先看到的就是"通用参数配置段",我们可以在此配置段配置zabbix_agent进程的进程编号文件路径,存储日志方式,日志文件位置,日志滚动阈值等常用设定,细心如你一定已经发现,zabbix_agent配置文件的"通用配置段"中的参数大多数与zabbix_server配置文件中的常用参数意义相同,所以,此处不再过多赘述,如果没有特殊需要,保持默认即可。
此处先说说我们马上会用到的两个配置段,如下图红框中的注释所描述的,"被动模式配置段"与"主动模式配置段"
我们已经在最开始的概念介绍中,描述过,"主动模式"与"被动模式"都是对于agent端来说的,而且它们可以同时存在,并不冲突。
我们先来看看"被动模式"的相关配置参数。
被动模式相关参数如下:
Server:用于指定允许哪台服务器拉取当前服务器的数据,当agent端工作于被动模式,则代表server端会主动拉取agent端数据,那么server端的IP必须与此参数的IP对应,此参数用于实现基于IP的访问控制,如果有多个IP ,可以使用逗号隔开。
ListenPort:用于指定当agent端工作于被动模式时所监听的端口号,默认端口为10050,也就是说,server端默认访问10050端口,从而拉取数据。
ListenIP:用于指定agent端工作于被动模式时所监听的IP地址,默认值为0.0.0.0,表示监听本机的所有IP地址。
StartAgents:用于指定预生成的agent进程数量。
好了,被动模式的参数说完了,现在聊聊主动模式。
主动模式的常用参数如下:
ServerActive:此参数用于指定当agent端工作于主动模式时,将信息主动推送到哪台server上,当有多个IP时,可以用逗号隔开。
Hostname:此参数用于指定当前主机的主机名,server端通过此参数对应的主机名识别当前主机。
RefreshActiveChecks:此参数用于指明agent端每多少秒主动将采集到的数据发往server端。
此处,我们同时设置"被动模式"与"主动模式"的如下参数,其他保持默认即可,修改完成后保存退出。
Server=192.168.195.166
ServerActive=192.168.195.166
Hostname=test1.qingbai.net #这个根据需要改
配置文件修改完成后,启动agent端进程。
[root@centos7 ~]# systemctl start zabbix-agent [root@centos7 ~]# ss -ntl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 *:10050 *:* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::10050 :::*
10.检测连通性
过程如下
#服务端安装zabbix-get检测工具
[root@centos7 ~]# yum install zabbix-get -y
#在服务端进行测试,注意:只能在服务端进行测试,如果能返回结果,代表测试正常,我这里就是测试正常
[root@centos7 ~]# zabbix_get -s 192.168.195.168 -p 10050 -k "system.cpu.load[all,avg1]" #这个命令的用法是通过-s选项指定被监控主机的IP,通过-k选项指定对应的KEY,即可获得对应主机的对应监控指标的信息。
0.120000
3.web界面的基本操作
1.web界面初始化操作
完成上述安装步骤后,访问 Zabbix_Web_IP/zabbix ,可以看到如下图的zabbix安装页面,点击下一步按钮
可以看到,zabbix自动检查了安装环境是否满足要求,如果出现不满足要求的情况,需要进一步处理,此处没有问题,点击下一步
此处zabbix需要配置数据库连接,此处配置数据库的类型,IP,端口,数据库名,用户密码等信息,端口填写0表示使用默认端口(3306端口)
此处,我们可以填写zabbix server的详细信息,包括IP地址,端口号,以及server名称等,填写完成后点击下一步。
在配置之前,请确定概要信息无误,点击下一步。
从提示可以看出,初始化配置已经完成,而且zabbix提示我们,这些配置信息都被保存到了"/etc/zabbix/web/zabbix.conf.php" 配置文件中,如果想要更改刚才的一些配置,可以通过修改此文件完成,初始化已经完成,点击结束即可。
点击完成按钮后,可以看到zabbix的登录页面,默认的管理员用户为Admin(注意A是大写),密码为zabbix,输入用户名密码后登录。
登录之后,为了更加安全,我们不应该使用管理员的默认密码,所以,我们最好先修改管理员密码,修改过程如下
2.汉化操作
登录完成后,可以看到zabbix的仪表盘
嗯嗯嗯,我知道你看英文不爽,别急,现在就调成中文,点击下图中红框标注的图标。
语言选择中文,点击更新即可,但是你可能无法在语言中看到中文选项,如果无法找到中文选项,则代表你的配置文件中的中文选项显示属性为false。
如果你安装的zabbix4.X.X无法看到中文选项,那么你可以需要少许额外的操作,首先,你需要修改如下文件。
找到中文对应的值,将显示属性设置为true即可。
但是,你可能还会遇见中文乱码的情况,如果遇到中文乱码,可以从windows中挑选一个顺眼的中文字体,(windows的字体目录一般在C:WindowsFonts下面)将对应字体文件放置到linux中zabbix web的字体目录中,因为我们使用的是rpm包安装的zabbix web,所以zabbix web的默认字体目录为/usr/share/zabbix/fonts(如果没有这个目录可以创建),windows中的字体文件后缀名如果为TTF,当我们把对应字体文件拷贝到zabbix字体目录时,需要修改其后缀名为小写的ttf(如果本来就是小写的则不用任何修改了),字体文件上传完毕后,第一步需要修改zabbix默认字符集软链接。第二步修改/usr/share/zabbix/include/defines.inc.php配置文件,详细过程如下
#我们这里选择windows上的仿宋常规字体simfang.ttf,然后拷贝到zabbix服务器上
[root@centos7 ~]# ls anaconda-ks.cfg mysql80-community-release-el7-3.noarch.rpm simfang.ttf #创建默认字体目录
[root@centos7 ~]# mkdir -p /usr/share/zabbix/fonts #拷贝我们喜欢的字体到默认字体目录
[root@centos7 ~]# mv simfang.ttf /usr/share/zabbix/fonts/
#这里我们还需要把字体文件拷贝到/usr/share/zabbix/assets/fonts/这个目录下,并加上相关权限,这个步骤一定要做,不然,届时监控图形界面显示方框不显示文字
[root@centos7 fonts]# cp /usr/share/zabbix/fonts/simfang.ttf /usr/share/zabbix/assets/fonts/
[root@centos7 fonts]# chmod 777 /usr/share/zabbix/assets/fonts/simfang.ttf #下面我们看到zabbix的默认字符集是指向别的地方的
[root@centos7 ~]# ll /etc/alternatives/zabbix-web-font lrwxrwxrwx 1 root root 38 Sep 22 06:37 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf #删掉默认字符集的软链接,然后指向我们刚刚的传进来的字符。
[root@centos7 ~]# rm -rf /etc/alternatives/zabbix-web-font [root@centos7 ~]# ln -s /usr/share/zabbix/fonts/simfang.ttf /etc/alternatives/zabbix-web-font #这里我们看到默认字符集已经指向我们传进来的字符了
[root@centos7 ~]# ll /etc/alternatives/zabbix-web-font lrwxrwxrwx 1 root root 35 Sep 23 06:20 /etc/alternatives/zabbix-web-font -> /usr/share/zabbix/fonts/simfang.ttf
#修改相关配置文件,让web页面支持简体中文显示
[root@centos7 ~]# vim /usr/share/zabbix/include/defines.inc.php
#找到如下两行
define('ZBX_FONT_NAME', 'graphfont');
define('ZBX_GRAPH_FONT_NAME', 'graphfont'); // font file name
#把后面的graphfont换成刚才上传的字体文件对应的名称即可,就以为我这个为例,改完之后为
define('ZBX_FONT_NAME', 'simfang');
define('ZBX_GRAPH_FONT_NAME', 'simfang'); // font file name
好了,上述操作完成后,zabbix控制台即显示为中文了。
3.zabbix的web界面菜单大概介绍
好了,我们以后的监控工作就要围绕这个web界面展开了,为了以后更好的展开工作,我们先大概的了解一下zabbix的菜单。
管理菜单中,一般用于管理zabbix自身及zabbix相关设置。
配置菜单中,一般用于配置监控相关设置
监测菜单,一般用于查看被监控的相关数据
报表菜单中,可以为管理员生成一段时间内的监控统计信息。
4.在zabbix中添加主机
在前文中,我们已经介绍过了zabbix是什么,以及怎样安装zabbix环境,那么现在,我们应该开始实际动手使用zabbix了,为了能让大家更加容易理解实际使用过程中将会用到的术语以及概念,我们先把实际工作场景描述清楚,然后再根据描述的工作场景进行演示。
假设,我们想要使用zabbix监控一台linux服务器,那么,我们肯定要将这个服务器纳入zabbix的管理范围,而"添加主机"这个操作,就是将被监控的主机纳入zabbix管理范围的一个必须操作,如果我们有10台主机都需要被zabbix监控呢,没错,这10台主机都必须被添加到zabbix的监控列表中,在zabbix中,我们将被监控的对象称之为"主机","主机"不一定是服务器,也可以是路由器,交换机等网络设备,而且,根据主机的属性、角色、特征的不同,我们还能够将主机分组,比如,我们有10台服务器,10台服务器中,有3台windows服务器,有7台linux服务器,那么,我们可以按照操作系统的不同,将他们分成两组,windos服务器组与linux服务器组,或者我们不按照操作系统对主机进行分组,而是根据服务器的角色对主机分组,比如,一共10台服务器,3台是是提供ldap服务的,2台是提供web服务的,5台是提供数据库服务的,我们也可以把它们按照角色分成3组,ldap主机组、web主机组、db主机组, 当然,我们只是举个例子,实际应用中,具体怎样分组,是根据实际需求视情况而定的,那么,为什么要将主机分组呢,这是为了方便管理,因为同一类主机需要被监控的指标很有可能都是相同的,所以将他们分为一组方便管理,这是后话,我们到时候再聊。
上面一段话中,我们提到了两个zabbix的常用术语,"主机"与"主机组",我们再来总结一遍:
1、host(主机):需要被zabbix监控的对象,被称为主机,主机必须属于某个主机组。
2、hostgroup(主机组):"主机组"也被称为"主机群组",是由具有相同属性、特征、角色的多个主机组成的逻辑单元。
添加主机演示
好了,理解上述两个术语,并且能够在zabbix中使用它们,就是我们这一段落所要达到的目标。
那么,我们来看看怎样在zabbix中添加一台主机,在动手添加主机之前,先说明一下我们的环境。
我们已经将zabbix-server、zabbix-database、zabbix-web安装在了192.168.195.166上。
同时,我们将zabbix-agent安装在了192.168.195.168上。
所以此处,192.168.195.168就是被监控的对象,我们需要将168添加为zabbix主机。
首先,打开我们的zabbix web控制台,我们看看都有哪些"主机组"。
点击 "配置" ---- "主机群组" ,可以看到,系统默认已经为我们准备了一些主机组,如果这些主机组不满足我们的需要,我们也可以创建新的主机组,点击下图中的"创建主机群组"按钮,即可创建主机组,但是,现在我们还不用深入研究主机组,此处只是让大家了解一下,对主机组有一个初步的认识即可。
同样,点击 "配置" ---- "主机" ,即可查看已经被加入zabbix主机列表的主机,可以看到,zabbix默认将zabbix server添加为了一台主机,以便可以自己监控自己,但是此处,我们需要添加一台我们自己的主机,就是192.168.195.168,点击"创建主机",点击创建主机之前,可以选择左侧的"群组"下拉菜单,以确定将要创建的主机所在的主机组,当然,我们也可以先不选主机组,直接点击"创建主机"按钮。
点击"创建主机"按钮以后,即可看到类似如下界面,为了更好的描述每个步骤,具体解释参考下图后面的注释列表。
好了,按照上述界面中的配置进行设置以后,点击"添加"按钮,即可简单的添加一台主机,可以看到,192.168.195.168已经被添加到了主机列表中。
而且,如果此时我们再次查看主机组,已经发现,linux server主机组中的成员已经包含了test1主机。
4.监控项的相关配置
1.在zabbix中添加监控项
描述了怎样在zabbix中添加主机,但是,我们并没有对主机进行任何指标的实际监控,那么现在,我们来说说,具体怎样监控我们想要监控的指标。
在具体操作之前,我们先聊聊理论,假设我们想要监控磁盘的使用率,在没有zabbix这种监控工具时,我们怎样监控呢,再或者,我们不仅没有zabbix这种监控工具,我们也不会写脚本,更不会写任何程序,我们该如何监控磁盘的使用率呢。没错,人工监控,当我们无法依赖任何工具或者脚本等外部助力时,我们只能不停的看着屏幕,查看当前磁盘的使用率,如果磁盘使用率达到了我们设定的阈值,我们就会作出相应的处理动作。即使我们是通过人工完成监控的,我们也要想办法能够获取到被监控目标的数据,比如我们想要监控磁盘使用率,那么我们就要不停的获取磁盘的使用率信息,以便我们能够随时的了解磁盘的空间使用情况,那么我们怎样获取磁盘的使用率呢,就拿centos为例,我们可能会通过如下命令,获取每个分区的磁盘使用率。
没错,我们通过命令,获取到了磁盘使用率的信息,当然,这个命令比较简短,方便我们从键盘键入,如果一条简单的命令,无法获取到磁盘使用率的信息呢,那么我们可能会通过一条稍微复杂的命令去实现监控,比如,如果我们只想要监控"根分区"磁盘使用率,我们可能会使用如下命令实现。
[root@centos7 ~]# df -h |awk '$6~/^/$/{print $5,$6}' 2% /
我们发现,获取监控信息的命令越来越长了,那么我们能不能尽量简化这些较长的命令呢,必须能啊,设置个别名不就行了,那么,我们把刚才的命令设置一个别名,直接执行命令别名试试。
[root@centos7 ~]# alias rdu="df -h |awk '$6~/^/$/{print $5,$6}'" [root@centos7 ~]# rdu 2% /
可以看到,原本比较长的命令只缩减为了rdu三个字符。是不是比原来方便了许多呢,我们只需要三个字符,就能获取到根分区的使用情况。
这个时候,你可能会问,linux的命令别名与zabbix的监控项有关系吗,我们是来看怎么添加zabbix监控项的,不是来听你瞎BB的。
好吧,其实它们并没有什么关系,但是他们有一些类似的地方,比如,我们刚才做的工作,无非就是获取监控信息,需要获取监控信息,就要执行对应的命令,我们也可以通过别名,调用对应的命令,从而获取到我们想要或得到的监控信息,在zabbix中,我们要监控的某一个指标,被称为"监控项",就像我们的磁盘使用率,在zabbix中就可以被认为是一个"监控项"(item),,如果要获取到"监控项"的相关信息,我们则要执行一个命令,但是我们不能直接调用命令,而是通过一个"别名"去调用命令,这个"命令别名"在zabbix中被称为"键"(key),所以,在zabbix中,如果我们想要获取到一个"监控项"的值,则需要有对应的"键",通过"键"能够调用相应的命令,获取到对应的监控信息,我们暂且这样理解,方便我们入门。
好了,我们此处又提到了两个新的术语,我们来总结一遍:
监控项(item):某个监控指标,在zabbix中就被称之为一个item,某个主机中可能有多个需要被监控的指标,也就是说,某个host中可能有多个item
键(key 、item key):如果想要获取监控项对应的数据,则必须通过某个key去获取,我们可以把key想象成调用对应命令的"命令别名",zabbix中自带一些key,这些key往往比较通用,比如,通过这些key,我们可以监控cpu,内存,硬盘等常用指标,获取不同的指标信息,需要不同的key,但是如果这些自带的key无法满足我们的监控需求时,我们也可以自定义key,通过自定义key执行对应的操作,这些都是后话,我们 慢慢来。
正式添加监控项:
好了,说了这么多,哥们儿你应该有点印象了,话接上回,我们已经在zabbix中添加了一台主机,现在,我们继续在这台主机上操作。
首先,打开我们zabbix控制台,点击 "配置" -- "主机" ,可以看到我们上次创建的主机,虽然我们为对应的被监控主机安装了agent,但是主机对应的ZBX仍然显示为灰色,代表我们还没有任何监控项被检测到,那么现在,我们来为test1主机添加一个监控项。
点击test1主机上的"监控项",,如下图所示位置。
进入监控项配置界面后,可以根据一些条件,筛选出已经存在的一些监控项,但是我们并没有任何监控项,所以此处,我们直接点击"创建监控项"按钮。以便新建监控项。
假如,现在我们想要监控testzbx1这台主机的CPU的上下文切换此处,那么我们可以在此界面进行如下配置。
在键值一栏中,我们可以选择对应的key,也就是说,我们通过哪个key,获取到cpu的上下文切换次数的信息,所以,点击"选择"按钮,点击选择按钮以后,可以看到非常多的预先定义好的key,这些key都是zabbix自带的key,这些key一般都是系统级别的通用的监控项所能够用到的key,如果这些"键"不能满足我们的需求,我们则需要自定义key,我们后面再聊,此处,我们选择system.cpu.switches
选择完成后,可以看到,key的值已经自动填充到了"键值"的文本框中。
好了我们接着进行下面的配置,配置如下
点击添加按钮以后,可以看到,test1主机的第一个监控项已经被添加,而且处于已启用状态。
点击监控项旁边的"应用集",可以看到,应用集中已经存在了cpu应用集,而且这个应用集中已经存在一个监控项,就是我们刚才创建的"cpu 上下文切换"监控项。
2.查看监控内容
我们已经创建了一个监控项,那么怎样查看这个监控项的监控情况呢, 点击 "监测" ---- "最新数据",但是目前并没有展示出任何数据,因为我们还没有指定要查看哪些监控数据。
我们可以输入过过滤条件,过滤出我们想要查看的数据,比如,我们选择根据主机过滤,过滤出对应主机的对应的监控项数据。
点击应用按钮以后,应该可以看到我们刚才创建的监控项,已经存在了部分数据,如果你刚刚创建完监控项,不要着急的立马查看"监控项"数据,因为它可能需要一段时间收集数据。
但是,如果超出正常收集数据的时间后,很长时间以内仍然无法收集到数据,那么有可能是因为agent端与server端时间不同步引起的,请确定你的agent端与server端的时间是同步的。
可以看到,"cpu 上下文切换"这个监控项已经存在数据,我们点击对应的"图形"连接
点击上图中的"图形"连接,可以看到如下界面,zabbix已经监控到了对应的cpu上下文切换频率,并且绘制出了对应的"图形"。
3.在zabbix中添加带有参数的监控项
在前文中,我们已经解释了 "监控项"(item)、"键"(key)、"应用集"(application)等概念,并且为test1主机添加了一个监控项,其作用是监控主机的cpu上下文切换速率。
这次,我们再为test1主机添加一个监控项,用于监控磁盘分区的使用率,因为创建监控项的过程我们在前文已经详细的演示过,重复的地方我们就不再赘述,这次创建的监控项与上次创建的监控项只有些许不同而已,我们会重点介绍它们的不同之处。
假设我们想要监控testzbx1主机上的"根分区"的磁盘使用率,所以,我们命名监控项名称为 根分区使用率。
我们说过,如果想要获取监控指标的数据,可以通过指定的key获取,如果zabbix自带的key不能满足我们,我们可以自定义key,而此处,我们的需求是监控根分区磁盘使用率,而zabbix自带的key中,正好有一个key能够获得某个磁盘分区的使用率,所以,我们点击上图中的"选择"按钮
点击选择按钮以后,从列表中找到如下图中的键,键名为"vfs.fs.size[fs,<mode>]",从解释中可以了解到,通过这个键获取到信息与磁盘容量相关。
细心的你一定发现了,我们这次选择的"键"与上一次选择的"键"有哪些地方好像不太一样,没错,格式好像不太一样。
我们来对比一下,上次,我们为了监控cpu的上下文切换次数,选择了如下键。
而这次,为了监控磁盘分区的使用率,我们选择了如下键。
这次我们选择的键,除了键名以外,还多出了传入参数的位置。
对于"vfs.fs.size[fs,<mode>]"这个键来说,"vfs.fs.size"就是键名,"[fs,<mode>]"就是这个键需要的参数。
而"[fs,<mode>]"这两个参数中,fs是不可省参数,mode是可省参数。
聪明如你一定已经发现了,如果参数被尖括号括起,则代表这个参数是可省参数,例如上述的<mode>,如果参数没有被尖括号括起,则代表是不可省参数,例如上述的fs。
那么这个键到底怎么使用呢,fs和mode这两个参数分别代表了什么呢,我们可以通过官网帮助手册,查看这些"键"的含义与使用方法。
zabbix4.0版本的所有"键"的含义及用法的官方在线手册地址如下。
https://www.zabbix.com/documentation/4.0/zh/manual/config/items/itemtypes/zabbix_agent
打开上述网址后,查询对应"键"的名称,从在线帮助手册中可以看到,这个键的描述,返回值,参数的含义与值,以及示例等信息。
从上图可以看出,通过这个键,获取的返回信息可以有两种类型,一种是整形,一种是浮点型,这取决于我们需要获取哪种信息,如果是获取磁盘的使用百分比,则会返回给我们浮点型,如果是获取使用量,则会返回整形,代表使用了多少bytes,上图中解释了两个参数的用法,fs代表对应的文件系统,我们可以理解为对应的文件系统所在的分区,mode的值可以为total,free,used,pfree,pused,分别表示获取对应文件系统的总大小(省略mode参数时,此为默认值),空余空间大小,已经使用的空间的大小,空闲率和使用率,还记得这个键返回的两种数据类型吗,如果我们将mode设置为total,free,used,那么,这个键返回的数据类型将为整形(就是一个整数),如果我们将mode设置为pfree或者pused,那么这个键返回的信息的数据类型就是浮点型(带有小数点的数字)。而且,帮助文档中还给出了这个"键"的使用示例
,vfs.fs.size[/tmp,free],示例表示获取/tmp所对应的文件系统的剩余空间大小。
好了,我们大概对vfs.fs.size[fs,<mode>]这个键有了一些了解,通过这个键,可以获取到文件系统对应分区的磁盘空间使用情况信息,我们可以通过fs参数指定对应的文件系统,通过mode参数,指定我们想要获取的信息的格式,我们回到我们的监控项配置页面。
当我们选择了对应的键以后,我们还需要做出适当的修改,将其参数值改成我们所需要的值,如下。
由于我们获取的数据为根分区的使用率,返回的信息为浮点型,所以,信息类型选择浮点型,由于返回的信息为磁盘使用率,所以单位设置为 "%"
好了,其他的设置我们在前一篇文章中已经解释过了,此处不再赘述,但是为了演示方便,我将数据更新间隔设置为10秒收集一次磁盘数据,再次强调,这样设置只是为了快速获取演示效果,生产环境中对于类似这样的数据不要监控的如此频繁,配置如下后,点击添加按钮。
监控项添加完毕后,等待一分钟左右,查看对应的监控数据,如下,点击监控项对应的"图形"连接。
可以看到,监控到的磁盘使用率为1.3%,而且界面上显示的单位也是"%",还记得我们在监控项中配置的单位吗,就是这个作用
这次,我们又添加了一个监控项,只是与上一次相比,我们这次添加的监控项可以传入参数。
而且,我们已经了解到,如果想要搞明白zabbix的各种自带key的作用,可以参考zabbix官方在线手册:
https://www.zabbix.com/documentation/4.0/manual/config/items/itemtypes/zabbix_agent
4.zabbix模板的使用和配置
上面我们介绍了添加单个监控项和添加有参数的监控项。但是我们一般在主机监控项的时候,一般是直接添加对应的模板,只有当对应模板里的监控项不满足我们的需求,我们才会和上面一样,单独添加监控项。
模板:将一类的监控项汇总在一起,单独保存成一个集合,可以直接被其它主机调用。(注意不要和应用集混淆)
那么模板怎么添加,我们还是那test1主机做演示。
点击上面的选择之后,我们会到下面的界面