分布式监控平台——Zabbix

884 阅读12分钟

监控

一、监控的功能

  • 在需要的时刻,提前预警即将出问题,避免故障发生
  • 实时监控系统和业务,当出问题之后,通过发出告警,提醒相关人员,快速可以找到问题的根源,从而及时处理问题
  • 可以实现网站,应用或者服务器的故障自愈,保证高可用性
  • 以图形或易观察的方式呈现当前以及过往的状态,便于分析和预测系统发展趋势

二、需要监控什么

监控一切需要监控的资源,包括:服务器、网络设备、业务应用、云服务等

分类实例内容
硬件监控通过远程控制卡: DeLL的iDRAC,HP的ILO和IBM的IMM等 使用IPMI来完成物理设备的监控工作。通常必须要监控包括温度、硬盘故障等 路由器,交换机(端口,光衰,日志),打印机等
系统监控cpu,内存,硬盘使用率,硬盘IO,系统负载,进程数
服务监控nginx,apache,php-fpm,mysql.memcache,redis ,tomcat,JVM,TCP连接数
性能监控网站性能,服务器性能,数据库性能,存储性能
日志监控系统会产生系统日志,应用程序会有应用的访问日志、错误日志,服务有运行日志等, 可以使用ELK来进行日志监控
安全监控用户登录数,passwd文件变化,本地所有文件改动 Nginx+Lua编写一个WAF通过kibana可以图形化的展示不同的攻击类型的统计。
网络监控IP,端口,URL,DB,ping包,IDC带宽网络流量,网络流出速率,网络入流量, 网络出流量,网络使用率,SMTP.POP3

3. 常见的监控工具

开源监控软件:cacti、nagios、zabbix、smokeping、open-falcon、nightingale等

Zabbix

一、Zabbix的概念

作为一个运维,需要会使用监控系统查看服务器状态以及网站流量指标,利用监控系统的数据去了解上线发布的结果,和网站的健康状态。

利用一个优秀的监控软件,我们可以:

  • 通过一个友好的界面进行浏览整个网站所有的服务器状态
  • 可以在Web 前端方便的查看监控数据
  • 可以回溯寻找事故发生时系统的问题和报警情况

二、什么是 zabbix?

  • zabbix是一个基于Web界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
  • zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
  • zabbix由2部分构成,zabbix server 与可选组件zabbix agent。 通过c/s 模式采集数据,通过B/s模式在web端展示和配置。
  • zabbix server 可以通过SNMP(简单网络管理协议),zabbix agent,ping, 端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它 可以运行在Linux等平台上。(支持多个平台,windows也支持)
  • zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

zabbix端口号

  • zabbix服务端zabbix_server 默认使用10051 端口。
  • 客户端zabbix_agent2 默认使用10050 端口。

三、Zabbix 架构

image-20240718205445913.png

Zabbix 由如下主要的功能组件组成:

SERVER

  • Zabbix server 是 Zabbix 软件的核心组件
  • Zabbix Agent 向其报告可用性、系统完整性信息和统计信息。
  • Zabbix server也是存储所有配置信息、统计信息和操作信息的核心存储库。
  • Zabbix server也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将发出通知给管理员。
  • 基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。

数据库

  • 所有配置信息以及 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,zabbix agent2是用go语言开发的,支持更高并发。

PROXY

  • Zabbix Proxy 可以代替 Zabbix Server 采集性能和可用性数据
  • Zabbix Proxy 在 Zabbix 的部署是可选部分
  • Zabbix Proxy 的部署可以很好的分担单个Zabbix server的负载

Java 网关

Zabbix 要监控 tomcat 服务器和其它JAVA程序,需要使用 Java gateway 作为代理,才能从JAVA程序中获取数据

四、Zabbix的监控原理

zabbix agent安装在被监控的主机上,zabbix agent 负责定期收集客户端本地各项数据,并发送至zabbix server 端,zabbix server收到数据后,将数据存储到数据库中,用户基于zabbix WEB可以看到数据在前端展现图像。

