1)SNMP的工作方式
2)SNMP协议的版本
3)SNMP协议在Linux上的实现
4)SNMP的组件
1)工作模式
2)可发起的操作
3)端口:UDP
1)Cacti
2)Nagios
Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能,可以方便的根据应用服务扩展功能
Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是 Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。
3)Ganglia
Ganglia 是 UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。
主要是用来监控系统性能,如:CPU 、内存、硬盘利用率, I/O 负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体 性能起到重要作用,目前是监控HADOOP 的官方推荐服务。
4)Zabbix
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix 是由 Alexei Vladishev 创建,目前由 Zabbix SIA 在持续开发和支持。
Zabbix 是一个企业级的分布式开源监控方案。
Zabbix 使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
Zabbix 支持主动轮询和被动捕获。
Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。
Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用
nagios 一般情况下如果需要图形可以和 cacti 配合使用
cacti 的监控是轮询监控,效率低,图形相对 nagios 比较好看
zabbix 和 nagios 因为是并发监控,对 cpu 的要求更高
zabbix 在性能和功能上都强大很多
zabbix 的图形相当漂亮
支持多种监控方式 zabbix-agent snmp 等等
支持分布式监控,能监控的 agent 非常多
zabbix 有图形的 web 配置界面,配置简洁
1)软件基本架构图示
2)基本逻辑架构
1)被动模式
2)主动模式
1)主机(host)
2)主机组(host group)
3)监控项(item)
4)触发器(trigger)
5)事件(event)
6)动作(action)
7)报警升级(escalation)
8)媒介(media)
9)通知(notification)
10)远程命令(remote command)
11)模板(template)
12)应用(application)
13)web场景(web scennaria)
14)前端(frontent)
15)Zabbix API
16)Zabbix proxy
1)安装zabbix源后安装Zabbix
rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-1.el7.noarch.rpm yum repolist # 更新yum仓库 # 因天朝防火墙的缘故,zabbix官方的源会受到影响,需要将zabbix官方源换成国内源,这里安装的是zabbix4.0 baseurl=https://mirrors.aliyun.com/zabbix/zabbix/4.0/rhel/7/$basearch/ yum -y install epel-release.noarch yum -y install zabbix-agent zabbix-get zabbix-sender zabbix-server-mysql zabbix-web zabbix-web-mysql
2)安装并设置数据库
[mysqld] skip_name_resolve = ON # 跳过主机名解析 innodb_file_per_table = ON # 开启独立表空间 innodb_buffer_pool_size = 256M # 缓存池大小 max_connections = 2000 # 最大连接数 log-bin = master-log # 开启二进制日志
MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin; # 创建zabbix数据库 MariaDB [(none)]> grant all on zabbix.* to ‘zbxuser‘@‘10.0.0.%‘ identified by ‘woshiniba‘; MariaDB [(none)]> flush privileges;
3)导入Zabbix服务表
gzip -d /usr/share/doc/zabbix-server-mysql-3.2.6/create.sql.gz # 这里包含了生成表的各种脚本
# 这个文件在zabbix-server-mysql生成的文件中
mysql -uzbxuser -h10.0.0.201 -p zabbix < create.sql # 导入sql文件生成表
1)修改server端的配置文件 /etc/zabbix/zabbix_server.conf
vim zabbix_server.conf ListenPort=10051 # 默认监听端口 SourceIP=192.168.37.111 # 发采样数据请求的IP
2)设置日志
3)数据库相关的配置项
DBHost=192.168.37.111 # 数据库对外的主机 DBName=zabbix # 数据库名称 DBUser=zbxuser # 数据库用户 DBPassword=woshiniba # 数据库密码 DBPort=3306 # 数据库启动端口
4)启动服务并确认
# 启动zabbix服务 systemctl start zabbix-server.service # 查看端口以确认服务启动成功 [root@server zabbix]# ss -nutl |grep 10051 tcp LISTEN 0 128 *:10051 *:* tcp LISTEN 0 128 :::10051 :::*
yum install -y httpd php php-mysql php-mbstring php-gd php-bcmath php-ldap php-xml
1)查找 web GUI的配置文件
rpm -ql zabbix-web | less /etc/httpd/conf.d/zabbix.conf /etc/zabbix/web /etc/zabbix/web/maintenance.inc.php /etc/zabbix/web/zabbix.conf.php /usr/share/doc/zabbix-web-3.2.6 /usr/share/doc/zabbix-web-3.2.6/AUTHORS /usr/share/doc/zabbix-web-3.2.6/COPYING /usr/share/doc/zabbix-web-3.2.6/ChangeLog /usr/share/doc/zabbix-web-3.2.6/NEWS /usr/share/doc/zabbix-web-3.2.6/README
2)编辑配置文件
/etc/httpd/conf.d/zabbix.conf 这个配置文件就是做映射的文件
Alias /zabbix /usr/share/zabbix # 访问的时候要在主机后加上/zabbix来访问服务
3)设置时区
时区是一定要设置的,上面时区设置被注释掉是因为,在php的配置文件中设置时区,如果在php的配置文件中设置时区,则对所有的php服务均生效,如果在zabbix.conf中设置时区,则仅对zabbix服务有效,所以,在php配置文件中设置时区:
[root@hgzero ~]# vim /etc/php.ini [Date] ; Defines the default timezone used by the date functions ; http://php.net/date.timezone date.timezone = Asia/Shanghai
4)启动httpd服务
systemctl start httpd
systemctl enable httpd
访问 http://10.0.0.202/zabbix 即可进入配置页面,接下来一路下一步即可,如果遇到初始化过程中部分内容出现失败,则可以到 /etc/php.ini 文件中将对应的配置项修改成符合要求的大小即可。
若连接不上数据库,则可以去查看zabbix的日志文件 /var/log/zabbix/zabbix_server.log 找到问题所在。
zabbix管理页面的默认登录用户和密码分别为:
1)安装对应的包
yum install zabbix-agent zabbix-sender -y
2)修改配置文件
cd /etc/zabbix/
cp zabbix_agentd.conf{,.bak}
Server=127.0.0.1,10.0.0.202 # 指明服务器是谁,这里其实做的是基于IP地址的授权表示允许哪些地址来获取数据,这里可以指定多个地址 ListenPort=10050 # 自己监听的端口 ListenIP=0.0.0.0 # 自己监听的地址,0.0.0.0表示本机所有地址 StartAgents=3 # 启动几个Agent进程 ServerActive=127.0.0.1,10.0.0.202 # 主动监控时,将数据主动发往哪台服务器,也可以指定多个地址 Hostname=node1.hgzerowzh.com # 自己能被server端识别的名称,要全局唯一
# 注意,当本机既是server又是agent时,不要将以上的127.0.0.1去掉,否则无法获取数据
3)启动服务
systemctl start zabbix-agent.service
ss -ntul |grep 10050
1)定义一个主机组
2)添加主机
任何一个被监控项(item),如果想要能够被监控,一定要在zabbix-server端定义了能够连接至zabbix-agent端,并且能够通过命令获取信息;或者在agent端定义了能够让server端获取命令;一般都是内建的命令,都对应的有其名字,称之为key。
[root@c7_node_02 ~]# zabbix_get -s 10.0.0.201 -p 10050 -k "system.cpu.intr"
1)定义Application应用集
2)定义一个不带参数的监控项
3)定义一个带参数的监控项
[root@c7_node_02 ~]# zabbix_get -s 10.0.0.201 -p 10050 -k "net.if.in[ens33,packets]"
1)定义图Graphs
2)定义聚合图形(Screens)
3)幻灯片展示(Slide shows)
4)定义拓扑图(Maps)
当采集的值定义完了以后,就可以定义触发器:
评定采样数值是否为合理区间的方法:根据最后N次的平均值来判定结果,这个最后N次通常有两种定义方式:
触发器存在可调用的函数:
nodata() # 是否采集到数据,采集不到则为异常 last() # 最近几次 date() # 时间,返回当前的时间,格式YYYYMMDD time() # 返回当前的时间,HHMMSS格式的当前时间。 now() # 返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数 dayofmonth() # 返回当前是本月的第几天
注意:能用数值保存的就不要使用字符串
1)触发器表达式格式
{<server>:<key>.<function>(<parameter>)}<operator><constant> # server:主机名称
# key:主机上关系的相应监控项的key
# function:评估采集到的数据是否在合理范围内时所使用的函数,其评估过程可以根据采取的数据、当前时间及其它因素进行 # 目前所支持的函数有avg、count、change、date、dayofweek、delta、diff、iregexp、last、max、min、nodata、now、sum等 # parameter:函数参数;大多数数值函数可以接受秒数为其参数,而如果在数值参数之前使用“#”做为前缀,则表示为最近几次的取值, # 如sum(300)表示300秒内所有取值之和,而sum(#10)则表示最近10次取值之和 # 此外,avg、count、last、min和max还支持使用第二个参数,用于完 成时间限定;例如,max(1h,7d)将返回一周之前的最大值
2)表达式所支持的运算符及功能
1)进入触发器定义页面
2)定义触发器
然后去看对应监控项的graph图,里面就有了一根线,就是定义的值,超过线的即为异常状态。但是现在即使超过了这根线,仅仅会产生一个触发器事件而不会做其他任何操作,因此,需要去定义一个动作(action)。
触发器之间可能会存在依赖关系的,一旦某一个触发器被触发了,那么依赖这个触发器的其余触发器都不需要再报警了。
多台主机是通过交换机的网络连接线来实现监控的,如果交换机出了故障,那么主机自然也无法继续被监控,那么这些主机统统都会报警,但是实际上只需要交换机报警就可以了。为了解决这样的问题,就需要定义触发器之间的依赖关系,当交换机挂掉时,只有交换机自己报警就可以了,其他的主机就不需要再报警了。这样,也有利于判断真正的故障所在。
zabbix不能直接定义主机间的依赖关系,其依赖关系仅能够通过触发器来定义。
需要去基于一个对应的事件为条件来指明该做什么事,一般就是执行远程命令或者发警报
告警升级机制:当发现问题的时候,一般是先执行一个远程操作命令,如果能够解决问题,就会发一个恢复操作的讯息给接收人,如果问题依然存在,则会执行发警报的操作,一般默认的报警接收人是当前系统中的zabbix账户,所以当有人需要收到警报操作的话,则需要把它加入我们的定义之中。
每一个用户也应该有一个接受告警信息的方式,即媒介,就像接收短信是需要有手机号一样。对于一个媒介来说,每一个用户都有一个统一的或者不同的接收告警信息的端点,称之为目标地或者目的地。
所以,为了能够发告警信息:1.要事先定义一个媒介;2.还要定义这个媒介上用户接收消息的端点(在用户上,我们也称之为用户的媒介)
因为执行远程命令时,是zabbix-server端控制在zabbix-agent上执行的,相当于在子进程中执行,所以需要sudo来临时拥有管理员权限执行该操作,因此,需要在虚拟机上进行编辑配置文件使zabbix用户能够临时拥有管理员权限
需要进行两项操作:
[root@node1 ~]# visudo ## Allow root to run any commands anywhere root ALL=(ALL) ALL zabbix ALL=(ALL) NOPASSWD: ALL # 添加的一行,表示不需要输入密码 [root@node1 ~]# vim /etc/zabbix/zabbix_agentd.conf EnableRemoteCommands=1 # 允许接收远程命令 LogRemoteCommands=1 # 把接收的远程命令记入日志 [root@node1 ~]# systemctl restart zabbix-agent.service
1)定义脚本的位置
在 /etc/zabbix/zabbix_server.conf 文件中定义了这个位置
在这个目录下装入的脚本需要重启zabbix-server才会被读取
脚本中可使用$1,$2,$3 来调用action中的邮件的收件人,Default Subject,Default Message
2)脚本示例
#!/bin/bash to="$1" # 指明收件人 subject="$2" # 指明主题 body="$3" # 指明邮件内容 echo "$body" | mail -s "$subject" "$to" # 发送邮件
3)脚本调用
可以在 Media types 中添加一个媒介,类型Type选择为Script,脚本名Script name为刚刚创建的脚本名alerttest.sh
然后可以在Users中的Media中选择alertscript
1)宏简介
2)宏的级别
宏一共有三种级别,分别是全局宏、模板宏、主机宏,不同级别的宏观的适用范围也不一样
3)宏的类型
1)定义全局宏
2)定义主机宏
3)定义模板宏
原文:https://www.cnblogs.com/hgzero/p/13693974.html