Zabbix监控系统:zabbix服务部署+基于Proxy分布式部署+zabbix主动与被动监控模式

一、Zabbix概述

1.1 简介

zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

zabbix 能监视各种网络参数,保证服务器系统的安全运营,提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

zabbix 由 2 部分构成,zabbix server 与可选组件 zabbix agent。

通过 C/S 模式采集数据,通过 B/S 模式在 Web 端展示和配置。

zabbix server 可以通过 SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能, 它可以运行在 Linux 等平台上。

zabbix agent 需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU 等信息的收集。

1.2 zabbix组件

1.2.1 zabbix server

zabbix服务端进程,配置和管理zabbix应用程序,也是监控系统的告警中心(配置监控项告警触发器阈值和发送告警)。

端口10051

1.2.2 zabbix agent

部署在被监控主机上,采集监控指标数据,发送给zabbix server。

端口10050

1.2.3 zabbix proxy

zabbix代理端进程,部署在zabbix server与zabbix agent之间,代替zabbix server收集zabbix agent发送的监控指标数据,汇总后再转发给 zabbix server,分担zabbix server的集中式负载压力。

端口10051(默认与zabbix server相同)

1.2.4 zabbix database(mysql oracle postgreSQL tsdb等)

持久化存储配置信息和监控指标数据。

1.2.5 zabbix web(apache/nginx + php)

进行zabbix服务端配置和监控数据的UI界面展示。

1.2.6 zabbix java gateway

作为获取从java应用采集的监控指标数据的代理端。

端口10052

1.3 工作原理

zabbix agent会定期采集被监控主机的指标数据并发送给zabbix server

zabbix server收到数据后会将数据存储到zabbix database中;

管理员可基于zabbix web前端查看监控数据的图像。

二、部署Zabbix

|---------------|---------------|
| Server | IP |
| Zabbix-server | 192.168.10.20 |
| Zabbix-agent | 192.168.10.30 |

bash 复制代码
#关闭 selinux 与防火墙
systemctl disable --now firewalld
setenforce 0

2.1 解决依赖关系

bash 复制代码
yum install gcc libxml2-devel   net-snmp net-snmp-devel   curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel    libevent-devel    java-1.8.0-openjdk-devel  -y 

2.2建立管理用户

bash 复制代码
groupadd zabbix
useradd -g zabbix zabbix

2.3 解压包

bash 复制代码
cd /opt
#切换目录
wget https://cdn.zabbix.com/zabbix/sources/stable/4.0/zabbix-4.0.30.tar.gz
#下载安装包
tar xf zabbix-4.0.30.tar.gz
#解压

2.4编译安装

bash 复制代码
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java

make 
make install

2.5 添加客户端

bash 复制代码
./configure --prefix=/apps/zabbix --enable-agent
在别的机器上   客户机需要安装的  客户端

2.6 安装数据库

数据库可以安装在本地也可以分离

bash 复制代码
yum install mariadb-server.x86_64  -y
systemctl start mariadb

mysql_secure_installation       安全加固脚本
#输入当前密码
#修改root密码
#移除匿名用户 
#移除测试数据库
#不让 root  远程登录
#刷新


mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;

2.7 导入zabbix数据库文件

bash 复制代码
[root@localhost mysql]# cd /opt/zabbix-4.0.30/database/mysql
[root@localhost mysql]#mysql -uzabbix -pzabbix zabbix < schema.sql 
[root@localhost mysql]#mysql -uzabbix -pzabbix zabbix < images.sql 
[root@localhost mysql]#mysql -uzabbix -pzabbix zabbix < data.sql 


###必须最后 导入  data.sql

2.8安装web apapche

bash 复制代码
[root@localhost mysql]#yum install httpd -y
[root@localhost mysql]#systemctl start httpd

[root@localhost zabbix-4.0.30]#cd /opt/zabbix-4.0.30/frontends/php/

[root@localhost php]#cp -a /opt/zabbix-4.0.30/frontends/php/   /var/www/html/zabbix/
# 将前端页面拷贝过去

2.9 修改zabbix配置