当zabbix 监控某个具体的项目,该项目会设置一个触发器阈值,当被监控的指标超过该触发器设定的阈值,会进行一些必要的动作,动作包括:发送信息(邮件、微信、短信)、发送命令(shell 命令、reboot、 restart、 install 等)。

用户可以基于zabbix-web可以在WEBUI界面中查看展现的数据图像,以及进行相关的配置管理用户还可以在WEBUI界面中设置监控项的触发器,如被监控的数据指标超过触发器设定的阈值,会进行发送通知信息或者一些应急操作指令。

五、Zabbix常见的五个程序

zabbix监控部署在系统中,包含常见的五个程序: zabbix server、 zabbix agent、 zabbix proxy、zabbix get、zabbix sender 等。

zabbix server:zabbix 服务端守护进程,其中zabbix_agent、 zabbix_ get、zabbix_sender、 zabbix_proxy的数据最终都提交给zabbix server;

zabbix agent:客户端守护进程,负责收集客户端数据,例如:收集CPU负载、内存、硬盘使用情况等;

zabbix proxy:zabbix分布式代理守护进程,通常大于500台主机,需要进行分布式监控架构部署;

zabbix get:zabbix 数据接收工具,单独使用的命令,通常在server 或者proxy端执行获取远程客户端信息的命令;

zabbix sender:zabbix 数据发送工具,用户发送数据给server 或proxy端,通常用户耗时比较长的检查。

六、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配置的好方法。

七、编译安装 zabbix

1. 部署 zabbix 服务端

zabbix-server 内存至少 2G,推荐 4G;zabbix 服务端同时安装zabbix-server-mysql和zabbix-agent,因为服务端所在主机自己也要被监控。

关闭防火墙

systemctl stop firewalld  
setenforce 0

image.png

解决依赖关系

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

image.png

建立管理用户

groupadd zabbix
useradd -g zabbix zabbix

image.png

切换到/opt目录,上传压缩包,并解压包

cd /opt
#切换到/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
#解压

image.png

切换到zabbix-4.0.30目录,进行编译安装

cd zabbix-4.0.30/

./configure --help
#可以查看帮助

./configure --prefix=/apps/zabbix_server --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2 --enable-java

make -j2 && make install

image.png

image.png

2. 安装数据库

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

yum install mariadb-server.x86_64  -y

systemctl start mariadb

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

mysql -uroot -pabc123      //登录数据库
create database zabbix character set utf8 collate utf8_bin;
//创建一个名为 zabbix 的数据库,使用UTF-8字符集和utf8_bin校对规则
create user zabbix@localhost identified by 'zabbix';
//在本地(即当前主机)创建一个名为 zabbix 的用户,并指定密码为 zabbix
grant all privileges on zabbix.* to zabbix@localhost;
//授予用户 zabbix 对"zabbix"数据库的所有权限
set global log_bin_trust_function_creators = 1;
//设置全局系统变量的值为1,表示信任二进制日志中的函数创建者
quit;

image.png

image.png

image.png

导入zabbix数据库文件

cd /opt/zabbix-4.0.30/database/mysql

mysql -uzabbix -pzabbix zabbix < schema.sql   //-u用户 -p密码 数据库
mysql -uzabbix -pzabbix zabbix < images.sql 
mysql -uzabbix -pzabbix zabbix < data.sql

#必须最后导入 data.sql

image.png

3. 安装web apapche

yum install httpd -y

systemctl start httpd

cd /data/zabbix-4.0.30/frontends/php/

cp -a /data/zabbix-4.0.30/frontends/php/ /var/www/html/zabbix/
# 将前端页面拷贝过去

image.png

image.png

4. 修改zabbix配置

vim /apps/zabbix_server/etc/zabbix_server.conf
118行修改下密码,其他不用修改
118  DBPassword= zabbix

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

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

image.png

image.png

5. 升级 php 版本

如果在centos7上装zabbix 5.0版本 ,php版本要7.2以上

打开浏览器访问 192.168.100.10/zabbix

image.png

image.png

修改php软件的配置

yum  install php-gettext php-xml php-net-socket php-gd php-mysql  -y

vim /etc/php.ini
 384 max_execution_time = 300
//定义了PHP脚本执行的最大时间(以秒为单位)。如果脚本在这个时间内没有执行完毕,就会被中断
 394 max_input_time = 600
//定义了PHP脚本接受输入数据的最大时间(以秒为单位)。如果输入操作在这个时间内没有完成,就会被中断
 672 post_max_size = 16M
//定义了HTTP POST数据的最大大小。它限制了通过POST方式发送到服务器的数据量,单位是字节(B)
 878 date.timezone = Asia/Shanghai
//定义服务器使用的时区为 亚洲/上海

systemctl  restart  httpd  //重启服务

image.png

image.png

image.png

image.png

image.png

image.png

修改配置后刷新zabbix页面,皆显示 OK

image.png

image.png

image.png

image.png

下载配置文件,将其保存至指定路径

image.png

cd /opt
把zabbix.conf.php文件拖入/opt目录

cp -a zabbix.conf.php /var/www/html/zabbix/conf/

image.png

image.png

image.png

1721710807923.jpg

6. 准备 service 文件

pkill zabbix_server     //先停止 zabbix-server

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

chown -R zabbix:zabbix /apps/zabbix_server/
systemctl daemon-reload 
systemctl start zabbix-server.service 
systemctl status zabbix-server.service
systemctl enable zabbix-server.service

image.png

image.png

7. 修改中文

可以修改为中文界面

1721710807923.jpg

image.png

修改字体,以及图表的中文乱码问题

1721710807942.jpg

去win主机的C盘 C:\Windows\Fonts

image.png

cd /var/www/html/zabbix/assets/fonts   //上传楷体字体文件到该目录下


vim /var/www/html/zabbix/include/defines.inc.php
  72 define('ZBX_GRAPH_FONT_NAME',           'SIMKAI'); // font file name
 113 define('ZBX_FONT_NAME', 'SIMKAI');

image.png

image.png

1721710807961.jpg

8. 部署 zabbix 客户端:zabbix-agent

关闭防火墙

systemctl stop firewalld  
setenforce 0

image.png

解决依赖关系

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

image.png

建立管理用户

useradd zabbix -s /sbin/nologin

切换到/opt目录,上传压缩包,并解压包

cd /opt
#切换到/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
#解压

image.png

切换到zabbix-4.0.30目录,进行编译安装

cd zabbix-4.0.30/

./configure --help
#可以查看帮助

./configure --prefix=/apps/zabbix --enable-agent

make -j2 && make install

image.png

image.png

9. 准备service文件

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

#开启zabbix-agent.service
systemctl daemon-reload
systemctl start  zabbix-agent.service
systemctl status  zabbix-agent.service

image.png

image.png

10. 修改配置文件

cd /apps/zabbix/etc/

cp -a zabbix_agentd.conf zabbix_agentd.conf.bak

vim zabbix_agentd.conf
 94 Server=192.168.100.10    //指向当前zabbix server
119 StartAgents=3            //启动3个进程收集数据
146 Hostname=192.168.100.20  //指定名称,一般使用IP地址,等会手动添加主机会用到

#重启zabbix-agent.service
systemctl restart zabbix-agent.service
systemctl status zabbix-agent.service

image.png

image.png

1721710809936.jpg

image.png

11. 将客户端加入服务端的监控主机中

在zabbix web管理界面添加被监控主机

image.png

image.png

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

image.png

image.png

image.png

添加模板后过段时间 ZBX 就会被点亮、变绿

image.png

可以查看监测情况

image.png

12. 使用 get 命令获取数据

  • -s:指明主机
  • -p:指明端口
  • -k:指明监控项
//在server服务端执行 get 命令

/apps/zabbix_server/bin/zabbix_get -s 192.168.100.20 -p 10050 -k "agent.ping"
1
//如果能获得值,代表两者之间是通的

image.png