
分布式监控系统--ZABBIX(一)
分布式监控系统--ZABBIX
一、监控
1.1、监控的必要性
当前我们生活的环境,监控无处不在! 无监控不运维!
1)中国最大的监控网络--天网工程
2)斯洛登事件--棱镜门(你什么错都没有,但你却可能成为被怀疑的对象,也许只是因为一次拨错了的电话。他们就可以用这个项目仔细调查你过去的所有决定,审查所有跟你交谈过的朋友。一旦你连上网络,就能验证你的机器。无论采用什么样的措施,你都不可能安全。)
3)各类APP权限
4)云计算领域
1.2、监控场景
1、网站被挂马。网站一旦有漏洞,被挂马是常有的事。
2、网站代码出错、数据库出错、网站占CPU太高、空间占满、空间过期。
3、域名解析出错、域名过期。
4、网站或者服务器由于有害信息、备案等原因被关或封IP。
5、网站或者服务器被攻击。同台服务器网站或者网段被攻击也殃及池鱼。
6、服务器出现故障或者需要维护。
7、网络运营商线路出现故障,特别是南北互通。
以上这些故障都是有可能随时出现的,我们不能也不会时刻盯着故障的出现而去解决问题,应该是对故障进行提前的预警,一旦故障出现了,我们能在第一时间将故障引发而导致的损失将到最低,这才是合格运维人员的价值所在。
1.3、监控的方式
1、通过系统命令:top,uptime,vmstat iostat,free df -h
2、通过系统脚本:监控CPU,内存,触发阈值,发送告警
3、通过软件来帮助我们进行监控:zabbix,nagios,cacti,Prometheus等
1.4、监控的目的
我们监控的初衷就是当某些指标不符合我们的需求时,我们能够在第一时间发现异常,所以,监控工具需要定期的对被监控主机进行检查、信息收集等操作,当被监控主机出现异常时,能够及时报警、通知管理员,并且需要记录这些异常,以便我们分析这些数据,查漏补缺,那么,一个监控工具就应该具备采集信息、存储信息、展示信息、报警通知等功能,而zabbix就可以做到这些,除了zabbix,你可能还听说过cacti、nagios、ganglia等类似的监控系统等
对于运维人员来说,监控是非常重要的,因为如果想要保证线上业务整体能够稳定运行,那么我们则需要实时关注与其相关的各项指标是否正常,而一个业务系统的背后,往往存在着很多的服务器、网络设备等硬件资源,如果我们想要能够更加方便的、集中的监控他们,我们则需要依靠一些外部的工具,而zabbix就是一个被广泛使用的,可以实现集中监控管理的应用程序。
1.5、常见监控平台
1.5.1 Nagios
http://www.nagioschina.com/Nagios
是一个用来监视系统和网络的开源应用软件,它通常运行于一个主服务器上,这个服务器运行Liunx或 Unix 操作系统。Nagios利用其众多的插件实现对本机和远端服务的监控,当被监控对象出现异常,Nagios就会及时给管理人员告警。它是一个基于TCP/IP协议的软件包,包含有nagios主程序和它的各个插件,配置非常灵活,可以监视的项目很多,也可以通过自定义 shell 脚本进行监控服务,非常适合各类企业的网络应用。 Nagios功能非常强大,它可以监控服务和主机,但是他自身并不包括这部分功能的代码,所有的监控、检测功能都是有插件来完成的。再说报警功能,如果监控系统发现问题不能报警那就没有意义了,所以报警也是nagios很重要的功能之一。但是,同样的,nagios自身也没有报警部分的代码,甚至没有插件,而是交给用户或者其他相关开源项目组去完成。nagios安装,是指基本平台,也就是nagios软件包的安装。它是监控体系的框架,也是所有监控的基础。 打开nagios官方的文档,会发现nagios基本上没有什么依赖包,只要求系统是linux或者其他nagios支持的系统。不过如果你没有安装 apache(http服务),那么你就没有那么直观的界面来查看监控信息了,所以apache姑且算是一个前提条件。
1.5.2 CACTI
Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。它通过主服务器轮训的方式发送数据请求来获取数据,缺点是一旦被监控端过多,导致数据不能及时发送的问题,它使用RRDtool绘画图形,而且你完全可以不需要了解RRDtool复杂的参数。它提供了非常强大的数据和用户管理功能,可以指定每一个用户能查看树状结构、host以及任何一张图,还可以与LDAP结合进行用户验证,同时也能自己增加模板,功能非常强大完善,界面友好。
1.5.3 zabbix
Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
Zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix由2部分构成,Zabbix server与可选组件Zabbix agent。
Zabbix server可以通过SNMP,Zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。
Zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。Zabbix agent可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,Open BSD, OS X, Tru64/OSF1, Windows NT4.0, Windows (2000/2003/XP/Vista)等系统之上。
Zabbix server可以单独监视远程服务器的服务状态;同时也可以与Zabbix agent配合,可以轮询Zabbix agent主动接收监视数据(agent方式),同时还可被动接收Zabbix agent发送的数据(trapping方式)。
另外Zabbix server还支持SNMP (v1,v2,v3),可以与SNMP软件(例如:net-snmp)等配合使用。
1.5.4 Prometheus
一个基于时间序列的数据库的监控告警为一体的监控工具
1.5.5 open-falcon
http://open-falcon.org/
小米的监控系统:OpenFalcon是一款企业级、高可用、可扩展的开源监控解决方案
二、zabbix概念
2.1、什么是 zabbix?
Zabbix 能监控各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位、解决存在的各种问题。是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。
主要有以下几个功能组件组成:
参考官档:https://www.zabbix.com/documentation/4.0/zh/manual/introduction/overview
1)server
Zabbix server是 Zabbix软件的核心组件,agent 向其报告可用性、系统完整性信息和统计信息。server也是存储所有配置信息、统计信息和操作信息的核心存储库。
2)数据库
所有配置信息以及 Zabbix 采集到的数据都被存储在数据库中。
3)Web 界面
该界面是 Zabbix server 的一部分,通常(但不一定)和 Zabbix server 运行在同一台物理机器上。
4)Proxy
Zabbix proxy可以代替 Zabbix server采集性能和可用性数据。Zabbix proxy在Zabbix的部署是可选部分;但是proxy的部署可以很好的分担单个Zabbix server的负载。
5)Agent
Zabbix agents部署在被监控目标上,用于主动监控本地资源和应用程序,并将收集的数据发送给 Zabbix server。
2.2、监控功能
主机的性能监控、网络设备性能监控、数据库性能监控、多种告警方式、详细的报表图表绘制;
监控主机 zabbix 有专用的 agent,可以监控Linux、Windows、FreeBSD等。
监控网络设备 zabbix 通过SNMP,IPMI等
2.3、Zabbix 监控系统监控对象
- 数据库: MySQL,MariaDB,Oracle,SQL Server agent
- 应用软件:Nginx,Apache,PHP,Tomcat agent -------------------------------------------------------------------------------------------------------------------------------
- 集群: LVS,Keepalived,HAproxy,RHCS,F5 agent
- 虚拟化: VMware,KVM,XEN ,docker,k8s agent
- 操作系统:Linux,Unix,Windows性能参数 agent -------------------------------------------------------------------------------------------------------------------------------
- 硬件: 服务器,存储,网络设备 IPMI
- 网络: 网络环境(内网环境,外网环境) SNMP
2.4、zabbix 工作原理
zabbix agent 需要安装到被监控的主机上,它负责定期收集各项数据,并发送到 zabbix server 端,zabbix server 将数据存储到数据库中,zabbix web 根据数据在前端进行展示和绘图。这里 agent 收集数据分为主动和被动两种模式:
主动:agent 请求server 获取主动的监控项列表,并主动将监控项内需要检测的数据提交给server / proxy
被动:server 向 agent 请求获取监控项的数据,agent 返回数据。
2.5、zabbix 工作进程
参考官档:https://www.zabbix.com/documentation/4.0/zh/manual/concepts
默认情况下 zabbix 包含6个进程:zabbix_agentd、zabbix_get、zabbix_proxy、zabbix_sender、zabbix_server,另外一个zabbix_java_gateway是可选的,这个需要单独安装。
zabbix_agentd
客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
zabbix_get
zabbix 工具,单独使用的命令,通常在 server 或者 proxy 端执行获取远程客户端信息的命令。通常用于排错。例如在 server 端获取不到客户端的内存数据,可以使用 zabbix_get 获取客户端的内容的方式来做故障排查。
zabbix_sender
zabbix 工具,用于发送数据给 server 或者 proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致 zabbix 超时。于是在脚本执行完毕之后,使用 sender 主动提价数据。
zabbix_server
zabbix 服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server(说明:当然不是数据都是主动提交给zabbix_server,也有的是 server 主动去取数据)
zabbix_proxy
zabbix 代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交/被提交到 server 里。
zabbix_java_gateway
zabbix2.0之后引入的一个功能。顾名思义:Java网络,类似agentd,但是只用于 Java 方面。需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到 server 或者proxy。
2.6、zabbix的架构
在实际监控架构中,zabbix根据网络环境、监控规模等 分了三种架构:server-client、master-node-client、server-proxy-client 三种。
1)、server-client 架构
zabbix的最简单的架构,监控服务器和被监控机之间不经过任何代理,直接由 zabbix server 和 zabbix agentd之间进行数据交互。适用于网络比较简单,设备比较少的监控环境。
2)、server-proxy-client 架构
其中 proxy 是server、client 之间沟通的一个桥梁,proxy 本身没有前端,而且其本身并不存放数据,只是将 agentd 发来的数据暂时存放,而后再提交给server,该架构经常是和 master-node-client 架构做比较的架构,一般适用于跨机房、跨网络的中型网络架构的监控。
3)、master-node-client 架构
该架构是 zabbix 最复杂的监控架构,适用于跨网络、跨机房、设备较多的大环境。每个node 同时也是一个 server 端,node下面可以接 proxy,也可以直接接client。node有自己的配置文件和数据库,其要做的是将配置信息和监控数据向 master 同步,master 的故障或损坏不影响 node 其下的架构的完整性。
2.7、 zabbix的优缺点
2.7.1 Zabbix 优点
• 开源,无软件成本投入
• Server 对设备性能要求低
• 支持设备多,自带多种监控模板
• 支持分布式集中管理有自动发现功能可以实现自石控
• 开放式接口,扩展性强插件编写容易
• 当监控的item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动 从server端去下载需要监控的item 然后取数据上传到 server端。这种方式对服务器的负我比较小。
• Api的支持,方便与其他系统结合
2.7.2 Zabbix 缺点
•需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。
•项目批量修改不方便
•社区虽然成熟,但是中文资料相对较少,服务支持有限
•入门容易,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发难度较大
•系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐
•缺少数据汇总功能,如无法查看某一组服务器的性能平均值,需要二次开发
2.8、zabbix中的常见的术语
1、主机 (host)
- 一台你想监控的网络设备,用IP或域名表示
2、主机组 (host group)
- 主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
3、监控项 (item)
- 你想要接收的主机的特定数据,一个度量数据。
4、触发器 (trigger)
- 一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式
当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
5、事件 (event)
- 单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册
6、异常 (problem)
- 一个处在“异常”状态的触发器
7、动作 (action)
- 一个对事件做出反应的预定义的操作。
- 一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成
8、升级 (escalation)
- 一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列
9、媒介 (media)
- 发送告警通知的手段;告警通知的途径
10、通知 (notification)
- 利用已选择的媒体途径把跟事件相关的信息发送给用户
11、远程命令 (remote command)
- 一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令
12、模版 (template)
- 一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合
- 模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
13、应用 (application)
- 一组监控项组成的逻辑分组
14、web 场景 (web scenario)
- 利用一个或多个HTTP请求来检查网站的可用性
15、前端 (frontend)
- Zabbix提供的web界面
16、Zabbix API
- Zabbix API允许你使用JSON RPC协议 (是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过 JSON 为主) 来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
17、Zabbix server
- Zabbix软件实现监控的核心程序,主要功能是与Zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
18、Zabbix agent
- 一个部署在监控对象上的,能够主动监控本地资源和应用的程序
- Zabbix agent 部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)。
- Zabbix agent收集本地的操作信息并将数据报告给Zabbix server用于进一步处理。一旦出现异常 (比如硬盘空间已满或者有崩溃的服务进程), Zabbix server会主动警告管理员指定机器上的异常。. Zabbix agents 的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。
19、被动(passive)和主动(active)检查
Zabbix agents 可以执行被动和主动两种检查方式
1、被动检查(passive check) 模式中 agent 应答数据请求,Zabbix server(或者proxy)询问agent数据,如CPU 的负载情况,然后 Zabbix agent 回送结果。
2、主动检查(Active checks) 处理过程将相对复杂。 Agent 必须首先从 Zabbix sever 索取监控项列表以进行独立处理,然后周期性地发送新的值给server。
执行被动或主动检查是通过选择相应的监测项目类型来配置的。item type. Zabbix agent 处理监控项类型有 Zabbix agent 和 Zabbix agent (active)。
20、Zabbix proxy
- 一个帮助 Zabbix Server 收集数据,分担Zabbix Server的负载的程序
- Zabbix Proxy 是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表 sever工作的。 所有收集的数据都在本地进行缓存,然后传送到 proxy 所属的 Zabbix sever。
- 部署 Proxy 是可选的,但是可能非常有益于分散单个 Zabbix sever 的负载。 如果只有 proxy 收集数据,sever上的进程就会减少 CPU 消耗和磁盘 I / O 负载。
- Zabbix proxy 是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。
- Zabbix proxy需要使用独立的数据库。
三、zabbix的部署
注意:安装之前先关闭selinux和防火墙
Zabbix-5.0
官方安装手册:
https://www.zabbix.com/cn/download?zabbix=5.0&os_distribution=centos&os_version=7&components=server_frontend_agent&db=mysql&ws=apache
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. 安装Zabbix server,Web前端,agent
# yum install zabbix-server-mysql zabbix-agent
c. Install Zabbix frontend
Enable Red Hat Software Collections
# yum install centos-release-scl
编辑配置文件 /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-apache-conf-scl
d. 创建初始数据库
在数据库主机上运行以下代码。
# mysql -uroot -ppassword
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> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Disable log_bin_trust_function_creators option after importing database schema.
# mysql -uroot -ppasswordmysql> set global log_bin_trust_function_creators = 0;mysql> quit;
e. 为Zabbix server配置数据库
编辑配置文件 /etc/zabbix/zabbix_server.conf
DBPassword=password
f. 为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
g. 启动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
Zabbix-4.0
官方安装手册:https://www.zabbix.com/documentation/4.0/zh/manual/installation/install_from_packages/rhel_centos
3.1、添加 Zabbix 软件仓库
[root@zabbix-server ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
修改为清华大学镜像源
[root@zabbix-server ~]# sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
3.2、安装mysql版本的zabbix
[root@zabbix-server ~]# yum install -y zabbix-server-mysql zabbix-web-mysql
3.3、安装数据库
[root@zabbix-server ~]# yum install -y mariadb-server
3.4、设置开机自启和启动数据库
[root@zabbix-server ~]# systemctl enable --now mariadb
3.5、配置安全初始化(可选)
[root@zabbix-server ~]# mysql_secure_installation
NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
SERVERS IN PRODUCTION USE! PLEASE READ EACH STEP CAREFULLY!
In order to log into MariaDB to secure it, we'll need the current
password for the root user. If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.
Enter current password for root (enter for none):
OK, successfully used password, moving on...
Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.
Set root password? [Y/n] y
New password:
Re-enter new password:
Password updated successfully!
Reloading privilege tables..
... Success!
By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them. This is intended only for testing, and to make the installation
go a bit smoother. You should remove them before moving into a
production environment.
Remove anonymous users? [Y/n] y
... Success!
Normally, root should only be allowed to connect from 'localhost'. This
ensures that someone cannot guess at the root password from the network.
Disallow root login remotely? [Y/n] y
... Success!
By default, MariaDB comes with a database named 'test' that anyone can
access. This is also intended only for testing, and should be removed
before moving into a production environment.
Remove test database and access to it? [Y/n] y
- Dropping test database...
... Success!
- Removing privileges on test database...
... Success!
Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.
Reload privilege tables now? [Y/n] y
... Success!
Cleaning up...
All done! If you've completed all of the above steps, your MariaDB
installation should now be secure.
Thanks for using MariaDB!
3.6、创建zabbix库
3.6.1 登录数据库
[root@zabbix-server ~]# mysql -uroot -p123456
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 25
Server version: 5.5.68-MariaDB MariaDB Server
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]>
3.6.2 创建zabbix数据库
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;
3.6.3 授权远程连接
MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';
Query OK, 0 rows affected (0.00 sec)
3.7、导入数据
使用 MySQL 来导入 Zabbix server 的初始数据库 schema 和数据
[root@zabbix-server ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: ##输入数据库密码
3.8、为 Zabbix server/proxy 配置数据库
# vim /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=<password> ##这里配置数据库的zabbix用户的密码
3.9、启动 Zabbix server 进程
[root@zabbix-server ~]# systemctl enable --now zabbix-server
3.10、Zabbix 前端配置
对于 RHEL 7 和更高版本,Zabbix 前端的 Apache 配置文件位于 /etc/httpd/conf.d/zabbix.conf
# vim /etc/httpd/conf.d/zabbix.conf
php_value max_execution_time 300
php_value memory_limit 128M
php_value post_max_size 16M
php_value upload_max_filesize 2M
php_value max_input_time 300
php_value max_input_vars 10000
php_value always_populate_raw_post_data -1
php_value date.timezone Asia/Shanghai ##配置好时区
3.11、启动http
[root@zabbix-server ~]# systemctl enable --now httpd
3.12、浏览器访问zabbix
http://192.168.1.100/zabbix/setup.php
默认登录账号和密码:Admin/zabbix
3.13 设置中文显示
四、添加监控(agent)
4.1 、添加第一台监控主机(zabbix-server)
4.1.1 我们发现有一台主机存在异常,点击“配置”---》“主机”
发现可用性是红色,这个代表是不可用的,这个是zabbix-server自己本身的告警,它只是安装了zabbix-server,并未安装zabbix-agent监控它自己,我们可以尝试来安装一个agent
4.1.2 安装zabbix-agent
[root@zabbix-server ~]# yum -y install zabbix-agent
[root@zabbix-server ~]#systemctl enable --now zabbix-agent
4.1.3 查看机器状态
4.2 、监控其他的机器(非zabbix-server)
[root@cilent ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
##切换成清华源
[root@cilent ~]# sed -i 's#repo.zabbix.com#mirrors.tuna.tsinghua.edu.cn/zabbix#g' /etc/yum.repos.d/zabbix.repo
4.2.1 安装agent
[root@cilent ~]# yum -y install zabbix-agent
4.2.2 修改配置
[root@cilent ~]# vim /etc/zabbix/zabbix_agentd.conf
将Server修改成zabbix-server的地址
4.2.3 保存退出,启动zabbix-agent服务
[root@cilent ~]# systemctl start zabbix-agent
[root@cilent ~]# systemctl enable zabbix-agent
4.2.4 回到zabbix-web上进行配置,在“配置----->主机---->创建主机”
4.2.5 选择LINUX系统的模板
4.2.6 配置完成后,如下图所示
4.2.7 重启一下zabbix-server
目前还没有数据,是因为默认是60s同步一次数据,所以这里可以重启一下zabbix-server
4.2.8 点击“图形”查看监控的指标图形
4.2.9 查看内存使用率
其他的监控指标也可以自行添加。
扩展:监控windows主机
第一步:安装windows主机监控的agent
www.zabbix.com/download ##插件下载地址
第二步:添加主机
第三步:添加模板
第四步:查看状态
第五步:创建图形
第六步:查看图形
第七步:创建聚合图形
聚合图形是指将多个重要的图形放在一个平面上进行展示,方便观察
4.3 、修改当前服务器的字符集
当前我们的服务器上的中文是乱码,我们先解决乱码的问题,在你的本地的windows电脑的C:\Windows\Fonts下找一款字体复制出来,然后上传到zabbix-server的【/usr/share/fonts/dejavu/】这个目录下,如下图
4.3.1 、将STSONG.TTF的后缀修改成小写
[root@zabbix-server dejavu]# mv STSONG.TTF STSONG.ttf
把上传到系统的字体复制到/usr/share/fonts/dejavu/目录下。然后重新链接到/etc/alternatives/zabbix-web-font中即可。
删除原先字体的软连接,并把下载好的字体链接到/etc/alternatives/zabbix-web-font
[root@zabbix-server dejavu]# rm /etc/alternatives/zabbix-web-font
rm: remove symbolic link ‘/etc/alternatives/zabbix-web-font’? y
[root@zabbix-server dejavu]# ln -sv /usr/share/fonts/dejavu/STSONG.ttf /etc/alternatives/zabbix-web-font
‘/etc/alternatives/zabbix-web-font’ -> ‘/usr/share/fonts/dejavu/STSONG.ttf’
4.3.2 、刷新页面即可
4.4 、定义不带参数监控项
【配置--主机--监控项】
4.4.1 新建CPU中断监控
获取数据【监测--最新数据】
[root@localhost dejavu]# zabbix_get -s 192.168.1.12 -p 10050 -k "system.cpu.intr"
860472
[root@localhost dejavu]#
4.4.2 新建端口的状态
最新数据是1代表是在线,0代表不在线
4.5、 定义带参数的监控项
4.5.1 新建网卡流量监控
net.if.in[if,<mode>]
net代表网络类型
if代表的是接口
in代表是进站流量
[if,<mode>]表示是具体的接口,模式【packets(包),bytes(字节),errors(错误),dropped(丢包),可以通过ifconfig查看】
通过命令查看数据:
[root@localhost dejavu]# zabbix_get -s 192.168.1.12 -p 10050 -k "net.if.in[ens33,packets]"
4.5.2 通过克隆来新建出网网卡的流量
4.5.3 查看自带图形
4.5.4 通过grafana来进行数据展示
Grafana 是一个监控仪表系统,它是由 Grafana Labs 公司开源的的一个系统监测工具,它可以大大帮助我们简化监控的复杂度,我们只需要提供需要监控的数据,它就可以帮助生成各种可视化仪表,同时它还有报警功能,可以在系统出现问题时发出通知。
Grafana 支持许多不同的数据源,每个数据源都有一个特定的查询编辑器,每个数据源的查询语言和能力都是不同的,我们可以把来自多个数据源的数据组合到一个仪表板,但每一个面板被绑定到一个特定的数据源。目前官方支持以下数据源:
- Alertmanager
- AWS CloudWatch
- Azure Monitor
- Elasticsearch
- Google Cloud Monitoring
- Graphite
- InfluxDB
- Loki
- Microsoft SQL Server (MSSQL)
- MySQL
- OpenTSDB
- PostgreSQL
- Prometheus
- Jaeger
- Zipkin
- Tempo
我们这里当然重点需要介绍的就是 Prometheus 这个数据源了。
接下来我们就来安装 Grafana,Grafana 本身是非常轻量级的,不会占用大量资源,此外 Grafana 需要一个数据库来存储其配置数据,比如用户、数据源和仪表盘等,目前 Grafana 支持 SQLite、MySQL、PostgreSQL 3 种数据库,默认使用的是 SQLite,该数据库文件会存储在 Grafana 的安装位置,所以需要对 Grafana 的安装目录进行持久化。
要安装 Grafana 的方式有很多,我们这里使用的是 CentOS 系统,可以在 Grafana 官方下载页面筛选合适的版本 https://grafana.com/grafana/download?edition=oss&platform=linux 根据自己的需求来进行安装,比如我们这里直接使用 rpm 包进行安装:
☸ ➜ wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
☸ ➜ sudo yum install grafana-7.1.5-1.x86_64.rpm
安装完成后我们就可以使用 systemd 来管理 Grafana:
☸ ➜ sudo systemctl daemon-reload
☸ ➜ sudo systemctl enable grafana-server
☸ ➜ sudo systemctl start grafana-server
☸ ➜ sudo systemctl status grafana-server
默认的启动配置环境变量位于 /etc/sysconfig/grafana-server
文件中:
☸ ➜ cat /etc/sysconfig/grafana-server
GRAFANA_USER=grafana
GRAFANA_GROUP=grafana
GRAFANA_HOME=/usr/share/grafana
LOG_DIR=/var/log/grafana
DATA_DIR=/var/lib/grafana
MAX_OPEN_FILES=10000
CONF_DIR=/etc/grafana
CONF_FILE=/etc/grafana/grafana.ini
RESTART_ON_UPGRADE=true
PLUGINS_DIR=/var/lib/grafana/plugins
PROVISIONING_CFG_DIR=/etc/grafana/provisioning
# Only used on systemd systems
PID_FILE_DIR=/var/run/grafana
从上面文件中可以找到 Grafana 的各种数据配置路径,比如数据目录、日志目录、插件目录等等,正常启动完成后 Grafana 会监听在 3000 端口上,所以我们可以在浏览器中打开 Grafana 的 WebUI
默认的用户名和密码为 admin
,也可以在配置文件 /etc/grafana/grafana.ini
中配置 admin_user
和 admin_password
两个参数来进行覆盖。
当然如果我们想要部署一个高可用版本的 Grafana 的话,那么使用 SQLite 数据库就不行了,需要切换到 MySQL 或者 PostgreSQL,我们可以在 Grafana 配置的 [database]
部分找到数据库的相关配置,Grafana 会将所有长期数据保存在数据库中,然后部署多个 Grafana 实例使用同一个数据库即可实现高可用。
4.5.4.1 安装grafana
[root@localhost ~]# wget https://dl.grafana.com/oss/release/grafana-7.1.5-1.x86_64.rpm
[root@localhost ~]# rpm -ivh grafana-7.1.5-1.x86_64.rpm
##如果安装报错,请先安装依赖包。
4.5.4.2 启动服务
[root@grafana ~]# systemctl enable --now grafana-server
4.5.4.3 登录grafana
http://ip:3000
##首次登录的账号和密码都是:admin,需要修改密码
4.5.4.4 修改显示背景(可选项)
4.5.4.5 添加zabbix的插件
默认在“添加数据源”中没有支持zabbix,因此需要我们手动添加zabbix的插件来支持
进入查看,发现是没有zabbix的相关的插件,安装插件需要使用如下命令完成
[root@grafana~]# grafana-cli plugins list-remote |grep zabbix ##查看可用插件
id: alexanderzobnin-zabbix-app version: 4.0.2
[root@grafana~]# grafana-cli plugins install alexanderzobnin-zabbix-app ##安装
[root@zabbix plugins]# ls ##进入下载目录下查看
alexanderzobnin-zabbix-app
4.5.4.6 重启grafana
[root@zabbix plugins]# systemctl restart grafana-server
4.5.4.7 刷新grafana的页面
进入插件界面:
4.5.4.8 添加数据源
如果在此处找不到数据源,则按照如下方法处理
[root@grafana~]#vim /etc/grafana/grafana.ini
添加一个新的模块,内容如下:
[plugins]
allow_loading_unsigned_plugins = alexanderzobnin-zabbix-datasource
重启zabbix
[root@localhost plugins]# systemctl restart grafana-server.service
4.5.4.9 导入模板
4.5.4.10 添加大盘
面板(Panel)是 Grafana 中基本可视化构建块,每个面板都有一个特定于面板中选择数据源的查询编辑器,每个面板都有各种各样的样式和格式选项,面板可以在仪表板上拖放和重新排列,它们也可以调整大小,所以要在 Grafana 上创建可视化的图表,面板是我们必须要掌握的知识点。
Panel 是 Grafana 中最基本的可视化单元,每一种类型的面板都提供了相应的查询编辑器(Query Editor),让用户可以从不同的数据源(如 Prometheus)中查询出相应的监控数据,并且以可视化的方式展现,Grafana 中所有的面板均以插件的形式进行使用。Grafana 提供了各种可视化来支持不同的用例,目前内置支持的面板包括:Time series(时间序列)是默认的也是主要的图形可视化面板、State timeline(状态时间表)状态随时间变化 、Status history(状态历史记录)、Bar chart(条形图)、Histogram(直方图)、Heatmap(热力图)、Pie chart(饼状图)、Stat(统计数据)、Gauge、Bar gauge、Table(表格)、Logs(日志)、Node Graph(节点图)、Dashboard list(仪表板列表)、Alert list(报警列表)、Text panel(文本面板,支持 markdown 和 html)、News Panel(新闻面板,可以显示 RSS 摘要)等,除此之外,我们还可以通过官网的面板插件页面 https://grafana.com/grafana/plugins/?type=panel 获取安装其他面板进行使用。
4.5.5 添加告警
4.5.5.1 注册睿象云账号
集成睿象云之前须在其官网进行注册并登录,注册时需填入个人手机号和电子邮箱,以下是其官方网站 https://www.aiops.com。登录之后会看到如下界面。
点击智能告警平台
4.5.5.2 点击集成,添加grafana
点击Grafana
得到 AppKey 之后,配置 Grafana
http://api.aiops.com/alert/api/event/grafana/v1/181c6263d78a427ea4ba6644157fe7dc/
4.5.5.3 配置告警通知策略
4.5.5.4 在 Grafana 中创建 Notification channel
一、在Grafana中配置Webhook URL
1、在Grafana中创建Notification channel,选择类型为Webhook;
2、推荐选中Send on all alerts和Include image,Cloud Alert体验更佳;
3、将第一步中生成的Webhook URL填入Webhook settings Url;
URL格式:
http://api.aiops.com/alert/api/event/grafana/v1/181c6263d78a427ea4ba6644157fe7dc/ (保存当前应用,即可获取完整webhook地址信息)
4、Http Method选择POST;
5、Send Test&Save;
4.5.5.5 设置大盘告警规则
4.5.5.6 查看告警
可以看到,现在已经有数据发送,说明已经触发了告警的阈值。
4.6、自动发现
在主机较多的时候,配置主机自动发现并加入监控可以代替手动的添加主机,减轻工作量,自动发现由服务端主动发起,Zabbix Server开启发现进程,定时扫描局域网中IP服务器、设备,并将加入定义好的模板中,进行监控。
4.6.1、客户端安装agent
如果你的客户端有100甚至更多,那一台台安装太麻烦了,就可以使用自动化运维管理工具来进行批量安装。
##导入yum仓库
[root@web02 ~]# rpm -ivh http://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm
##安装zabbix-agent
[root@web02 ~]# yum -y install zabbix-agent
4.6.2、修改agent的服务器的地址
[root@web02 ~]# vim /etc/zabbix/zabbix_agentd.conf
4.6.3、重启agent
[root@web02 ~]# systemctl restart zabbix-agent
[root@web02 ~]# systemctl enable zabbix-agent
4.6.4、zabbix配置自动发现
4.6.5、添加规则
4.6.6、查看配置规则
4.6.7、添加动作
4.6.8、添加操作【配置--动作-操作】
4.6.9、查看配置【配置---动作】
4.6.10、查看自动发现主机【监测--自动发现】
4.6.11、查看主机状态【配置--主机】
4.7、 自动注册
自动注册和自动发现的功能一样,不同点在于自动发现是由zabbix_server自动去查找发现新的被监控端,并将其添加进监控列表中,而自动注册是由被监控端主动去找zabbix server自动注册,从而实现被监控。
自动发现由于需要自动去查找被控端,所以资源消耗更高一些。自动注册由于是相对于zabbix server被动的注册,所以资源消耗更少一些。
4.7.1 修改zabbix-agent的配置
[root@zabbix_agent ~]# grep -Ev '^#|^$' /etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
Server=192.168.1.100 ##zabbix server 的ip
ServerActive=192.168.1.100 ##zabbix server 的ip
Hostname=zabbix_agent ##主机名
HostnameItem=system.hostname ##打开这个开关,可以通过主机名进行主动注册
HostMetadata=web ##主机元数据(自定义,自动注册可用)
Include=/etc/zabbix/zabbix_agentd.d/*.conf
4.7.2 重启zabbix agent
[root@zabbix_agent ~]# systemctl restart zabbix-agent
4.7.3 添加自动注册的动作
4.7.4 查看结果
4.8、触发器
触发器的目的是用于对触发已定义好的阈值后,会执行什么动作,比如CPU使用率的阈值是75%,超过这个阈值就会触发告警,我们可以简单的使用一个用户登录数来测试一下触发器的具体的配置
1、定义方式:
•最近N分钟所得结果的平均值
•最近N次所得结果的平均值
2、触发器存在可调用的函数:
• nodata() #是否采集到数据,采集不到则为异常
• last() #最近几次
• date() #时间,返回当前的时间,格式YYYYMMDD
• time() #返回当前的时间,HHMMSS格式的当前时间。
• now() #返回距离Epoch(1970年1月1日00:00:00UTC时间的秒数)
• dayofmonth() #返回当前是本月的第几天
注:能用数值保存的就不要使用字符串
3、触发器表达式
基本的触发器表达式格式如下所示
{server>: key>.<function>(<parameter>)}<operator><constant>
•server:主机名称;
•key:主机上关系的相应监控项的key;
•<function>:评估采集到的数据是否在合理范围内时所使用的西数,其评估过程可以根据采取的数据、当前时间
及其它因索进行;
•目前触发器所支持的函数有avg、 count. change, date、nodate、dayofweek、delta、diff. iregexp last、 max,min,sum,now等
•parameter:函数参数:大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用”#'做为前级,则表示为最近几次的取值,如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和;
• 此外,avg、count、 last、min和max还支持使用第二个参数,用于完 成时间限定;例如,max(1h,7d)将返回一周之前的最大值;
4.8.1、 添加监控项【配置---主机---监控项】
4.8.2、 创建监控项
完成后点击添加。
4.8.3 、添加触发器【配置--主机---触发器】
点击插入---添加即可。
4.9 、动作
- 需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报。
- 有一个告警升级的机制,所以,当发现问题的时候,一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的警报接收人是当前系统中有的 zabbix 用户,所以当有人需要收到警报操作的话,我们则需要把它加入我们的定义之中。
- 每一个用户也应该有一个接收告警信息的方式,即媒介,就像我们接收短信是需要有手机号的一样。
- 每一个监控主机,能够传播告警信息的媒介有很多种,就算我们的每一种大的媒介,能够定义出来的实施媒介也有很多种。而对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,我们称之为目标地或者目的地。
综上为了能够发告警信息,
- 第一,我们要事先定义一个媒介,
- 第二,还要定义这个媒介上用户接收消息的端点(当然,在用户上,我们也称之为用户的媒介)。
4.9.1 、添加动作【配置---动作】
这个代表的是触发了这个阈值后,做什么具体的动作,可以是发邮件或者是钉钉等
4.9.2、配置告警声
4.9.3 测试触发器
在xshell中开启大于3个终端测试
控制台马上就有响应的告警信息和告警声提醒
4.9.4 、恢复告警,将终端都关闭掉
4.10、配置邮件告警
4.10.1 配置发件人
4.10.2 配置收件人
4.10.3 启用动作
4.10.4 测试触发
4.10.5 登录163邮箱查看
4.11、zabbix接入睿象云实现告警
4.11.1 登录睿象云网站
https://newuser.aiops.com/#/login
4.11.2 选择zabbix
4.11.3 配置告警,配置步骤 如下
4.11.4 新建告警策略
如果需要微信通知消息,需要和微信进行绑定
4.11.5 查看告警
4.12、 模板
官方模板网站:https://www.zabbix.com/cn/integrations
模板是zabbix中快速添加配置监控的一种机制;它省去了我们大量重复的配置item,触发器,graph等等操作;它是一个逻辑的概念,只有当模板链接到某个主机才会生效;在zabbix也内建了很多模板,我们添加主机时,直接连接某个模板,对应主机就会继承连接的模板上定义的所有监控配置;模板可以导出和导入,也可以模板中嵌套模板;
4.12.1 创建新模板应用于主机
4.12.1.1 创建模板
4.12.1.2 在模板下添加新的应用集
4.12.1.3 在新的应用集下创建监控项
4.12.1.4 应用在主机上
4.12.1.5 查看应用的模板
4.12.1.6 查看最新的数据
4.12.1.7 添加触发器
4.12.1.8 添加动作
启用已经存在的动作。
4.12.1.9 测试触发器是否正常
我们将22号端口关闭,查看是否有告警
[root@server3 ~]# systemctl stop sshd
服务启动后,立即就恢复
4.12.2 导出模板
我们通过大量时间配置的模板如果想让其他的主机也使用的话,我们可以将我们的模板导出,并应用在其他的主机上,这样可以节省我们大量的模板配置时间,模板的默认的格式是.xml的格式
4.11.2.1 选择我们自定义的模板
4.12.3 导入模板
有了模板之后,我们可以将自定义的模板应用于其他需要的主机上
4.12.3.1 选择模板导入
总结:添加监控项,应该先定义好对应的监控对象模板,在进行添加监控项目时可以通过链接至我们定义好的模板,这样能节省我们的配置时间。
4.13、zabbix可视化
4.13.1 简介
数据日积月累,想要更直观的了解到各项数据的情况,图形无疑是最佳选择。zabbix 提供了众多的可视化工具直观展示,如 graph、screen 及 map 等。前面也看到过一些简单的图形展示。如果想要把多个相关的数据定义在同一张图上去查看,就需要去自定义图形
4.13.2 自定义图形(Graphs)
自定义图形中可以集中展示多个时间序列的数据流。支持四种不同形式的图形
- 线状图(normal)
- 堆叠面积图(stacked)、
- 饼图(pie)”
- 分离型饼图(exploded)
设置过程如下:进入 配置 ---> 主机 ---> node1 ---> 图形,选择右上角创建图形:
- 看一看四种状态:
- 主机都可以自定义,一般线型是看的最清晰的,通常会使用这个。克隆一个 packets 来更改为 bytes 用同样的,如果想添加别的内容,也都可以添加的。
- 这里添加了2个图形,我们可以在 监测中 ---主机---- 图形 来查看
4.13.3 聚合图形(Screens)
-
创建的自定义图形也可以放在一个聚合图里显示,具体的设置方法: 进入 监测中 ---> 聚合图形 ---> 选择右上角创建聚合图形
-
可以选择分享:
4.13.4 幻灯片演示(Slide shows)
- 如果有多个聚合图形想要按顺序展示的话,我们就可以定义一个幻灯片。
- 具体步骤:进入 监测中 ---> 聚合图形 ---> 左上角选择幻灯片演示 ---> 创建幻灯片
- 打开以后显示的是图片1,30s以后会自动切换为图片2。这样就可以实现幻灯片演示,就不需要去手动切换了。
4.14、zabbix proxy代理
官方文档:https://www.zabbix.com/documentation/4.0/zh/manual/distributed_monitoring/proxies
简单讲zabbix proxy就是zabbix server的代理服务,它能帮助zabbix server采集数据,然后再统一的发送给zabbix server ;它的功能和zabbix server 很类似,zabbix server 能做到它几乎都能做;主要作用就是代理zabbix server 。我们知道监控一个主机或者服务,通常监控项有很多,每个监控项的数据采集工作都会消耗zabbix server 一个socket,这样一来监控一个主机少则十几个socket连接,多则几十个上百个。
我们试想一个场景,我们要监控一个集群,这个集群有100台物理主机,每个物理主机都要监控cpu,内存,磁盘等等,一台服务器平均监控项为20个,那么100台服务器就要2000个socket连接,这意味着zabbix server要有2000个socket连接需要维持,这样一来无疑对zabbix server性能有很大的影响。为了降低zabbix server连接socket数量过大而带来的性能消耗,此时zabbix server就应该委托其他主机来代理收集数据,这个代理就是zabbix proxy;除了以上场景,比如跨机房的场景我们也需要用zabbix proxy,每个zabbix proxy只负责采集本地同一机房里的主机的数据,然后统一发送给zabbix server,这样一来可以减少zabbix server的socket连接数量,从而降低zabbix server的压力
4.14.1 zabbix proxy 使用场景
- 监控远程区域设备
- 监控本地网络不稳定区域
- 当 zabbix 监控上千设备时,使用它来减轻 server 的压力
- 简化分布式监控的维护
zabbix proxy 仅仅需要一条 tcp 连接到 zabbix server,所以防火墙上仅仅需要加上一条规则即可。
注意:使用 agent active 模式,一定要记住在 agent 的配置文件参数 ServerActive 加上 proxy 的 IP 地址。
4.14.2 配置proxy
4.14.2.1 配置zabbix proxy前的准备
我们这里采用192.168.1.14这台服务器来模拟zabbix proxy
注意:先在zabbix web界面将192.168.1.14的所有的配置删除,触发器,动作,自动发现等都禁用
添加本地hosts解析
192.168.1.14 zabbix_proxy
192.168.1.106 zabbix_agent
192.168.1.100 zabbix_server
4.14.2.2 将zabbix proxy上的agent服务先停止掉
[root@zabbix-proxy ~]# systemctl stop zabbix-agent
4.14.2.3 安装zabbix-proxy服务依赖软件包
a. Install Zabbix repository
[root@zabbix-proxy ~]# 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 proxy
[root@zabbix-proxy ~]# yum install zabbix-proxy-mysql zabbix-agent -y
备注:如果zabbix proxy也需要被监控,则需要安装zabbix-agent
c. Install MySQL database
# 下载mysql官方yum仓库
[root@zabbix-proxy ~]# wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm
# 安装mysql
[root@zabbix-proxy ~]#yum -y install mysql57-community-release-el7-10.noarch.rpm
[root@zabbix-proxy ~]# rpm --import https://repo.mysql.com/RPM-GPG-KEY-mysql-2022
[root@zabbix-proxy ~]# yum install -y mysql-community-server
d.initialize MySQL
# 启动数据库
[root@zabbix-proxy ~]# systemctl enable --now mysqld
# 设置密码
[root@zabbix-proxy ~]# grep 'temp' /var/log/mysqld.log
2024-01-21T06:27:23.674514Z 1 [Note] A temporary password is generated for root@localhost: bg(USYYgl8dO
2024-01-21T06:27:26.953458Z 0 [Note] InnoDB: Creating shared tablespace for temporary table
#使用临时密码登录数据库后修改密码
[root@zabbix-proxy ~]# mysql -uroot -p
Enter password:
mysql> set password for root@'localhost'=password('Wcfeng123!');
Query OK, 0 rows affected, 1 warning (0.00 sec)
# 初始化数据库
[root@zabbix-proxy ~]# mysql_secure_installation
Securing the MySQL server deployment.
Enter password for user root: ##输入密码
The 'validate_password' plugin is installed on the server.
The subsequent steps will run with the existing configuration
of the plugin.
Using existing password for root.
Estimated strength of the password: 100
Change the password for root ? ((Press y|Y for Yes, any other key for No) : n #输入n,不修改密码
... skipping.
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them. This is intended only for
testing, and to make the installation go a bit smoother.
You should remove them before moving into a production
environment.
Remove anonymous users? (Press y|Y for Yes, any other key for No) : y # 按y
Success.
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network.
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y # 按y
Success.
By default, MySQL comes with a database named 'test' that
anyone can access. This is also intended only for testing,
and should be removed before moving into a production
environment.
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y # 按y
- Dropping test database...
Success.
- Removing privileges on test database...
Success.
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y # 按y
Success.
All done!
4.14.2.4 设置数据库
a.在数据库主机上运行以下代码
# mysql -uroot -p password
mysql> create database zabbix_proxy character set utf8 collate utf8_bin;
mysql> create user zabbix@localhost identified by 'Wcfeng123!';
mysql> grant all privileges on zabbix_proxy.* to zabbix@localhost;
mysql> set global log_bin_trust_function_creators = 1;
mysql> quit;
导入初始架构和数据,系统将提示您输入新创建的密码。
[root@zabbix-proxy ~]# zcat /usr/share/doc/zabbix-proxy-mysql*/schema.sql.gz | mysql -uzabbix -p zabbix_proxy
Disable log_bin_trust_function_creators option after importing database schema.
[root@zabbix-proxy ~]#mysql -uroot -ppassword
mysql> set global log_bin_trust_function_creators = 0;
mysql> quit;
b. Configure the database for Zabbix proxy
编辑配置文件 /etc/zabbix/zabbix_proxy.conf
DBPassword=password
c. Start Zabbix proxy process
Start Zabbix proxy process and make it start at system boot.
[root@zabbix-proxy ~]# zcat /usr/share/doc/zabbix-proxy-mysql-4.0.44/schema.sql.gz |mysql -uzabbix -p123456 zabbix_proxy
4.14.2.5 配置zabbix proxy配置文件
[root@zabbix-proxy ~]# grep -v "^#" /etc/zabbix/zabbix_proxy.conf |grep -v "^$"
ProxyMode=0 ##0代表主动模式
Server=192.168.1.100 ##指定zabbix server的ip
Hostname=zabbix_proxy ##zabbix proxy的主机名
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBHost=localhost ##数据库主机
DBName=Zabbix_proxy ##数据库的库名
DBUser=zabbix ##数据库的用户
DBPassword=Wcfeng123! ##数据库密码
ConfigFrequency=60 ##主动模式下,zabbix proxy多久接收一次zabbix server的配置
DataSenderFrequency=10 ##主动模式下,zabbix proxy多久发送一次数据
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
4.14.2.6 启动zabbix proxy
[root@zabbix-proxy ~]# systemctl enable --now zabbix-proxy
[root@zabbix-proxy ~]# netstat -antup|grep 10051
tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 2461/zabbix_proxy
tcp6 0 0 :::10051 :::* LISTEN 2461/zabbix_proxy
4.14.3 配置zabbix proxy 的agent(可选)
如果你的zabbix server 也要监控zabbix proxy,那还需要配置zabbix agent
Server=192.168.1.14 ##填写代理自己的IP(因为对于agent来说,它是server)
ServerActive=192.168.1.14 ##自己代理自己的数据,这里写zabbix-proxy的IP
Hostname=zabbix_agent
4.14.3.1 启动zabbix agent
[root@zabbix-proxy ~]# systemctl start zabbix-agent
[root@zabbix-proxy ~]# netstat -antup|grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 2544/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 2544/zabbix_agentd
4.14.4 配置被监控端的agent
[root@zabbix-agent ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=192.168.1.14 ##添加proxy的ip(被动模式)
ServerActive=192.168.1.14 ##添加proxy的ip(主动模式)
Hostname=zabbix_agent
4.14.4.1 启动agent
[root@zabbix-agent ~]# systemctl enable --now zabbix-agent
[root@zabbix-agent ~]# netstat -antup|grep 10050
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 1608/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 1608/zabbix_agentd
4.14.5 zabbix server端的配置
4.14.5.1 添加zabbix proxy主机监控
这里不会有数据出现,因为它是找的zabbix proxy来发送数据,而我们目前还未配置zabbix proxy,所以,需要配置zabbix proxy。
4.14.6 配置zabbix web 上的代理配置
4.14.6.1 创建代理
提示:这里的proxy name必须和本地运行zabbix proxy服务主机名称相同;填写好proxy name以后点击添加即可;
4.14.6.2 添加主机,使用我们刚才添加到proxy来代理采集数据
其他的新的主机也是同样的办法来添加,这里我们将zabbix agent也进行添加
4.14.6.3 查看监控状态
不同的数据上报方式显示的内容有区别
a、被动上报(修改客户端监控数据上报的类型为被动)
b、主动上报(修改客户端监控数据上报的类型为主动)
4.14.6.4 测试是否有告警
在192.168.1.20主机上开启多个ssh的连接,测试是否有告警
4.15 、zabbix监控tomcat服务器
4.15.1 安装jdk
# 解包
[root@tomcat ~]# tar zxvf jdk-8u341-linux-x64.tar.gz -C /usr/local/
# 添加环境变量
[root@tomcat ~]# vim /etc/profile
添加如下内容:
export JAVA_HOME=/usr/local/jdk1.8.0_341
export CLASSPATH=.$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar
export PATH=$JAVA_HOME/bin:$PATH
[root@tomcat ~]# source /etc/profile
[root@tomcat ~]# java -version
java version "1.8.0_341"
Java(TM) SE Runtime Environment (build 1.8.0_341-b10)
Java HotSpot(TM) 64-Bit Server VM (build 25.341-b10, mixed mode)
4.15.2 安装tomcat
# 解包
[root@tomcat ~]# tar zxvf apache-tomcat-8.5.72.tar.gz -C /usr/local/
# 启动tomcat
[root@tomcat ~]# cd /usr/local/apache-tomcat-8.5.72/bin/
[root@tomcat bin]# ./startup.sh
4.15.3 修改配置文件
vim /usr/local/tomcat/bin/catalina.sh
# 第124行加入:
CATALINA_OPTS="-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false"
说明:
-Dcom.sun.management.jmxremote 表示开启JMX远程管理功能。
-Dcom.sun.management.jmxremote.port=12345 表示指定JMX远程连接的端口号为12345。
-Dcom.sun.management.jmxremote.ssl=false 表示禁用JMX远程连接的SSL安全传输。
-Dcom.sun.management.jmxremote.authenticate=false 表示禁用JMX远程连接的身份验证。
4.15.4 重启tomcat
[root@tomcat bin]# ./startup.sh
Using CATALINA_BASE: /usr/local/apache-tomcat-8.5.72
Using CATALINA_HOME: /usr/local/apache-tomcat-8.5.72
Using CATALINA_TMPDIR: /usr/local/apache-tomcat-8.5.72/temp
Using JRE_HOME: /usr/local/jdk1.8.0_341
Using CLASSPATH: /usr/local/apache-tomcat-8.5.72/bin/bootstrap.jar:/usr/local/apache-tomcat-8.5.72/bin/tomcat-juli.jar
Using CATALINA_OPTS: -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=12345 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
Tomcat started.
[root@tomcat bin]# netstat -antup|grep 8080
tcp6 0 0 :::8080 :::* LISTEN 18965/java
4.15.5 zabbix-server设置
zabbix想要监控tomcat,需要借助于zabbix-java-gateway工具
[root@zabbix-proxy ~]# yum -y install zabbix-java-gateway
4.15.5.1 修改配置文件
[root@zabbix-proxy ~]#vim /etc/zabbix/zabbix_java_gateway.conf
LISTEN_IP="0.0.0.0" # 9行,监听地址
LISTEN_PORT=10052 # 17行,监听端口
PID_FILE="/var/run/zabbix/zabbix_java.pid" # 27行,PID_FILE文件路径
START_POLLERS=5 # 35行,开启的工作线程数量
4.15.5.2 启动zabbix_java_gateway
[root@zabbix-proxy ~]# systemctl enable --now zabbix-java-gateway.service
4.15.5.3 修改代理配置文件
如果是直接和zabbix-server上报数据,则这里选择配置zabbix server配置文件
[root@zabbix-proxy ~]# grep -E '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0
Server=192.168.1.100
Hostname=zabbix_proxy
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
SocketDir=/var/run/zabbix
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=Wcfeng123!
ConfigFrequency=60
DataSenderFrequency=10
JavaGateway=192.168.1.14
JavaGatewayPort=10052
StartJavaPollers=5
SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
Timeout=4
ExternalScripts=/usr/lib/zabbix/externalscripts
LogSlowQueries=3000
StatsAllowedIP=127.0.0.1
4.15.5.4 重启zabbix-proxy
[root@zabbix-proxy ~]# systemctl restart zabbix-proxy
4.15.6 Web 页面操作
五、SNMP
5.1、什么是SNMP?
SNMP(Simple Network Management Protocol)的缩写,中文意思是"简单网络管理协议。SNMP是一种简单网络管理协议,它属于TCP/IP五层协议中的应用层协议,用于网络管理的协议。SNMP主要用于网络设备的管理。由于SNMP协议简单可靠 ,受到了众多厂商的欢迎,成为了目前最为广泛的网管协议
SNMP协议主要由两大部分构成:SNMP管理站和SNMP代理。SNMP管理站是一个中心节点,负责收集维护各个SNMP元素的信息,并对这些信息进行处理,最后反馈给网络管理员;而SNMP代理是运行在各个被管理的网络节点之上,负责统计该节点的各项信息,并且负责与SNMP管理站交互,接收并执行管理站的命令,上传各种本地的网络信息。
SNMP管理站和SNMP代理之间是松散耦合。他们之间的通信是通过UDP协议完成的。一般情况下,SNMP管理站通过UDP协议向SNMP代理发送各种命令,当SNMP代理收到命令后,返回SNMP管理站需要的参数。但是当SNMP代理检测到网络元素异常的时候,也可以主动向SNMP管理站发送消息,通告当前异常状况。
SNMP的基本思想:为不同种类的设备、不同厂家生产的设备、不同型号的设备,定义为一个统一的接口和协议,使得管理员可以是使用统一的外观面对这些需要管理的网络设备进行管理。通过网络,管理员可以管理位于不同物理空间的设备,从而大大提高网络管理的效率,简化网络管理员的工作。
5.2、SNMP的版本
5.3、部署SNMP监控
5.3.1 在被监控端安装snmp
[root@zabbix-client ~]# yum -y install net-snmp net-snmp-utils
5.3.2 修改snmp的配置文件
[root@zabbix-client ~]# grep '^[a-z]' /etc/snmp/snmpd.conf
com2sec admin default admin ##配置口令
group admin v2c admin ##设置snmp的版本为v2c
view admin included .1 ##指定mib信息
access admin "" any noauth exact admin admin none
5.3.3 启动服务
[root@zabbix-client ~]# systemctl start snmpd
[root@zabbix-client ~]# netstat -antup |grep 161
udp 0 0 0.0.0.0:161 0.0.0.0:* 22681/snmpd
5.3.4 测试
[root@zabbix-client ~]# snmpget -v2c -c admin 192.168.1.101 .1.3.6.1.4.1.2021.11.11.0 查看空闲CPU使用率
UCD-SNMP-MIB::ssCpuIdle.0 = INTEGER: 99
[root@zabbix-client ~]# snmpget -v2c -c admin 192.168.1.101 .1.3.6.1.2.1.25.2.2.0 查看内存总量大小
HOST-RESOURCES-MIB::hrMemorySize.0 = INTEGER: 995700 KBytes
[root@zabbix-client ~]# snmpwalk -v2c -c admin 192.168.1.101 .1.3.6.1.4.1.2021.10.1.3.3 查看15分钟的负载
UCD-SNMP-MIB::laLoad.3 = STRING: 0.05
[root@zabbix-client ~]#
其他的监控指标请参考:https://blog.csdn.net/qq_28657577/article/details/82834442
5.4 在zabbix上进行配置
5.4.1 在配置---主机---创建主机
5.4.2 添加一个snmp的监控接口
5.4.3 添加模板(可以使用已存在的SNMP模板)
5.4.4 添加一个宏
5.4.5 完成后,点击添加
看到此图标是绿色,说明SNMP工作正常。
- 感谢你赐予我前进的力量