bash 复制代码
vim /apps/zabbix_server/etc/zabbix_server.conf
# grep "^[a-Z]" /apps/zabbix_server/etc/zabbix_server.conf
LogFile=/tmp/zabbix_server.log
DBName=zabbix_server
DBUser=zabbix
DBPassword=zabbix
LogSlowQueries=3000


118  行修改 下  密码 其他不用修改
118  DBPassword= zabbix



#启动 zabbixserver  和 zabbixagented
/apps/zabbix_server/sbin/zabbix_server
/apps/zabbix_server/sbin/zabbix_agentd 

2.10 升级php 版本

bash 复制代码
yum  install php-gettext php-xml php-net-socket php-gd php-mysql  -y



修改php 软件的配置
vim /etc/php.ini
384 max_execution_time = 300
394max_input_time = 600
672 post_max_size = 16M
878 date.timezone = Asia/Shanghai


#改完 以后

systemctl  restart  httpd

2.11下载配置文件

bash 复制代码
cp zabbix.conf.php   /var/www/html/zabbix/conf/ -a
复制好了  直接刷新页面

默认用户名:Admin

密码: zabbix

2.12 准备service 文件(server和agent)

bash 复制代码
#先停止  zabbix-server
pkill zabbix_server



[root@localhost system]#vim /usr/lib/systemd/system/zabbix-server.service 
[Unit]
Description=Zabbix Server
After=syslog.target
After=network.target

[Service]
Environment="CONFFILE=/apps/zabbix_server/etc/zabbix_server.conf"
EnvironmentFile=-/etc/default/zabbix-server
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_server.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_server -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
TimeoutSec=infinity

[Install]
WantedBy=multi-user.target


[root@localhost ~]#chown zabbix:zabbix  /apps/zabbix_server/ -R
[root@localhost system]#systemctl daemon-reload
[root@localhost system]#systemctl start zabbix-server.service
[root@localhost system]#systemctl status zabbix-server.service



#先停止当前zabbix_agent进程    10050端口
# pkill zabbix_agentd 
# cat /usr/lib/systemd/system/zabbix-agent.service
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=apps/zabbix_server/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix_server/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
# systemctl restart zabbix-agent && systemctl enable zabbix-agent

2.13 修改中文

2.14 在192.168.10.30上安装zabbix-agent

安装依赖环境

bash 复制代码
yum install gcc libxml2-devel   net-snmp net-snmp-devel   curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel    libevent-devel    java-1.8.0-openjdk-devel  -y

解压安装包 编译

bash 复制代码
[root@node2 zabbix-4.0.30]#tar xf zabbix-4.0.30.tar.gz 
[root@node2 zabbix-4.0.30]#./configure --prefix=/apps/zabbix --enable-agent
[root@node2 zabbix-4.0.30]#make -j2 && make install

准备service文件

bash 复制代码
[root@node2 zabbix-4.0.30]#useradd zabbix
# 新建用户

[root@node2 zabbix-4.0.30]#vim /usr/lib/systemd/system/zabbix-agent.service 
[Unit]
Description=Zabbix Agent
After=syslog.target
After=network.target
[Service]
Environment="CONFFILE=/apps/zabbix/etc/zabbix_agentd.conf"
EnvironmentFile=-/etc/default/zabbix-agent
Type=forking
Restart=on-failure
PIDFile=/tmp/zabbix_agentd.pid
KillMode=control-group
ExecStart=/apps/zabbix/sbin/zabbix_agentd -c $CONFFILE
ExecStop=/bin/kill -SIGTERM $MAINPID
RestartSec=10s
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target




[root@node2 zabbix-4.0.30]#systemctl daemon-reload
[root@node2 zabbix-4.0.30]#systemctl start  zabbix-agent.service
[root@node2 zabbix-4.0.30]#systemctl status zabbix-agent.service

修改配置文件

bash 复制代码
[root@node2 etc]#vim  zabbix_agentd.conf
94 Server=192.168.91.100   #指向当前zabbix server
##### Passive checks related #被动检查相关配置


### Option: ListenPort
ListenPort=10050 #监听端口  默认的无需修改


119 StartAgents=3
#启动3个进程收集数据

