一、前言
1、zabbix介绍
zabbix 是一款开源的功能强大的分布式监控系统,一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix支持监控各种系统平台,包括Linux和Windows等主流操作系统,也可以借助SNMP或者是SSH协议监控路由交换设备。zabbix可以监控其CPU、内存、网络性能等硬件参数,也可以监控具体的服务或者应用程序、服务运行情况及性能。 zabbix 由两部分构成,可选组件zabbix agent。 通过c/s模式采集数据,通过B/S模式在Web端展示和配置。 1、zabbix server 可以通过zabbix agent, SNMP协议,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux 等平台上。 2、zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。
zabbix官网:Zabbix :: The Enterprise-Class Open Source Network Monitoring Solution
2、zabbix架构
3、zabbix监控原理
zabbix agent安装在被监控的主机上,zabbix agent负责定期收集客户端本地各项数据,并发送至zabbix server 端zabbix server 收到数据后,将数据存储到数据库中,用户基于Zabbix Web可以看到数据在前端展现图像。当zabbix监控某个具体的项目,该项目会设置一个触发器阀值,当被监控的指标超过该触发器设定的阀值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(shell 命令、install、reboot、 restart等)。
4、zabbix功能组件
1、Zabbix Server Zabbix server 是 Zabbix 软件的核心组件,Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。 Zabbix Server 也是存储所有配置信息、统计信息和操作信息的核心存储库。 Zabbix Server 也是 Zabbix 监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。 基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web 前端、数据库。 Zabbix 的所有配置信息都存储在 Server 和 Web 前端进行交互的数据库中。例如,当你通过 Web 前端(或者API)新增一个监控项时, 它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。 这就是为什么 Zabbix 前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。 2、数据库 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中。 可以支持 MySQL、PostgreSQL、Oracle、DB2(关系型数据库)、TimescaleDB (时序性数据库) 3、Web 界面 Web 界面是 Zabbix Server 的一部分,用于实现展示和配置的界面。通常(但不一定)和 Zabbix server 运行在同一台物理机器上。 基于Apache/Nginx + PHP实现,早期只支持 LAMP 架构,从 Zabbix5.0 开始支持 LNMP 。 4、Zabbix Agent 客户端守护进程,部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix Server。从 Zabbix5.0 开始支技 Zabbix Agent2 。 5、Zabbix Proxy zabbix分布式代理守护进程,可以代替 Zabbix Server 采集性能和可用性数据 Zabbix Proxy 在 Zabbix 的部署是可选部分。 Zabbix Proxy 的部署可以很好的分担单个 Zabbix Server 的负载。 通常监控大于 500 台主机时使用,需要进行分布式监控架构部署。 6、Java Gateway Zabbix 要监控 Tomcat 服务或其它 JAVA 程序(比例 Elasticsearch、ZooKeeper),需要使用 Java Gateway 做为代理,才能从 JAVA 程序中获取数据。
二、zabbix6.0部署
系统:CentOS 7 不支持 yum 方式安装 Zabbix 6.0 服务端
安装方式:Zabbix 服务端采用编译安装的方式,zabbix 客户端采用 yum 安装的方式
一、部署Nginx和PHP
1、关闭selinux和防火墙
systemctl disable --now firewalld setenforce 0 hostnamectl set-hostname zbx-server
2、部署Nginx和PHP环境并测试
1、安装nginx cat > /etc/yum.repos.d/nginx.repo << 'EOF' [nginx] name=nginx repo baseurl=http://nginx.org/packages/centos/$releasever/$basearch/ gpgcheck=0 enabled=1 module_hotfixes=true EOF yum install -y nginx 2、安装php curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo yum install -y epel-release rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm yum -y install php72w php72w-cli php72w-common php72w-devel php72w-embedded php72w-gd php72w-mbstring php72w-pdo php72w-xml php72w-fpm php72w-mysqlnd php72w-opcache php72w-ldap php72w-bcmath
3、修改nginx配置文件
cat >/etc/nginx/conf.d/zbx.conf<<'EOF' server { listen 80; server_name zabbix.cn; # 配置域名 location / { root /var/www/zbx; # 站点目录 index index.php; } location ~ \.php$ { fastcgi_pass 127.0.0.1:9000; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME /var/www/zbx$fastcgi_script_name; include fastcgi_params; } } EOF
4、修改php配置文件
# 执行命令即可 sed -i 's#user = apache#user = nginx#g' /etc/php-fpm.d/www.conf sed -i 's#group = apache#group = nginx#g' /etc/php-fpm.d/www.conf sed -i 's#max_execution_time = 30#max_execution_time = 300#g' /etc/php.ini sed -i 's#max_input_time = 60#max_input_time = 600#g' /etc/php.ini sed -i 's#post_max_size = 8M#post_max_size = 80M#g' /etc/php.ini sed -i 's#;date.timezone =#date.timezone = Asia/Shanghai#g' /etc/php.ini vim /etc/php-fpm.d/www.conf user = nginx group = nginx vim /etc/php.ini max_execution_time = 300 # 368行 max_input_time = 600 # 378行 post_max_size = 80M # 656行 date.timezone = Asia/Shanghai # 877行
4、创建测试文件
mkdir -p /var/www/zbx cat >/var/www/zbx/index.php<<'EOF' <?php phpinfo(); ?> EOF
5、启动服务并测试
systemctl enable --now nginx php-fpm
6、本地解析测试
windows下hosts文件解析 C:\Windows\System32\drivers\etc\hosts 10.0.0.191 zabbix.cn
二、部署数据库
MySQL 5.7 或 Mariadb 10.5 及以上版本
1、配置Mariadb源
cat > /etc/yum.repos.d/mariadb.repo << EOF [mariadb] name = MariaDB baseurl = http://mirrors.aliyun.com/mariadb/yum/10.5/centos7-amd64/ gpgkey = http://mirrors.aliyun.com/mariadb/yum/RPM-GPG-KEY-MariaDB gpgcheck = 1 enabled=1 EOF yum install -y mariadb-server mariadb systemctl enable --now mariadb
2、初始化数据库
mysql_secure_installation 分别输入 回车 -> n -> Y (设置root密码,如abc123) -> 后面一路 Y mysql -u root -pabc123
3、创建库并创建用户
创建数据库并指定字符集 create database zabbix character set utf8 collate utf8_bin; 创建 zabbix 数据库用户并授权 grant all on zabbix.* to 'zabbix'@'localhost' identified by 'zabbix'; grant all on zabbix.* to 'zabbix'@'%' identified by 'zabbix'; flush privileges;
4、导入zabbix数据
# 下载安装包 cd /opt/ wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.19.tar.gz # 解压安装包 tar xf zabbix-6.0.19.tar.gz # 查看 [root@zabbix /opt]# ls /opt/zabbix-6.0.19/database/mysql data.sql double.sql history_pk_prepare.sql images.sql Makefile.am Makefile.in schema.sql # 按顺序导入 cd /opt/zabbix-6.0.19/database/mysql mysql -uroot -pfxx123 zabbix < schema.sql mysql -uroot -pfxx123 zabbix < images.sql mysql -uroot -pfxx123 zabbix < data.sql mysql -uroot -pfxx123 zabbix < double.sql mysql -uroot -pfxx123 zabbix < history_pk_prepare.sql
三、部署zabbix Server服务端
1、安装依赖并创建用户
#安装依赖包,创建 zabbix 用户 yum install -y mysql-devel pcre-devel openssl-devel zlib-devel libxml2-devel net-snmp-devel net-snmp libssh2-devel OpenIPMI-devel libevent-devel openldap-devel libcurl-devel fping gcc gcc-c++ make useradd -s /sbin/nologin -M zabbix
2、编译安装
#编译安装 cd /opt/zabbix-6.0.19/ export CFLAGS="-std=gnu99" ./configure \ --sysconfdir=/etc/zabbix/ \ --enable-server \ --with-mysql \ --with-net-snmp \ --with-libxml2 \ --with-ssh2 \ --with-openipmi \ --with-zlib \ --with-libpthread \ --with-libevent \ --with-openssl \ --with-ldap \ --with-libcurl \ --with-libpcre make install # 检查版本 zabbix_server --version
3、修改配置文件
1、修改 zabbix server 配置文件,修改数据库的密码 sed -i 's#/tmp/zabbix_server.log#/var/log/zabbix_server.log#g' /etc/zabbix/zabbix_server.conf sed -i 's/# DBPassword=/DBPassword=zabbix/g' /etc/zabbix/zabbix_server.conf # LogFile=/var/log/zabbix_server.log # 38行,指定 zabbix 日志路径 # DBPassword=zabbix # 123行,指定 zabbix 数据库的密码 2、准备 systemctl 服务管理文件 cat >/usr/lib/systemd/system/zabbix-server.service<<'EOF' [Unit] Description=Zabbix Server with MySQL DB After=syslog.target network.target mysqld.service [Service] Type=simple ExecStart=/usr/local/sbin/zabbix_server -f User=zabbix [Install] WantedBy=multi-user.target EOF 3、启动服务 systemctl enable --now zabbix-server netstat -lntp | grep 10051 #zabbix_server 默认监听 10051 端口
4、部署Web前端
rm -rf /var/www/zbx/index.php cp -r /opt/zabbix-6.0.19/ui/* /var/www/zbx chown -R nginx.nginx /var/www/zbx 浏览器访问:http://zbbix.cn/ 【Default language】选择 Chinese(zh_CN),点击下一步 【密码】输入 zabbix,点击下一步 【Zabbix主机名称】输入 Zabbix-监控;【默认时区】选择 Asia/Shanghai,点击下一步 安装完成后,默认的登录账号和密码为:Admin/zabbix
四、服务端部署zabbix客户端
zabbix-agent采用yum方式安装
rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm sed -i 's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo #zabbix 5.0 版本开始采用 golang 语言开发的新版本客户端 agent2 yum install -y zabbix-agent2 systemctl enable --now zabbix-agent2 netstat -lntp | grep 10050 #客户端 zabbix_agent2 默认监听 10050 端口 //解决 zabbix-server Web页面中文乱码问题 yum install -y wqy-microhei-fonts \cp -f /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /var/www/zbx/assets/fonts/DejaVuSans.ttf 刷新浏览器页面
五、添加新的客户端主机
1、关闭防火墙和selinux systemctl disable --now firewalld setenforce 0 2、服务端和客户端都配置时间同步 yum install -y ntpdate ntpdate ntp.aliyun.com 3、服务端和客户端都设置 hosts 解析 cat >>/etc/hosts<<'EOF' 10.0.0.191 zabbix 10.0.0.51 db01 EOF 4、设置 zabbix 的下载源,安装 zabbix-agent2 rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm sed -i 's#https://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo yum install -y zabbix-agent2 5、修改 agent2 配置文件 sed -i 's#Server=127.0.0.1#Server=10.0.0.191#g' /etc/zabbix/zabbix_agent2.conf #80行,指定 zabbix 服务端的 IP 地址 sed -i 's#ServerActive=127.0.0.1#ServerActive=10.0.0.191#g' /etc/zabbix/zabbix_agent2.conf #133行,指定 zabbix 服务端的 IP 地址 sed -i 's#Hostname=Zabbix server#Hostname=db01#g' /etc/zabbix/zabbix_agent2.conf #144行,指定当前 zabbix 客户端的主机名 6、启动 zabbix-agent2 systemctl start zabbix-agent2 systemctl enable zabbix-agent2 netstat -natp | grep zabbix [root@db01 ~]# netstat -natp | grep zabbix tcp6 0 0 :::10050 :::* LISTEN 2054/zabbix_agent2 7、在服务端验证 zabbix-agent2 的连通性 (服务端操作) yum install -y zabbix-get #安装 zabbix 主动获取数据的命令 [root@zabbix ~]# zabbix_get -s '10.0.0.51' -p 10050 -k 'agent.ping' 1 [root@zabbix ~]# zabbix_get -s '10.0.0.51' -p 10050 -k 'system.hostname' db01 常用的键值 agent.ping 服务端与客户端是否连通,返回1表示可达,返回非表示不可达 system.hostname 系统主机名 agent.hostname 客户端主机名 net.if.in [if,< mode >] 网络接口进入的流量统计,if表示网卡名称,带<>的参数表示可以省略 net.if.out [if,< mode >] 网络接口流出的流量统计 proc.num[< name >,< user>,< state>,< cmdline>,< zone>] 进程数 net.tcp.port[,port] 检查是否能建立tcp连接到指定端口,返回0表示不能连接,返回1表示可以连接 8、web页面中添加 agent 主机 点击左边菜单栏【配置】中的【主机】,点击【创建主机】 【主机名称】输入 db01 【可见的名称】输入 db01-10.0.0.51 【模板】搜索 Linux ,选择 Linux by Zabbix agent 【群组】选择 Linux servers 【Interfaces】点击添加 客户端,【IP地址】输入 192.168.92.13 #监控模板下载地址 https://share.zabbix.com/ https://monitoringartist.github.io/zabbix-searcher/ https://git.zabbix.com/projects/ZBX/repos/zabbix/browse/templates
六、自定义监控内容
案列:自定义监控客户端服务器登录的人数 需求:限制登录人数不超过 3 个,超过 3 个就发出报警信息
1、在客户端创建自定义key
在客户端创建自定义 key 1.明确需要执行的 linux 命令 who | wc -l 2.创建 zabbix 的监控项配置文件,用于自定义 key # 自定义监控项的格式如下 # Format: UserParameter=<key>,<shell command> cat >/etc/zabbix/zabbix_agent2.d/UserParameter_login.conf<<'EOF' UserParameter=login.user,who|wc -l EOF systemctl restart zabbix-agent2 3.在服务端验证新建的监控项 zabbix_get -s '10.0.0.51' -p 10050 -k 'login.user'
2、创建自定义监控项模板
在 Web 页面创建自定义监控项模板 1.创建模板 点击左边菜单栏【配置】中的【模板】,点击【创建模板】 【模板名称】设置成 Template Login User 【可见的名称】设置成 Template Login User 【群组】选择 Template 【描述】可自定义 点击 【添加】,此时就可在【名称】中搜索到 Template Login User 了
3、创建监控项
点击 Template Login User 模板进入 点击上方菜单栏【监控项】,点击【创建监控项】 【名称】设置成 Number of login users 【键值】设置成 login.user #键值必须要与自定义的监控项配置文件中设置的保持一致 【更新间隔】设置成 10s 【历史数据保留时长】Storage period 30d #保留时间可自定义设置 点击 【添加】
4、创建触发器
创建触发器(当监控项获取到监控的值后和触发器预设的值进行对比,判断是否报警) 点击上方菜单栏【触发器】,点击【创建触发器】 【名称】设置成 Number of login users is greater than 3 【严重性】设置成 一般严重 #根据严重程度可自定义设置 【表达式】点击添加,【监控项】点击选择 Number of login users,【功能】选择 last(),【结果】选择 > 3,点击 【插入】 点击 【添加】
5、创建图形
点击上方菜单栏【图形】,点击【创建图形】 【名称】设置成 Number of login users 【宽】、【高】可直接采用默认值 【监控项】点击添加勾选相关监控项 Number of login users,【功能】选择 最大,其它可保持默认值 点击 【添加】
6、主机和模板关联
将主机与模板关联起来(一个主机可以关联多个模板) 点击左边菜单栏【配置】中的【主机】,点击你要关联的主机 【模板】搜索 login,选择 Template Login User,点击【更新】 此时就点击【监测】中的【主机】,点击你关联主机的【图形】,即可查看到相关的监控项指标
测试
7、配置邮件告警
设置邮件报警 点击左边菜单栏【管理】中的【报警媒介类型】,点击【创建媒体类型】 【名称】设置成 qq_Email 【SMTP服务器】设置成 smtp.qq.com 【SMTP服务器端口】设置成 25 【SMTP HELO】设置成 qq.com 【SMTP电邮】设置成 自己的邮箱地址,例如 3587152523@qq.com 【认证】选择 用户名和密码 【用户名称】设置成 自己的邮箱地址,例如 3587152523@qq.com 【密码】可登录QQ邮箱页面,点击【设置】-->【账户】中的【生成授权码】,通过短信获取授权码 【描述】可自定义 点击上方菜单栏【Message templates】,点击【添加】,【Message type】选择 问题,点击【更新】 点击左边菜单栏【User settings】-->【Profile】-->【报警媒介】,点击【添加】 【类型】选择 qq_Email 【收件人】设置成 3587152523@qq.com 【当启用时】设置成 1-7,00:00-24:00 【如果存在严重性则使用】勾选需要的严重性 点击 【添加】 再点击 【更新】 点击左边菜单栏【配置】->【动作】->【Trigger actions】—> 点击创建动作 【名称】自定义一个,比如:Emil_alarm 【条件】点击添加 【类型】选择 触发器,【操作者】选择 等于,【触发器】点击选择 Nunber of login users is greater than 3 点击【添加】 勾选 【已启动】 点击 【更新】 //测试邮件报警 增加测试客户端的用户登录数超过触发器预设的值,查看【监测】-->【仪表板】,确认报警