zabbix-高级应用
监控路由器交换机
SNMP简单网络管理协议
SNMP简单网络管理协议,是专门设计用于在IP网络管理、网络节点(服务器、工作站、路由器、交换机及HUBS等)的一种标准协议,它是一种应用层协议。如果我们需要监控打印机、路由器、交换机、UPS等设备,肯定不能使用zabbix_agentd,因为他们不能安装软件的,一般都支持SNMP协议,这样我可以使用SNMP来监控他们。
SNMP版本:
- SNMP版本1(SNMPV1):第一个版本,不支持任何的认证功能
- SNMP版本2(SNMPv2):第二个版本,支持简单的认证口令(community)
- SNMP版本3(SNMPV3):此版本提高了安全性和隐私性
MIB介绍:
MIB (Management Information Base)信息管理库,通常与SNMP相关联,数据库是分层的 (树形
结构的),并且每个条目通过对象标识符 (OID)来寻址,OID(ObjectIDentifiers)对象标识符,用来在MIB库中表示一个对象的指标。
MIB简介 - S300, S500, S1700, S2700, S5700, S6700 V200R021C10 MIB参考 - 华为 (huawei.com)
OID树结构:
snmpb下载地址:https://sourceforge.net/projects/snmpb/
测试案例
配置网络设备
华为文档参考:https://support.huawei.com/hedex/hdx.do?docid=EDOC1100021764&id=dc_cfg_snmp_0023_1
[Huawei]sys AR1
[AR1]interface g0/0/0
[AR1-GigabitEthernet0/0/0]ip address 192.168.10.111 24
[AR1-GigabitEthernet0/0/0]q
[AR1]snmp-agent
[AR1]snmp-agent sys-info version v3
[AR1]snmp-agent group v3 MyGroup privacy read-view ViewDefault
[AR1]snmp-agent usm-user v3 MyUser MyGroup authentication-mode sha Huawei@123 privacy-mode aes128 Huawei@123
[AR1]
// 使用不认证和不加密的方式
[AR1]snmp-agent
[AR1]snmp-agent sys-info version v3
[AR1]snmp-agent group v3 MyGroup noauth
[AR1]snmp-agent usm-user v3 MyUser MyGroup
创建主机
创建监控项
- 键值可以随意(中文特殊字符除外),作用:用作触发器引用的唯一字符串
- OID决定了具体监控的值(注意,从snmpb软件中复制来的在后面加.0)
测试监控项
自动发现
什么是自动发现Discovery?
当zabbix需要监控的设备越来越多时,手动添加监控设备越来越有挑战,此时,可以考虑使用自动发现功能。
自动发现可以实现:发现主机、添加主机、添加主机到组、链接模版等。
配置自动发现
1、创建自动发现规则
2、创建Action动作(发现主机后自动执行什么动作)
3、通过动作,执行添加主机,链接模板到主机等操作
4、测试,创建新的虚拟机(符合发现规则)
要想让被监控的主机的监控项可用,需要再被监控主机上安装zabbx-agent并配置。
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
Server=127.0.0.1,192.168.10.223 // 添加主控端地址
ServerActive=127.0.0.1,192.168.10.223 // 添加主控端地址
[root@localhost ~]# systemctl restart zabbix-agent // 重启服务
主被动监控
1、概述
主动和被动都是对被监控主机而言的。
默认zabbix采用的是被动监控
**被动监控:**Server向Agent发起连接,发送监控的key,Agent接受请求,响应监控数据
**主动监控:**Agent向Server发起连接,Agent请求需要检测的监控项列表,Server响应Agent发送一个items列表,Agent确认收到监控列表,TCP连接完成,会话关闭,Agent开始周期性的收集数据
区别:Server不用每次需要数据都连接Agent,Agent会自己收集数据并处理数据,Server仅需要保存数据即可。
当监控主机达到一定量级后,Zabbix服务器会越来越慢,此时,可以考虑使用主动监控,释放服务器压力。
2、创建被监控主机(主动监控)并修改配置
1)新建一台虚拟机
2)安装zabbix_agent软件
yum -y install zabbix_agent
3)修改配置文件(将其设置为主动模式)
vim /usr/local/etc/zabbix_agentd.conf
#Server=127.0.0.1 # 注释该行
StartAgents=0 # 禁止被动监控(有服务进程但没有端口)
ServerActive=192.168.10.223 # 监控服务器IP(一定要取消127.0.0.1)
Hostname=web_201 # 告诉监控服务器,是谁发的数据信息(一定要和zabbix服务器配置的监控主机名称一致)
RefreshActiveChecks=120 # 默认120秒检测一次
4)添加用户,启动服务,查看状态
useradd zabbix
zabbix_agentd
ps -C zabbix_agentd
3、zabbix_server设置
1)克隆已有模版
2)修改监控项模式
3)添加监控主机
名称必须和被监控端的配置文件中Hostname一致。
IP地址为0.0.0.0,端口为0
4)为主机添加监控模版
5)查看监控数据
创建拓扑图
邮件告警
事件通知机制
当被监控项出现问题时,能及时通知责任人
准备邮件收发环境
快速搭建邮件服务器
[root@localhost ~]# yum -y install postfix //安装邮件服务器
[root@localhost ~]# systemctl enable postfix --now //设置开机自启,并启动
安装邮件客户端(收发信工具)
[root@localhost ~]# yum -y install mailx //安装邮件客户端
邮件告警关键配置
1、报警媒介类型(谁负责发送告警邮件、如何发送)
管理→报警媒介类型→Email
- 修改为可用的电子邮件,比如本机发送
正确设置可用来发送电子邮件的服务器(这里选用本机自带的邮件服务)信息、发件人电子邮箱地址
2、报警媒介(告警邮件发送给谁)
管理→用户→选择用户XX→报警媒介
- 比如,可以为用户Admin添加邮件报警,接收通知的邮箱地址为root@zbx.tedu.cn(域名为主机名)
[root@localhost ~]# hostname //通过hostname查看主机名,收件人填写 root@主机名
localhost.localdomain
3、创建触发器
配置→主机→xxx→触发器
- 指定在xx条件下记录问题
- 并且可以标记此问题的严重性程度
比如,可以创建2个触发器
- 登录用户超过5个时,记录为“一般严重”事件
- 运行任务数超过500个时,记录为“严重事件
4、创建动作
配置→动作→创建动作
- 比如,示警程度在“一般严重”以上时发送邮件报警
验证邮件告警
模拟用户登录超标,或者运行任务数超标
- 目标用户会收到电子邮件,在仪表板也会报告此问题
模拟用户登录数超标
在被控主机Zabbix server上同时打开多个命令行终端,也可以使用SecureCRT、Putty等工具远程登录到Zabbix server服务,来模拟超过5个用户登录的情况。
检查root用户收到告警邮件消息
当设置的动作满足条件时,即发起对应的邮件告警操作,用户报警媒介对应的收件人电子邮箱中会收到通知邮件。比如当登录用户数超过5个时,root用户将会收到告警邮件,只需要在主机zbx.tedu.cn上查收邮件即可
同时,通过“监测”–>“仪表板”页面也会看到相应的问题报告,通过单击“动作”下的小图标可以跟踪邮件发送状态。
[root@localhost ~]# who | wc -l //查看登录⽤户数
企业微信告警
注册企业微信:https://work.weixin.qq.com/wework_admin/register_wx?from=myhome
手机下载企业微信,使用个人微信扫码登录
添加机器人:
-
操作视频
https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=95bd2577-26d4-4808-b5a3-85692f7d198e
在zabbix服务器编辑脚本vim /usr/lib/zabbix/alertscripts/webhook.py
将api_url替换成自己的webhook
#!/usr/bin/python3
# -*- coding: utf-8 -*-
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = " https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=95bd2577-26d4-4808-b5a3-85692f7d198e "
def msg(text):
json_text= {
"msgtype": "text",
"text":{
"content": text
},
}
print(requests.post(api_url,json.dumps(json_text),headers=headers).content)
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
[root@zbx ~]# chmod a+x /usr/lib/zabbix/alertscripts/webhook.py
[root@zbx ~]# chown zabbix:zabbix /usr/lib/zabbix/alertscripts/webhook.py
添加媒介类型
测试
成功接收到
监控指标
要监控些什么?
1、硬件监控
服务器:风扇转速,cpu温度,主板温度、内存状态、电源状态、RAID磁盘阵列状态,磁盘状态,网卡状态。
防火墙、交换机、路由器或UPS等。
2、系统监控
基础监控:cpu使用率,内存使用率,磁盘(和inode)使用量率,磁盘io使用率
其他监控(linux):/etc/passwd文件、打开文件描述符的最大数量(如:open too many files错误),最大进程数,用户登录数。
3、网络监控
网络流量情况,丢包率,错包率,连接数等等。
4、应用监控
MySQL,Redis,Java,nginx等
数据库监控:数据库连接数、当前运行的线程、QPS、TPS、并行处理的会话数、缓存命中率、主从延时、锁状态、慢查询
Nginx:活跃连接数、等待连接数、丢弃连接数、请求量、耗时、5xx错误率
消息队列:连接数、队列数、生产速率、消费速率、消息堆积量
缓存:成功连接数、阻塞连接数、已使用内存、内存碎片率、请求量、耗时、缓存命中率
Tomcat:最大线程数、当前线程数、请求量、耗时、错误量、堆内存使用情况、GC次数和耗时
5、业务监控
核心业务的监控,例如:登录,注册,下单,支付等等。
日志监控:访问日志、错误日志
业务指标:比如PV、订单量等
6、客户端监控
用户行为信息,业务返回码,客户端性能,运营商,版本,操作系统等。
全国移动,联通,电信用户访问情况监控(第三方工具SmokePing,监控宝,阿里云站点监控等)
ioS,安卓,微信小程序(阿里云的ARMS)
抛开生产实际环境说监控都是扯淡