146 Hostname=192.168.10.30
#指定名称 一般使用 IP地址, 等会需要使用


[root@node2 zabbix-4.0.30]#systemctl restart  zabbix-agent.service
[root@node2 etc]#systemctl status zabbix-agent.service 
# 可以看到三个监听线程

web页面主控端添加被监控主机

在zabbix web管理界面添加上一步安装了zabbix agent的linux主机。

添加模板不添加模板是不会监控的

过段时间就会变绿

三、监控tomcat开启JMX监控

3.1 在30服务器上安装tomcat

3.2 tomcat开启JMX监控

JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务,通常使用JMX来监控系统的运行状态。

bash 复制代码
[root@node2 data]#vim /usr/local/tomcat/bin/catalina.sh
#一般加在116行
CATALINA_OPTS="$CATALINA_OPTS  -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.10.30" 


[root@node2 data]#systemctl restart   tomcat
#重启服务
[root@node2 data]#systemctl status tomcat
[root@node2 data]#ss -napt|grep 12345
#12345开启就可以
LISTEN     0      50          :::12345                   :::*                   users:(("java",pid=13661,fd=24))




CATALINA_OPTS="$CATALINA_OPTS
-Dcom.sun.management.jmxremote                				#启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345     				#默认启动的JMX端口号,要和zabbix添加主机时候的端口一致即可
-Dcom.sun.management.jmxremote.authenticate=false 			#不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false					#不使用ssl认证
-Djava.rmi.server.hostname=x.x.x.x" 						#tomcat主机自己的IP地址,不要写zabbix服务器的地址
选项 含义
-Dcom.sun.management.jmxremote #启用远程监控JMX
-Dcom.sun.management.jmxremote.port=12345 #默认启动的JMX端口号,要和zabbix添加主机时候的端口 一致即可
-Dcom.sun.management.jmxremote.authenticate=false #不使用用户名密码
-Dcom.sun.management.jmxremote.ssl=false #不使用ssl认证
-Djava.rmi.server.hostname=x.x.x.x" #tomcat主机自己的IP地址,不要写zabbix服务器的地址

3.3 配置zabbixserver

在主服务器上配置启动 javagateway

bash 复制代码
[root@localhost data]#vim /apps/zabbix_server/sbin/zabbix_java/settings.sh 
#不需要修改

35 START_POLLERS=5  #启动5个线程去采集java数据
43 TIMEOUT=30       #一个数据的超时时间30s


[root@localhost data]#/apps/zabbix_server/sbin/zabbix_java/startup.sh 
# 启动服务
[root@localhost data]#ss -antp |grep 10052
LISTEN     0      50          :::10052                   :::*                   users:(("java",pid=47582,fd=14))

配置 zabbix-server 对接 java-gateway

bash 复制代码
[root@localhost data]#vim /apps/zabbix_server/etc/zabbix_server.conf
281 JavaGateway=192.168.10.20    #指明gateway地址
297 StartJavaPollers=5            #开启多少个进程去收集java服务器的信息

289 JavaGatewayPort=10052         # 默认不用改




[root@localhost ~]#systemctl restart zabbix-server
#快照起不来  重启机器 
#重启后不要忘记开启  javagateway

3.4 web页面配置

最后jmx 处会变绿

四、zabbix主动与被动监控模式

4.1 被动模式

zabbix-server 服务器主动去 连接 被监控服务器

无论是模式还是被动模式,都是站在zabbix agent角度来说的工作模式,比如被动模式,是说zabbix agent被动的接受zabbix server周期性发送过来的数据收集指令,在被动模式之下,zabbix server会根据主机关联的模板中的监控项和数据采集间隔时间,周期性的打开随机端口并向zabbix agent服务器的10050发起tcp连接,然后发送获取监控项数据的指令,即zabbix server发送什么指令那么zabbix agent就收集什么数据,zabbix server什么时候发送zabbix agent就什么时候采集,zabbix server不发送zabbix agent就一直不响应,所以zabbix agent也不用关心其监控项和数据采集周期间隔时间。

