zabbix
概述
Zabbix 是一个基于WEB界面的提供分布式系统监控以及网络监控功能的企业级开源监控套件
服务端端口:10051
客户端端口:10050
Zabbix 主要功能
主机的性能监控、网络设备性能监控、数据库性能监控、多种告警方式、详细报表图表绘制
Zabbix 可监控对象
Linux、Windows 等主机系统;路由器、交换机等网络设备
Zabbix-proxy使用场景
监控远程位置,解决跨机房;监控主机多,性能跟不上,延迟大;解决网络不稳定
Zabbix 是怎么实施监控的
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。这里agentd收集数据分为主动和被动两种模式
默认为zabbix-agent被动模式;
主动模式与被动模式主要是站在zabbix-agent身份来说;
被动模式(zabbix-server轮询检测zabbix-agent);
主动模式(zabbix-agent主动上报给zabbix-server);
当(Queue)队列中有大量的延迟监控项,当监控主机超过300+ ,建议使用主动模式
Zabbix 运行条件
-
Server:Zabbix Server 需运行在 LAMP(Linux+Apache+Mysql+PHP)环境下(或者LNMP),对硬件要求低
-
Agent:目前已有的agent 基本支持市面常见的OS,包含 Linux、HPUX、Solaris、Sun、 windows
-
SNMP:支持各类常见的网络设备
SNMP(简单网络管理协议)是一种广泛应用于 TCP/IP 网络的网络管理标准协议(应用层协议),它提供了一种通过运行网络管理软件的中心计算机(即网络管理工作站)来监控和管理计算机网络的标准化管理框架(方法)。目前已颁布了SNMPv1、SNMPv2c 和 SNMPv3 三个版本,广泛应用于网络交换机、路由器、打印机等网路设备上。
安装 Zabbix 服务
yum 安装配置 LAMP
1 安装 mariadb
[root@zabbix ~]# yum -y install mariadb-server mariadb-client mariadb-devel
2 安装 Apache/2.4.6 和 php5.4.16
如果是源码安装注意安装 php 时需要注意 php 的版本要高于 5.4
[root@zabbix ~]# yum install -y httpd php
php 安装后确定 httpd 文件中有 php 内容
[root@zabbix ~]# cd /etc/httpd/conf.d
[root@zabbix conf.d]# ll
···
-rw-r--r-- 1 root root 691 4月 1 2020 php.conf
3 安装PHP扩展
[root@zabbix ~]# yum install -y php-mysql php-snmp php-xml php-ldap php-gd php-mbstring php-posix
查看httpd.conf配置文件,确保包含以下内容:
[root@zabbix ~]# vim /etc/httpd/conf/httpd.conf
# Load config files in the "/etc/httpd/conf.d" directory, if any.
IncludeOptional conf.d/*.conf
4 配置php.conf
配置文件
末尾添加以下内容:
[root@zabbix ~]# vim /etc/httpd/conf.d/php.conf
···
# PHP is an HTML-embedded scripting language which attempts to make it
# easy for developers to write dynamically generated webpages.
LoadModule php5_module modules/libphp5.so
#
# Cause the PHP interpreter to handle files with a .php extension.
AddHandler php5-script .php
5 编写 phpinfo() 脚本检查 SNMP
访问 apache 网站,查看是否有 snmp 模块
[root@zabbix ~]# vim /var/www/html/index.php
<?php
phpinfo();
?>
源码安装 Zabbix
1 安装 Zabbix 环境所需依赖包
[root@zabbix ~]# yum -y install gcc gcc-c++ autoconf httpd-manual mod_ssl mod_perl mod_auth_mysql php-gd php-xml php-mbstring php-ldap php-pear php-xmlrpc php-bcmath mysql-connector-odbc mysql-devel libdbi-dbd-mysql net-snmp-devel curl-devel unixODBC-devel java-devel openldap openldap-devel php-pdo ncurses-devel OpenIPMI-devel OpenIPMI OpenIPMI-libs libxml* libevent*
2 创建用户账户
对于所有 Zabbix 守护进程,需要一个非特权用户。 如果从非特权用户帐户启动 Zabbix 守护程序,它将以该用户身份运行。
然而,如果一个守护进程以“root”启动,它会切换到“zabbix”用户,且这个用户必须存在。在 Linux 系统中,可以使用下面命令建立一个用户(该用户属于自己的用户组,“zabbix”):
[root@zabbix ~]# useradd -s /sbin/nologin zabbix
[root@zabbix ~]# mkdir /var/log/zabbix /etc/zabbix
[root@zabbix ~]# chown zabbix:zabbix /var/log/zabbix/
3 编译安装 Zabbix
[root@zabbix ~]# wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.20.tar.gz
zabbix-4.0.20.tar.gz // 软件包
[root@zabbix ~]# tar xf zabbix-4.0.20.tar.gz
[root@zabbix ~]# cd zabbix-4.0.20/
[root@zabbix zabbix-4.0.20]# ./configure --prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix --enable-server --enable-proxy --enable-agent --enable-ipv6 --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-unixodbc --with-ldap --enable-java
[root@zabbix zabbix-4.0.20]# make && make install
这里可能会提示错误:Unable to use libevent (libevent check failed)
解决办法:需要安装依赖包
[root@zabbix zabbix-4.0.20]# yum install libevent-devel -y
4 设置环境变量
[root@zabbix ~]# vim /etc/profile
export PATH=$PATH:/usr/local/zabbix/sbin/:/usr/local/zabbix/bin/
[root@zabbix ~]# source /etc/profile
5 建立监控数据库,并导入zabbix数据库
[root@zabbix ~]# mysql -uroot -p
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.01 sec)
对于授权用户有不同的方式,需要根据数据库是否在本地的环境来确定
mysql> grant all on zabbix.* to zabbix@localhost identified by 'zabbix';
或
mysql> grant all on zabbix.* to zabbix@192.168.153.% identified by 'zabbix';
或
mysql> grant all on zabbix.* to zabbix@127.0.0.1 identified by 'zabbix';
进行 zabbix 文件导入到数据中
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> source /root/zabbix-4.0.20/database/mysql/schema.sql;
MariaDB [zabbix]> source /root/zabbix-4.0.20/database/mysql/data.sql;
MariaDB [zabbix]> source /root/zabbix-4.0.20/database/mysql/images.sql;
6 修改配置文件
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
LogFile=/var/log/zabbix/zabbix_server.log
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
DBSocket=/var/lib/mysql/mysql.sock
DBPort=3306
7 拷贝网页文件到httpd网站目录下
Zabbix 的源码包中有相应的网站目录,复制到 apache 中
[root@zabbix ~]# cp -rf /root/zabbix-4.0.20/frontends/php/ /var/www/html/zabbix
[root@zabbix ~]# chown -R apache:apache /var/www/html/zabbix/
8 通过 Web 页面配置 Zabbix
访问你的 apache 网页
根据提示修改 PHP 的配置文件/etc/php.ini
,再重启 Apache ,右边全部为 OK 就可以进入下一步
接收默认值,下一步
可以看到登录界面,说明 Zabbix 安装成功。
输入用户名 Admin 以及密码 zabbix 以作为 Zabbix 超级用户登录。
页面右上角找到用户头像标志,可以把语言设置为中文。
设置完成后会返回登录界面,提示 Zabbix Server 没有启动
9 启动 Zabbix_server 服务
Zabbix 的源码包中自带服务启动脚本,复制到/etc/init.d/
目录下,并添加到系统服务。
[root@zabbix zabbix-4.0.20]# cp misc/init.d/fedora/core/zabbix_server /etc/init.d/
[root@zabbix zabbix-4.0.20]# ln -s /usr/local/zabbix/sbin/zabbix_server /usr/local/sbin/
[root@zabbix zabbix-4.0.20]# cd /etc/init.d
[root@zabbix init.d]# ls
functions netconsole network README redis_6379 zabbix_server
[root@zabbix init.d]# chkconfig --add zabbix_server
[root@zabbix init.d]# systemctl start zabbix_server
10 锁定安装页面
安全起见对 Zabbix 安装界面进行锁定
[root@zabbix ~]# mv /var/www/html/zabbix/setup.php /var/www/html/zabbix/setup.php.bak
[root@zabbix ~]# chmod 600 /var/www/html/zabbix/setup.php.bak
安装被监控端口
在 Zabbix_server 上创建 zabbix_agentd 服务,使它自己监听自己
[root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=127.0.0.1,192.168.153.132
ServerActive=127.0.0.1:10051
启动agent服务
[root@zabbix zabbix-4.0.20]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@zabbix zabbix-4.0.20]# ln -s /usr/local/zabbix/sbin/zabbix_agentd /usr/local/sbin/
[root@zabbix zabbix-4.0.20]# cd /etc/init.d/
[root@zabbix init.d]# ls
functions netconsole network README redis_6379 zabbix_agentd zabbix_server
[root@zabbix init.d]# chkconfig --add zabbix_agentd
[root@zabbix init.d]# systemctl start zabbix_agentd
完成后返回网页查看
监控其他机器:配置 Zabbix 客户端
现在使用 Zabbix_server 去监听另一台 Linux 服务器。
以下信息是默认存在的:
[root@node1 ~]# vim /etc/services
zabbix-agent 10050/tcp # Zabbix Agent
zabbix-agent 10050/udp # Zabbix Agent
zabbix-trapper 10051/tcp # Zabbix Trapper
zabbix-trapper 10051/udp # Zabbix Trapper
安装 zabbix_agentd 代理程序
# wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.20.tar.gz
在需要监控的 Linux 客户机上安装的软件包和在 Zabbix_server 端安装的是同一个,区别在于配置时选取的参数不同。
[root@node1 ~]# useradd -s /sbin/nologin -M zabbix
[root@node1 ~]# mkdir /var/log/zabbix /etc/zabbix
[root@node1 ~]# chown zabbix:zabbix /var/log/zabbix/
[root@node1 ~]# tar xf zabbix-4.0.20.tar.gz
[root@node1 ~]# cd zabbix-4.0.20/
[root@node1 zabbix-4.0.20]# ./configure --prefix=/usr/local/zabbix --sysconfdir=/etc/zabbix/ --enable-agent
[root@node1 zabbix-4.0.20]# make && make install
此处添加服务端的 ip,如服务器不为本机,则需要填写远端 zabbix_server 的 ip 地址
[root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
LogFile=/var/log/zabbix/zabbix_agentd.log
Server=127.0.0.1,192.168.153.132
ServerActive=192.168.153.132:10051
启动 agent 服务
[root@node1 ~]# cd zabbix-4.0.20/
[root@node1 zabbix-4.0.20]# cp misc/init.d/fedora/core/zabbix_agentd /etc/init.d/
[root@node1 zabbix-4.0.20]# ln -s /usr/local/zabbix/sbin/zabbix_agentd /usr/local/sbin/
[root@node1 zabbix-4.0.20]# cd /etc/init.d/
[root@node1 init.d]# chkconfig --add zabbix_agentd
[root@node1 init.d]# systemctl start zabbix_agentd
使用 Zabbix 管理平台
将被监控主机添加到系统中
配置–主机–创建主机;根据之前的配置填入信息
Zabbix 在实际使用中,一般采用模板进行监控配置
录入信息一分钟左右就可以看到CPU、内存等使用情况,因为选择了模板,应用集、监控项等会有所不同
监控Windows
在 windows server 2008 上安装 zabbix_agent
1 下载安装包
访问 https://www.zabbix.com/download_agents,下载的安装包直接解压到指定目录就可以
新建C:\Program Files\zabbix_agent
文件夹,解压下载的文件到这个文件夹中
2 修改 agent 的配置文件
修改C:\Program Files\zabbix_agent\conf\zabbix_agentd.win.conf
这个文件
LogFile=c:\zabbix_agentd.log
Server=192.168.153.132
ServerActive=192.168.153.132
UnsafeUserParameters=1 // 是否开启自定义脚本,默认值为0表示不开启;
UserParameter=iis.site.discovery,C:\LLD_Web_Service.bat
3 创建脚本
在 C 盘下创建一个LLD_Web_Service.bat
脚本
@echo off
SETLOCAL ENABLEDELAYEDEXPANSION
echo {
echo "data":[
for /F "tokens=* delims= " %%i IN ('typeperf -qx^|find "Web Service"^|find "Current Connections"') DO (
set j=%%i
for /F "tokens=1 delims=\" %%k in ("%%i") DO (
echo {
echo "{#WEB_SERVICE}": "%%k"
echo },
)
)
echo {
echo "{#WEB_SERVICE}": "none"
echo }
echo ]
echo }
4 安装和启动 zabbix_agent
WIN + R 进入命令行
cd C:\Program Files\zabbix_agent\bin
zabbix_agentd.exe -c ..\conf\zabbix_agentd.win.conf -i // 安装
zabbix_agentd.exe -c ..\conf\zabbix_agentd.win.conf -s // 启动服务
任务管理器能看到进程说明启动成功
现在 zabbix_agent 端的操作已经完成
在服务器端添加 agent
连接成功,配置完成
使用 Media 邮件报警
使用第三方邮箱实现报警
这里测试环境使用的 QQ 邮箱;原理是通过脚本实现 Linux 借用第三方邮箱发送邮件,但是使用脚本发送邮箱还需要邮箱账号的授权码,以及对应的 SMTP 服务器地址。
POP3 (Post Office Protocol - Version 3)协议用于支持使用电子邮件客户端获取并删除在服务器上的电子邮件。
SMTP (Simple Mail Transfer Protocol)协议用于支持使用电子邮件客户端发送电子邮件。
1 邮箱信息获取
在 QQ 邮箱的 “设置” – “ 账户” 中可以找到,点击开启服务。
之后会让你发送一条短信,获取授权码;
关于授权码,如果别人知道你的授权码和邮箱账号,就可以使用你的邮箱发送邮件。
至此,授权码已经获得,我们需要的信息都已经获得
POP3/SMTP 设置方法
用户名/帐户: 你的QQ邮箱完整的地址
密码: 生成的授权码
电子邮件地址: 你的QQ邮箱的完整邮件地址
接收邮件服务器: pop.qq.com,使用SSL,端口号995
发送邮件服务器: smtp.qq.com,使用SSL,端口号465或587
2 Zabbix_server 上配置脚本
修改配置文件,打开自定义脚本选项
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf
AlertScriptsPath=/opt/zabbix/alertscripts
创建目录并授权
[root@zabbix ~]# mkdir -p /opt/zabbix/alertscripts
[root@zabbix ~]# chown -R zabbix:zabbix /opt/zabbix/alertscripts
编写 python 脚本
#!/usr/bin/python
# -*- coding: utf-8 -*-
from email.mime.text import MIMEText
from email.header import Header
from smtplib import SMTP_SSL
import sys
smtpaddr = 'smtp.qq.com' // SMTP 地址
myemail='xxx@qq.com' // QQ 邮箱地址
password='xxxxxxxxxxxxxxxx' // 授权码
recvmail=sys.argv[1] // 收件人
subject=sys.argv[2] // 主题
content=sys.argv[3] // 内容
msg = MIMEText("""%s"""%(content), "plain", "utf-8")
msg['Subject'] = Header(subject, 'utf-8').encode()
msg['From'] = myemail
msg['To'] = recvmail
try:
smtp = SMTP_SSL( smtpaddr )
smtp.login(myemail, password)
smtp.sendmail(myemail, recvmail.split(','), msg.as_string())
smtp.quit()
print("success")
except Exception as e:
print("fail: "+str(e))
给脚本授权
[root@zabbix ~]# chmod +x /opt/zabbix/alertscripts/zabbix_sendmail.py
测试,执行脚本,向邮箱发送邮件,成功进入下一步。
[root@zabbix ~]# /opt/zabbix/alertscripts/zabbix_sendmail.py xxx@qq.com 'zabbix test' 'test123123456456'
success
3 在 zabbix 网页上配置报警
管理–报警媒介类型–创建
添加三个脚本参数
{ALERT.SENDTO} // 收件人
{ALERT.SUBJECT} // 邮件标题
{ALERT.MESSAGE} // 邮件内容
选择使用哪个用户发送消息
管理–用户–点击“Admin" ,当然你也可以选择其他用户
配置–动作–创建触发器,进入到下面界面;选择触发条件,满足即触发后面的动作
选择由哪个用户发送,发送内容
恢复操作同样的道理
故障{TRIGGER.STATUS},服务器名:{HOSTNAME1}发生: {TRIGGER.NAME}故障!
告警主机:{HOSTNAME}
告警主机IP地址:{HOST.IP}
告警时间:{EVENT.DATE} {EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
4 模拟故障,检测报警
最简单的,使用模拟磁盘文件,占用所以磁盘空间
[root@zabbix ~]# dd if=/dev/zero of=/root/a.txt bs=512M count=500
dd: 写入"/root/a.txt" 出错: 设备上没有空间
记录了28+0 的读入
记录了27+0 的写出
14586609664字节(15 GB)已复制,30.1032 秒,485 MB/秒
在 zabbix-server 上配置 mail 服务
1 安装软件 mailx
yum -y install mailx
2 编辑配置文件
[root@zabbix ~]# vim /etc/mail.rc
set bsdcompat
set from=xxx@qq.com
set smtp=smtp.qq.com
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=xxxxxxxxxx // 授权码
set smtp-auth=login
测试能否发送邮件
echo "test" | mail -s 'test zabbix for linux' xxx@qq.com
3 编写发送邮件的脚本
[root@zabbix ~]# vim /opt/zabbix/alertscripts/mailx.sh
#!/bin/bash
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/var/log/zabbix/mailx.log 2>&1
给脚本授权
[root@zabbix ~]# touch /var/log/zabbix/mailx.log
[root@zabbix ~]# chown zabbix:zabbix /var/log/zabbix/mailx.log
[root@zabbix ~]# chmod +x /opt/zabbix/alertscripts/mailx.sh
测试脚本
[root@zabbix ~]# /opt/zabbix/alertscripts/mailx.sh xxx@qq.com "test for zabbix" "test page text"
4 配置 zabbix-web 端
配置和之前基本相同,不同的是参数配置
5 测试
方法和之前一样,附上一张恢复的邮件
添加 MySQL 监控
Zabbix Server 端配置
创建数据库连接信息文件/etc/zabbix/.my.cnf
[root@zabbix ~]# vim /etc/zabbix/.my.cnf
[root@zabbix ~]# cat /etc/zabbix/.my.cnf
[mysql]
host=localhost
password=zabbix
socket=/var/lib/mysql/mysql.sock
[mysqladmin]
host=localhost
user=zabbix
password=zabbix
socket=/var/lib/mysql/mysql.sock
在 Zabbix 的源码包中可以找到 MySQL 模板 userparameter_mysql.conf
,复制模板并修改
[root@zabbix ~]# cp zabbix-4.0.20/conf/zabbix_agentd/userparameter_mysql.conf /etc/zabbix/zabbix_agentd.conf.d
[root@zabbix ~]# vim /etc/zabbix/zabbix_agentd.conf.d/userparameter_mysql.conf
:%s@HOME=/var/lib/zabbix@HOME=/etc/zabbix // 做替换操作
重启 server 和 agent
[root@zabbix ~]# systemctl restart zabbix_server
[root@zabbix ~]# systemctl restart zabbix_agentd
在 Zabbix Web 中添加 Template DB MySQL 模板加入监控
需要新添加一个主机,我的 MySQL 在本地
选择模板
查看主机列表, MySQL 监控成功
监控成功后会生成两个新图形
拓:关于 Zabbix Web 乱码问题的解决
在 Windows 的 C:\Windows\Fonts
目录下,随意找一个字体文件上传到 Linux 的 /var/www/html/zabbix/assets/fonts
目录中
将原来的字体文件备份,将新的字体文件重命名
[root@zabbix ~]# cd /var/www/html/zabbix/assets/fonts
[root@zabbix fonts]# ls
DejaVuSans.ttf STXINGKA.TTF
[root@zabbix fonts]# mv DejaVuSans.ttf DejaVuSans.ttf.bak
[root@zabbix fonts]# mv STXINGKA.TTF DejaVuSans.ttf
[root@zabbix fonts]# ls
DejaVuSans.ttf DejaVuSans.ttf.bak
再去 web 上刷新,乱码就解决了