Zabbix监控系统

文章目录

Zabbix监控系统

Zabbix官网:Zabbix:企业级开源监控解决方案

部署手册:下载Zabbix

产品手册:产品手册

Zabbix概述

Zabbix 能够用来帮助你:

  • 监控服务器是否 还活着
  • 监控 CPU、内存、磁盘、网络 是否正常
  • 监控服务(如 Nginx、MySQL、Redis)有没有挂
  • 出问题时自动报警(邮件、微信、钉钉等)
  • 把历史数据画成 图表,方便你分析

Zabbix能够应用的范围:

  • 服务器:CPU使用率,内存使用情况,磁盘空间,网络流量
  • 服务:web服务,数据库(mysql),中间件(redis)
  • 设备:交换机,路由器
  • 应用:接口响应时间,进程是否存在

Zabbxi架构

Zabbix由多个主要软件组件构成:

  • Zabbix-Server:

    Zabbixserver是核心组件,agents向其报告可用性、完整性信息及统计指标。服务器作为中央存储库,保存所有配置数据、统计数据和运行数据

    所有配置信息以及Zabbix收集的数据均存储在数据库中

  • Agent:

    Zabbixagents被部署在监控目标上,用于主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix服务器

    自Zabbix4.4起,有两种类型的agents可用:

    • Zabbix agent(轻量级,支持多种平台,使用C语言编写)
    • Zabbix agent2(高度灵活,易于通过插件扩展,使用Go 语言编写)
  • Web界面:

    为了从任何地方和任何平台轻松访问Zabbix,系统提供了基于Web的界面。该界面是Zabbix server的一部分,通常(但不一定)运行在与服务器相同的物理机器上

  • 数据流:

    比如,当server要去查看服务器A上CPU情况,agent会在服务器A上采集CPU数据,然后agent将数据发送给server,server会判断该数据的情况,正常,则存入数据库中,不正常,则出发报警,通过Web界面能够看见图表或报警信息

  • Proxy:

    Zabbix proxy可以代表Zabbix server 收集性能和可用性数据。proxy是Zabbix 部署中的可选组件,但它能有效分担单个Zabbix server的负载

搭建LNMP架构

Zabbix基于LNMP架构部署

环境:

zabbix-server通过Centos-7-template模板克隆产生

mysql通过mysql-tpl克隆产生

主机名 IP 功能
zabbix-server 192.168.108.50 安装zabbix
mysql 192.168.108.51 被监控端

安装Nginx

bash 复制代码
# 创建nginx的yum源
[root@zabbix-server ~]# vim /etc/yum.repos.d/nginx.repo
[root@zabbix-server ~]# cat /etc/yum.repos.d/nginx.repo
[nginx]
name=nginx.repo
baseurl=http://nginx.org/packages/centos/7/$basearch/
enabled=1
gpgcheck=0

# 安装nginx
[root@zabbix-server ~]# yum install -y nginx

# 开启服务
[root@zabbix-server ~]# systemctl start nginx
[root@zabbix-server ~]# systemctl enable nginx

# 防火墙添加通过http
[root@zabbix-server ~]# firewall-cmd --add-service=http --zone=public
success
[root@zabbix-server ~]# firewall-cmd --add-service=http --zone=public --permanent
success
[root@zabbix-server ~]# firewall-cmd --reload
success

测试nginx环境

安装MariaDB

bash 复制代码
# 配置安装mariadb10.6的yum源(zabbix6.0必须使用10.5以上版本,低版本不支持)
[root@zabbix-server ~]# vim /etc/yum.repos.d/mariadb.repo
[root@zabbix-server ~]# cat /etc/yum.repos.d/mariadb.repo
[mariadb]
name=mariadb
baseurl=https://mirrors.aliyun.com/mariadb/yum/10.6/centos7-amd64/
enabled=1
gpgcheck=0

