ZABBIX
1 Zabbix 介绍和架构
1.1为什么需要监控
运维行业有句话:“无监控、不运维”,监控俗称“第三只眼”。没了监控,什么基础运维,业务运维都是“瞎子”。所以说监控是运维这个职业的根本。尤其是在现在有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。
监控功能
- 在需要的时刻,提前预警即将出问题,避免故障发生
- 实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
- 可以实现网站,应用或者服务器的故障自愈, 保证高可用性
- 以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势
1.2 需要监控什么
监控一切需要监控的资源,包括:服务器,网络设备,业务应用,云服务等
| 分类 | 实例内容 |
|---|---|
| 硬件监控 | 通过远程控制卡: DeLL的iDRAC,HP的ILO和IBM的IMM等 使用IPMI来完成物理设备的监控工作。通常必须要监控包括温度、硬盘故障等 路由器,交换机(端口,光衰,日志),打印机等 |
| 系统监控 | cpu, 内存, 硬盘使用率, 硬盘IO, 系统负载,进程数 |
| 服务监控 | nginx,apache, php-fpm,mysql.memcache,redis ,tomcat,JVM,TCP连接数 |
| 性能监控 | 网站性能,服务器性能,数据库性能,存储性能 |
| 日志监控 | 系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等, 可以使用E F K 或者 E Logstash Kibana 来进行日志监控 |
| 安全监控 | 用户登录数,passwd文件变化,本地所有文件改动 Nginx+Lua编写一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。 |
| 网络监控 | IP,端口,URL,DB,ping包,IDC带宽网络流量,网络流出速率,网络入流量, 网络出流是.网络使用率,SMTP.POP3 |
Elasticsearch、Logstash 、Kibana elk
Elasticsearch、filebeat 、 Kibana efk
beats: 可以收集 信息的 工具 备这家公司 统称为 filebeat
1.3常见的监控工具
开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon等
1.3.1:Cacti
Cacti是基于LAMP平台展现的网络流量监测及分析工具
通过SNMP技术或自定义脚本从目标设备/主机获取监控指标信息
其次还可以进行数据存储,调用模板将数据存到数据库,使用rrdtool存储和更新数据,通过rrdtoo1绘制结果图形
最后进行数据展现,通过web方式将监控结果呈现出来,常用于在数据中心监控网络设备。
cacti是很老的一款监控工具,其实说它是一款流量监控工具更合适,对流量监控比较精准,但缺点很多,出图不好看,不支持分布式,也没有告警功能,所以当前使用的用户越来越少。
缺点:告警不及时
官网: www.cacti.net
github: github.com/Cacti/cacti
二次开发版: cactifans.org/
1.3.2 :Nagios:
Nagios是一款开源的免费监控工具,可以有效地监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。
nagios主要的特征是监控告警,最强大的就是告警功能,可支持多种告警方式,但缺点是没有强大的数据收集机制,并且数据出图也很简陋,当监控的主机越来越多时,添加主机也非常麻烦,配置文件都是基于文本配置的,不支持web方式管理和配置,这样很容易出错,不易维护。
分层告警机制及自定义监控相对薄弱。
监控主机数量有限,承载能力较低
官网: www.nagios.org
1.3.3 猎鹰Open-falcon
open-falcon(猎鹰)是一款用golang和python写的监控系统,由小米启动这个项目
相对zabbix在性能、扩展性、和用户的使用效率方面,都有较大优势
发布时间较短
不支持很多基础的服务监控插件,如 Tomcat、 apache等
功能不完善,更新较缓慢
无专门运维支撑,社区运营有欠缺。
github: github.com/open-falcon
1.3.4 夜莺Nightingale
夜莺(Nightingale)是滴滴基础平台联合滴滴云研发和开源的企业级监控解决方案。旨在满足云原生时代企业级的监控需求。
Nightingale 在Open-Falcon 的基础上,结合滴滴的最佳实践,在性能、可维护性、易用性方面做了大量的改进
Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台机器,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。
Nightingale 作为集团统一的监控解决方案,支撑了滴滴内部数十亿监控指标,覆盖了从系统、容器、到应用等各层面的监控需求,周活跃用户数千。五年磨一剑,取之开源,回馈开源。
当前社区比较活跃,升级较频繁
官网: n9e.didiyun.com/
1.3.5 Zabbix
zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。功能强大,成熟可靠,使用者众多
官网: www.zabbix.com/
1.3.6 Prometheus
监控云服务器
云服务器 就是虚拟机
Prometheus 是一个开源的服务监控系统和时间序列数据库,主要在监控容器领域使用,可以实现容器的动态发现和监控
官网: prometheus.io/
1.3.7 商业监控解决方案:
监控宝(https://www.jiankongbao.com/)
听云(https://www.tingyun.com/)
商业方案可以测试全国各地访问网页的情况
https://ping.chinaz.com/
#免费测试
1.4:Zabbix使用场景及系统概述:
1.4.1 Zabbix介绍
Zabbix是一个企业级解决方案,支持实时监控数千台服务器,虚拟机和网络设备,采集百万级监控指标,适用于任何IT基础架构、服务、应用程序和资源的解决方案
1.4.2 Zabbix功能
Zabbix 是一个高度成熟完善的网络监控解决方案,包含了多种功能
官方链接:
https://www.zabbix.com/documentation/5.0/zh/manual/introduction/features
数据收集:
- 历史数据, 即记录每个监控项采集到的每个监控值
- 趋势数据, 主要保留某个监控项一个小时内历史数据的最大值、最小值和平均值以及该监控项一个小时内所采集到的数据个数
- 可用性和性能检查;
- 支持 SNMP(包括主动轮询和被动捕获)、IPMI、JMX、VMware 监控、 agent
- 自定义检查;
- 按照自定义的时间间隔采集需要的数据;
- 通过 Server/Proxy 和 Agents 来执行数据采集。
灵活的阈值定义
- 您可以参考后端数据库定义非常灵活的告警阈值,即触发器
cpu 80 > 邮件告警
高度可配置化的告警
- 可以根据递增计划、接收者、媒介类型自定义发送告警通知;
- 使用宏变量可以使告警通知变得更加高效有用;
- 自动操作包含远程执行命令。
实时图形
- 使用内置图形功能可以将监控项实时绘制成图形。
Web监控功能
- Zabbix可以追踪模拟鼠标在 Web 网站上的点击操作,来检查 Web 网站的功能和响应时间。
丰富的可视化选项
- 可以组合多个监控项到单个视图中,创建自定义图表;
- 网络拓扑图;
- 以仪表盘样式展示自定义聚合图形和幻灯片演示;报表;
- 监控资源的更高层次展示视图(业务视图)。
历史数据存储
- 存储在数据库中的数据;
- 历史配置;内置数据管理机制
配置简单
- 将被监控设备添加为主机;
- 主机一旦添加到数据库中,就会采集数据用于监控;
- 将模板用于监控设备。
使用模板
- 模板中分组检查;
- 模板可以关联模板,继承已关联模板的属性。
网络发现客户端
- 自动发现网络设备;
- Zabbix Agent 发现设备后自动注册;
- 自动发现文件系统、网络接口
快捷的 Web 界面
- 基于 PHP 的 Web 前端;
- 可以从任何地方访问;
- 您可以定制自己的操作方式;
- 您可以通过审计日志来查看你的操作
Zabbix API
- Zabbix API 为 Zabbix 提供可编程接口,用于批量操作、第三方软件集成和其他用途
权限管理系统
- 安全的用户身份验证;
- 指定的用户只能查看指定的权限范围内的视图
功能强大且易于扩展的 Zabbix Agent agent2
- 部署于被监控对象上;
- 支持 Linux 和 Windows ;
二进制守护进程
- 为了更好的性能和更少的内存占用,采用 C 语言编写;
- 便于移植。
适应更复杂的环境
- 使用 Zabbix Proxy 代理,可以轻松实现分布式远程监控
1.4.3 Zabbix架构
Zabbix 由如下主要的功能组件组成
-
SERVER
- Zabbix server 是 Zabbix 软件的核心组件
- Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
- Zabbix serve r也是存储所有配置信息、统计信息和操作信息的核心存储库。
- Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
-
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
tips:
Zabbix 的所有配置信息都存储在 Server和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
-
数据库
- 所有配置信息以及 Zabbix 采集到的数据都被持久存储在数据库中
- 可以支持MySQL,PostgreSQL,Oracle 等多种数据库
-
WEB 界面
- WEB 界面是 Zabbix server 的一部分,用于实现展示和配置的界面通常(但不一定)和 Zabbix server 运行在同一台物理机器上基于 Apache(Nginx)+PHP 实现,早期只支持LAMP架构,从Zabbix5.0开始支持LNMP
-
AGENT
- Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给Zabbix server。从Zabbix5.0开始支技Zabbix Agent2
-
PROXY
- Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
- Zabbix Proxy 在 Zabbix 的部署是可选部分
- Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载
-
Java 网关
- Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 做为代理,才能从JAVA程序中获取数据
1.4.4 Zabbix术语
-
被监控: 即 Zabbix 监控的主机或设备
-
监控项item:即 Zabbix 监控的相关指标,比如:CPU利用率,内存使用率,TCP连接数等
- 监控内容
-
应用集Application:为方便管理众多的监控项,可将多个同类型的监控项进行归类,纳入一个集合中,即应用集
-
触发器Trigger:是一个表达式,或者说一个条件,如磁盘利用率超过80%等,当触发条件后,会导致一个触发事件,这个事件会执行一个或多个动作
-
告警:当触发器和动作二者结合起来时,就构成了的告警机制,比如cpu的使用率达到80%以上,触发了报警动作,系统将自动发送一封邮件到指定的邮箱。然后运维可以及时的去处理此错误 host---> items---> triggers --> action
-
Web 监测:对WEB服务进行检测,比如:访问指定网站是否可正常访问
-
模板 Template: 可以方便地应用于多个主机的一组实体的集合。而这些实体包括:
- items(监控项)
- applications(应用集)
- triggers(触发器)
- graphs(图形)
- screens (聚合图形,自Zabbix 2.0起)
使用模板是减少工作量并简化Zabbix配置的好方法。
模板分为内置模板和自定义模板
2.部署安装 zabbix
去往官网选择安装版本
https://www.zabbix.com/cn/download?zabbix=5.0
zabbix 产品周期
https://www.zabbix.com/cn/life_cycle_and_release_policy
Zabbix Server 安装方法介绍
Zabbix Server 提供了三种安装方法
- 二进制包安装: 官方提供了二进制包安装的方法,可以支持CentOS和Debian/Ubuntu的安装
- 源码编译安装: 部署繁琐,生产环境定制安装可以使用
- 基于容器安装: 测试环境使用,参考链接如下
https://www.zabbix.com/documentation/6.0/zh/manual/installation/containers
https://www.zabbix.com/documentation/5.0/zh/manual/installation/containers
https://www.zabbix.com/documentation/4.0/zh/manual/installation/containers
2.1 官方镜像源安装
2.1.1 官方镜像源安装zabbix5版本 centos7
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum clean all
2.1.1.2 安装 Zabbix server 和 agent
yum install epel-release
yum install zabbix-server-mysql zabbix-agent -y
2.1.1.3 安装前端web 仓库
yum install centos-release-scl -y
2.1.1.4安装 前端web 即 php
yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y
2.1.1.5 安装数据库
yum install mariadb-server.x86_64 -y
systemctl start mariadb
mysql_secure_installation 安全加固脚本
mysql -uroot -p
create database zabbix character set utf8 collate utf8_bin;
create user zabbix@localhost identified by 'password';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
quit;
2.1.1.6导入数据库 zabbix 数据表
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
2.1.1.7为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
#124 DBPassword=password
修改成
DBPassword=password(数据库中定义的)
2.1.1.8为Zabbix前端配置PHP
编辑配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf
; php_value[date.timezone] = Europe/Riga
分号代表注释
最后一行修改时区 变成上海
php_value[date.timezone] = Asia/Shanghai
2.1.1.9启动 zaibbix 等服务
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
systemctl enable --now zabbix-server zabbix-agent httpd rh-php72-php-fpm
2.1.2 官方源安装zabbix6 - rocky
2.1.2.1下载官方镜像
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-latest-6.0.el8.noarch.rpm
dnf clean all
2.1.2.2 安装Zabbix server,Web前端,agent
dnf install -y zabbix-server-mysql zabbix-web-mysql zabbix-apache-conf zabbix-sql-scripts zabbix-selinux-policy zabbix-agent zabbix-get
2.1.2.3 安装数据库
yum install mysql-server -y #安装数据库
systemctl start mysqld #开启服务
#
#
#新建数据库 zabix 用户 zabbix 用户zabbix的密码也是 zabbix
create database zabbix character set utf8mb4 collate utf8mb4_bin;
create user zabbix@localhost identified by 'zabbix';
grant all privileges on zabbix.* to zabbix@localhost;
set global log_bin_trust_function_creators = 1;
# 设置可以识别二进制日志中的 函数等非官方设置
#
#
# 导入数据库原始数据 在命令行进行
zcat /usr/share/zabbix-sql-scripts/mysql/server.sql.gz | mysql --default-character-set=utf8mb4 -uzabbix -p zabbix
2.1.2.4 为Zabbix server配置数据库密码
vim /etc/zabbix/zabbix_server.conf
DBPassword=zabbix
# 后面的密码看情况
2.1.2.5 启动Zabbix server和agent进程
启动Zabbix server和agent进程,并为它们设置开机自启:
systemctl restart zabbix-server zabbix-agent httpd php-fpm
systemctl enable zabbix-server zabbix-agent httpd php-fpm
2.1.2.6 web页面配置
在浏览器中访问
http://ip地址/zabbix/setup.php
2.1.2.7 修改 图形界面乱码问题
此处图形是乱码
在Windows中找一个中文字体
将字体上传到 Zabbix_Serve
[root@localhost fonts]#cd /usr/share/zabbix/assets/fonts
[root@localhost fonts]#mv msyhbd.ttc graphfont.ttf
刷新页面
2.2 编译安装
2.2.1 centos7 编译安装 zabbix4
官方手册
2.2.1.1解决依赖关系
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
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.1.2建立管理用户
groupadd zabbix
useradd -g zabbix zabbix
2.2.1.3 解压包
cd /data
#切换目录
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.2.1.4编译安装 proxy 4个主要组件 server agent java-gateway proxy
./configure --help
#可以查看帮助
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
make
make install
2.2.1.5 添加客户端
./configure --prefix=/apps/zabbix --enable-agent
在别的机器上 客户机需要安装的 客户端
2.2.1.6 安装数据库
数据库可以安装在本地也可以分离
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.2.1.7 导入zabbix数据库文件
[root@localhost mysql]# cd /data/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.2.1.8安装web apapche
[root@localhost mysql]#yum install httpd -y
[root@localhost mysql]#systemctl start httpd
[root@localhost zabbix-4.0.30]#cd /data/zabbix-4.0.30/frontends/php/
[root@localhost php]#cp -a /data/zabbix-4.0.30/frontends/php/ /var/www/html/zabbix/
# 将前端页面拷贝过去
ip/zabbix
2.2.1.9 修改zabbix配置
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.2.1.10 升级php 版本
打开浏览器 访问 192.168.91.100/zabbix
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.2.1.11下载配置文件
cp zabbix.conf.php /var/www/html/zabbix/conf/ -a
复制好了 直接刷新页面
默认用户名:Admin
密码: zabbix
2.2.1.12 准备service 文件
#先停止 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
User=zabbix
Group=zabbix
[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.2.1.13 修改中文
2.2.1.14 修改字体 以及图表的中文乱码问题
去win主机的c盘
C:\Windows\Fonts
# pwd
/var/www/html/zabbix/assets/fonts #上传楷体字体文件到这里
# chown zabbix.zabbix ./* #更改权限为zabbix用户和组
# ll
总用量 12260
drwxr-xr-x 2 zabbix zabbix 4096 12月 14 11:28 ./
drwxr-xr-x 5 zabbix zabbix 4096 11月 25 17:06 ../
-rw-r--r-- 1 zabbix zabbix 756072 11月 25 17:05 DejaVuSans.ttf
-rw-r--r-- 1 root root 11787328 3月 2 2019 simkai.ttf
#后缀必须小写 ttf
# pwd
/var/www/html/zabbix
# vim /var/www/html/zabbixinclude/defines.inc.php
#72 define('ZBX_GRAPH_FONT_NAME', 'DejaVuSans'); // font file name
72 define('ZBX_GRAPH_FONT_NAME', 'simkai'); // font file name
#111 define('ZBX_FONT_NAME', 'DejaVuSans');
111 define('ZBX_FONT_NAME', 'simkai');
不要加后缀 ttf
其次他的注释不是 # 号
2.2.2 编译安装 zabbix6 rocky8
下载文件
wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.30.tar.gz
安装依赖关系
yum install epel-release.noarch tar wget -y
dnf install -y gcc gcc-c++ makemysql mysql-devel net-snmp-devel libcurl-devel libxml2-devel libevent-devel pcre2-devel openssl-devel pkgconf-pkg-config wget tar fping pcre-devel curl libcurl-devel java-1.8.0-openjdk-devel
编译
./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java
make
make install
新建用户
groupadd zabbix
useradd zabbix -g zabbix
安装数据库
yum install mariadb-server -y
systemctl start mariadb.service
新建数据库
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;
导入初始数据
cd /root/zabbix-6.0.40/database/mysql
mysql -uzabbix -pzabbix zabbix < schema.sql
mysql -uzabbix -pzabbix zabbix < images.sql
mysql -uzabbix -pzabbix zabbix < data.sql
准备 service 文件
cat > /etc/systemd/system/zabbix-server.service <<EOF
[Unit]
Description=Zabbix Server
After=network.target
[Service]
Type=simple
ExecStart=/apps/zabbix_server/sbin/zabbix_server
PIDFile=/tmp/zabbix_server.pid
User=zabbix
Group=zabbix
[Install]
WantedBy=multi-user.target
EOF
前端页面
dnf install -y httpd php php-mysqlnd php-fpm php-gd php-xml php-bcmath php-mbstring php-gettext php-ldap php-json php-opcache php-zip
复制前端页面
cp -r /root/zabbix-6.0.40/ui /var/www/html/zabbix
chown -R apache:apache /var/www/html/zabbi
修改php 配置
vi /etc/php.ini
date.timezone = Asia/Shanghai
383 max_execution_time = 300
393 max_input_time = 300
672 post_max_size = 16M
902 date.timezone = Asia/Shanghai
启动httpd
systemctl restart php-fpm.service zabbix-server.service httpd
systemctl enable --now httpd
2.3 zabbix 配置文件
官方源安装:
服务端 配置文件位置 : /etc/zabbix/zabbix_server.conf
agent 配置文件位置: /etc/zabbix/zabbix_agentd.conf
局部重点讲解:
10050 agent
10051 server监听端口
10052 java插件
全文注释
# cat /:apps/zabbix_server/etc/zabbix_server.conf
# This is a configuration file for Zabbix server daemon
# To get more information about Zabbix, visit http://www.zabbix.com
############ GENERAL PARAMETERS #################
### Option: ListenPort
# Listen port for trapper.
#
# Mandatory: no
# Range: 1024-32767
# Default:
ListenPort=10051 #监听端口
### Option: SourceIP
# Source IP address for outgoing connections.
#
# Mandatory: no
# Default:
# SourceIP= #多IP地址情况下,与其他服务器通信使用的源IP地址
### Option: LogType
# Specifies where log messages are written to:
# system - syslog
# file - file specified with LogFile parameter
# console - standard output
#
# Mandatory: no
# Default:
# LogType=file #日志类型,支持system、file和console
### Option: LogFile
# Log file name for LogType 'file' parameter.
#
# Mandatory: yes, if LogType is set to file, otherwise no
# Default:
# LogFile=
LogFile=/tmp/zabbix_server.log #日志路径
### Option: LogFileSize
# Maximum size of log file in MB.
# 0 - disable automatic log rotation.
#
# Mandatory: no
# Range: 0-1024
# Default:
# LogFileSize=1 #指定日志滚动写入大小,当达到指定大小时,会删除就日志重新从头写入新日志
### Option: DebugLevel
# Specifies debug level:
# 0 - basic information about starting and stopping of Zabbix processes
# 1 - critical information
# 2 - error information
# 3 - warnings
# 4 - for debugging (produces lots of information)
# 5 - extended debugging (produces even more information)
#
# Mandatory: no
# Range: 0-5
# Default:
# DebugLevel=3 #自定义日志级别
### Option: PidFile
# Name of PID file.
#
# Mandatory: no
# Default:
# PidFile=/tmp/zabbix_server.pid #PID文件路径
### Option: SocketDir
# IPC socket directory.
# Directory to store IPC sockets used by internal Zabbix services.
#
# Mandatory: no
# Default:
# SocketDir=/tmp #socket文件路径
### Option: DBHost
# Database host name.
# If set to localhost, socket is used for MySQL.
# If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
DBHost=192.168.7.104 #数据库地址
### Option: DBName
# Database name.
#
# Mandatory: yes
# Default:
# DBName=
DBName=zabbix_server #数据库名称
### Option: DBSchema
# Schema name. Used for IBM DB2 and PostgreSQL.
#
# Mandatory: no
# Default:
# DBSchema= #数据库访问协议
### Option: DBUser
# Database user.
#
# Mandatory: no
# Default:
# DBUser=
DBUser=zabbix #数据库用户名称
### Option: DBPassword
# Database password.
# Comment this line if no password is used.
#
# Mandatory: no
# Default:
DBPassword=123456 #数据库用户密码
### Option: DBSocket
# Path to MySQL socket.
#
# Mandatory: no
# Default:
# DBSocket= #数据库socket文件
### Option: DBPort
# Database port when not using local socket.
#
# Mandatory: no
# Range: 1024-65535
# Default:
DBPort=3306 #数据库端口
### Option: HistoryStorageURL
# History storage HTTP[S] URL.
#
# Mandatory: no
# Default:
# HistoryStorageURL= #elasticsearch服务器地址,保存zabbix历史数据到ES里面,优化zabbix性能,新版本zabbix的才支持
### Option: HistoryStorageTypes
# Comma separated list of value types to be sent to the history storage.
#
# Mandatory: no
# Default:
# HistoryStorageTypes=uint,dbl,str,log,text #elasticsearch索引类型
### Option: HistoryStorageDateIndex
# Enable preprocessing of history values in history storage to store values in different indices based on date.
# 0 - disable
# 1 - enable
#
# Mandatory: no
# Default:
# HistoryStorageDateIndex=0 #将历史数据保存到不同的elasticsearch索引
### Option: ExportDir
# Directory for real time export of events, history and trends in newline delimited JSON format.
# If set, enables real time export.
#
# Mandatory: no
# Default:
# ExportDir= #定义实时导出触发器事件,监控项采集值,趋势数据的目录
### Option: ExportFileSize
# Maximum size per export file in bytes.
# Only used for rotation if ExportDir is set.
#
# Mandatory: no
# Range: 1M-1G
# Default:
# ExportFileSize=1G #定义每个导出文件的最大大小
############ ADVANCED PARAMETERS ################
### Option: StartPollers
# Number of pre-forked instances of pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollers=5 #预启动多少个实例数量
### Option: StartIPMIPollers
# Number of pre-forked instances of IPMI pollers.
# The IPMI manager process is automatically started when at least one IPMI poller is started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartIPMIPollers=0 #IPMI收集数量
### Option: StartPreprocessors
# Number of pre-forked instances of preprocessing workers.
# The preprocessing manager process is automatically started when preprocessor worker is started.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartPreprocessors=3 #预启动多少个进程用于处理zabbix agent数据
### Option: StartPollersUnreachable
# Number of pre-forked instances of pollers for unreachable hosts (including IPMI and Java).
# At least one poller for unreachable hosts must be running if regular, IPMI or Java pollers
# are started.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPollersUnreachable=1 #不可达主机的轮询进程的初始实例启动数量
### Option: StartTrappers
# Number of pre-forked instances of trappers.
# Trappers accept incoming connections from Zabbix sender, active agents and active proxies.
# At least one trapper process must be running to display server availability and view queue
# in the frontend.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartTrappers=5 #预启动的Trappers进程数据
### Option: StartPingers
# Number of pre-forked instances of ICMP pingers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartPingers=1 #ICMP ping进程的初始实例数量
### Option: StartDiscoverers
# Number of pre-forked instances of discoverers.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartDiscoverers=1 #自动发现主机的进程数量
### Option: StartHTTPPollers
# Number of pre-forked instances of HTTP pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
# StartHTTPPollers=1 #http 进程数量
### Option: StartTimers
# Number of pre-forked instances of timers.
# Timers process maintenance periods.
# Only the first timer process handles host maintenance updates. Problem suppression updates are shared
# between all timers.
#
# Mandatory: no
# Range: 1-1000
# Default:
# StartTimers=1 #计时器实例数量,计时器用于计算问题的发生时间和步骤同步等
### Option: StartEscalators
# Number of pre-forked instances of escalators.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartEscalators=1 #escalators进程的初始实例数量,用于处理动作中的自动步骤的进程的数量
### Option: StartAlerters
# Number of pre-forked instances of alerters.
# Alerters send the notifications created by action operations.
#
# Mandatory: no
# Range: 0-100
# Default:
# StartAlerters=3 #报警实例预启动数量
### Option: JavaGateway
# IP address (or hostname) of Zabbix Java gateway.
# Only required if Java pollers are started.
#
# Mandatory: no
# Default:
JavaGateway=192.168.7.101 #javagateway服务器地址,java pollers必须设置
### Option: JavaGatewayPort
# Port that Zabbix Java gateway listens on.
#
# Mandatory: no
# Range: 1024-32767
# Default:
JavaGatewayPort=10052 #javagateway端口
### Option: StartJavaPollers
# Number of pre-forked instances of Java pollers.
#
# Mandatory: no
# Range: 0-1000
# Default:
StartJavaPollers=20 #java轮训实例预启动数量
### Option: StartVMwareCollectors
# Number of pre-forked vmware collector instances.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartVMwareCollectors=0 #用于设置监控VMWARE Esxi主机实例时使用,若为0则不启用,若要监控ESXI主机,此值最少为1,根据监控ESXI数量设置对应数值
### Option: VMwareFrequency
# How often Zabbix will connect to VMware service to obtain a new data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwareFrequency=60 #监控vmware获取最新数据间隔频率,单位为秒
### Option: VMwarePerfFrequency
# How often Zabbix will connect to VMware service to obtain performance data.
#
# Mandatory: no
# Range: 10-86400
# Default:
# VMwarePerfFrequency=60 #监控vmware获取性能数据间隔
### Option: VMwareCacheSize
# Size of VMware cache, in bytes.
# Shared memory size for storing VMware data.
# Only used if VMware collectors are started.
#
# Mandatory: no
# Range: 256K-2G
# Default:
# VMwareCacheSize=8M #vmware数据缓存大小,会占用zabbix server服务器内存
### Option: VMwareTimeout
# Specifies how many seconds vmware collector waits for response from VMware service.
#
# Mandatory: no
# Range: 1-300
# Default:
# VMwareTimeout=10 #超时时间
### Option: SNMPTrapperFile
# Temporary file used for passing data from SNMP trap daemon to the server.
# Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp #snmp触发器临时文件路径
### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0 #SNMP触发器预启动数量
### Option: ListenIP
# List of comma delimited IP addresses that the trapper should listen on.
# Trapper will listen on all network interfaces if this parameter is missing.
#
# Mandatory: no
# Default:
# ListenIP=0.0.0.0 #监听地址
# ListenIP=127.0.0.1
### Option: HousekeepingFrequency
# How often Zabbix will perform housekeeping procedure (in hours).
# Housekeeping is removing outdated information from the database.
# To prevent Housekeeper from being overloaded, no more than 4 times HousekeepingFrequency
# hours of outdated information are deleted in one housekeeping cycle, for each item.
# To lower load on server startup housekeeping is postponed for 30 minutes after server start.
# With HousekeepingFrequency=0 the housekeeper can be only executed using the runtime control option.
# In this case the period of outdated information deleted in one housekeeping cycle is 4 times the
# period since the last housekeeping cycle, but not less than 4 hours and not greater than 4 days.
#
# Mandatory: no
# Range: 0-24
# Default:
# HousekeepingFrequency=1 #多少小时清理一次代理端数据库的 history数据
### Option: MaxHousekeeperDelete
# The table "housekeeper" contains "tasks" for housekeeping procedure in the format:
# [housekeeperid], [tablename], [field], [value].
# No more than 'MaxHousekeeperDelete' rows (corresponding to [tablename], [field], [value])
# will be deleted per one task in one housekeeping cycle.
# If set to 0 then no limit is used at all. In this case you must know what you are doing!
#
# Mandatory: no
# Range: 0-1000000
# Default:
# MaxHousekeeperDelete=5000 ##每次最多删除历史数据的行数
### Option: CacheSize
# Size of configuration cache, in bytes.
# Shared memory size for storing host, item and trigger data.
#
# Mandatory: no
# Range: 128K-8G
# Default:
# CacheSize=8M #配置信息缓存大小
### Option: CacheUpdateFrequency
# How often Zabbix will perform update of configuration cache, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# CacheUpdateFrequency=60 #Zabbix更新缓存数据的频率,单位为秒,范围是1-3600
### Option: StartDBSyncers
# Number of pre-forked instances of DB Syncers.
#
# Mandatory: no
# Range: 1-100
# Default:
# StartDBSyncers=4 #zabbix和数据库同步数据的进程数量
### Option: HistoryCacheSize
# Size of history cache, in bytes.
# Shared memory size for storing history data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryCacheSize=16M #历史数据的缓存大小
### Option: HistoryIndexCacheSize
# Size of history index cache, in bytes.
# Shared memory size for indexing history cache.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# HistoryIndexCacheSize=4M #历史数据索引缓存的大小
### Option: TrendCacheSize
# Size of trend cache, in bytes.
# Shared memory size for storing trends data.
#
# Mandatory: no
# Range: 128K-2G
# Default:
# TrendCacheSize=4M #用于设置划分多少系统共享内存用于存储计算出来的趋势数据,此参数值从一定程度上可影响数据库读压力,范围是128K-2G
### Option: ValueCacheSize
# Size of history value cache, in bytes.
# Shared memory size for caching item history data requests.
# Setting to 0 disables value cache.
#
# Mandatory: no
# Range: 0,128K-64G
# Default:
# ValueCacheSize=8M #历史值缓存的大小,用于缓存历史数据请求的共享内存大小。
### Option: Timeout
# Specifies how long we wait for agent, SNMP device or external check (in seconds).
#
# Mandatory: no
# Range: 1-30
# Default:
# Timeout=3
Timeout=4 #数据获取等待超时时间
### Option: TrapperTimeout
# Specifies how many seconds trapper may spend processing new data.
#
# Mandatory: no
# Range: 1-300
# Default:
# TrapperTimeout=300 #触发器处理新数据的最长时间,单位是秒
### Option: UnreachablePeriod
# After how many seconds of unreachability treat a host as unavailable.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachablePeriod=45 #当主机不可达多少秒后,设置为主机不可用,单位是秒,范围是1-3600
### Option: UnavailableDelay
# How often host is checked for availability during the unavailability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnavailableDelay=60 #当主机不可用了,多久检查一次该主机的可用性,单位为秒,范围是1-3600
### Option: UnreachableDelay
# How often host is checked for availability during the unreachability period, in seconds.
#
# Mandatory: no
# Range: 1-3600
# Default:
# UnreachableDelay=15 #当主机不可到达了,多久检查一次该主机的可用性,单位为秒,范围是1-3600
### Option: AlertScriptsPath
# Full path to location of custom alert scripts.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# AlertScriptsPath=${datadir}/zabbix/alertscripts #监控报警脚本路径,取决于编译时候的datadir参数
### Option: ExternalScripts
# Full path to location of external scripts.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# ExternalScripts=${datadir}/zabbix/externalscripts #自定义脚本存储路径
### Option: FpingLocation
# Location of fping.
# Make sure that fping binary has root ownership and SUID flag set.
#
# Mandatory: no
# Default:
# FpingLocation=/usr/sbin/fping #fping命令的位置
### Option: Fping6Location
# Location of fping6.
# Make sure that fping6 binary has root ownership and SUID flag set.
# Make empty if your fping utility is capable to process IPv6 addresses.
#
# Mandatory: no
# Default:
# Fping6Location=/usr/sbin/fping6 #fping6的位置
### Option: SSHKeyLocation
# Location of public and private keys for SSH checks and actions.
#
# Mandatory: no
# Default:
# SSHKeyLocation= #用于SSH检查和操作的公钥和私钥的位置。
### Option: LogSlowQueries
# How long a database query may take before being logged (in milliseconds).
# Only works if DebugLevel set to 3, 4 or 5.
# 0 - don't log slow queries.
#
# Mandatory: no
# Range: 1-3600000
# Default:
# LogSlowQueries=0 慢日志时间(以毫秒为单位),仅当DebugLevel设置为3,4或5时才可用,0 - 不记录慢查询,范围是1-3600000
LogSlowQueries=3000
### Option: TmpDir
# Temporary directory.
#
# Mandatory: no
# Default:
# TmpDir=/tmp #临时文目录
### Option: StartProxyPollers
# Number of pre-forked instances of pollers for passive proxies.
#
# Mandatory: no
# Range: 0-250
# Default:
# StartProxyPollers=1 #启用多少子进程与代理端通信,若代理较多可考虑加大此数值,范围是0-250
### Option: ProxyConfigFrequency
# How often Zabbix Server sends configuration data to a Zabbix Proxy in seconds.
# This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600*24*7
# Default:
# ProxyConfigFrequency=3600 #proxy被动模式下,server多少秒同步配置文件至proxy,该参数仅用于被动模式下的代理,范围是1-3600*24*7
### Option: ProxyDataFrequency
# How often Zabbix Server requests history data from a Zabbix Proxy in seconds.
# This parameter is used only for proxies in the passive mode.
#
# Mandatory: no
# Range: 1-3600
# Default:
# ProxyDataFrequency=1 #被动模式下,zabbix server间隔多少秒向proxy请求历史数据
### Option: AllowRoot
# Allow the server to run as 'root'. If disabled and the server is started by 'root', the server
# will try to switch to the user specified by the User configuration option instead.
# Has no effect if started under a regular user.
# 0 - do not allow
# 1 - allow
#
# Mandatory: no
# Default:
# AllowRoot=0 #是否允许root启动zabbix
### Option: User
# Drop privileges to a specific, existing user on the system.
# Only has effect if run as 'root' and AllowRoot is disabled.
#
# Mandatory: no
# Default:
# User=zabbix #设置zabbix 启动用户
### Option: Include
# You may include individual files or all files in a directory in the configuration file.
# Installing Zabbix will create include directory in /usr/local/etc, unless modified during the compile time.
#
# Mandatory: no
# Default:
# Include=
# Include=/usr/local/etc/zabbix_server.general.conf #导入其他目录的配置文件
# Include=/usr/local/etc/zabbix_server.conf.d/
# Include=/usr/local/etc/zabbix_server.conf.d/*.conf
### Option: SSLCertLocation
# Location of SSL client certificates.
# This parameter is used only in web monitoring.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# SSLCertLocation=${datadir}/zabbix/ssl/certs #SSL证书公钥的位置,用于web监控
### Option: SSLKeyLocation
# Location of private keys for SSL client certificates.
# This parameter is used only in web monitoring.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# SSLKeyLocation=${datadir}/zabbix/ssl/keys #SSL客证书私钥位置,用于web监控
### Option: SSLCALocation
# Override the location of certificate authority (CA) files for SSL server certificate verification.
# If not set, system-wide directory will be used.
# This parameter is used only in web monitoring and SMTP authentication.
#
# Mandatory: no
# Default:
# SSLCALocation= #SSL CA钥文件目录
### Option: StatsAllowedIP
# List of comma delimited IP addresses, optionally in CIDR notation, or DNS names of external Zabbix instances.
# Stats request will be accepted only from the addresses listed here. If this parameter is not set no stats requests
# will be accepted.
# If IPv6 support is enabled then '127.0.0.1', '::127.0.0.1', '::ffff:127.0.0.1' are treated equally
# and '::/0' will allow any IPv4 or IPv6 address.
# '0.0.0.0/0' can be used to allow any IPv4 address.
# Example: StatsAllowedIP=127.0.0.1,192.168.1.0/24,::1,2001:db8::/32,zabbix.example.com
#
# Mandatory: no
# Default:
# StatsAllowedIP= #定义允许访问zabbix server的IP地址列表
####### LOADABLE MODULES #######可加载的模块
### Option: LoadModulePath
# Full path to location of server modules.
# Default depends on compilation options.
# To see the default path run command "zabbix_server --help".
#
# Mandatory: no
# Default:
# LoadModulePath=${libdir}/modules #第三方模块目录路径
### Option: LoadModule
# Module to load at server startup. Modules are used to extend functionality of the server.
# Formats:
# LoadModule=<module.so>
# LoadModule=<path/module.so>
# LoadModule=</abs_path/module.so>
# Either the module must be located in directory specified by LoadModulePath or the path must precede the module name.
# If the preceding path is absolute (starts with '/') then LoadModulePath is ignored.
# It is allowed to include multiple LoadModule parameters.
#
# Mandatory: no
# Default:
# LoadModule= #第三方模块路径
####### TLS-RELATED PARAMETERS #######TLS相关参数
### Option: TLSCAFile
# Full pathname of a file containing the top-level CA(s) certificates for
# peer certificate verification.
#
# Mandatory: no
# Default:
# TLSCAFile= #CA文件
### Option: TLSCRLFile
# Full pathname of a file containing revoked certificates.
#
# Mandatory: no
# Default:
# TLSCRLFile= #包含已吊销证书的文件的完整路径名。
### Option: TLSCertFile
# Full pathname of a file containing the server certificate or certificate chain.
#
# Mandatory: no
# Default:
# TLSCertFile= #公钥文件路径
### Option: TLSKeyFile
# Full pathname of a file containing the server private key.
#
# Mandatory: no
# Default:
# TLSKeyFile= #私钥文件路径
3. zabbix 监控入门基础
学习通过apt/yum安装zabbix agent、对tomcat进行监控。
3.1 监控linux 系统
在其他从节点安装 zabbix agent,然后添加到zabbix server以对其进行资源监控
3.1.1 安装zabbix-agent
3.1.1.1 编译安装
安装依赖环境
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
解压安装包 编译
[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文件
[root@node2 zabbix-4.0.30]#useradd -s /sbin/nologin 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
3.1.1.2 包安装
rpm -Uvh https://repo.zabbix.com/zabbix/6.0/rhel/8/x86_64/zabbix-release-latest-6.0.el8.noarch.rpm
dnf install -y zabbix-agent
3.1.2 修改配置文件
3.1.2.1 编译版本
[root@node2 etc]#vim /apps/zabbix/etc/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.91.101
#指定名称 一般使用 IP地址, 等会需要使用
[root@node2 zabbix-4.0.30]#systemctl restart zabbix-agent.service
[root@node2 etc]#systemctl status zabbix-agent.service
# 可以看到三个监听线程
● zabbix-agent.service - Zabbix Agent
Loaded: loaded (/usr/lib/systemd/system/zabbix-agent.service; disabled; vendor preset: disabled)
Active: active (running) since 五 2024-07-19 15:55:42 CST; 11s ago
Process: 6348 ExecStop=/bin/kill -SIGTERM $MAINPID (code=exited, status=0/SUCCESS)
Process: 6350 ExecStart=/apps/zabbix/sbin/zabbix_agentd -c $CONFFILE (code=exited, status=0/SUCCESS)
Main PID: 6353 (zabbix_agentd)
CGroup: /system.slice/zabbix-agent.service
├─6353 /apps/zabbix/sbin/zabbix_agentd -c apps/zabbix/etc/zabbix_agentd.conf
├─6354 /apps/zabbix/sbin/zabbix_agentd: collector [idle 1 sec]
├─6355 /apps/zabbix/sbin/zabbix_agentd: listener #1 [waiting for connection]
├─6356 /apps/zabbix/sbin/zabbix_agentd: listener #2 [waiting for connection]
├─6357 /apps/zabbix/sbin/zabbix_agentd: listener #3 [waiting for connection]
└─6358 /apps/zabbix/sbin/zabbix_agentd: active checks #1 [idle 1 sec]
7月 19 15:55:42 node2 systemd[1]: Starting Zabbix Agent...
7月 19 15:55:42 node2 systemd[1]: Started Zabbix Agent.
3.1.2.2 包安装
[root@localhost ~]#vim /etc/zabbix/zabbix_agentd.conf
117 Server=192.168.91.200 #指向主服务器
125 ListenPort=10050 #监听端口 默认的无需修改
142 StartAgents=3 #启动3个进程收集数据
182 Hostname=192.168.91.201 #指定该 Agent 的主机名,用于在 Zabbix Server 上匹配主机配置特别关键,当你使用“主动模式(active checks)”时,必须和服务端配置完全一致
systemctl restart zabbix-agent.service
3.1.3 web页面主控端添加被监控主机
在zabbix web管理界面添加上一步安装了zabbix agent的linux主机。
添加模板不添加模板是不会监控的
选择内置模板
过段时间就会变绿
3.1.4使用命令获取数据
yum install zabbix-get -y
[root@localhost fonts]#zabbix_get -h·
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.101 -p 10050 -k "agent.ping"
1
-s 指明主机
-k 指明监控项
-p 端口
3.2 监控tomcat
- 在101 服务器上安装tomcat (略)
使用脚本
3.2.1 tomcat开启JMX监控
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务。通常使用JMX来监控系统的运行状态或管理系统的某些方面,比如清空缓存、重新加载配置文件等
JMX在Java编程语言中定义了应用程序以及网络管理和监控的体系结构、设计模式、应用程序接口以及服务,通常使用JMX来监控系统的运行状态。
[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.91.100"
[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服务器的地址
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服务器的地址 |
3.2.2通过jconsole验证JMX数据
在windows安装windows版本的JDK,安装过程略,安装完成之后点击安装目录的jconsole.exe,比如C:\ProgramFiles\Java\jdk1.8.0_221\bin\jconsole.exe,如下:
3.2.3 配置zabbixserver
在主服务器上配置启动 javagateway
[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))
yum install zabbix-java-gateway
配置 zabbix-server 对接 java-gateway
[root@localhost data]#vim /apps/zabbix_server/etc/zabbix_server.conf
281 JavaGateway=192.168.91.100 #指明gateway地址
297 StartJavaPollers=5 #开启多少个进程去收集java服务器的信息 默认没开启
289 JavaGatewayPort=10052 # 默认不用改
[root@localhost ~]#systemctl restart zabbix-server
#快照起不来 重启机器
#重启后不要忘记开启 javagateway
[root@localhost sbin]#/apps/zabbix_server/sbin/zabbix_server
[root@localhost sbin]#ss -natp |grep 10051
3.2.4 web页面配置
配置----> 主机
最后jmx 处会变绿
可以导入cmdline-jmxclient-0.10.3.jar 文件后测试 是否可以看到线程
java -jar cmdline-jmxclient-0.10.3.jar - 192.168.91.101:12345 'Catalina:name="http-nio-8080",type=ThreadPool' currentThreadCount
3.2.5 更换监控模板
导入新模板
配置默认即可
将原有的清除,然后加入的新的更新
查看图形数据
选择相应的指标选项
3.3:zabbix主动与被动监控模式:
被动模式 与主动模式都是相对于agent 客户端而言
- 主动模式: 客户端主动将数据发给 server或proxy
- 被动模式: server或proxy主动去找 客户端 索要数据
3.3.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负载很高还会导致不能及时获取到最新数据,但由于无需其他复杂配置,被设置为了默认的工作方式。
3.3.1:被动模式
- 主服务器会开启随机端口去连接 客户端的 10050 端口 来获取数据
- 从节点将数据交给主
- 主写入数据库
- 最后展示在 web页面中
3.3.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的压力。
3.3.2.1主动模式的工作流程
- 初次连接agent服务器会开启随机端口去连接 服务端的 10051 端口 来获取 需要监控的数据类型(监控项)
- 从节点将数据交给主
- 主写入数据库
- 最后展示在 web页面中
- 此后的数据收集就不需要先去获取监控项目
3.3.2.2 修改zabbix agent为主动模式
[root@node2 zabbix]#grep -in "^[a-z]" etc/zabbix_agentd.conf
30:LogFile=/tmp/zabbix_agentd.log
94:Server=192.168.91.100 #谁可以来获取数据
119:StartAgents=3
135:ServerActive=127.0.0.1
146:Hostname=192.168.91.102
[root@node2 zabbix]#vim /apps/zabbix/etc/zabbix_agentd.conf
修改第135 作为
94:Server=192.168.91.100 #谁可以来获取数据
135:ServerActive=192.168.91.100 #主动模式的zabbix server地址
146:Hostname=192.168.91.102 #当亲主机名字
[root@node2 zabbix]#systemctl restart zabbix-agent.service
3.3.2.3 生成主动模式模板
点击全克隆
修改名称
修改单个
修改多个
服务器的磁盘 网卡个不相同, 模板中有一些自动发现规则,可以适当将 其中的一些选项时间调低点,默认1小时太长了
改成60s
监控项原型, 自动适配改成你的名字
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.101 -p 10050 -k "agent.ping"
1
应用模板略
要去看网卡
4 zabbix proxy
zabbix 作为一个分布式监控系统(分布式监控解决方案),支持通过代理(proxy)收集zabbix agent的监控数据然后由zabbix proxy再把数据发送给zabbix server,也就是zabbix proxy 可以代替 zabbix server 收集监控数据,然后把数据汇报给 zabbix server,所以zabbix proxy可以在一定程度上分担了zabbix server 的数据收集压力,从而降低了数据的采集时间、也相应的增加了zabbix server的监控能力。
另外zabbix proxy也区分主动模式和被动模式,通信方式与zabbix server主动模式和被动模式一样,区别是zabbixproxy由于没有zabbix agent的配置,所以zabbix proxy在主动模式下要向zabbix server周期性的向zabbix server申请获取zabbix agent的监控项信息,但是zabbix proxy在被动模式下也是等待zabbix server的连接并接受zabbixserver发送的监控项指令,然后再有zabbix proxy向zabbix agent发起请求获取数据。
4.1 zabbix proxy架构:
4.2 zabbix proxy对比zbbbix server
| 功能 | zabbxy proxy | zabbix server |
|---|---|---|
| 轻量级 | 是 | 相对重量级 |
| 图形 | 无 | 带图形控制界面 |
| 可以独立工作 | 是,可以独立采集数据并存储 | 是,即数据采集、存储、分析、展示于一体 |
| 易维护 | 是,配置完成后基本无需管理 | 维护也不难 |
| 独立数据库 | 保留少量最近数据 | 保留指定时间内的所有数据 |
| 报警通知 | 否,代理服务器不发送邮件通知 | 支持邮件、短信等告警机制 |
4.3:zabbix proxy部署与使用
zabbix proxy的大版本必须要和zabbix server版本一致,否则会导致出现zabbix server与zabbix proxy不兼容问
4.3.1:zabbix proxy安装:
4.3.1.1 编译安装proxy软件 7-4
#安装依赖环境
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 install
mysql
mariadb-server
4.3.1.2 准备 数据库 7-4
yum install mariadb-server -y
systemctl start mariadb
4.3.1.3 准备数据库 7-4
#新建数据库
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.91.%' identified by '123456';
grant all privileges on zabbix_proxy_passive.* to proxy@'192.168.91.%' 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';
create database zabbix_proxy_active character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy_active.* to proxy@'192.168.91.%' identified by '123456';
#导入数据结构
#先去源码包目录
mysql -uproxy -p123456 -h192.168.91.103 zabbix_proxy_passive < database/mysql/schema.sql
mysql -uproxy -p123456 -h192.168.91.103 zabbix_proxy_active < database/mysql/schema.sql
4.3.2 实现被动模式
导入数据结构
create database zabbix_proxy_passive character set utf8 collate utf8_bin;
grant all privileges on zabbix_proxy_passive.* to proxy@'192.168.91.%' identified by '123456';
grant all privileges on zabbix_proxy_passive.* to proxy@'localhost' identified by '123456';
#先去源码包目录
mysql -uproxy -p123456 -h192.168.91.103 zabbix_proxy_passive < database/mysql/schema.sql
4.3.2.1 zabbix proxy被动配置
| 服务器类型 | 地址 |
|---|---|
| zabbix server | 192.168.91.100 |
| 被动proxy | 192.168.91.104 |
| web服务器IP | 192.168.91.101 |
# vim /apps/zabbix_proxy/etc/zabbix_proxy.conf
ProxyMode=1 #0为主动,1为被动
Server=192.168.91.100 #zabbix server服务器的地址或主机名
Hostname=passive #代理服务器名称,需要与zabbix server添加代理时候的proxyname是一致的!
ListenPort=10051 #zabbix proxy监听端口
LogFile=/tmp/zabbix_proxy.log
EnableRemoteCommands=1 #允许zabbix server执行远程命令
DBHost=192.168.91.103 #数据库服务器地址
DBName=zabbix_proxy_active #使用的数据库名称
DBUser=proxy #连接数据库的用户名称
DBPassword=123456 #数据库用户密码
DBPort=3306 #数据库端口
ProxyLocalBuffer=720 #已经提交到zabbix server的数据保留时间 720小时
ProxyOfflineBuffer=720 #未提交到zabbix server的时间保留时间
HeartbeatFrequency=60 #心跳间隔检测时间,默认60秒,范围0-3600秒,被动模式不使用
ConfigFrequency=5 #间隔多少秒从zabbix server获取监控项信息
DataSenderFrequency=5 #数据发送时间间隔,默认为1秒,范围为1-3600秒,被动模式不使用
StartPollers=20 #启动的数据采集器数量
JavaGateway=172.31.0.104 #java gateway服务器地址,当需要监控java的时候必须配置否则监控不到数据
JavaGatewayPort=10052 #Javagatewa服务端口
StartJavaPollers=20 #启动多少个线程采集数据
CacheSize=2G #保存监控项而占用的最大内存
HistoryCacheSize=2G #保存监控历史数据占用的最大内存
HistoryIndexCacheSize=128M #历史索引缓存的大小
Timeout=30 #监控项超时时间,单位为秒
LogSlowQueries=3000 #毫秒,多久的数据库查询会被记录到日志
4.3.2.2 proxy 实际配置
[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=1
# 1是被动
#0为主动 修改为1 默认主动
31 Server=192.168.91.100
# 指向 zabbix服务器 , 就算是主动模式也需要修改应为不是所有监控项都是主动还有被动的
40 ServerPort=10051
#被动模式可以不修改 应为是 zabbix-server 主动
50 Hostname=passive
# web 配置中需要使用, 必须一致
158 DBHost=192.168.91.103
#数据库地址
169 DBName=zabbix_proxy_passive
# 数据库名字
184 DBUser=proxy
#数据库用户
192 DBPassword=123456
#数据库密码
244 ConfigFrequency=5
#间隔多少秒从zabbix server获取监控项信息
4.3.2.4 启动 proxy 软件 及proxy 上的agent
[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
|-zabbix_agentd(18648)-+-zabbix_agentd(18649)
| |-zabbix_agentd(18650)
| |-zabbix_agentd(18651)
| |-zabbix_agentd(18652)
| `-zabbix_agentd(18653)
`-zabbix_proxy(18393)-+-zabbix_proxy(18398)
|-zabbix_proxy(18400)
|-zabbix_proxy(18401)
|-zabbix_proxy(18402)
|-zabbix_proxy(18403)
|-zabbix_proxy(18405)
|-zabbix_proxy(18406)
|-zabbix_proxy(18408)
|-zabbix_proxy(18409)
|-zabbix_proxy(18410)
|-zabbix_proxy(18411)
|-zabbix_proxy(18412)
|-zabbix_proxy(18413)
|-zabbix_proxy(18414)
|-zabbix_proxy(18416)
|-zabbix_proxy(18417)
|-zabbix_proxy(18418)
|-zabbix_proxy(18419)
|-zabbix_proxy(18420)
|-zabbix_proxy(18421)
`-zabbix_proxy(18422)
4.3.2.5web端添加代理
4.3.2.6 修改被监控端指向 103 代理
[root@localhost ~]# vim /apps/zabbix/etc/zabbix_agentd.conf
94 Server=192.168.91.100,192.168.91.103
#被动模式 允许 103代理 来获取数据
102 ListenPort=10050
# 需要开启
[root@localhost ~]#systemctl restart zabbix-agent.service
[root@localhost ~]#systemctl status zabbix-agent.service
需要等待的时间较长 一般 15-30分钟
4.3.3实现主动模式
4.3.3.1 安装 proxy
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
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
#准备阿里源
./configure --prefix=/apps/zabbix_proxy --enable-proxy --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
make install
4.3.3.2 检测是否可以连接数据库
也可以在此服务器单独安装
mysql -uproxy -p123456 -h192.168.91.103
4.3.3.3 修改配置文件
[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.91.100
# 指向 zabbix服务器 , 就算是主动模式也需要修改应为不是所有监控项都是主动还有被动的
40 ServerPort=10051
#被动模式可以不修改 应为是 zabbix-server 主动
50 Hostname=active
# web 配置中需要使用, 必须一致
158 DBHost=192.168.91.103
#数据库地址
169 DBName=zabbix_proxy_active
# 数据库名字
184 DBUser=proxy
#数据库用户
192 DBPassword=123456
#数据库密码
244 ConfigFrequency=5
#间隔多少秒从zabbix server获取监控项信息
4.3.3.4 导入数据库表格
前面做过了 如果没做 proxy起不来
mysql -uproxy -p123456 -h192.168.91.103 zabbix_proxy_active < database/mysql/schema.sql
#共用数据库 就在 数据库服务器上操作
4.3.3.5 启动
[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
4.3.3.6 web设置
只需要写 之前配置的 hostname即可
4.3.3.6 修改被监控端
[root@node2 ~]#vim /apps/zabbix/etc/zabbix_agentd.conf
31 server=192.168.91.105
135 ServerActive=192.168.91.105
#指向 代理服务器
[root@node2 ~]#systemctl restart zabbix-agent.service
[root@node2 ~]#systemctl status zabbix-agent.service
5 zabbix监控案例实战
- 自定义监控项
- 通过脚本采集监控项数据
- zabbix agent获取监控项数据
- 自定义模板和图形及触发器
- 验证数据
模板的导入导出
5.1监控Linux TCP连接状态:
TCP,全称Transfer Control Protocol,中文名为传输控制协议,它工作在OSI的传输层,提供面向连接的可靠传输服务,TCP的工作主要是建立连接,然后从应用层程序中接收数据并进行传输。TCP采用虚电路连接方式进行工作,在发送数据前它需要在发送方和接收方建立一个连接,数据在发送出去后,发送方会等待接收方给出一个确认性的应答,否则发送方将认为此数据丢失,并重新发送此数据。
在建立连接的时候,所谓的客户端与服务端是相对应的,即要看是谁主动连接的谁,如果A主动连接B那么A就是客户端而B是服务端,如果返过来B主动连接A,那么B就是客户端而A就成了服务端。
5.1.1 TCP端口的十一种连接状态:
- CLOSED:端口默认是关闭状态。
- LISTEN: 服务器程序开始监听一个端口,就是LISTEN状态。
- SYN_RCVD:三次握手的第二次握手后的端口状态,是收到了客户端发送的SYN_SENT数据包之后的状态,这个状态很短暂,正常在服务器上是很少看到的,除非服务器故意不发送最后一次握手数据包,服务器返回给客户端SYN确认之后就会将在自己的端口置为SYN_RCVD。
- SYN_SENT:SYN_SENT状态表示客户端已发送SYN=1的请求连接报文,发送之后客户端就会将自己的端口状态置为SYN_SENT。
- ESTABLISHED:表示已经连接成功,客户端收到服务器的确认报文会回复服务器,然后就将端口置为ESTABLISHED,服务器第三次收到客户端的Ack确认就会将端口置为ESTABLISHED并开始传输数据。
- FIN_WAIT_1:出现在主动关闭方,FIN_WAIT_1状态实际上是当SOCKET在ESTABLISHED状态时,当任意一方想主动关闭连接,向对方发送了FIN=1的断开连接请求报文,此时该SOCKET即 进入到FIN_WAIT_1状态。而当对方回应ACK报文后,则进入到FIN_WAIT_2状态,当然在实际的正常情况下,无论对方何种情况下,都应该马 上回应ACK报文,所以FIN_WAIT_1状态一般是比较难见到的,而FIN_WAIT_2状态还有时常常可以用netstat看到。
- FIN_WAIT_2:出现在主动关闭方,当被动方回应FIN_WAIT_1的ACK报文后,则进入到FIN_WAIT_2状态
- TIME_WAIT:出现在主动关闭方,表示收到了对方的FIN请求关闭报文,并发送出了ACK报文,就等2*MSL(MaxSegment Lifetime)后即可回到CLOSED可用状态了。如果FIN_WAIT_1状态下,收到了对方同时带FIN标志和ACK标志的报文时,可以直接进入到TIME_WAIT状态,而无须经过FIN_WAIT_2状态。
- CLOSING: 这种状态比较特殊,实际情况中应该是很少见,属于一种比较罕见的例外状态。正常情况下,当你发送FIN报文后,按理来说是应该先收到(或同时收到)对方的 ACK报文,再收到对方的FIN报文。但是CLOSING状态表示你发送FIN报文后,并没有收到对方的ACK报文,反而却也收到了对方的FIN报文。什 么情况下会出现此种情况呢?其实细想一下,也不难得出结论:那就是如果双方几乎在同时close一个SOCKET的话,那么就出现了双方同时发送FIN报 文的情况,也即会出现CLOSING状态,表示双方都正在关闭SOCKET连接。
- CLOSE_WAIT: 表示在等待关闭端口,这种状态存在于被动关闭的一方。
- LAST_ACK: 是被动关闭方在主动关闭一方在发送FIN报文后,最后等待对方的ACK报文,当再次收到ACK报文后,也即可以进入到CLOSED可用状态了。
5.1.2 自定义监控项
例子1: 测试echo 命令
添加自定义项
[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf
283 ### Option: UserParameter
284 # User-defined parameter to monitor. There can be several user-defined parameters.
285 # Format: UserParameter=<key>,<shell command>
286 # See 'zabbix_agentd' directory for examples.
287 #
288 # Mandatory: no
289 # Default:
290 # UserParameter=
UserParameter=test,/usr/bin/echo hello
#修改290 行或者新加一行 命令最好绝对路径
[root@localhost zabbix]# systemctl restart zabbix-agent.service
验证
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test"
hello
例子2: 添加脚本
[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf
# Mandatory: no
# Default:
# UserParameter=
UserParameter=test,/usr/bin/bash /data/tcp.sh
[root@localhost zabbix]# systemctl restart zabbix-agent.service
[root@localhost data]# vim tcp.sh
#!/bin/bash
echo 100
验证
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test"
100
例子: 脚本传参数
[root@localhost data]# vim tcp.sh
#!/bin/bash
echo $1
[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash /data/tcp.sh $1
验证: 服务器端
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test[20]"
20
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test[30]"
30
# 调用多个
[root@localhost zabbix]# vim /apps/zabbix/etc/zabbix_agentd.conf
UserParameter=test[*],/usr/bin/bash /data/tcp.sh $1 $2
[root@localhost data]# vim tcp.sh
#!/bin/bash
echo $1 $2
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test[30,300]"
例子3: 脚本判断
[root@localhost data]# vim tcp.sh
#!/bin/bash
num=$1
if [ $num == "cpu" ];then
echo 88
fi
验证:
[root@localhost data]#/apps/zabbix_server/bin/zabbix_get -s 192.168.91.102 -p 10050 -k "test[cpu]"
web添加自定义 项
检查:
需要等一会
自定义选项没图形,需要添加图形
5.1.3触发器
在去看
5.1.4 监控tcp连接
准备脚本
#!/bin/bash
tcp_conn_status(){
TCP_STAT=$1
ss -ant | awk 'NR>1 {++s[$1]} END {for(k in s) print k,s[k]}' > /tmp/tcp_conn.txt
TCP_NUM=$(grep "$TCP_STAT" /tmp/tcp_conn.txt | cut -d ' ' -f2)
if [ -z $TCP_NUM ];then
TCP_NUM=0
fi
echo $TCP_NUM
}
main(){
case $1 in
tcp_status)
tcp_conn_status $2;
;;
esac
}
main $1 $2
测试脚本
[root@localhost zabbix]# bash tcp_status.sh tcp_status ESTAB
2
[root@localhost zabbix]# bash tcp_status.sh tcp_status TIME-WAIT
72
[root@localhost zabbix]# chmod +x tcp_status.sh
修改客户端配置文件
[root@localhost etc]# vim zabbix_agentd.conf
UserParameter=linux_tcp_status[*],/usr/bin/bash /data/tcp_status.sh $1 $2
重启服务
[root@localhost etc]# systemctl restart zabbix-agent.service
[root@localhost etc]# systemctl status zabbix-agent.service
在主服务器上验证
[root@localhost ~]#zabbix_get -s 192.168.91.102 -p 10050 -k "linux_tcp_status["tcp_status","TIME-WAIT"]"
22
[root@localhost ~]#zabbix_get -s 192.168.91.102 -p 10050 -k "linux_tcp_status["tcp_status","ESTAB"]"
4
5.1.4.1在web界面建立模板
继续添加监控项
一个一个加比较麻烦可以克隆
修改名字
设置触发器
添加图形
5.2监控 memcache
5.2.1安装memcacce 约等于redis
客户端服务器安装
[root@localhost ~]# yum install memcached nmap -y
修改监听端口
[root@localhost ~]# vim /etc/sysconfig/memcached
PORT="11211"
USER="memcached"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS="-l 0.0.0.0"
[root@localhost ~]# systemctl restart memcached.servic
[root@localhost ~]# systemctl status memcached.servic
测试
[root@localhost ~]# telnet 192.168.91.102 11211
[root@localhost ~]# telnet 192.168.91.102 11211
Trying 192.168.91.102...
Connected to 192.168.91.102.
Escape character is '^]'.
stats
STAT pid 67049
STAT uptime 214
STAT time 1721657895
STAT version 1.4.15
STAT libevent 2.0.21-stable
STAT pointer_size 64
STAT rusage_user 0.000000
STAT rusage_system 0.016544
STAT curr_connections 5
STAT total_connections 8
STAT connection_structures 6
STAT reserved_fds 20
STAT cmd_get 0
5.2.2 准备监控脚本
# cat memcache_monitor.sh
#!/bin/bash
memcached_status(){
M_PORT=$1
M_COMMAND=$2
echo -e "stats\nquit" | ncat 127.0.0.1 "$M_PORT" | grep "STAT $M_COMMAND" |awk '{print $3}'
}
main(){
case $1 in
memcached_status)
memcached_status $2 $3
;;
esac
}
main $1 $2 $3
[root@localhost ~]#chmod a+x /data/mem.sh
[root@localhost ~]# bash mem.sh memcached_status 11211 curr_connections
1
5.2.3 修改客户端文件
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
UserParameter=memcache_status[*],/usr/bin/bash /data/mem.sh $1 $2 $3
[root@localhost ~]# systemctl restart zabbix-agent
5.2.4 主服务器端测试
[root@localhost ~]#zabbix_get -s 192.168.91.102 -p 10050 -k "memcache_status["memcached_status","11211","curr_connections"]"
5
5.2.5 zabbix web制作模板:
5.2.5.1创建模板
5.2.5.2:创建监控项:
配置-模板 -memcache-监控项-创建监控项
5.2.5.3:创建触发器:
配置-模板-memcache-触发器-创建触发器:
点击表达式方框右侧的添加按钮,选择要对那个监控项设置触发器以及触发方式和值的大小,一个模板中可以有多个触发器,一个触发器是根据一个监控项的返回值对比预先设置的阈值,触发器就是监控项返回了不符合预定义的值范围后就进行触发下一步操作的警戒线。
设置连接数
5.2.5.4创建图形
配置-模板--memcache-图形-创建图形:
在图形里面关联监控项,一个图形可以用多个监控项,不同的监控项会自动使用不同的颜色进行区分,也可以手动调整各监控项的颜色和图形类型。
5.3监控redis
5.3.1 安装Redis服务
[root@localhost data]# yum install epel-release.noarch -y
[root@localhost data]# yum install redis -y
[root@localhost data]# vim /etc/redis.conf
#修改监听地址
bind 0.0.0.0
[root@localhost data]# systemctl restart redis
#
5.3.2 准备监控脚本
#!/bin/bash
redis_status(){
R_PORT=$1
R_COMMAND=$2
(echo -en "INFO \r\n";) | ncat 127.0.0.1 "$R_PORT" > /tmp/redis_"$R_PORT".tmp
REDIS_STAT_VALUE=$(grep ""$R_COMMAND":" /tmp/redis_"$R_PORT".tmp | cut -d ':' -f2)
echo $REDIS_STAT_VALUE
}
help(){
echo "${0} + redis_status + PORT + COMMAND"
}
main(){
case $1 in
redis_status)
redis_status $2 $3
;;
*)
help
;;
esac
}
main $1 $2 $3
[root@localhost data]## chmod a+x redis.sh
[root@localhost data]## bash redis.sh redis_status 6379 used_memory
841272
5.3.3 服务端测试
[root@localhost ~]#zabbix_get -s 192.168.91.102 -p 10050 -k "redis_status["redis_status","6379","connected_clients"]"
2
[root@localhost ~]#zabbix_get -s 192.168.91.102 -p 10050 -k "redis_status["redis_status","6379","used_memory"]"
/data/redis.sh:行6: /tmp/redis_6379.tmp: 权限不够
813440
5.3.5 zabbix web模板制作:
配置-模板-创建模板
5.3.5.1 创建模板
5.3.5.2.1 当前连接数监控项
5.3.5.2.2:已用内存监控项:
5.3.5.3:创建触发器
配置-模板-redis-monitor-template-触发器-创建触发器:
当前连接数触发器:
已用内存触发器:
2*1024*1024*1024
5.3.5.4:创建图形:
配置-模板--redis-图形-创建图形:
内存
连接情况