被动模式的优点就是配置简单,安装后即可使用,因此也成为zabbix 的默认工作模式,但是被动模式的最大问题就是会加大zabbix server的工作量,在数百甚至数千台服务器的环境下会导致zabbix server需要轮训向每个zabbix agent发送数据采集指令,如果zabbix server负载很高还会导致不能及时获取到最新数据,但由于无需其他复杂配置,被设置为了默认的工作方式。

  1. 主服务器会开启随机端口去连接 客户端的 10050 端口 来获取数据

  2. 从节点将数据交给主

  3. 主写入数据库

  4. 最后展示在 web页面中

4.2 主动模式

主动模式是由zabbix agent主动向zabbix server的10051端口发起tcp连接请求,因此主动模式下必须在zabbixagent配置文件中指定zabbix server的IP或者主机名(必须可以被解析为IP地址),在连接到zabbix server之前zabbix agent是不知道自己要采集那些数据以及间隔多久采集一次数据的,然后在连接到zabbix server以后获取到自己的监控项和数据采集间隔周期时间,然后再根据监控项采集数据并返回给zabbix server,在主动模式下不再需要zabbix serve向zabbix agent发起连接请求,因此主动模式在一定程度上可减轻zabbix server打开的本地随机端口和进程数,在一定程度就减轻看zabbix server的压力。

  1. 初次连接agent服务器会开启随机端口去连接 服务端的 10051 端口 来获取 需要监控的数据类型(监控项)

  2. 从节点将数据交给主

  3. 主写入数据库

  4. 最后展示在 web页面中

  5. 此后的数据收集就不需要先去获取监控项目

4.3 zabbix proxy被动模式部署与使用

编译安装proxy软件

bash 复制代码
#安装依赖环境
 yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php php-bcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -y

./configure --prefix=/apps/zabbix_proxy --enable-proxy --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2

make && make   install

准备 数据库

bash 复制代码
yum install mariadb-server -y
systemctl start mariadb
bash 复制代码
#新建表
create database zabbix_proxy_active  character set utf8 collate utf8_bin;
create database zabbix_proxy_passive character set utf8 collate utf8_bin;
# 授权
grant all privileges on zabbix_proxy_active.*  	to proxy@'192.168.10.%' identified by '123456';
grant all privileges on zabbix_proxy_passive.*  to proxy@'192.168.10.%' identified by '123456';
grant all privileges on zabbix_proxy_active.*  	to proxy@'localhost' identified by '123456';
grant all privileges on zabbix_proxy_passive.*  to proxy@'localhost' identified by '123456';


#导入数据结构
#先去源码包目录
mysql -uproxy -p123456 -h192.168.10.40  zabbix_proxy_passive < database/mysql/schema.sql
mysql -uproxy -p123456 -h192.168.10.40  zabbix_proxy_active < database/mysql/schema.sql

修改配置文件

bash 复制代码
[root@localhost zabbix-4.0.30]#cd /apps/zabbix_proxy/etc/
[root@localhost zabbix_proxy]#vim   zabbix_proxy.conf
13 ProxyMode=1
# 1是被动   
#0为主动  修改为1

31 Server=192.168.10.20
# 指向 zabbix服务器 , 就算是主动模式也需要修改应为不是所有监控项都是主动还有被动的


40 ServerPort=10051
#被动模式可以不修改  应为是  zabbix-server 主动

50 Hostname=passive
# web 配置中需要使用, 必须一致



158 DBHost=192.168.10.40
#数据库地址

169 DBName=zabbix_proxy_passive
# 数据库名字

184 DBUser=proxy
#数据库用户

192 DBPassword=123456
#数据库密码



244 ConfigFrequency=5
#间隔多少秒从zabbix server获取监控项信息

启动 proxy 软件 及proxy 上的agent

bash 复制代码
[root@localhost zabbix-4.0.30]#useradd zabbix
[root@localhost zabbix-4.0.30]#/apps/zabbix_proxy/sbin/zabbix_proxy 
[root@localhost zabbix-4.0.30]#ss -natpl |grep 10051
[root@localhost zabbix-4.0.30]#/apps/zabbix_proxy/sbin/zabbix_agentd
# 一定要开

