没事读读文章,并将笔记分享一下,通过这个方法记录一下学习进度。
王德鹏. 基于Zabbix实现服务器的监控报警及性能优化[D]. 辽宁:大连理工大学,2020.
关注公众号,后台回复“基于Zabbix实现服务器的监控报警及性能优化”可以获取原文一起学习。
论文主要内容:
以Zabbix 开源程序和Mysql 数据库为基础,设计并搭建一套可靠、实时的监控报警平台,实现对分布在不同区域中的服务器、交换机、路由器等设备的温度、性能、服务等状态进行实时监控报警,此监控报警平台对推进公司信息系统的标准化、平台化与自动化具有重要价值。
两个创新点:
通过编写Python程序对接监控报警平台的API接口,弥补了Zabbix 在批量修改方面的不足。
为提高监控报警平台的处理性能,对后台Mysql 数据库算法进行分析并选择最符合监控报警平台的存储引擎和索引类型,对数据库进行参数调优,使监控报警平台的实时性和可靠性得到大幅度的提升。
1、绪论
各开源监控系统对比
这张图在网上很多地方都能看到,这里是原始的出处吗?
2、相关技术分析
对SNMP、IPMI、JMX协议,MySQL数据库、python写了一章,这玩意怎么降重?哈哈,不过作为学习材料还是不错的。
3、监控报警平台分析与设计
除了都差不多的需求和原则之外,和网络上网文中的很大不同的是给出了系统的框图,可能是学术论文的需要。
整个平台的逻辑图,左边的几个箭头是指右边的层次的名字,刚刚开始还以为是有数据的输出。
这个图存疑,这是Agent的数据流程,Agent的数据传输用的是Snmpd服务吗?
4、平台实现与应用
平台实现与应用是构建一个Zabbix的监控方案,其中有一个用Python读取Excel中的主机,进行批量修改的方法,是文章的创新点,其他的基本和手册一致。
作者在附录中给出了全部的代码,用到了zabbix的API。这个应该是经常可以用到的小工具,大家可以借鉴一下。
5、监控报警平台性能优化与测试
主要包括结构的优化,数据库的优化和参数优化,并给出了优化对比,结构是采用了proxy;数据库调优从数据库引擎和索引类型,然后对数据库进行了参数调优;zabbix Server的优化主要包括进程数量、缓存大小、刷新频率,但是只给了一张图,并没有介绍为什么要这样优化。
对存疑的再次分析
一、Agent的处理过程
在昨天晚上说论文中的图3.3存疑,是因为看到SNMPD是snmp的服务,MIB(管理信息库)就是存储OID的数据库,所以怎么看像是系统采用SNMP协议采集数据的框图。
实际是,在官方手册上指出,Agent存在以下3个进程:
-
collector_thread 周期采集基础信息,主要是内存和 CPU,储存于共享内存中
-
listener_thread 用于接收 server 或者 proxy 分配的的采集任务,被动采采集
-
active_checks_thread 主动采集上报
这里三个进程很好理解,一个是采集指标的,一个用于接受server的任务,最后一个是上报数据。
在网上也找到一个Agent的程序结构图,也可以出上面的结构。
二、Server的优化设计
昨天论文中,昨天只给出一个server优化的配置,并没有给出为什么,更没有给出更多的配置方法,这里给出其他的配置方案,更加详细的后面再研究。
zabbix server配置文件
#ListenPort=10051
#监听端口
# SourceIP=
#多地址的情况下,指定使用哪个地址进行通讯
# LogType=file
#指定记录日志的方式是记录到文件中
LogFile=/var/log/zabbix/zabbix_server.log
#指定日志文件存放路径;用户需要对目录有权限才可;
# LogFileSize=1
#日志重写,一般不开
# DebugLevel=3
#日志级别;当需要拍错时,可以调到debug级别,看得更清楚,拍错完毕后改回原有日志级别,否则日志会把磁盘空间占满
PidFile=/apps/zabbix-server/run/zabbix_server.pid
#PID文件路径
SocketDir=/apps/zabbix-server/run/
#指定socket文件路径
DBHost=
#连接的数据库地址
DBName=zabbix_server
#数据库名称
DBUser=
#连接的账号
DBPassword=
#连接的密码
zabbix server优化配置
# HistoryStorageURL=
#指定elasticsearch服务器地址,保存zabbix历史数据到ES里面,优化zabbix性能,需要新版本的zabbix才支持
# HistoryStorageTypes=uint,dbl,str,log,text
#elasticsearch的索引类型
# HistoryStorageDateIndex=0
#将历史数据保存到不同的elasticsearch索引
# ExportDir=
#定义实时导出触发器事件,监控项采集值,趋势数据的目录
# ExportFileSize=1G
#定义每个导出文件的最大大小
StartPollers=6
#指定开启几个进程收集agent的数据;一般进程数与CPU核心数是相对应的,范围是0-1000
# StartIPMIPollers=1
#指定开启几个进程收集IPMI数据,需要提前开启IPMI才可,否则报错,范围是0-1000
StartPreprocessors=6
#预启动多少个进程处理用于处理zabbix agent数据,范围是0-1000
# StartPollersUnreachable=1
#启动多少个进程对不可达主机进行轮训探测,范围是0-1000
StartTrappers=5
#预启动多少个进程处理与触发器相关的操作,范围是0-1000
StartPingers=5
#启动多少个进程进行ping检测,用于ping网络设备和主机,范围是0-1000
StartDiscoverers=6
#启动多少个进程进行自动发现,如磁盘自动发现,网络自动发现,一般进程数不要多过宿主机CPU核心数,范围是0-250
StartHTTPPollers=3
#进行web访问时,启动多少个进程处理web访问,范围是0-1000
StartTimers=3
#计时器进程数量,计时器用于计算问题的发生时间和步骤同步等,用于触发器报警时的递归发送邮件等,范围1-1000
# StartEscalators=1
#elasticsearch进程的初始进程数量,用于处理动作中的自动步骤的进程的数量,0-100
# StartAlerters=3
#报警进程的预启动数量,0-100
# JavaGateway=
#zabbix是php写的,不能直接访问java程序,所以用到了javagateway,javagateway一头连接zabbix,一头连接java环境,去收集java环境的资源指标,一个javagateway可以连接多个java服务;指定javagateway地址
# JavaGatewayPort=10052
#javagateway监听端口
# StartJavaPollers=0
#预启动多少个进程轮训收集java数据,0-1000
# StartVMwareCollectors=0
#用于设置监控vmware esxi主机实例时使用,若为0则不起用,若要监控esxi主机,此值最小为1,根据监控esxi数量设置对应数量,zabbix监控vmware,需要是用监控vmware的模板;0-250
VMwareFrequency=60
#监控vmware获取最新数据的时间间隔,单位为秒
# VMwarePerfFrequency=60
#监控vmware性能数据时间间隔
# VMwareCacheSize=8M
#vmware数据缓存大小,会占用zabbix server服务器的内存
# VMwareTimeout=10
#vmware获取数据的超时时间
SNMPTrapperFile=/apps/zabbix-server/run/zabbix_traps.tmp
#SNMP触发器文件的临时路径
StartSNMPTrapper=1
#SNMP触发器进程数量,范围是0-1,1表示开启
# ListenIP=0.0.0.0
#zabbix server的监听地址
# HousekeepingFrequency=1
#多少小时清理一次代理端数据库的历史数据,默认是1小时,范围是0-24;用于监控项中所定义的历史数据保存时间以及趋势数据保存时间超过所规定的时间后,将进行清理;趋势数据会保存一个小时内的数据的最大值、最小值与平均值;历史数据是查询每个监控项的数据都是历史数据
# MaxHousekeeperDelete=5000
#每次最多删除历史数据的行数,范围是0-1000000
CacheSize=128M
#用于存储主机、管理项和触发器数据的缓存大小;范围是128K-8G,一般配置1到2个G
CacheUpdateFrequency=300
#zabbix更新缓存数据的频率,单位是秒,范围1-3600
StartDBSyncers=4
#zabbix开启多少个进程与数据库进行数据同步,包括查询;0-100
HistoryCacheSize=2G
#历史数据缓存大小,128K-2G
HistoryIndexCacheSize=128M
#历史数据索引信息缓存,128K-2G
TrendCacheSize=16M
#用于设置划分多少系统共享内存用于缓存计算出来的趋势数据,此参数从一定程度上可影响数据库读压力,范围是128K-2G
ValueCacheSize=16M
#用于缓存项目历史数据请求的共享内存大小,128K-64G
Timeout=30
#指定agent多长时间没把server查询的数据返回,则超时,1-30
TrapperTimeout=300
#触发器处理数据的最长时间,单位是秒;1-300
UnreachablePeriod=60
#当主机不可达多少秒后,设置为主机不可用,单位是秒,1-3600
UnavailableDelay=60
#当主机不可用了,多久检查一次该主机的可用性,范围1-3600
UnreachableDelay=15
#当主机不可达,多久检查一次该主机的可用性,1-3600
AlertScriptsPath=${datadir}/zabbix/alertscripts
#监控报警脚本路径,取决于编译时候的datadir参数,如/apps/zabbix-server/share/zabbix/alertscripts
# FpingLocation=/usr/sbin/fping
#指定fping命令的位置,fping用于测试网络连通性;可以使用apt install fping安装
# Fping6Location=/usr/sbin/fping6
#fping6的命令位置
LogSlowQueries=3000
#指定多长时间未返回结果,则为慢日志(单位是毫秒),仅当日志的级别为3、4/5时才可以,0表示不记录,范围是1-3600000
# TmpDir=/tmp
#临时文件存放目录
StartProxyPollers=1
#指定zabbix server启动多少个进程与proxy进行通信,此为被动代理,及zabbix server主动连接proxy,proxy被动接受server的连接,一般需要保证一个server进程与一个proxy进行交互
ProxyConfigFrequency=60
#proxy被动模式下,server多少秒同步配置文件(监控项)至proxy,此参数仅用于被动模式proxy,范围1-3600*24*7;如通过zabbix web新添加一个agent节点,则多长时间把配置文件往proxy上同步一次,proxy收到配置文件后,会把配置文件再同步到agent主机上,从而agent主机获取到配置文件中所要采集的监控项
ProxyDataFrequency=60
#被动模式下,zabbix server间隔多少秒向proxy请求历史数据,则proxy会按照指定时间内,向server汇报一次agent的监控数据,1-3600
# AllowRoot=0
#是否允许以root身份启动zabbix,想要允许,则改成1
User=zabbix
#指定启动zabbix的用户
# Include=
#导入指定路径的配置文件
# StatsAllowedIP=
#设置允许访问zabbix server的地址
读后感
文章多次提到对某公司的网络的监控,这应该是对某个具体的网络监控项目的总结,用到的技术并不难,但是关于架构、流程等方面还是写得比较的清楚,和手册与网络文章的最大差别,可能了解这些有助于监控的进一步理解。
关注公众号,后台回复“基于Zabbix实现服务器的监控报警及性能优化”可以获取原文一起学习。