# 下载mariadb
[root@zabbix-server ~]# yum install -y mariadb-server mariadb

# 开启服务
[root@zabbix-server ~]# systemctl enable mariadb --now

# 设置root密码
[root@zabbix-server ~]# mysql
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 10.6.19-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)]> delete from mysql.user where User='';
Query OK, 2 rows affected (0.003 sec)

MariaDB [(none)]> alter user root@localhost identified by 'root123';
Query OK, 0 rows affected (0.002 sec)

测试连接数据库

bash 复制代码
[root@zabbix-server ~]# mysql -uroot -proot123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 4
Server version: 10.6.19-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)]>

安装PHP

bash 复制代码
[root@zabbix-server ~]# yum install -y epel-release
[root@zabbix-server ~]# sed -i "s/#baseurl/baseurl/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~]# sed -i "s/metalink/#metalink/g" /etc/yum.repos.d/epel.repo
[root@zabbix-server ~]# sed -i "s@https\?://download.[a-z]*\.\?[a-z]*/pub@https://repo.huaweicloud.com@g" /etc/yum.repos.d/epel.repo

[root@zabbix-server ~]# rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm

[root@zabbix-server ~]# 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

配置nginx支持php

bash 复制代码
# 修改php-fpm配置文件,将apache改为nginx
[root@zabbix-server ~]# vim /etc/php-fpm.d/www.conf
  8 user = nginx
 10 group = nginx

# 配置location,在index中添加index.php,来支持index.php首页
[root@zabbix-server ~]# vim /etc/nginx/conf.d/default.conf
  9 index  index.php index.html index.htm;
 
# 配置php请求被传送到后端php-fpm模块,默认情况下php配置块是被注释的,此时去掉注释并修改
# 将fastcgi_param中的/scripts改为$document_root。root是配置php程序放置的根目录
 29 location ~ \.php$ {
 30        root           /usr/share/nginx/html;
 31        fastcgi_pass   127.0.0.1:9000;
 32        fastcgi_index  index.php;
 33        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
 34        include        fastcgi_params;
 35  }  

配置php

bash 复制代码
# 修改php配置文件
[root@zabbix-server ~]# vim /etc/php.ini
 202 short_open_tag = On	#支持php短标签
 359 expose_php = Off		#隐藏php版本
 
# zabbix优化配置要求
 368 max_execution_time = 300		#执行时间
 378 max_input_time = 300			#接收数据等待时间
 389 memory_limit = 128M			#每个脚本占用内存
 656 post_max_size = 16M			#POST数据大小
 799 upload_max_filesize = 2M		#上传文件大小
 800 always_populate_raw_post_data = -1		#原来空的,需要添加
 877 date.timezone = Asia/Shanghai	#时区
 
# 启动php-fpm服务
[root@zabbix-server ~]# systemctl enable php-fpm --now

# 重启nginx
[root@zabbix-server ~]# systemctl restart nginx

测试

测试php首页
bash 复制代码
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php
[root@zabbix-server ~]# cat /usr/share/nginx/html/info.php
<?php
 phpinfo();
?>
测试连接数据库
bash 复制代码
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php 
[root@zabbix-server ~]# cat /usr/share/nginx/html/info.php
<?php
 $link=mysqli_connect('127.0.0.1','root','root123');
 if ($link) echo "success";
 else echo "fail";
?>

# $link=mysqli_connect('127.0.0.1','root','root123');   设置变量$link,连接数据库
# if ($link) echo "success";                            如果连接上输出success
# else echo "fail";                                     连接不上输出fail

mysql_connect扩展自 PHP 5.5.0 起已废弃,改用mysqli或pdo_mysql

bash 复制代码
# 创建zabbix用的数据库以及账号
[root@zabbix-server ~]# mysql -uroot -proot123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 6
Server version: 10.6.19-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 collate utf8_bin;
Query OK, 1 row affected (0.002 sec)