[root@localhost zabbix-4.0.30]#/apps/zabbix_proxy/sbin/zabbix_agentd 
[root@localhost zabbix-4.0.30]#
[root@localhost zabbix-4.0.30]#
[root@localhost zabbix-4.0.30]#pstree -p|grep zabbix

修改被监控端指向 40 代理

bash 复制代码
[root@localhost ~]# vim /apps/zabbix/etc/zabbix_agentd.conf
94 Server=192.168.10.20,192.168.10.40
#被动模式  允许  40代理 来获取数据
[root@localhost ~]#systemctl  restart   zabbix-agent.service 
[root@localhost ~]#systemctl  status   zabbix-agent.service 

web端添加代理

4.3 zabbix proxy主动模式部署与使用

安装 proxy

bash 复制代码
yum install gcc libxml2-devel net-snmp net-snmp-devel curl curl-devel php phpbcmath php-mbstring mariadb mariadb-devel java-1.8.0-openjdk-devel -y
bash 复制代码
./configure --prefix=/apps/zabbix_proxy --enable-proxy --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
make && make   install

检测是否可以连接数据库

也可以在此服务器单独安装

bash 复制代码
mysql -uproxy -p123456 -h192.168.10.30

修改配置文件

bash 复制代码
[root@localhost zabbix-4.0.30]#cd /apps/zabbix_proxy/etc/
[root@localhost zabbix_proxy]#vim   /apps/zabbix_proxy/etc/zabbix_proxy.conf
13 ProxyMode=0
# 1是被动   0为主动  需要开启

31 Server=192.168.10.20
# 指向 zabbix服务器 , 就算是主动模式也需要修改应为不是所有监控项都是主动还有被动的


40 ServerPort=10051
#被动模式可以不修改  应为是  zabbix-server 主动

50 Hostname=active
# web 配置中需要使用, 必须一致



158 DBHost=192.168.10.30
#数据库地址

169 DBName=zabbix_proxy_active
# 数据库名字

184 DBUser=proxy
#数据库用户

192 DBPassword=123456
#数据库密码

启动

bash 复制代码
[root@localhost zabbix-4.0.30]#useradd zabbix
[root@localhost zabbix-4.0.30]#/apps/zabbix_proxy/sbin/zabbix_agentd
[root@localhost zabbix-4.0.30]#/apps/zabbix_proxy/sbin/zabbix_proxy 
[root@localhost zabbix-4.0.30]#ss -natpl |grep 10051

只需要写 之前配置的 hostname即可

修改被监控端

bash 复制代码
[root@node2 ~]#vim  /apps/zabbix/etc/zabbix_agentd.conf
135 ServerActive=192.168.10.30
#指向  代理服务器
[root@node2 ~]#systemctl  restart   zabbix-agent.service 
[root@node2 ~]#systemctl  status   zabbix-agent.service 
相关推荐
谭震鸿2 小时前
Zookeeper集群搭建Centos环境下
分布式·zookeeper·centos
天冬忘忧7 小时前
Kafka 工作流程解析:从 Broker 工作原理、节点的服役、退役、副本的生成到数据存储与读写优化
大数据·分布式·kafka
IT枫斗者12 小时前
如何解决Java EasyExcel 导出报内存溢出
java·服务器·开发语言·网络·分布式·物联网
求积分不加C12 小时前
Kafka怎么发送JAVA对象并在消费者端解析出JAVA对象--示例
java·分布式·kafka·linq
GDDGHS_13 小时前
“Kafka面试攻略:核心问题与高效回答”
分布式·面试·kafka
꧁薄暮꧂14 小时前
kafka中的数据清理策略
数据库·分布式·kafka
hong16168814 小时前
大数据技术Kafka详解:消息队列(Messages Queue)
大数据·分布式·kafka
大虾别跑15 小时前
docker安装zabbix +grafana
docker·zabbix·grafana
eternal199515 小时前
优化算法|基于Deep-Q-Network(DQN)的邻域搜索算法求解分布式柔性作业车间调度问题
分布式·算法
呼啦啦啦啦啦啦啦啦17 小时前
【Rabbitmq篇】RabbitMQ⾼级特性----持久性,发送⽅确认,重试机制
分布式·rabbitmq