【001】Zabbix学习笔记-Zabbix简介与部署

1 Zabbix简介

zabbix中文社区
Zabbix中文版(4.0版)官方文档

1.1 监控系统介绍

监控系统在运维自动化中的角色
监控系统,是运维工程师和研发工程师的眼睛。它帮助工程师在第一时间发现网站的问题。
服务器的整个生命周期,都要和监控系统打交道:
服务器上架,需要加入入基础监控,比如CPU负载、内存等;
当服务器上开始跑应用时,需要加入对应的应用监控,比如Resin、MySQL等;
当服务器维护时,又要暂停这些报警,否则你明明在维护MySQL,监控系统还给你报警说MySQL挂了。

这些操作,手动去做非常麻烦,需要跟运维的其他系统共同协作,比如CMDB中一台机器上架了,那么监控系统自动加入监控。

监控系统是运维人员的眼睛,没有它,就没法知道系统运行状况,总不见得,我打开几十几百个终端,然后while true 来显示 CPU负载。
撇开能不能看清楚的问题,得要多少显示器才能显示所有服务器的这些信息?

当发生问题时,监控系统要第一时间发出报警,报警中除了出问题的点,还可以有一些数据和简单的分析,
比如当时一段时间的CPU负载等,以帮助接到报警的人员快速定位问题。

在出现故障以后进行问题分析时,还要靠监控系统。因为监控系统真实地记录了故障发生现场这台服务器的状况。
运维工程师可以通过不同纬度的分析,找出问题的原因。

监控系统在运维自动化里的角色,可以用下面三点来概括
(1)监控数据收集及可视化。
(2)异常数据报警。
(3)和其他的系统协同工作。

监控系统的理想化模样
根据控监控系统在运维中的角色,理想的监控系统应该具有如下特点:

  1. 监控数据收集及可视化
    (1)监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据。
    (2)数据要保存在数据库中,这样以后需要的时候可以对这些数据进行分析计算。
    (3)能够方便、快速地将监控加人到服务器上,不需要烦琐的操作。
    (4)数据可视化不要很花哨,但要直观好用。
  2. 异常数据报警。
    (1)可以定义复杂的报警逻辑,可以做到 Item之间的关联报警,而不是只能针对一个。
    (2)报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了。
    (3)报警方式要能够自定义,可以发邮件和短信,如果能够在 IM上通知别人就更好了。
    (4)报警内容要可以自行设置,在报警邮件中加入一些简单的分析,而不是让运维人员上服务器敲命令来获取基本的信息。
    (5)报警后可以自动跑一些命令。这些命令可以是获取需要的信息,也可以是自动修复,比如重启服务等。
  3. 和其他系统协同工作。
    (1)有强大的API可以使用,可以让其他系统调用完成工作。
    (2)监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手。
    (3)监控可视化的图可以方便地引用,而不是要用一大串JavaScript。

1.2 Zabbix

Zabbix简介
Zabbix是一个非常强大的监控系统。其官方的说明是:Zabbix是企业级的软件,被设计用来监控IT基础设施的可用性和性能。
而我的看法是:它是一个能够快速搭建起来的、开源的监控系统
对于想快速可用的小型公司,Zabbix 自带的 Item 足够满足需求,通过简单的配置,可以在很短的时间内搭建起一套功能完善的报警系统;
而对于中大型公司,Zabbix 也能很好地支撑,可以设定自定义的 ltem,自动生成报表,有API和其他系统集成,数据库中有开放的数据可供分析。
为什么暴雪的游戏(星际争霸、暗黑破坏神、魔兽争霸等)都这么经典?因为它们“易于上手,难于精通”。
而Zabbix也一样,你可以非常容易地搭建起可用的Zabbix,但要用好它,把它的潜能挖掘出来,需要花很大的力气。

使用Zabbix时,一般需要在被监控的服务器上安装Zabbix Agent。
Zabbix Server 会和 Zabbix Agent进行通信,获取监控数据,这是Zabbix监控的一般模式。