MariaDB [(none)]> grant all privileges on *.* to 'zabbix'@'%' identified by 'zabbix123';
Query OK, 0 rows affected (0.002 sec)

MariaDB [(none)]> grant all privileges on *.* to 'zabbix'@'localhost' identified by 'zabbix123';
Query OK, 0 rows affected (0.002 sec)

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

collate的作用

对于mysql中那些字符类型的列,如VARCHAR,CHAR,TEXT类型的列,都需要有一个COLLATE类型来告知mysql如何对该列进行排序和比 较。COLLATE会影响到ORDER BY语句的顺序,会影响到WHERE条件中大于小于号筛选出来的结果,会影响DISTINCT、GROUP BY、 HAVING语句的查询结果。另外,mysql建索引的时候,如果索引列是字符类型,也会影响索引创建,只不过这种影响我们感知不到。凡是 涉及到字符类型比较或排序的地方,都会和COLLATE有关。

测试连接zabbix数据库
bash 复制代码
[root@zabbix-server ~]# vim /usr/share/nginx/html/info.php 
[root@zabbix-server ~]# cat /usr/share/nginx/html/info.php
<?php
 $link=mysqli_connect('127.0.0.1','zabbix','zabbix123');
 if ($link) echo "link zabbix database success";
 else echo "fail";
?>

Zabbix-Server

导入数据库

实验材料:zabbix-6.0.6.tar.gz

bash 复制代码
[root@zabbix-server ~]# tar xzvf zabbix-6.0.6.tar.gz

# 导入数据库
[root@zabbix-server ~]# cd zabbix-6.0.6/database/mysql/
[root@zabbix-server mysql]# ls
data.sql  double.sql  history_pk_prepare.sql  images.sql  Makefile.am  Makefile.in  schema.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < schema.sql
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < images.sql 
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < data.sql 
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < double.sql 
[root@zabbix-server mysql]# mysql -uroot -proot123 zabbix < history_pk_prepare.sql

# 进入zabbix数据库查看
[root@zabbix-server mysql]# mysql -uroot -proot123
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 13
Server version: 10.6.19-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)]> 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                     |
... ...
| valuemap_mapping           |
| widget                     |
| widget_field               |
+----------------------------+
178 rows in set (0.009 sec)
# 178条

安装软件包

bash 复制代码
# 安装zabbix环境包
[root@zabbix-server ~]# 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

# 创建zabbix用户
[root@zabbix-server ~]# useradd -s /sbin/nologin -M zabbix
# 使得编译器在编译 C 代码时使用 GNU C99 标准
[root@zabbix-server ~]# export CFLAGS="-std=gnu99"

# 执行configure脚本
[root@zabbix-server zabbix-6.0.6]# ./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

# 安装
[root@zabbix-server zabbix-6.0.6]# make install

# 检查版本
[root@zabbix-server zabbix-6.0.6]# zabbix_server --version
zabbix_server (Zabbix) 6.0.6
Revision 3f7597e3ea3 27 June 2022, compilation time: Jan  5 2026 10:03:15

修改Zabbix-Server配置文件

bash 复制代码
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
 38 LogFile=/var/log/zabbix_server.log
 123  DBPassword=zabbix123
 
#创建日志文件并修改所属组和所属用户
[root@zabbix-server ~]# touch /var/log/zabbix_server.log
[root@zabbix-server ~]# chown zabbix.zabbix /var/log/zabbix_server.log

