网站开发方案 ppt,wordpress伟静态,网站开发岗位职责,美辰网站建设Zabbix企业级监控方案
常见监控软件介绍
Cacti
Cacti是一套基于 PHP、MySQL、SNMP 及 RRD Tool 开发的监测图形分析工具#xff0c;Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时#xff0…Zabbix企业级监控方案
常见监控软件介绍
Cacti
Cacti是一套基于 PHP、MySQL、SNMP 及 RRD Tool 开发的监测图形分析工具Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时轮询的结果就不能即时的反应设备的状态了。Cacti 监控关注的是对数据的展示却不关注数据异常后的反馈。如果凌晨 3 点的时候设备的某个数据出现异常除非监控人员在屏幕前发现这个异常变化否则是没有任何报警机制能够让我们知道出现了异常。
Nagios
Nagios 是一款开源的免费网络监控报警服务,能有效监控 Windows、Linux 和 Unix 的主机状态交换机、路由器和防火墙等网络设置打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能,可以方便的根据应用服务扩展功能。Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是 Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。
Ganglia
Ganglia 是 UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。主要是用来监控系统性能,如:CPU 、内存、硬盘利用率, I/O 负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体 性能起到重要作用,目前是监控HADOOP 的官方推荐服务。
Zabbix
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。Zabbix 是由 Alexei Vladishev 创建目前由 Zabbix SIA 在持续开发和支持。Zabbix 是一个企业级的分布式开源监控方案。Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。Zabbix 使用灵活的通知机制允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。Zabbix 支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的可供公众任意使用, 商业支持由Zabbix公司提供。
监控区别
nagios 图形不是特别好也可以安装图形插件但是也不怎么好看nagios 一般情况下如果需要图形可以和 cacti 配合使用cacti 的监控是轮询监控,效率低图形相对 nagios 比较好看zabbix 和 nagios 因为是并发监控对 cpu 的要求更高zabbix 在性能和功能上都强大很多zabbix 的图形相当漂亮支持多种监控方式 zabbix-agent snmp 等等支持分布式监控,能监控的 agent 非常多zabbix 有图形的 web 配置界面配置简洁zabbix 支持自动发现功能
Zabbix监控简介
zabbix优点
开源,无软件成本投入Server 对设备性能要求低支持设备多,自带多种监控模板支持分布式集中管理,有自动发现功能,可以实现自动化监控开放式接口,扩展性强,插件编写容易当监控的 item 比较多服务器队列比较大时可以采用主动状态,被监控客户端主动 从server 端去下载需要监控的 item 然后取数据上传到 server 端。 这种方式对服务器的负载比较小。Api 的支持,方便与其他系统结合
zabbix缺点
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据很大,瓶颈主要在数据库。项目批量修改不方便社区虽然成熟但是中文资料相对较少服务支持有限入门容易能实现基础的监控但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发难度较大系统级别报警设置相对比较多如果不筛选的话报警邮件会很多并且自定义的项目报警需要自己设置过程比较繁琐缺少数据汇总功能如无法查看一组服务器平均值需进行二次开发
zabbix组件结构
Zabbix_Server整个监控体系中最核心的组件它负责接收客户端发送的报告信息所有配置、统计数据及操作数据都由它组织。数据库存储所有配置信息和Zabbix收集到的数据都被存储在数据库中。Web界面为了从任何地方和任何平台都可以轻松的访问Zabbix, 我们提供基于Web的Zabbix界面。该界面是 Zabbix Server的一部分通常跟Zabbix Server运行在同一台物理机器上如果使用SQLite,Zabbix Web界面必须要跟Zabbix Server运行在同一台物理机器上。Zabbix_Proxy可选用于监控节点非常多的分布式环境中它可以代理zabbix-server的功能减轻zabbixserver的压力。Zabbix_Agentzabbix-agent为客户端软件用于采集各监控项目的数据并把采集的数据传输给zabbixproxy或zabbix-server。
zabbix监控方式
被动模式 被动检测相对于agent而言agent, server向agent请求获取配置的各监控项相关的数据agent接收请求、获取数据并响应给server 主动模式 主动检测相对于agent而言agent(active),agent向server请求与自己相关监控项配置主动地将server配置的监控项相关的数据发送给server主动监控能极大节约监控server 的资源。
Zabbix架构 Zabbix常用术语
主机一台你想监控的网络设备用IP或域名表示主机组主机的逻辑组它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。监控项你想要接收的主机的特定数据一个度量数据。触发器一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式当接收到的数据高于阈值时触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时触发器保留/返回一个“OK”的状态。
Zabbix部署
安装zabbix 服务端
参考网址https://www.zabbix.com/cn/download?zabbix4.0os_distributioncentosos_version7dbmysqlwsapache
准备yum源安装服务的组件
[rootserver1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
[rootserver1 ~]# yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent -y关闭selinux、防火墙
[rootserver1 ~]# setenforce 0
[rootserver1 ~]# systemctl stop firewalld准备数据库
安装数据库
[rootserver1 ~]# yum install mariadb-server -y
[rootserver1 ~]# systemctl start mariadb
[rootserver1 ~]#mysql_secure_installation
[rootserver1 ~]# systemctl enable mariadb创建zabbix用户
mysql create database zabbix character set utf8 collate utf8_bin;
mysql create user zabbixlocalhost identified by 1;
mysql grant all privileges on zabbix.* to zabbixlocalhost;
mysql quit;修改服务的配置
导入初始架构数据
[rootserver1 ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -D zabbix -p为zabbix配置数据库
[rootserver1 ~]# vim /etc/zabbix/zabbix_server.conf
DBPassword1编辑前端php配置
[rootserver1 ~]# 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 always_populate_raw_post_data ‐1
php_value date.timezone Asia/Shanghai启动服务
[rootserver1 ~]# systemctl restart zabbix-server httpd
[rootserver1 ~]# systemctl enable zabbix-server httpd至此完成zabbix 服务端的部署可以通过http://IP/zabbix进行访问初始化完成之后使用用户Admin 密码zabbix 客户端配置
安装软件包
[rootserver1 ~]# rpm -Uvh https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm
[rootserver2 ~]# yum install zabbix-agent -y修改配置文件
[rootserver2 ~]# vim /etc/zabbix/zabbix_agentd.conf
# 主要修改以下三个参数
Server192.168.184.10
ServerActive192.168.184.10
Hostnameserver2关闭selinux、防火墙、启动服务
[rootserver1 ~]# setenforce 0
[rootserver1 ~]# systemctl stop firewalld
[rootserver1 ~]# systemctl start zabbix-agent.service快速使用
简单监控一个主机
添加一个主机添加模板添加应用集添加监控项观察主机是否变绿色
自定义配置监控项
编写客户端监控项配置文件
[rootserver2 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_mysql.conf
UserParameternginx_process_num,ps -ef | grep -c nginx
[rootserver2 ~]# systemctl restart zabbix-agent.service# 复杂的监控项
UserParameter[*]_process_num,ps -ef | grep -c $1验证自定义监控项是否生效
[rootserver1 ~]# yum install zabbix-get.x86_64 -y
[rootserver1 ~]# zabbix_get -s 192.168.175.20 -k nginx_process_num
9web端添加监控项加入此键值 给主机添加触发器 redis相关的自定义监控项
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/redis.conf
UserParameterRedis.Status,/usr/local/redis/bin/redis-cli -h 127.0.0.1 -p 6379 ping |grep -c PONG
UserParameterRedis_conn[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w connected_clients | awk -F: {print $2}
UserParameterRedis_rss_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_memory_rss | awk -F: {print $2}
UserParameterRedis_lua_mem[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_memory_lua | awk -F: {print $2}
UserParameterRedis_cpu_sys[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_cpu_sys | awk -F: {print $2}
UserParameterRedis_cpu_user[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_cpu_user | awk -F: {print $2}
UserParameterRedis_cpu_sys_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_cpu_sys_children | awk -F: {print $2}
UserParameterRedis_cpu_user_cline[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w used_cpu_user_children | awk -F: {print $2}
UserParameterRedis_keys_num[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep -w $$1 | grep -w keys | grep db$3 | awk -F {print $2} | awk -F, {print $1}
UserParameterRedis_loading[*],/usr/local/redis/bin/redis-cli -h $1 -p $2 info | grep loading | awk -F: {print $$2}Redis.Status --检测Redis运行状态 返回整数
Redis_conn --检测Redis成功连接数返回整数
Redis_rss_mem --检测Redis系统分配内存返回整数
Redis_lua_mem --检测Redis引擎消耗内存返回整数
Redis_cpu_sys --检测Redis主程序核心CPU消耗率返回整数
Redis_cpu_user --检测Redis主程序用户CPU消耗率返回整数
Redis_cpu_sys_cline --检测Redis后台核心CPU消耗率返回整数
Redis_cpu_user_cline --检测Redis后台用户CPU消耗率返回整数
Redis_keys_num --检测库键值数返回整数
Redis_loding --检测Redis持久化文件状态返回整数nginx相关的自定义监控项
vim /etc/nginx/conf.d/default.conflocation /nginx-status{stub_status on;access_log off;allow 127.0.0.1;deny all;}
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/nginx.conf
UserParameterNginx.active,/usr/bin/curl -s http://127.0.0.1:80/nginxstatus | awk /Active/ {print $NF}
UserParameterNginx.read,/usr/bin/curl -s http://127.0.0.1:80/nginx-status | grep Reading | cut -d -f2
UserParameterNginx.wrie,/usr/bin/curl -s http://127.0.0.1:80/nginx-status | grep Writing | cut -d -f4
UserParameterNginx.wait,/usr/bin/curl -s http://127.0.0.1:80/nginx-status | grep Waiting | cut -d -f6
UserParameterNginx.accepted,/usr/bin/curl -s http://127.0.0.1:80/nginxstatus | awk /^[ \t][0-9][ \t][0-9][ \t][0-9]/ {print $1}
UserParameterNginx.handled,/usr/bin/curl -s http://127.0.0.1:80/nginxstatus | awk /^[ \t][0-9][ \t][0-9][ \t][0-9]/ {print $2}
UserParameterNginx.requests,/usr/bin/curl -s http://127.0.0.1:80/nginxstatus | awk /^[ \t][0-9][ \t][0-9][ \t][0-9]/ {print $3}TCP相关的自定义监控项
vim /usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh
#!/bin/bash
function ESTAB {
/usr/sbin/ss -ant |awk {s[$1]} END {for(k in s) print k,s[k]} | grep ESTAB | awk {print $2}
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk {s[$1]} END {for(k in s) print k,s[k]} | grep TIME-WAIT | awk {print $2}
}
function LISTEN {
/usr/sbin/ss -ant | awk {s[$1]} END {for(k in s) print k,s[k]} | grep LISTEN | awk {print $2}
}
$1vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/cattcp.conf
UserParametertcp[*],/usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh $1tcp[TIMEWAIT] --检测TCP的驻留数返回整数
tcp[ESTAB] --检测tcp的连接数、返回整数
tcp[LISTEN] --检测TCP的监听数返回整数系统监控的自带选项
agent.ping 检测客户端可达性、返回nothing表示不可达。1表示可达
system.cpu.load --检测cpu负载。返回浮点数
system.cpu.util -- 检测cpu使用率。返回浮点数
vfs.dev.read -- 检测硬盘读取数据返回是sps.ops.bps浮点类型需要定义1024倍
vfs.dev.write -- 检测硬盘写入数据。返回是sps.ops.bps浮点类型需要定义1024倍
net.if.out[br0] --检测网卡流速、流出方向时间间隔为60S
net-if-in[br0] --检测网卡流速流入方向单位字节 时间间隔60S
proc.num[] 目前系统中的进程总数时间间隔60s
proc.num[,,run] 目前正在运行的进程总数时间间隔60S
###处理器信息
通过zabbix_get 获取负载值
合理的控制用户态、系统态、IO等待时间剋保证进程高效率的运行
系统态运行时间较高说明进程进行系统调用的次数比较多一般的程序如果系统态运行时间占用过高就需要优化程序减少系统调用
io等待时间过高则表明硬盘的io性能差如果是读写文件比较频繁、读写效率要求比较高可以考虑更换硬盘或者使用多磁盘做raid的方案
system.cpu.swtiches --cpu的进程上下文切换单位sps表示每秒采样次数api中参数history需指定为3
system.cpu.intr --cpu中断数量、api中参数history需指定为3
system.cpu.load[percpu,avg1] --cpu每分钟的负载值按照核数做平均值(Processorload (1 min average per core))api中参数history需指定为0
system.cpu.load[percpu,avg5] --cpu每5分钟的负载值按照核数做平均值(Processorload (5 min average per core))api中参数history需指定为0
system.cpu.load[percpu,avg15] --cpu每5分钟的负载值按照核数做平均值(Processorload (15 min average per core))api中参数history需指定为0系统监控的自定义监控选项
###内存相关
vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/catcarm.conf
UserParameterram.info[*],/bin/cat /proc/meminfo |awk /^$1:{print $2}
ram.info[Cached] --检测内存的缓存使用量、返回整数需要定义1024倍
ram.info[MemFree] --检测内存的空余量返回整数需要定义1024倍
ram.info[Buffers] --检测内存的使用量返回整数需要定义1024倍####TCP相关的自定义项
vim /usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh
#!/bin/bash
function ESTAB {
/usr/sbin/ss -ant |awk {s[$1]} END {for(k in s) print k,s[k]} | grep ESTAB | awk {print $2}
}
function TIMEWAIT {
/usr/sbin/ss -ant | awk {s[$1]} END {for(k in s) print k,s[k]} | grep TIME-WAIT | awk {print $2}
}
function LISTEN {
/usr/sbin/ss -ant | awk {s[$1]} END {for(k in s) print k,s[k]} | grep LISTEN | awk {print $2}
}
$1vim /usr/local/zabbix/etc/zabbix_agentd.conf.d/cattcp.conf
UserParametertcp[*],/usr/local/zabbix/share/zabbix/alertscripts/tcp_connection.sh $1tcp[TIMEWAIT] --检测TCP的驻留数返回整数
tcp[ESTAB] --检测tcp的连接数、返回整数
tcp[LISTEN] --检测TCP的监听数返回整数