Linux_ZABBIX实战

发布时间 2023-08-09 17:04:53作者: Boldcc
typora-copy-images-to: img

ZABBIX实战

  • zabbix安装

Zabbix详解

zabbix中文社区: http://www.zabbix.org.cn/   
Zabbix中文版官方文档: https://www.zabbix.com/documentation/4.0/zh/manual

监控基本介绍   
    使用 SNMP 协议获取主机 CPU、内存、磁盘、网卡流量等数据.
    用脚本将获取到的 SNMP 数据存入数据库中,然后再使用一种名为 MRTG 的软件根据获取的数据绘制图表来分析数据的变化。MRTG(Multi Router Traffic Grapher),顾名思义,这款软件最初是设计用于监控网络链路流量负载的。它可以用过 SNMP 获取到设备的流量信息,并根据这些信息绘制成图表并保存为 PNG 格式的图片,再将这些 PNG 图片以HTML 页面的方式显示给用户.

    不过,MRTG 展示的页面和图表曲线相对简陋,它在一张图片中最多只能绘制两个数据的变化曲线,并且由于是 PNG 格式的静态图片,所以无法针对某一时间进行细化展示。为了解决这个问题,人们又开发了 RRDTOOL 工具.

    不过,直接使用 RRDTOOL 绘图操作起来很麻烦。同时,现如今的数据中心动辄成百上千的设备,一个个的去提取、绘制、监控显然是不现实的事情.

    Cacti 是一套基于 PHP、MySQL、SNMP 及 RRDTool 开发的监测图形分析工具,Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态了。Cacti 监控关注的是对数据的展示,却不关注数据异常后的反馈。如果凌晨 3 点的时候设备的某个数据出现异常,除非监控人员在屏幕前发现这个异常变化,否则是没有任何报警机制能够让我们道出现了异常。

    Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能,可以方便的根据应用服务扩展功能。

    Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是 Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。

    一个新的监控服务根据这个需求被设计出来,它就是 Ganglia。
    Ganglia 是 UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。
    主要是用来监控系统性能,如:CPU 、内存、硬盘利用率, I/O 负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用,目前是监控HADOOP 的官方推荐服务。

    Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。

优点:
     开源,无软件成本投入
     Server 对设备性能要求低
    支持设备多,自带多种监控模板
    支持分布式集中管理,有自动发现功能,可以实现自动化监控
    开放式接口,扩展性强,插件编写容易
    当监控的 item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动 从server 端去下载需要监控的 item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。
    Api 的支持,方便与其他系统结合

缺点:
    需在被监控主机上安装agent,所有数据都存在数据库里, 产生的数据量很大,瓶颈主要在数据库。

Zabbix安装

环境准备
最少两台机器
zabbix-server  -- 监控端
zabbix-agent   -- 被监控端
【关闭防火墙 selinux】
官方文档
https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&db=mysql&ws=apache

【zabbix-server 监控端安装】

a. 安装zabbix仓库
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

  rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
  sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo
  
# yum clean all

b. 安装相应软件
# yum install zabbix-server-mysql zabbix-agent -y

c. 安装zabbix 依赖yum源仓库
# yum install centos-release-scl
【centos7 base源可能会没有这个包】
解决方法:
# wget http://rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/centos-release-scl-rh-2-3.el7.centos.noarch.rpm
# wget http://rpmfind.net/linux/centos/7.9.2009/extras/x86_64/Packages/centos-release-scl-2-3.el7.centos.noarch.rpm
# rpm -ivhcentos-release-scl-rh-2-3.el7.centos.noarch.rpm centos-release-scl-2-3.el7.centos.noarch.rpm


    恢复并启用zabbix前端存储库。
d. 编辑配置文件 /etc/yum.repos.d/zabbix.repo,开启zabbix-frontend仓库                         
[zabbix-frontend]
...
enabled=1
...

# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl
//安装php以及数据库依赖 安装zabbix前端包

e. 创建初始数据库
在数据库主机上运行以下代码。

# mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'Ncu..2023';
grant all on zabbix.* to zabbix@localhost identified by 'Ncu..2023'; 5.7
mysql> quit;

mysql> grant all privileges on zabbix.* to zabbix@localhost; (create user zabbix@localhost identified by 'password';)8.0



导入初始架构和数据,系统将提示您输入新创建的密码。
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p'Ncu..2023' -D zabbix

f. 为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf

DBPassword=password
g. 为Zabbix前端配置PHP
编辑配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf, uncomment and set the right timezone for you.

; php_value[date.timezone] = Europe/Riga

h. 启动Zabbix server和agent进程
启动Zabbix server和agent进程,并为它们设置开机自启:

# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

i. 配置Zabbix前端
连接到新安装的Zabbix前端: http://server_ip_or_name/zabbix
【zabbix-agent 被监控端安装】
1、安装zabbix.repo  yum源
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm

 rpm -Uvh https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
  sed -i 's#http://repo.zabbix.com#https://mirrors.aliyun.com/zabbix#' /etc/yum.repos.d/zabbix.repo

2、安装被监控端软件
# yum install zabbix-agent -y

3、修改配置文件,配置被谁监控
# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1         	->   监控端的IP地址 10.3.148.200
ServerActive=127.0.0.1		-> 	  监控端的IP地址 10.3.148.200  
Hostname=zabbix server		->	 主机名,web1

4、重启zabbix-agent服务
# systemctl restart zabbix-agent

案例:监控vm2机器的web服务是否正常?

1、添加主机群组

image-20220601105513908

2、添加主机

image-20220601105841277