# 创建并添加systemctl服务管理zabbix-server
[root@zabbix-server ~]# vim /usr/lib/systemd/system/zabbix-server.service
[root@zabbix-server ~]# cat /usr/lib/systemd/system/zabbix-server.service
[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

# 启动zabbix
[root@zabbix-server ~]# systemctl start zabbix-server.service  
[root@zabbix-server ~]# netstat -ntap | grep 10051
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      13488/zabbix_server

将前端网页复制到站点

bash 复制代码
[root@zabbix-server ~]# cp -r /root/zabbix-6.0.6/ui/* /usr/share/nginx/html/
[root@zabbix-server ~]# chown -R nginx:nginx /usr/share/nginx/html/

测试页面






默认登陆用户名:Admin

默认登陆密码:zabbix

被监控端 Agent

安装agent

使用前面mysql章节的mysql-tpl模板克隆出来的mysql

bash 复制代码
[root@mysql ~]# systemctl stop firewalld
[root@mysql ~]# setenforce 0
setenforce: SELinux is disabled
[root@mysql ~]# hostnamectl set-hostname msyql

# 更新CA
[root@mysql ~]# yum update -y ca-certificates

# 安装软件包
[root@mysql ~]# rpm -ivh https://repo.zabbix.com/zabbix/6.0/rhel/7/x86_64/zabbix-release-6.0-4.el7.noarch.rpm
[root@mysql ~]# yum install -y zabbix-agent2
# 测试环境如果安装没有通过gpgcheck,可以使用 --nogpgcheck

# 启动服务
[root@mysql ~]# systemctl enable zabbix-agent2.service --now

# 修改配置文件
[root@mysql ~]# vim /etc/zabbix/zabbix_agent2.conf
 13 PidFile=/var/run/zabbix/zabbix_agent2.pid
 32 LogFile=/var/log/zabbix/zabbix_agent2.log
 43 LogFileSize=0
 82 Server=192.168.108.50		# 指向监控服务器
 135 ServerActive=192.168.108.50		#指向监控服务器
 146 Hostname=mysql
 283 Include=/etc/zabbix/zabbix_agent2.d/plugins.d/*.conf

# 重启服务
[root@mysql ~]# systemctl restart zabbix-agent2

Zabbix管理

登陆zabbix首页

监控主机

主页面 -> 模板

全克隆 -> 添加

添加数据库信息

更新数据库节点,用户以及数据库密码

配置 -> 主机 -> 创建主机

组群 -> 选择 -> Linux servers

模板 -> 选择 -> 选择 -> Templates -> MySQL by Zabbix agent 2 plus

被监控主机配置

Inteerfaces: 添加>客户端

端口是10050,是zabbix客户端插件监听端口

添加后直接生成

可用性:绿色正常,一开始灰色等一会

邮件服务

使用自己的邮箱,邮箱设置中选择账号安全,并绑定手机号,其中我们需要开启一个服务

复制授权码

在zabbix-server服务器上安装邮箱服务

bash 复制代码
[root@zabbix-server ~]# yum install -y mailx

配置邮箱服务

文件末尾添加

bash 复制代码
[root@zabbix-server ~]# vim /etc/mail.rc
bash 复制代码
[root@zabbix-server ~]# chmod -R 755 /etc/pki/nssdb/

现在我们需要获取QQ邮箱的SSL证书并保存到本地指定的目录以备调用和验证

bash 复制代码
[root@zabbix-server ~]# mkdir -p /root/.certs/
[root@zabbix-server ~]# echo -n |  openssl s_client -connect smtp.qq.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
[root@zabbix-server ~]# certutil -L -d /root/.certs

为了防止出现前文所说的发送邮件警告提示,还需要进入邮箱SSL证书存放目录 /root/.certs 里执行如下命令:

bash 复制代码
[root@zabbix-server ~]# cd /root/.certs/
[root@zabbix-server .certs]# certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt
Notice: Trust flag u is set automatically if the private key is present.
# 返回该提示即完成

这是为了信任证书的标记操作

至此,已经完成了mailx结合QQ邮箱发送系统邮件的部署,通过命令行发送测试邮件试试吧

bash 复制代码
# 执行命令后,进入交互式编辑,输入正文后按 Ctrl+D 结束并发送
[root@zabbix-server ~]# mailx -s "emailtest" `mailofyourself`@qq.com
hahaha
you are handsome
EOT					# 这一句是`ctrl+D`显示出来的结束

前往qq邮箱查收测试邮件

创建脚本目录,并重启zabbix服务

bash 复制代码
[root@zabbix-server ~]# vim /etc/zabbix/zabbix_server.conf
548 AlertScriptsPath=/usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# mkdir -p /usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# chown -R zabbix:zabbix /usr/lib/zabbix/alertscripts
[root@zabbix-server ~]# systemctl restart zabbix-server.service

# 编写邮件发送脚本
[root@zabbix-server ~]# vim /usr/lib/zabbix/alertscripts/mailx.sh
[root@zabbix-server ~]# cat /usr/lib/zabbix/alertscripts/mailx.sh
#!/bin/bash
#send mail
messages=`echo $3 | tr '\r\n' '\n'`
subject=`echo $2 | tr '\r\n' '\n'`
echo "${messages}" | mail -s "${subject}" $1 >>/tmp/mailx.log 2>&1

# 权限设置
[root@zabbix-server ~]# touch /tmp/mailx.log
[root@zabbix-server ~]# chown -R zabbix.zabbix /tmp/mailx.log 
[root@zabbix-server ~]# chmod +x /usr/lib/zabbix/alertscripts/mailx.sh

# 测试脚本发送邮件
[root@zabbix-server ~]# cd /usr/lib/zabbix/alertscripts/
[root@zabbix-server alertscripts]# ls
mailx.sh
[root@zabbix-server alertscripts]# ./mailx.sh `mailofyourself`@qq.com "hello mailx.sh" "This is a test."

警告服务

管理 -> 报警媒介类型 -> 创建媒体类型

脚本参数

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

管理 -> 用户 -> Admin

报警媒介 -> 添加类型刚创建的mail-test

收件人填写自己的邮箱

!!!!更新!!!!!

配置 -> 动作 -> Trigger actions

先删除默认动作,然后创建动作

定义操作

bash 复制代码
主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
告警主机:{HOST.NAME}
告警  IP:{HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}:{ITEM.VALUE}
事件  ID:{EVENT.ID}

恢复操作

bash 复制代码
主题 : {TRIGGER.STATUS}:{TRIGGER.NAME}
消息:
恢复主机:{HOST.NAME}
恢复  IP:{HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级:{TRIGGER.SEVERITY}
恢复信息:{TRIGGER.NAME}:{ITEM.VALUE}
恢复  ID:{EVENT.ID}



监视主页面仪表盘

在被监控端关闭数据库服务

bash 复制代码
[root@mysql ~]# systemctl stop mysqld

等待一段时间查看仪表盘邮件

数据库会变红(我这里中间机器关机过一次,已经停掉了)

同时邮件也会收到告警

相关推荐
安当加密2 小时前
用 SMS 凭据管理系统替代 HashiCorp Vault:中小企业的轻量级 Secrets 管理实践
服务器·数据库·安全·阿里云
物联网软硬件开发-轨物科技2 小时前
【技术白皮书】光伏电站数智化技改技术白皮书:从老旧场站到高收益智能资产的演进路径
大数据·运维·服务器
不光头强2 小时前
Linux 系统中最常用的命令及具体使用方法
linux·运维·chrome
番茄去哪了2 小时前
Python基础入门(二)
linux·服务器·开发语言·python
BigALiang2 小时前
Linux驱动复习小记
linux·运维·服务器
撩妹小狗2 小时前
文件上传漏洞(下)
安全·web安全·网络攻击模型
2501_946490382 小时前
Hirender MTC时间码技术实操——PH®CLUB激光投影声光电精准同步实现方案
大数据·运维·人工智能·hirender·hecoos
田里的水稻2 小时前
OE_ubuntu24.04如何安装中文简体拼音输入法
运维·前端·chrome
东北甜妹3 小时前
Rsync+sersync 数据实时同步
运维