一、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负载很高还会导致不能及时获取到最新数据,但由于无需其他复杂配置,被设置为了默认的工作方式。
-
主服务器会开启随机端口去连接 客户端的 10050 端口 来获取数据
-
从节点将数据交给主
-
主写入数据库
-
最后展示在 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的压力。
-
初次连接agent服务器会开启随机端口去连接 服务端的 10051 端口 来获取 需要监控的数据类型(监控项)
-
从节点将数据交给主
-
主写入数据库
-
最后展示在 web页面中
-
此后的数据收集就不需要先去获取监控项目
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