对系统各种参数不间断的监视,防止系统异常。
监控是整个运维乃至整个产品生命周期中最重要的一环。
1、监控能做到事前及时预警发现故障,事后提供详实的数据用于追查定位问题。
2、以图形化方式呈现当前系统状态,便于分析或评估系统性能状态;
3、当出现某些特定故障时,可自动化完成故障处理,也叫故障自愈;
传统方式监控步骤
比如我们需要监控磁盘的使用率
1.如何查看磁盘使用率df -h
2.监控磁盘的那些指标block、inode
3.如何获取具体的数值
[root@manager roles]# num=$(df -h | awk '/\/$/{print $(NF-1)}'| grep -o [0-9]+)
4.获取的数值到达多少报警 80%
if [ $num -gt 80 ];then
echo "报警"
fi
1.cpu
CPU监控命令: w、top、htop、glances
2.内存
freem -m
3.磁盘
df、iotop、iostat
4 网络
ifconfig、route、glances、iftop、nethog
5.tcp
ss -lntp
netstat -lntp
netstat -na
监控主机登录数,超过预定数3报警
while :
do
for i in {7..9}
do
num=$(ssh 172.16.1.$i who | wc -l)
if [ $num -gt 3 ];then
echo "172.16.1.$i 主机登录用户数超过预定值"
fi
done
sleep 1
done
Zabbix 是由 Alexei Vladishev 创建,目前是由 Zabbix SIA 在持续开发和提供支持。
Zabbix 是一种企业级的分布式开源监控解决方案。
Zabbix 是一款能够监控众多网络参数和服务器的健康度和完整性的软件。Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的警报。这样可以快速响应服务器问题。Zabbix 基于存储的数据提供出色的报告和数据可视化。
Zabbix 支持轮询和被动捕获。所有的 Zabbix 报告、统计信息和配置参数都可以通过基于 Web 的前端页面进行访问。无论是对于拥有少量服务器的小型组织,还是拥有大量服务器的大型公司而言,同样适用。
Zabbix 是开源免费的。
Zabbix 由几个主要的功能组件组成,其职责如下所示。
Zabbix server 是 Zabbix agent 向其报告可用性、系统完整性信息和统计信息的核心组件。是存储所有配置信息、统计信息和操作信息的核心存储库。
所有配置信息以及 Zabbix 收集到的数据都被存储在数据库中。
为了从任何地方和任何平台轻松访问 Zabbix ,我们提供了基于 web 的界面。该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
Zabbix proxy 可以替 Zabbix server 收集性能和可用性数据。Zabbix proxy 是 Zabbix 环境部署的可选部分;然而,它对于单个 Zabbix server 负载的分担是非常有益的。
Zabbix agents 部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
此外,重要的是,需要回过头来了解下 Zabbix 内部的整体数据流。首先,为了创建一个采集数据的监控项,您就必须先创建主机。其次,必须有一个监控项来创建触发器。最后,您必须有一个触发器来创建一个动作,这几个点构成了一个完整的数据流。因此,如果您想要收到 CPU load it too high on Server X 的告警,您必须首先为 Server X 创建一个主机条目,其次创建一个用于监视其 CPU 的监控项,最后创建一个触发器,用来触发 CPU is too high 这个动作,并将其发送到您的邮箱里。虽然这些步骤看起来很繁琐,但是使用模板的话,其实并不复杂。也正是由于这种设计,使得 Zabbix 的配置变得更加灵活易用。
Zabbix server 是整个 Zabbix 软件的核心程序。
Zabbix Server 负责执行数据的主动轮询和被动获取,计算触发器条件,向用户发送通知。它是 Zabbix Agent 和 Proxy 报告系统可用性和完整性数据的核心组件。Server 自身可以通过简单服务远程检查网络服务(如Web服务器和邮件服务器)。
Zabbix Server是所有配置、统计和操作数据的中央存储中心,也是Zabbix监控系统的告警中心。在监控的系统中出现任何异常,将被发出通知给管理员。
基本的 Zabbix Server 的功能分解成为三个不同的组件。他们是:Zabbix server、Web前端和数据库。
Zabbix 的所有配置信息都存储在 Server 和Web前端进行交互的数据库中。例如,当你通过Web前端(或者API)新增一个监控项时,它会被添加到数据库的监控项表里。然后,Zabbix server 以每分钟一次的频率查询监控项表中的有效项,接着将它存储在 Zabbix server 中的缓存里。这就是为什么 Zabbix 前端所做的任何更改需要花费两分钟左右才能显示在最新的数据段的原因。
Zabbix agent 2 为新一代zabbix agent,未来可能会替代原Zabbix agent。Zabbix agent 2可以实现:
降低TCP连接数
具有更大的检查并发性
易于通过插件进行扩展. 插件可以是:
仅由几行简单代码实现的简单检查
由长时间运行的脚本及数据周期回传的独立数据采集的复杂检查
可以替代原有的Zabbix agent(可以兼容原Zabbix agent的所有功能)
Agent 2是用Go语言开发的(复用了原Zabbix Agent的部分C代码)。 Zabbix agent 2需要在1.13+版本的Go环境编译。
Agent 2不支持Linux上的守护进程; 而且从Zabbix 5.0.4开始,它可以作为Windows service服务运行。
被动检查的工作原理与Zabbix agent类似. 主动检查支持scheduled/flexible间隔和并行检查。
并行检查
不同的插件的检查可以并行执行。 每个插件的并行检查数量取决于对应插件的能力设置。每个插件可能有一个硬编码的能力设置值(缺省比如是100),该值可在 插件 配置参数.通过 Plugins..Capacity=N 的命令行进行配置。
a. Install Zabbix repository
# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
# yum clean all
b. Install Zabbix server and agent2
# yum install zabbix-server-mysql zabbix-agent2
c. Install Zabbix frontend
Enable Red Hat Software Collections
# yum-config-manager --enable rhel-server-rhscl-7-rpms
编辑配置文件 /etc/yum.repos.d/zabbix.repo and enable zabbix-frontend repository.
[zabbix-frontend]
...
enabled=1
...
Install Zabbix frontend packages.
# yum install zabbix-web-mysql-scl zabbix-nginx-conf-scl
d. 创建初始数据库
产品手册
Make sure you have database server up and running.
在数据库主机上运行以下代码。
# mysql -uroot -p
password
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'password';
mysql> grant all privileges on zabbix.* to zabbix@localhost;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
e. 为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
DBHost=数据库地址(本地直接写localhost)
DBPassword=密码
f. 为Zabbix前端配置PHP
编辑配置文件 /etc/opt/rh/rh-nginx116/nginx/conf.d/zabbix.conf, uncomment and set ‘listen’ and ‘server_name’ directives.
listen 80;
server_name example.com; # 替换为自己的域名
编辑配置文件 /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf, add nginx to listen.acl_users directive.
listen.acl_users = apache,nginx # 默认是apache
Then uncomment and set the right timezone for you.
设置本地时区
; php_value[date.timezone] = Europe/Riga
php_value[date.timezone] = Asia/Shanghai
g. 启动Zabbix server和agent进程
启动Zabbix server和agent进程,并为它们设置开机自启:
# systemctl restart zabbix-server zabbix-agent2 rh-nginx116-nginx rh-php72-php-fpm
# systemctl enable zabbix-server zabbix-agent2 rh-nginx116-nginx rh-php72-php-fpm
h. 配置Zabbix前端
连接到新安装的Zabbix前端: http://server_ip_or_name
默认登陆ZabbixWeb页面的用户名Admin,密码zabbix
i. 切换语言,你默认为英语,在usersetting中设置中文,但是对图表的支持不是很友好,还会有乱码的情况,需要手动替换中文字体包文件。
先找到存放中文字体路径。
[root@localhost yum.repos.d]# rpm -ql zabbix-web |grep fonts
/usr/share/zabbix/assets/fonts
[root@localhost yum.repos.d]# ll /usr/share/zabbix/assets/fonts
total 0
lrwxrwxrwx 1 root root 33 Oct 8 13:23 graphfont.ttf -> /etc/alternatives/zabbix-web-font
[root@localhost yum.repos.d]# ll /etc/alternatives/zabbix-web-font
lrwxrwxrwx 1 root root 38 Oct 8 13:23 /etc/alternatives/zabbix-web-font -> /usr/share/fonts/dejavu/DejaVuSans.ttf
可以看到多层软连接,我们只需要在win电脑上 C:\Windows\Fonts
目录下,拷贝一个中文字体文件,到/usr/share/fonts/dejavu/
目录下,然后重命名为DejaVuSans.ttf,替换掉原先的DejaVuSans.ttf文件即可。
角色 | 外网 | 内网 |
---|---|---|
zabbix-server | 10.0.0.71 | 172.16.1.71 |
zabbix-agent2 | 172.16.1.7 |
1.首先需要在阿里云上下载符合版本的zabbix-agent2
可以用rpm,也可以用ivh,将其安装在被监控端。
[root@web01 ~]# yum install https://mirrors.aliyun.com/zabbix/zabbix/5.0/rhel/7/x86_64/zabbix-agent2-5.0.9-1.el7.x86_64.rpm
2.配置zabbi-agent2,将其指定到server
root@web01 zabbix]# vim zabbix_agent2.conf
Server=172.16.1.71 # 指向zabbix-server端
3.启动zabbix-agent2
[root@web01 zabbix]# systemctl enable zabbix-agent2
[root@web01 zabbix]# systemctl start zabbix-agent2
[root@web01 zabbix]# netstat -lntp | grep zabbix
tcp6 0 0 :::10050 :::* LISTEN 83467/zabbix_agent2
4.点击页面
模板是为了添加监控项,暂时可以选择使用系统自带的监控项
5.去监测,最新数据中,可以看到监测的主机的具体监控项
七、zabbix-server添加windows主机监控
1.官网下载windows版的zabbix-agent2并解压
2.配置zabbix-agent2 连接到windows,注意:VMware虚拟机的windows地址为VMnet8的网卡地址
打开如下文件
修改:
Server=10.0.0.1
ServerActive=10.0.0.1
3.注册zabbix-agent2
以管理员身份运行cmd,将zabbix命令注册为服务、然后启动该服务;
D:\>zabbix_agent2-5.0.16-windows-amd64-openssl-static\bin\zabbix_agent2.exe -c zabbix_agent2-5.0.16-windows-amd64-openssl-static\conf\zabbix_agent2.conf --install
zabbix_agent2 [5424]: 'Zabbix Agent 2' installed succesfully
5.在zabbix-server上创建新主机
还可以在zabbix-server端用命令的方式测试取值
[root@localhost ~]# yum install zabbix-get #先安装工具
[root@localhost ~]# zabbix_get -s 10.0.0.1 -k system.uname
Windows LAPTOP-KPLLQOKH 10.0.19043 Microsoft Windows 10 专业版 x64
如果系统默认的监控项不满足我们的日常需求,那么我们就需要在被监控端自定义监控项。
例如我们需要监控登录web01的登录用户数
格式:
Format: UserParameter=
1.添加配置文件
[root@web01 zabbix]# cat /etc/zabbix/zabbix_agent2.d/userparameter.conf
UserParameter=login_user, who | wc -l
2.在被控制端检测是否能够解析成功
[root@web01 ~]# zabbix_agent2 -t login_user
login_user [s|2]
3.重启zabbix-agent2
[root@web01 ~]# systemctl restart zabbix-agent2.service
4.在服务端检测是否能够取到自定义的监控项值
[root@zabbix-server ~]# zabbix_get --help
General options:
-s --host host-name-or-IP Specify host name or IP address of a host
-p --port port-number Specify port number of agent running on the host
(default: 10050)
-I --source-address IP-address Specify source IP address
-k --key item-key Specify key of the item to retrieve value for
-h --help Display this help message
-V --version Display version number
[root@localhost ~]# zabbix_get -s 172.16.1.7 -k login_user
2
为主机添加自定义监控项步骤:
5.为检测项添加一个触发器,达到一定条件触动触发器
例如当登录用户超过3时,告警
创建触发器步骤:
多登录几个会话,看是否触发
zabbix-agent(数据采集)–>zabbix-server(数据分析|报警)–> 数据库(数据存储)<–zabbix web(数据展示)
zabbix如果部署到单台服务器上架构为LNMP(Linux+Nginx+Mysql+PhP)
由于数据库比较消耗系统资源,需要单独拆分开来形成如下架构:
LNP+Mysql
主要需要修改两处的配置文件
/etc/zabbix/zabbix_server.conf # zabbix_server与数据库的交互
/etc/zabbix/web/zabbix.conf.php # web与数据库的交互
角色 | 外网IP(NAT) | 内网IP(LAN) |
---|---|---|
Zabbix-Server | eth0:10.0.0.71 | eth1:172.16.1.71 |
Mysql | eth1:172.16.1.63 |
1.准备独立数据库,并创建zabbix数据库
[root@zabbix-db ~]# systemctl start mariadb
[root@zabbix-db ~]# systemctl enable mariadb
[root@zabbix-db ~]# mysql
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 2
Server version: 5.5.68-MariaDB MariaDB Servert.
MariaDB [(none)]> create database zabbix character set
-> utf8 collate utf8_bin; # 创建zabbix数据库
Query OK, 1 row affected (0.00 sec)
MariaDB [(none)]> grant all privileges on zabbix.* to
-> zabbix@'%' identified by 'zabbix'; # 创建远程连接的用户
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> exit
Bye
[root@zabbix-db ~]#
2.备份旧的数据库
[root@zabbix-server ~]# mysqldump -B zabbix > /tmp/zabbix.sql;
3.恢复数据到远程数据库
[root@zabbix-server tmp]# cat zabbix.sql | mysql -h 172.16.1.63 -uzabbix -pzabbix zabbix
4.修改/etc/zabbix/zabbix_server.conf配置文件中数据库连接信息,让它重新连接到新的数据库
[root@zabbix-server tmp]# vim /etc/zabbix/zabbix_server.conf
DBHost=172.16.1.63
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
5.重启zabbix-server
[root@zabbix-server tmp]# systemctl restart zabbix-server.service
6.修改zabbix-web端连接数据库信息
修改/etc/zabbix/web/zabbix.conf.php配置文件中数据库连接信息
<?php
// Zabbix GUI configuration file.
$DB['TYPE'] = 'MYSQL';
$DB['SERVER'] = '172.16.1.63;
$DB['PORT'] = '0';
$DB['DATABASE'] = 'zabbix';
$DB['USER'] = 'zabbix';
$DB['PASSWORD'] = 'zabbix';
7.重新启动nginx与php
[root@zabbix-server web]# systemctl restart rh-nginx116-nginx.service
[root@zabbix-server web]# systemctl restart rh-php72-php-fpm.service