选择Zabbix的理由
对应前文,看看Zabbix是否能满足理想中的监控系统的要求:

  • 监控系统能够自定义监控的内容,可以自己写脚本来收集需要的数据:Zabbix 支持任何自定义的监控脚本,只要输出需要的值就可以。
  • 数据要保存在数据库中,这样以后需要的时候可以对这些数据进行分析计算:Zabbix在数据库中的表结构虽然有些复杂,但逻辑很清晰。
  • 能够方便、快速地将监控加入到服务器上,不需要烦琐的操作:Zabbix有模板这一概念,可以方便地将一组 Item 进行统一操作。
  • 数据可视化不要很花哨,但要好用:Zabbix 每一个 Item 都可以看到其历史,Web 界面可拖动,界面友好。
  • 可以定义复杂的报警逻辑,做到Item之间的关联报警,而不是只能针对一个:Zabbix强大的 Trigger 定义,几乎可以满足所有规则组合。
  • 报警需要被确认,让运维人员知道多少报警已经有人认领并开始处理了:Zabbix 对于报警,有 ACK 机制。
  • 报警方式要能够自定义,可以发邮件、发短信,如果能够在IM上通知别人就更好了:Zabbix 支持邮件、Jabber。
  • 报警内容要自己可设置,在报警邮件中加入一些简单的分析:Zabbix自定义了一套宏可以在报警邮件中引用。
  • 报警后可以自动跑一些命令:在触发报警后,Zabbix可以远程执行命令。可以是获取信息,也可以是自动修复。
  • 有强大的 API 可以使用,可以让其他系统来调用完成工作:Zabbix支持RestAPI,几乎所有的操作都可以通过API实现。
  • 监控数据是开放的,数据库中的数据结构不要太复杂,让人无从下手:监控数据就在Zabbix数据库中,可以方便地进行分析
  • 监控可视化的图可以方便的引用:Zabbix 使用PHP原生的绘图模块,如果要引用Zabbix的图表,只需要引用图表的URL即可,非常方便。

1.3 Zabbix监控原理

想要用好zabbix进行监控,那么我们首要需要了解下zabbix这个软件的实现原理及它的架构。
建议多阅读官方文档。

zabbix架构图

在这里插入图片描述

zabbix组件

zabbix由以下几个组件部分构成:
1、Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行;
2、Database Storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3、Web interface:zabbix的GUI接口,通常与Server运行在同一台主机上;
4、Proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5、Agent部署在被监控主机上,负责收集本地数据并发往Server端或Proxy端;

相关术语

主机(host):要监控的网络设备,可由IP或DNS名称指定;
主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;主机组通常在给用户或用户组指派监控权限时使用;
监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由"key"标识;
触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从"OK"转变为"Problem",当数据再次恢复到合理范围,又转变为"OK";
事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
动作(action):指对于特定事件事先定义的处理方法,如发送通知,执行脚本等;
报警媒介类型(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
用户(user)
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
前端(frontend):Zabbix的web接口
应用集 (application) : 一组监控项组成的逻辑分组

监控流程

一个监控系统运行的大概的流程是这样的:
agentd需要安装到被监控的主机上,它负责定期收集各项数据,并发送到zabbix server端,zabbix server将数据存储到数据库中,zabbix web根据数据在前端进行展现和绘图。
这里agentd收集数据分为主动和被动两种模式:
主动:agent请求server获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server/proxy
被动:server向agent请求获取监控项的数据,agent返回数据。

【主动监测】通信过程

zabbix首先向ServerActive配置的IP请求获取active items,获取并提交active items数据值server或者proxy。很多人会提出疑问:zabbix多久获取一次active items?它会根据配置文件中的RefreshActiveChecks的频率进行,如果获取失败,那么将会在60秒之后重试。分两个部分:
获取ACTIVE ITEMS列表
• Agent打开TCP连接
• Agent请求items检测列表
• Server返回items列表
• Agent 处理响应
• 关闭TCP连接
• Agent开始收集数据

主动检测提交数据过程如下:
• Agent建立TCP连接
• Agent提交items列表收集的数据
• Server处理数据,并返回响应状态
• 关闭TCP连接

【被动监测】通信过程

• Server打开一个TCP连接
• Server发送请求agent.ping\n
• Agent接收到请求并且响应
• Server处理接收到的数据1
• 关闭TCP连接
从以上过程我们可以看出来,被动模式每次都需要打开一个tcp连接,这样当监控项越来越多时,就会出现server端性能问题了。
还有人会问,那实际监控中是用主动的还是被动的呢?这里主要涉及两个地方:
1、新建监控项目时,选择的是zabbix代理还是zabbix端点代理程式(主动式),前者是被动模式,后者是主动模式。
2、agentd配置文件中StartAgents参数的设置,如果为0,表示禁止被动模式,否则开启。一般建议不要设置为0,因为监控项目很多时,可以部分使用主动,部分使用被动模式。

2 Zabbix部署

这里我们布署zabbix版本为5.0

环境准备
系统版本: CentOS7.6
zabbix-server版本: 5.0
zabbix-server: 192.168.10.11
zabbix-agent: 192.168.10.12
关闭所有机器的防火墙 , selinux

2.1 zabbix-server

参考官方文档选择如下:
在这里插入图片描述

# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
# yum install zabbix-server-mysql zabbix-agent mariadb-server -y
# yum install centos-release-scl -y
# yum install zabbix-web-mysql-scl zabbix-apache-conf-scl -y

打开zabbix-frontend enabled

# vim /etc/yum.repos.d/zabbix.repo

在这里插入图片描述

启动数据库

[root@zabbix ~]# systemctl start mariadb
[root@zabbix ~]# mysql

创建数据库与用户

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
Query OK, 1 row affected (0.00 sec)

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
Query OK, 0 rows affected (0.00 sec)

zcat导入数据库

[root@zabbix ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix

此时进入zabbix库里会发现tables已经导入
在这里插入图片描述
备份然后更改配置文件

[root@zabbix ~]# cp /etc/zabbix/zabbix_server.conf{,.bak}
[root@zabbix ~]# vim /etc/zabbix/zabbix_server.conf

将密码更改
在这里插入图片描述
更改时区

[root@zabbix ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf

在这里插入图片描述
启动服务

[root@zabbix ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
[root@zabbix ~]# systemctl enable zabbix-server zabbix-agent httpd rh-php72-php-fpm

查看是否成功

[root@zabbix ~]# netstat -tlnp |grep "zabbix"
tcp        0      0 0.0.0.0:10050           0.0.0.0:*               LISTEN      2047/zabbix_agentd
tcp6       0      0 :::10050                :::*                    LISTEN      2047/zabbix_agentd

用浏览器访问的对应ip发现连接不上,同时netstat发现zabbix-server无法启动

在这里插入图片描述
通过日志分析发现是防火墙未关闭

在这里插入图片描述

关闭防火墙selinux然后重启

[root@zabbix ~]# systemctl disable firewalld.service
Removed symlink /etc/systemd/system/multi-user.target.wants/firewalld.service.
Removed symlink /etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service.
[root@zabbix ~]# systemctl stop firewalld.service

[root@zabbix ~]# vim /etc/selinux/config

在这里插入图片描述
问题解决浏览器访问成功
在这里插入图片描述

next step 发现所有都ok,很好
在这里插入图片描述
设置好密码后出现报错Cannot connect to the database. 没有找到对应文件
在这里插入图片描述
错误原因是mariadb未启动

解决方案:

[root@zabbix conf]# systemctl start mariadb

继续下一步
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
初始登陆名Admin 密码zabbix
在这里插入图片描述

草 终于成功了

在这里插入图片描述

2.2 zabbix-agent与UserParameter实现自定义监控

开一台新机器(记得关闭防火墙)取名为zabbix-agent然后安装zabbix-agent

[root@zabbix-agent ~]# yum -y install zabbix-agent

更改配置文件

vim /etc/zabbix_agentd.conf

更改server ip 和 active server ip

在这里插入图片描述
在这里插入图片描述
更改hostname(更改为主机名)此处为zabbix-agent
在这里插入图片描述
启动服务

[root@zabbix-agent ~]# systemctl enable zabbix-agent.service
[root@zabbix-agent ~]# systemctl start zabbix-agent.service

netstat查看发现启动成功

在这里插入图片描述

实现zabbix agent 与 zabbix server联通

我们做如下操作

[root@zabbix-agent ~]# mkdir /test
[root@zabbix-agent ~]# touch /test/{a..f}
[root@zabbix-agent ~]# ls /test/
a  b  c  d  e  f

更改配置文件

vim /etc/zabbix_agentd.conf

更改UserParameter

在这里插入图片描述
重启服务

[root@zabbix-agent ~]# ls /test/ |wc -l
6
[root@zabbix-agent ~]# systemctl restart zabbix-agent.service

在zabbix-server端安装zabbix-get

[root@zabbix conf]# yum -y install zabbix-get

在zabbix-server端测试zabbix_get发现成功,这表明我们zabbix server与agent连通

[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k test.file.no
6

监控agent端/boot

在这里插入图片描述

[root@zabbix-agent test]# df -h |awk '/boot/{print $5}'| tr -d '%'
14

在配置文件中添加UserParameter

[root@zabbix-agent test]# vim /etc/zabbix_agentd.conf

在这里插入图片描述
重启

[root@zabbix-agent test]# systemctl restart zabbix-agent.service

在zabbix-server端使用zabbix_get查看发现成功

[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k boot.used
14

在zabbix-agent 端创建新文件试试

[root@zabbix-agent test]# dd if=/dev/zero of=/boot/test bs=10M count=10
记录了10+0 的读入
记录了10+0 的写出
104857600字节(105 MB)已复制,0.175105 秒,599 MB/[root@zabbix-agent test]# df -h
文件系统                 容量  已用  可用 已用% 挂载点
devtmpfs                 475M     0  475M    0% /dev
tmpfs                    487M     0  487M    0% /dev/shm
tmpfs                    487M  7.7M  479M    2% /run
tmpfs                    487M     0  487M    0% /sys/fs/cgroup
/dev/mapper/centos-root   17G  1.5G   16G    9% /
/dev/sda1               1014M  237M  778M   24% /boot
tmpfs                     98M     0   98M    0% /run/user/0

在zabbix-server端使用zabbix_get查看发现变成了24,试验成功

[root@zabbix conf]# zabbix_get -s 192.168.23.211 -k boot.used
24

检测CS连通性

创建主机群组

在zabbix页面点击配置项的主机群组界面 右上角创建
在这里插入图片描述
设置组名
在这里插入图片描述

在zabbix页面点击配置项的主机界面

在这里插入图片描述
右上角创建并配置主机
在这里插入图片描述
添加成功
在这里插入图片描述
查看监控项并在右上角创建监控项
在这里插入图片描述
配置监控项
在这里插入图片描述
点击测试发现正确获得16个文件的数量
在这里插入图片描述
点击下方添加监控项
我们看到添加成功
在这里插入图片描述

创建图形

回到主机界面看看图形
在这里插入图片描述

右上角创建图形,做如下配置
在这里插入图片描述
查看图像,发现中文是乱码
在这里插入图片描述

中文乱码解决方法

在 windows上传中文字体
在这里插入图片描述
将字体传到zabbix上的相应文件夹

[root@zabbix fonts]# mv /root/simsun.ttc /usr/share/fonts/dejavu/

做个软连接

[root@zabbix fonts]# ln -sf /usr/share/fonts/dejavu/simsun.ttc /etc/alternatives/zabbix-web-font

刷新一下发现乱码消失
在这里插入图片描述

创建触发器

在这里插入图片描述
编辑触发器(触发器表达式在右边添加中设置)
在这里插入图片描述
设置成功
在这里插入图片描述
出发警告试一试

[root@zabbix-agent test]# touch {1..100}

图形界面查看发现触发警告
在这里插入图片描述

[root@zabbix-agent test]# rm -rf {1..100}

警告消失
在这里插入图片描述

收zabbix邮件

设置媒介类型
在这里插入图片描述

在接收的邮件开启IMAP/SMTP服务
(设置时注意保存弹出来的授权码)
在这里插入图片描述
在zabbix中email做如下配置
密码是之前保存的授权码
在这里插入图片描述
在这里插入图片描述
点击email在message template 编辑发布的邮件
在这里插入图片描述
更改一下
在这里插入图片描述
接下来设定用户
在这里插入图片描述
添加收件人
在这里插入图片描述
添加一个动作
在这里插入图片描述
动作里添加操作
在这里插入图片描述

测试触发器

在agent端触发

[root@zabbix-agent test]# touch {A..Z}

问题触发

在这里插入图片描述
我们去看看邮件,收到告警
在这里插入图片描述

Reference

課堂筆記

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值