3、添加模板 - 监控web服务的模板

image-20220601110329086

4、验证监控

# systemctl stop httpd
//模拟vm2机器 web 页面出现问题
image-20220601111652233

案例:监控vm2、3机器的cpu占用率、硬盘总量及剩余、内存总量及剩余、交换分区总量及剩余等

1、
cat /proc/meminfo | awk -F" " '/^MemTotal/{print $2}'       查看内存总量
cat /proc/meminfo | awk -F" " '/^MemAvailable/{print $2}'   查看剩余内存
cat /proc/meminfo | awk -F" " '/^SwapTotal/{print $2}'      查看交换分区总量
cat /proc/meminfo | awk -F" " '/^SwapFree/{print $2}'       查看交换分区剩余
内存大小及剩余、交换分区大小及剩余
UserParameter=free.mem[*],cat /proc/meminfo | awk -F" " '/^$1/{print $$2}'
2、


案例:监控vm2机器 /data 目录下文件的数量?

用户自定义参数(UserParameters)
当zabbix内置的监控项(item:key)不能满足需求时, 例如对nginx连接状态进行监控, 监控MySQL连接状态, 监控tomcat状态等

用户自定义参数要在zabbix-agent上定义
语法格式:UserParameter=key,command

------------------------------------------------------------

1、配置键值
# vim /etc/zabbix/zabbix_agent.conf
UserParameter=data.number,ls -l /data/ | grep "^-" | wc -l

# systemctl restart zabbix-agent

在zabbix-sevrer监控端,进行手动触发测试
# zabbix_get -s 10.3.148.201 -k data.number
15

2、根据键值创建监控项

image-20220601145442204 image-20220601145545269 image-20220601145624293

3、创建触发器

【当满足什么条件进行触发问题】

image-20220601145717814 image-20220601145924412 image-20220601145945600

4、进行测试

vm2机器:
# touch /data/{1..30}.txt             //创建30个文件进行触发测试
image-20220601150119340

案例:邮件报警

1、创建报警媒介类型

image-20220601165146364

2、创建接受告警邮件的用户

image-20220601170004226

3、定义动作

动作
动作(action):指对于特定事件事先定义的处理方法,可以是执行脚本或发送通知
动作是在某些特定条件下触发的,比如,某个触发器被触发了,就执行我们的动作。
类似于 if 语句, 触发器为条件表达式, 动作为具体的代码块

执行脚本动作:  这类动作一般用于智能地解决问题
发送通知:  一般用于提醒用户出现了问题 或 问题已解决

【当/data目录文件数量大于20个时,发送邮件进行告警】

image-20220601170204761

【满足条件之后的操作】

image-20220601170546492

4、测试

vm2机器
# touch /data/{1..30}.txt

观察邮件,是否有告警邮件
image-20220601170734842 image-20220601170849992

案例:执行远程命令

我们希望当/data目录文件数量大于20个,zabbix能自动帮忙解决问题, 
配置过程:
1.修改 agent 配置文件
# vim /etc/zabbix/zabbix_agentd.conf
EnableRemoteCommands=1                  #允许远程命令
LogRemoteCommands=1                     #将远程命令记录到日志 [/var/log/zabbix/zabbix_agentd.log]
# systemctl restart zabbix-agent

2.给zabbix用户提权
# echo "zabbix    ALL=(ALL)   NOPASSWD: ALL" > /etc/sudoers.d/zabbix
    对于用户提权后,若该用户要使用命令,必须要加sudo,如 sudo systemctl restart httpd

image-20220601173013572

image-20220601173508227

案例:给/data目录文件数量,添加图形image-20220602092311513

image-20220602092349240

解决图形乱码问题:

在windows找到中文字体
控制面板 -> 外观和个性化 -> 字体  -> 随便上传一个中文字体

# ls -l /etc/alternatives/zabbix-web-font 
lrwxrwxrwx 1 root root 34 6月   2 09:32 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf

发现字体配置文件是一个软链接

//上传字体到simsun.ttc  /usr/share/fonts/dejavu/

# ln -sf  /usr/share/fonts/dejavu/simsun.ttc /etc/alternatives/zabbix-web-font
//修改软链接

案例:自动发现

自动发现
随着监控主机不断增多,有的时候需要添加一批机器,特别是刚用zabbix的运维人员需要将公司的所有服务器添加到zabbix,如果使用传统办法去单个添加主机组,主机,监控项,触发器...
1、编写脚本,自动化安装zabbix-agent,修改配置文件,被谁监控
# vim zabbix-agent.sh
#!/bin/bash
host=10.3.148.200
#监控端的IP地址
rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
yum install zabbix-agent -y
sed -ir "s/Server=127.0.0.1/Server=$host/" /etc/zabbix/zabbix_agentd.conf
sed -ir "s/ServerActive=127.0.0.1/ServerActive=$host/"  /etc/zabbix/zabbix_agentd.conf
hostname=$(hostname -I | sed -r "s/\./v/g")
sed -ir "s/Hostname=Zabbix server/Hostname=$hostname/"  /etc/zabbix/zabbix_agentd.conf
systemctl restart zabbix-agent

1、添加自动发现规则

image-20220602104450494

2、添加动作,满足自动发现规则,去添加主机,链接模板

image-20220602104558904 image-20220602104628433 image-20220602104643818

3、最好会发现,自动添加主机,链接模板

image-20220602104722792

案例:基于企业微信告警

1、要在手机下载企业微信 (自己注册,创建企业)
参考  --  项目3:基于微信实现自动化监控告警

案例: