1.1 为什么要监控

在需要的时刻,提前提醒我们服务器出问题了

当出问题之后,可以找到问题的根源

网站 / 服务器 的可用性

1.1.1 网站可用性

在软件系统的高可靠性(也称为可用性,英文描述为 HA,High Available)里有个衡量其可靠性的标准——X 个 9,这个 X 是代表数字 3~5。X 个 9 表示在软件系统 1 年时间的使用过程中,系统可以正常使用时间与总时间(1 年)之比,我们通过下面的计算来感受下 X 个 9 在不同级别的可靠性差异。

  1. 19:(1-90%)\*365=36.5天,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是36.5
  2. 29:(1-99%)\*365=3.65 表示该软件系统在连续运行1年时间里最多可能的业务中断时间是3.65
  3. 39:(1-99.9%)\*365\*24=8.76小时,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是8.76小时。
  4. 49:(1-99.99%)\*365\*24=0.876小时=52.6分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是52.6分钟。
  5. 59:(1-99.999%)\*365\*24\*60=5.26分钟,表示该软件系统在连续运行1年时间里最多可能的业务中断时间是5.26分钟。
  6. 69:(1-99.9999%)\*365\*24\*60\*60=31秒, 示该软件系统在连续运行1年时间里最多可能的业务中断时间是31

1.2 监控什么东西

监控一切需要监控的东西,只要能够想到,能够用命令实现的都能用来监控

1.2.1 监控范畴

zabbix - 图1 zabbix - 图2

1.3 怎么来监控

1.3.1 远程管理服务器

如果想远程管理服务器就有远程管理卡,比如 Dell idRAC,HP ILO,IBM IMM

1.3.2 监控硬件

查看硬件的温度 / 风扇转速,电脑有鲁大师,服务器就有 ipmitool。

使用 ipmitool 实现对服务器的命令行远程管理

  1. yum -y install OpenIPMI ipmitool #->IPMI 在物理机可以成功,虚拟机不行
  2. [root@KVM ~]# ipmitool sdr type Temperature
  3. Temp | 01h | ns | 3.1 | Disabled
  4. Temp | 02h | ns | 3.2 | Disabled
  5. Temp | 05h | ns | 10.1 | Disabled
  6. Temp | 06h | ns | 10.2 | Disabled
  7. Ambient Temp | 0Eh | ok | 7.1 | 22 degrees C
  8. Planar Temp | 0Fh | ns | 7.1 | Disabled
  9. IOH THERMTRIP | 5Dh | ns | 7.1 | Disabled
  10. CPU Temp Interf | 76h | ns | 7.1 | Disabled
  11. Temp | 0Ah | ns | 8.1 | Disabled
  12. Temp | 0Bh | ns | 8.1 | Disabled
  13. Temp | 0Ch | ns | 8.1 | Disabled

1.3.3 cpu

lscpu、uptime、top、htop、vmstat、mpstat

其中 htop 需要安装,安装依赖与 epel 源。

  1. [znix@clsn ~]$lscpu
  2. Architecture: x86_64
  3. CPU op-mode(s): 32-bit, 64-bit
  4. Byte Order: Little Endian
  5. CPU(s): 2
  6. On-line CPU(s) list: 0,1
  7. Thread(s) per core: 2
  8. Core(s) per socket: 1
  9. Socket(s): 1
  10. NUMA node(s): 1
  11. Vendor ID: GenuineIntel
  12. CPU family: 6
  13. Model: 79
  14. Model name: Intel(R) Xeon(R) CPU E5-2682 v4 @ 2.50GHz
  15. Stepping: 1
  16. CPU MHz: 2494.222
  17. BogoMIPS: 4988.44
  18. Hypervisor vendor: KVM
  19. Virtualization type: full
  20. L1d cache: 32K
  21. L1i cache: 32K
  22. L2 cache: 256K
  23. L3 cache: 40960K
  24. NUMA node0 CPU(s): 0,1
  25. Flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ss ht syscall nx pdpe1gb rdtscp lm constant_tsc rep_good nopl eagerfpu pni pclmulqdq ssse3 fma cx16 pcid sse4_1 sse4_2 x2apic movbe popcnt tsc_deadline_timer aes xsave avx f16c rdrand hypervisor lahf_lm abm 3dnowprefetch ibrs ibpb stibp fsgsbase tsc_adjust bmi1 hle avx2 smep bmi2 erms invpcid rtm rdseed adx smap xsaveopt spec_ctrl intel_stibp

1.3.4 内存

free

  1. [znix@clsn ~]$free -h
  2. total used free shared buff/cache available
  3. Mem: 3.7G 224M 257M 1.2M 3.2G 3.2G
  4. Swap: 0B 0B 0B

1.3.5 磁盘

df、dd、iotop

  1. [znix@clsn ~]$df -h
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/vda1 40G 6.3G 32G 17% /
  4. devtmpfs 1.9G 0 1.9G 0% /dev
  5. tmpfs 1.9G 0 1.9G 0% /dev/shm
  6. tmpfs 1.9G 1.1M 1.9G 1% /run
  7. tmpfs 1.9G 0 1.9G 0% /sys/fs/cgroup
  8. tmpfs 379M 0 379M 0% /run/user/1000

1.3.6 监控网络

iftop、nethogs

  1. iftop 监控主机间流量 -i 指定监控网卡
  2. nethogs 监控进程流量

1.4 监控工具总览

Ganglia

Ganglia是UCBerkeley发起的一一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia的核心包含gmond、gmetad以及一个Web前端。。主要是用来监控系统性能,如:CPU、内存、硬盘利用率,1/0负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用,目前是监控HADOOP的官方推荐服务。
mrtg 流量监控出图

nagios

Nagios是一款开源的免费网络监控报警服务,能有效监控Windows.Linux和Unix的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维,人员,在状态恢复后发出正常的邮件或短信通知。Nagios有完善的插件功能,可以方便的根据应用服务扩展功能。Nagios已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是Nagios无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。

Centreon

web-nagios 多地多机房
是一款功能强大的分布式IT监控系统, 它通过第三方组件可以实现对网络、
操作系统和应用程序的监控:首先,它是开源的,我们可以免费使用它;其次,它的底层采
用nagios作为监控软件,同时nagios通过ndoutil模块将监控到的数据定时写入数据库中,
而Centreon实时从数据库读取该数据并通过Web界面展现监控数据;,最后,我们可以通
过Centreon管理和配置nagios,或者说Centreon就是nagios的一个管理配置工具,通过
Centreon提供的Web配置界面,可以轻松完成nagios的各种繁琐配置。

cacti

Cacti是一套基于PHP、MySQL、SNMP及RRDTool开发的监测图形分析工具,Cacti是使用轮询的方式由主服务器向设备发送数据请求来获取设备,上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态了。Cacti监控关注的是对数据的展示,却不关注数据异常后的反馈。如果凌晨3点的时候设备的某个数据出现异常,除非监控,人员在屏幕前发现这个异常变化,否则是没有任何报警机制能够让我们道出现了异常。

zabbix

Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。
Zabbix是由AlexeiVladishev创建,目前由ZabbixSIA在持续开发和支持。
Zabbix是一个企业级的分布式开源监控方案。
Zabbix是一款能够监控各种网络参数以及服务器健康性和完整性的软件。
Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
Zabbix支持主动轮询和被动捕获。
Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。基于Web的前端页面可以确保您从任何方面评估您的网络状态和服务器的健康性。
Zabbix是免费的。Zabbix是根据GPL通用公共许可证第2版编写和发行的。这意味着它的源代码都是免费发行的,可供公众任意使用,商业支持由Zabbix公司提供。

nightingale

夜莺(Nightingale)是一个企业级监控解决方案。旨在满足云原生时代企业级的监控需求。Nightingale 在产品完成度、系统高可用、以及用户体验方面,达到了企业级的要求,可满足不同规模用户的场景,小到几台服务,大到数十万都可以完美支撑。兼顾云原生和裸金属,支持应用监控和系统监控,插件机制灵活,插件丰富完善,具有高度的灵活性和可扩展性。
Nightingale 在 Open-Falcon 的基础上,结合滴滴内部的最佳实践,在性能、可维护性、易用性方面做了大量的改进,作为集团统一的监控解决方案,支撑了滴滴内部数十亿监控指标,覆盖了从系统、容器、到应用等各层面的监控需求,周活跃用户数千。

监控区别

nagios图形不是特别好,也可以安装图形插件,但是也不怎么好看
nagios一般情况下如果需要图形可以和cacti配合使用
cacti的监控是轮询监控,效率低,图形相对nagios比较好看
zabbix和nagios因为是并发监控,对cpu的要求更高
zabbix在性能和功能上都强大很多
zabbix的图形相当漂亮
支持多种监控方式zabbix-agentsnmp等等
支持分布式监控,能监控的agent非常多
zabbix有图形的web配置界面,配置简洁
zabbix支持自动发现功能
image.png

1.5 zabbix 介绍

Zabbix 是由 Alexei Vladishev 开发的一种网络监视、管理系统,基于 Server-Client 架构。可用于监视各种网络服务、服务器和网络机器等状态。

使用各种 Database-end 如 MySQL, PostgreSQL, SQLite, Oracle 或 IBM DB2 储存资料。Server 端基于 C 语言、Web 管理端 frontend 则是基于 PHP 所制作的。Zabbix 可以使用多种方式监视。可以只使用 Simple Check 不需要安装 Client 端,亦可基于 SMTP 或 HTTP … 各种协定做死活监视。

在客户端如 UNIX, Windows 中安装 Zabbix Agent 之后,可监视 CPU Load、网络使用状况、硬盘容量等各种状态。而就算没有安装 Agent 在监视对象中,Zabbix 也可以经由 SNMP、TCP、ICMP、利用 IPMI、SSH、telnet 对目标进行监视。

另外,Zabbix 包含 XMPP 等各种 Item 警示功能。

1.5.1 zabbix 的组成

image.png

zabbix 官网: https://www.zabbix.com

zabbix 主要由 2 部分构成 zabbix server 和 zabbix agent

zabbix proxy 是用来管理其他的 agent,作为代理

1.5.3 zabbix监控架构


image.png

image.png
1、ZabbixServer
Zabbixserver是agent程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。
2、Zabbix数据库存储
所有配置信息和Zabbix收集到的数据都被存储在数据库中。
3、ZabbixWeb界面
为了从任何地方和任何平台都可以轻松的访问Zabbix,我们提供基于Web的Zabbix界面。该界面是ZabbixServer的一部分,通常(但不一定)跟ZabbixServer运行在同一台物理机器上。如果使用SQLite,ZabbixWeb界面必须要跟ZabbixServer运行在同一台物理机器上。
4、ZabbixProxy代理服务器
Zabbixproxy可以替ZabbixServer收集性能和可用性数据。Proxy代理服务器是Zabbix软件可选择部署的一部分;当然,Proxy代理服务器可以帮助单台ZabbixServer分担负载压力。
5、ZabbixAgent监控代理
Zabbixagents监控代理部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给ZabbixServer
6、Zabbix数据流
监控方面,为了创建一个监控项(item)用于采集数据,必须先创建一个主机(host)。
告警方面,在监控项里创建触发器(trigger),通过触发器(trigger)来触发告警动作(action)。因此,
如果你想收到ServerXCPU负载过高的告警,必须满足

  • 为ServerX创建一个host并关联一个用于对CPU进行监控的监控项(Item)。
  • 创建一个Trigger,设置成当CPU负载过高时会触发
  • Trigger被触发,发送告警邮件

虽然看起来有很多步骤,但是使用模板的话操作起来其实很简单,Zabbix这样的设计使得配置机制非常灵活易用。

1.5.3 zabbix优缺点

优点

  • 开源,无软件成本投入
  • Server对设备性能要求低
  • 支持设备多,自带多种监控模板
  • 支持分布式集中管理,有自动发现功能,可以实现自动化监控
  • 开放式接口,扩展性强,插件编写容易
  • 当监控的item比较多服务器队列比较大时可以采用主动状态,被监控客户端主动从server端去下载需要监控的item然后取数据上传到server端。这种方式对服务器的负载比较小。
  • Api的支持,方便与其他系统结合

缺点

  • 需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库。
  • 项目批量修改不方便
  • 社区虽然成熟,但是中文资料相对较少,服务支持有限;
  • 入门容易,能实现基础的监控,但是深层次需求需要非常熟悉Zabbix并进行大量的二次定制开发难度较大系统级别报警设置相对比较多,如果不筛选的话报警邮件会很多;并且自定义的项目报警需要自己设置,过程比较繁琐;
  • 缺少数据汇总功能,如无法查看一组服务器平均值,需进行二次开发;

    1.5.4 zabbix 监控范畴

  • 硬件监控 :Zabbix IPMI Interface

    • 服务器,存储,网络设备
  • 网络设备监控:Zabbix SNMP Interface
    • 网络环境(内网环境,外网环境)
  • 系统监控 :Zabbix Agent Interface
    • 集群:LVS,Keepalived,HAproxy,RHCS,F5,k8s
    • 虚拟化:VMware,KVM,XEN,docker,
    • 操作系统:Linux,Unix,Windows性能参数
  • Java 监控:ZabbixJMX Interface
  • 应用服务监控:Zabbix Agent UserParameter
    • Nginx,Apache,PHP,Tomcat
  • 数据库监控:percona-monitoring-pldlgins
    • MySQL,MariaDB,Oracle,SQLServer
  • URL 监控:Zabbix Web 监控

    1.5.5 zabbix监控方式

    相对于agent而言

  • 被动模式

agent,server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server;

  • 主动模式

agent(active),agent向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server;
主动监控能极大节约监控server的资源。

1.5.6 Zabbix 常用术语含义

1、主机(host)
一台你想监控的网络设备,用IP或域名表示
2、主机组(hostgroup)
主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
3、监控项(item)
你想要接收的主机的特定数据,一个度量数据。
4、触发器(trigger)
个被用于定义问题阈值和”评估”监控项接收到的数据的逻辑表达式当接收到的数据高于阈值时,触发器 从”OK”变成”Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个”OK”的状态。
5、事件(event)
单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册
6、异常(problem)
一个处在”异常”状态的触发器
7、动作(action)
一个对事件做出反应的预定义的操作。
一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成
8、升级(escalation)
一个在动作内执行操作的自定义场景;发送通知/执行远程命令的序列
9、媒介(media)
发送告警通知的手段;告警通知的途径
10、通知(notification)
利用已选择的媒体途径把跟事件相关的信息发送给用户
11、远程命令(remotecommand)
一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令
12、模版(template)
一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合。模版的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模版是直接关联到每台单独的主机上。
13、应用(application)
一组监控项组成的逻辑分组
14、web场景(webscenario)
利用一个或多个HTTP请求来检查网站的可用性
15、前端(frontend)
Zabbix提供的web界面
16、ZabbixAPI
ZabbixAPI允许你使用JSONRPC协议(是一个无状态且轻量级的远程过程调用(RPC)传送协议,其传递内容透过JSON为主)来创建、更新和获取Zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
17、Zabbixserver
Zabbix软件实现监控的核心程序,主要功能是与Zabbixproxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
18、Zabbixagent
一个部署在监控对象上的,能够主动监控本地资源和应用的程序
Zabbixagent部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计等)。
Zabbixagent收集本地的操作信息并将数据报告给Zabbixserver用于进一步处理。一旦出现异常(比如硬盘空间已满或者有崩溃的服务进程),Zabbixserver会主动警告管理员指定机器上的异常。Zabbixagents的极端高效缘于它可以利用本地系统调用来完成统计数据的收集。
19、被动(passive)和主动(active)检查
Zabbixagents可以执行被动和主动两种检查方式
1、被动检查(passivecheck)模式中agent应答数据请求,Zabbixserver(或者proxy)询问agent数据,如
CPU的负载情况,然后Zabbixagent回送结果。
2、主动检查(Activechecks)处理过程将相对复杂。Agent必须首先从Zabbixsever索取监控项列表以进行独立处理,然后周期性地发送新的值给server。
执行被动或主动检查是通过选择相应的监测项目类型来配置的。itemtype.Zabbixagent处理监控项类型有
Zabbixagent和Zabbixagent(active)。
20、Zabbixproxy
一个帮助ZabbixServer收集数据,分担ZabbixServer的负载的程序
ZabbixProxy是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbixsever的进程,基本上是代表sever工作的。所有收集的数据都在本地进行缓存,然后传送到proxy所属的Zabbixsever。
部署Proxy是可选的,但是可能非常有益于分散单个Zabbixsever的负载。如果只有proxy收集数据,sever上的进程就会减少CPU消耗和磁盘1/0负载。
Zabbixproxy是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。
Zabbixproxy需要使用独立的数据库。

2.1 环境检查

  1. [root@m01 ~]# cat /etc/redhat-release
  2. CentOS Linux release 7.4.1708 (Core)
  3. [root@m01 ~]# uname -r
  4. 3.10.0-693.el7.x86_64
  5. [root@m01 ~]# getenforce
  6. Disabled
  7. [root@m01 ~]# systemctl status firewalld.service
  8. firewalld.service - firewalld - dynamic firewall daemon
  9. Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
  10. Active: inactive (dead)
  11. Docs: man:firewalld(1)

2.2 安装 zabbix 过程

  • 编译安装 (服务较多,环境复杂,可以离线安装)
  • 脚本安装 (推荐,方便快捷,依赖良好的网络)

    2.2.1 编译安装

    其实这个主要是想试一下离线编译安装的具体步骤,记得要配置好本地yum云,因为我们需要使用yum,yum能帮我们自动解决很多依赖问题。发现最主要的问题是,当编译安装时,会提示没有对应包,所以有一个网站我们需要到上面去找依赖包,网址http://rpm.pbone.net/,当我们找不到某些要用到的包时,可以考虑到这个网址里下载。值得注意的是php缺少的某些扩展,可以通过yum安装,php会自动识别这些扩展的

一般来说,直接执行以下脚本也可以了。脚本统一放在root目录下

脚本1

  1. systemctl stop firewalld
  2. systemctl disable firewalld
  3. sed -i 's/=enforcing/=disabled/g' /etc/selinux/config
  4. setenforce 0
  5. yum install httpd mariadb mariadb-server php php-mysql php-devel php-xml php-bcmath php-mbstring php-gd wget expect net-snmp gcc mysql-devel libxml2-devel net-snmp-devel libevent-devel curl-devel -y
  6. wget https://nchc.dl.sourceforge.net/project/zabbix/ZABBIXLatestStable/4.2.1/zabbix-4.2.1.tar.gz
  7. systemctl start httpd
  8. systemctl enable httpd
  9. systemctl enable mariadb
  10. systemctl start mariadb
  11. chmod +x initmysqlpassword.sh
  12. /root/initmysqlpassword.sh
  13. tar -zxvf zabbix-4.2.1.tar.gz
  14. cd zabbix-4.2.1
  15. groupadd --system zabbix
  16. useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
  17. cd database/mysql/
  18. mysql -uroot -p123456 -e "create database zabbix character set utf8 collate utf8_bin;"
  19. mysql -uroot -p123456 -e "grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';"
  20. mysql -uroot -p123456 -e "flush privileges;"
  21. mysql -uzabbix -pzabbix -e "use zabbix;source schema.sql;source images.sql;source data.sql;"
  22. cd ../..
  23. ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
  24. make install
  25. sed -i s/'# DBPassword='/'DBPassword=zabbix'/g /usr/local/etc/zabbix_server.conf
  26. cp -r frontends/php/ /var/www/html/zabbix
  27. sed -i s/'^max_execution_time.*'/'max_execution_time = 300'/g /etc/php.ini
  28. sed -i s/'^max_input_time.*'/'max_input_time = 300'/g /etc/php.ini
  29. sed -i s/'^post_max_size.*'/'post_max_size = 16M'/g /etc/php.ini
  30. sed -i s/'^;date.timezone.*'/'date.timezone = Asia\/Shanghai'/g /etc/php.ini
  31. systemctl restart httpd
  32. systemctl restart mariadb
  33. zabbix_server

脚本2,无需手动执行,只需将该脚本命名为initmysqlpassword.sh

  1. #!/usr/bin/expect
  2. spawn mysql_secure_installation
  3. expect "Enter current password for root (enter for none):"
  4. send "\r"
  5. expect "Set root password? "
  6. send "Y\r"
  7. expect "New password:"
  8. send "123456\r"
  9. expect "Re-enter new password:"
  10. send "123456\r"
  11. expect "Remove anonymous users? "
  12. send "y\r"
  13. expect "Disallow root login remotely? "
  14. send "n\r"
  15. expect "Remove test database and access to it? "
  16. send "y\r"
  17. expect "Reload privilege tables now? "
  18. send "y\r"
  19. expect eof

以下为具体分步骤

第一步

关闭selinux以及防火墙,被这两个东西坑过很多次了

第二步

部署lamp或者lnmp环境,这里以部署lamp环境做演示。

  1. yum install httpd mariadb mariadb-server php php-mysql php-devel -y

接着启动对应服务和设置开机自启

  1. systemctl start httpd
  2. systemctl enable httpd
  3. systemctl enable mariadb
  4. systemctl start mariadb
  5. mysql_secure_installation #在Set root password? [Y/n]后面输入 y,设置密码123456,在Disallow root login remotely? [Y/n] 后面输入n,允许root用户远程登录,其他选项直接回车默认就可以了

写一个页面测试php和mariadb是否已经在Apache里正常运行,以下内容是用来检测用php连接mariadb的,连接成功显示success,失败显示fail(说明哪里没配置正确,需要检查)

直接复制一下内容到终端中执行就可以了(注意,$link之类的变量前面必须加个斜杆转义,否则系统会把他当做一个变量,不能将这个变量名打印到文本中)

  1. cat > /var/www/html/test.php <<EOF
  2. <?php
  3. \$link=mysql_connect('localhost','root','123456');
  4. if(!\$link) echo "fail";
  5. else echo "success";
  6. mysql_close();
  7. ?>
  8. EOF

访问服务器ip/test.php,如果返回success则说明可以了

第三步

编译安装zabbix

下载源码包就行,我下载的是4.0版本的

zabbix - 图7

解压

  1. tar -zxvf zabbix-4.0.0.tar.gz

开始编译,执行sql文本时注意导入顺序

  1. cd zabbix-4.0.0
  2. groupadd --system zabbix
  3. useradd --system -g zabbix -d /usr/lib/zabbix -s /sbin/nologin -c "Zabbix Monitoring System" zabbix
  4. cd database/mysql/
  5. mysql -uroot -p
  6. create database zabbix character set utf8 collate utf8_bin;
  7. grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
  8. flush privileges;
  9. quit
  10. mysql -uzabbix -p
  11. use zabbix
  12. source schema.sql;
  13. source images.sql;
  14. source data.sql;
  15. quit
  16. yum install net-snmp gcc mysql-devel libxml2-devel net-snmp-devel libevent-devel curl-devel -y
  17. cd ../..
  18. ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2
  19. make install

接下来还需要修改zabbix的配置文件,我的默认是在/usr/local/etc/zabbix_server.conf。取消DBPassword的注释并将其值改为zabbix。这个不修改回导致zabbix_server起不来

zabbix - 图8

现在可以启动zabbix_server了

  1. zabbix_server

注意:zabbix_server默认日志文件位于/tmp/zabbix_server.log,有问题可以查看这个日志文件

  1. [root@localhost zabbix-4.0.0]# cp -r frontends/php/ /var/www/html/zabbix #先返回到解压后的目录再执行这条命令,这个迁移的是zabbix前端文件

现在我们先来尝试访问zabbix ,访问地址服务器ip/zabbix

zabbix - 图9

点击下一步

zabbix - 图10

这个需要修改php配置文件和添加php扩展就可以了

我们先修改/etc/php.ini文件,将对应参数做如下修改

  1. max_execution_time = 300
  2. max_input_time = 300
  3. post_max_size = 16M
  4. date.timezone =Asia/Shanghai

添加扩展

  1. yum install php-gd -y
  2. yum install php-xml
  3. php-bcmath php-mbstring

systemctl restart httpd 重启一下httpd,刷新页面就发现不会报错了
zabbix - 图11

那个警告可以忽略,点击下一步。第二次安装时我遇到了另一个问题,那就是提示The frontend does not match Zabbix database. Current database version (mandatory/optional): 3050047/3050047. Required mandatory version: 4000000. Contact your system administrator.之类的问题,具体解决方法是

  1. mysql> use zabbix;
  2. mysql> update dbversion set mandatory=4000000; 将后面的4000000根据情况改为对应的值
  3. mysql> flush privileges;

zabbix - 图12

随便起个名

zabbix - 图13

下一步

zabbix - 图14

再下一步

zabbix - 图15

按操作提示,下载配置文件,放到指定位置就可以了

zabbix - 图16

点击下一步

zabbix - 图17

点击完成,默认账号Admin密码zabbix

zabbix - 图18

登录效果

zabbix - 图19

2.2.2 服务端快速安装脚本

  1. #!/bin/bash #clsn
  2. #设置解析 注意:网络条件较好时,可以不用自建 yum 源
  3. echo '10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com repo.zabbix.com' >> /etc/hosts
  4. #安装 zabbix 源、aliyun YUM 源
  5. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  6. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  7. rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86\_64/zabbix-release-3.0-1.el7.noarch.rpm
  8. #安装 zabbix
  9. yum install -y zabbix-server-mysql zabbix-web-mysql
  10. #安装启动 mariadb 数据库
  11. yum install -y mariadb-server
  12. systemctl start mariadb.service #创建数据库
  13. mysql -e 'create database zabbix character set utf8 collate utf8_bin;'
  14. mysql -e 'grant all privileges on zabbix.* to zabbix@localhost identified by "zabbix";'
  15. #导入数据
  16. zcat /usr/share/doc/zabbix-server-mysql-3.0.13/create.sql.gz|mysql -uzabbix -pzabbix zabbix
  17. #配置 zabbixserver 连接 mysql
  18. sed -i.ori '115a DBPassword=zabbix' /etc/zabbix/zabbix_server.conf
  19. #添加时区
  20. sed -i.ori '18a php_value date.timezone Asia/Shanghai' /etc/httpd/conf.d/zabbix.conf
  21. #解决中文乱码
  22. yum -y install wqy-microhei-fonts
  23. cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf
  24. #启动服务
  25. systemctl start zabbix-server
  26. systemctl start httpd
  27. #写入开机自启动
  28. chmod +x /etc/rc.d/rc.local
  29. cat >>/etc/rc.d/rc.local<<EOF
  30. systemctl start mariadb.service
  31. systemctl start httpd
  32. systemctl start zabbix-server
  33. EOF #输出信息
  34. echo " 浏览器访问 http://\`hostname -I|awk '{print $1}'`/zabbix"

2.2.3 客户端快速部署脚本

  1. #!/bin/bash #clsn
  2. #设置解析
  3. echo '10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com repo.zabbix.com' >> /etc/hosts
  4. #安装 zabbix 源、aliyu nYUM 源
  5. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
  6. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
  7. rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86\_64/zabbix-release-3.0-1.el7.noarch.rpm
  8. #安装 zabbix 客户端
  9. yum install zabbix-agent -y
  10. sed -i.ori 's#Server=127.0.0.1#Server=172.16.1.61#' /etc/zabbix/zabbix_agentd.conf
  11. systemctl start zabbix-agent.service
  12. #写入开机自启动
  13. chmod +x /etc/rc.d/rc.local
  14. cat >>/etc/rc.d/rc.local<<EOF
  15. systemctl start zabbix-agent.service
  16. EOF

2.3 检测连通性

2.3.1 服务端安装 zabbix-get 检测工具

2.3.2 在服务端进行测试

注意:只能在服务端进行测试

  1. zabbix_get -s 172.16.1.61 -p 10050 -k "system.cpu.load[all,avg1]"
  2. zabbix_get -s 172.16.1.21 -p 10050 -k "system.cpu.load[all,avg1]"

测试结果

  1. [root@m01 ~]# zabbix_get -s 172.16.1.61 -p 10050 -k "system.cpu.load[all,avg1]"
  2. 0.000000
  3. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "system.cpu.load[all,avg1]"
  4. 0.000000

3.1 zabbix 的 web 安装

3.1.1 使用浏览器访问

 http://10.0.0.61/zabbix/setup.php

zabbix - 图20

在检测信息时,可查看具体的报错信息进行不同的解决

zabbix - 图21

选择 mysql 数据库,输入密码即可

zabbix - 图22

host 与 port 不需要修改,name 自定义

zabbix - 图23

确认信息, 正确点击下一步

zabbix - 图24

安装完成、点击 finsh

zabbix - 图25

进入登陆界面 账号Admin密码zabbix 注意 A**大写 **

zabbix - 图26

3.2 添加监控信息

3.2.1 修改监控管理机 zabbix server

配置 >> 主机

zabbix - 图27

主机名称: 要与主机名相同,这是 zabbix server 程序用的

可见名称: 显示在 zabbix 网页上的,给我们看的

zabbix - 图28

修改后,要将下面的已启用要勾上

zabbix - 图29

添加完成就有了管理机的监控主机

zabbix - 图30

3.2.2 添加新的主机

配置 >> 主机 >> 创建主机

zabbix - 图31

注意勾选以启用

zabbix - 图32

然后添加模板,选择 linux OS ,先点小添加,再点大添加。

zabbix - 图33

添加完成,将会又两条监控主机信息

zabbix - 图34

3.2.3 查看监控内容

检测中 >> 最新数据

在最新数据中需要筛选,

zabbix - 图35

输入 ip 或者名字都能够搜索出来

zabbix - 图36

在下面就会列出所有的监控项

zabbix - 图37

3.2.4 查看图像

检测中 >> 图形

选择正确的主机。选择要查看的图形即可出图

zabbix - 图38

4.1 自定义监控

4.1.1 说明

zabbix 自带模板 Template OS Linux (Template App Zabbix Agent) 提供 CPU、内存、磁盘、网卡等常规监控,只要新加主机关联此模板,就可自动添加这些监控项。

需求: 服务器登陆人数不能超过三人,超过三人报警

4.1.2 预备知识

自定义 key 能被 server 和 agent 认可

  1. # 正确的 key
  2. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "system.uname"
  3. Linux cache01 3.10.0-693.el7.x86_64 #1 SMP Tue Aug 22 21:09:27 UTC 2017 x86_64
  4. # 没有登记的,自定义的 key
  5. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user"
  6. ZBX_NOTSUPPORTED: Unsupported item key.
  7. # 写错的 key
  8. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "system.uname1"
  9. ZBX_NOTSUPPORTED: Unsupported item key.

4.2 实现自定义监控

4.2.1 自定义语法

  1. UserParameter=, UserParameter\=login-user,who|wc -l
  2. UserParameter\=login-user,/bin/sh /server/scripts/login.sh

4.2.2 agent 注册

  1. [root@cache01 ~]# cd /etc/zabbix/zabbix_agentd.d/
  2. [root@cache01 zabbix_agentd.d]# vim userparameter_login.conf
  3. UserParameter=login-user,who|wc -l
  4. UserParameter\=login-user2,who|wc -l
  5. UserParameter\=login-user3,who|wc -l

注意: key 名字要唯一,多个 key 以行为分割

修改完成后重启服务

  1. [root@cache01 zabbix_agentd.d]# systemctl restart zabbix-agent.service

在 server 端进行 get 测试

  1. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user"
  2. 3
  3. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user2"
  4. 3
  5. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user3"
  6. 3
  7. [root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user4"
  8. ZBX_NOTSUPPORTED: Unsupported item key.

4.2.3 在 server 端注册 (web 操作)

创建模板

配置 >> 模板 >> 创建模板

zabbix - 图39

点击添加,即可创建出来模板

zabbix - 图40

查看创建出来的模板。↑

创建应用集

应用集类似 (目录 / 文件夹),其作用是给监控项分类。

点击 应用集 >> 创建应用集

zabbix - 图41

自定义应用集的名称,然后点击添加

创建监控项

监控项 >> 创建监控项

zabbix - 图42

键值 — key, 即前面出创建的 login-user。

zabbix - 图43

注意:创建监控项的时候,注意选择上应用集,即之前创建的安全。

zabbix - 图44

创建触发器

触发器的作用:当监控项获取到的值达到一定条件时就触发报警

(__根据需求创建)

触发器 >> 创建触发器

创建触发器,自定义名称,该名称是报警时显示的名称。

表达式,点击右边的添加,选择表达式

严重性自定义。

zabbix - 图45

表达式的定义 ,选择之前创建的监控项,

最新的 T 值为当前获取到的值。

zabbix - 图46

添加完成,能够在触发器中看到添加的情况

zabbix - 图47

创建图形

以图形的方式展示出来监控信息

图形 >> 创建图形

名称自定义,关联上监控项。

zabbix - 图48

主机关联模板

配置 >> 主机

一个主机可以关联多个模板

zabbix - 图49

4.2.4 查看监控的图形

zabbix - 图50

4.3 监控报警

4.3.1 第三方报警平台

http://www.onealert.com

通过 OneAlert 提供的通知分派与排班策略,以及全方位的短信、微信、QQ、电话提醒服务,您可以在最合适的时间,将最重要的信息推送给最合适的人员。

4.3.2 onealert 配置

添加应用,注意添加的是 zabbix

zabbix - 图51

实现微信报警需要关注微信公众号即可。

zabbix - 图52

4.3.3 安装 onealert Agent

  1. 切换到 zabbix 脚本目录 (如何查看 zabbix 脚本目录): ```bash cd /usr/local/zabbix-server/share/zabbix/alertscripts

查看 zabbix 脚本目录

vi /etc/zabbix/zabbix_server.conf 查看 AlertScriptsPath

  1. 2. 获取 OneITSM agent 包:
  2. ```bash
  3. wget http://www.onealert.com/agent/release/oneitsm\_zabbix\_release-1.0.1.tar.gz
  1. 解压、安装。
    1. tar -zxf oneitsm_zabbix_release-1.0.1.tar.gz
    2. cd oneitsm/bin
    3. bash install.sh --# 个人生成的 key
    注:在安装过程中根据安装提示,输入zabbix管理地址、管理员用户名、密码
    1. Zabbix 管理地址: http://10.0.0.61/zabbix/ Zabbix 管理员账号: Admin
    2. Zabbix 管理员密码:
  2. 当提示 “安装成功” 时表示安装成功!
    1. 验证告警集成
    2. 产生新的 zabbix 告警 (problem), 动作状态为“已送达” 表示集成成功。

    4.3.1 如何删除 onealert Agent

① 删除报警媒介类型中的脚本

zabbix - 图53

② 删除创建的用户

zabbix - 图54

③ 删除用户群组

zabbix - 图55

④ 删除创建的动作

zabbix - 图56

4.3.2 触发器响应,发送报警信息

zabbix - 图57

在微信和邮件中,均能收到报警信息。

zabbix - 图58

注意:当状态改变的时候才会发邮件

4.4 监控可视化

4.4.1 聚合图形

最新数据 >> 图形

zabbix - 图59

自定义名称

zabbix - 图60

点击聚合图形的名称,进行更改,添加要显示的图形即可。

zabbix - 图61

4.4.2 幻灯片

添加幻灯片

监测中 >> 复合图形 >> 幻灯片演示

zabbix - 图62

创建幻灯片,名称自定,选择要显示的

zabbix - 图63

幻灯片根据设定的时间自动播放

4.5 模板的共享

4.5.1 主机共享

在主机页打开,全选后点击导出

zabbix - 图64

导入

zabbix - 图65

4.5.2 模板共享

https://github.com/zhangyao8/zabbix-community-repos

zabbix - 图66

5.1 需求说明

实际需求:

公司已经有了 100 台服务器,现在需要使用 zabbix 全部监控起来。

5.2 规划方案

常规监控:cpu,内存,磁盘,网卡 问题:怎样快速添加 100 台机器

方法 1:使用克隆的方式

方法 2:自动注册和自动发现

方法 3:调用 zabbix api 接口 curl 、python

开发自己的运维平台兼容 zabbix 的通道

服务监控,url**监控等特殊监控 **:自定义监控

5.2.1 api 接口使用(curl

  1. curl -i -X POST -H 'Content-Type:application/json' -d'{"jsonrpc": "2.0","method":"user.login","params":{"user":"Admin","password":"zabbix"},"auth": null,"id":0}' "http://10.0.0.61/zabbix/api_jsonrpc.php"
  2. curl -i -X POST -H 'Content-Type:application/json' -d'
  3. {
  4. "jsonrpc": "2.0",
  5. "method": "host.get",
  6. "params": {
  7. "output": [
  8. "hostid",
  9. "host"
  10. ],
  11. "selectInterfaces": [
  12. "interfaceid",
  13. "ip"
  14. ]
  15. },
  16. "id": 2,
  17. "auth": "6a450a8fc3dce71fd310cfe338746578"
  18. }' "http://10.0.0.61/zabbix/api_jsonrpc.php"

5.3 具体实施规划

5.3.1 硬件、系统、网络监控

所有集群节点(所有虚拟机)都监控上

交换机,路由器监控(简单方法:换成端口对应服务器网卡流量监控;标准方法:监控交换机的网卡)

snmp 监控

5.3.2 应用服务监控

  1. 监控备份服务器,简单方法是监控 rsync 端口,如果有其他更佳方案可以说明;
    方法1:监控873端口net.tcp.port[,873]
    方法2:模拟推送拉取文件
  2. 监控 NFS 服务器,使用监控 NFS 进程来判断 NFS 服务器正常,如果有其他更佳方案可以说明;
    方法1:端口(通过111的rpc端口获取nfs端口) net.tcp.port[,111]
    方法2:showmount -e ip|wc -l
  3. 监控 MySQL 服务器,简单方法监控 mysql 的 3306 端口,或者使用 zabbix 提供的 Mysql 模板,如果有其他更佳方案可以说明;
    方法1:端口(通过3306的mysql端口) net.tcp.port[,3306]
    方法2:mysql远程登录
    方法3:使用zabbix agent自带的模板及key
  4. 监控 2 台 web 服务器,简单方法监控 80 端口,如果有其他更佳方案可以说明;
    方法1:端口(通过80的web端口) net.tcp.port[,80]
    方法2:看网页状态码、返回内容==zabbix 自带WEB检测
  5. 监控 URL 地址来更精确的监控我们的网站运行正常;
  6. 监控反向代理服务器,PPTP 服务器等你在期中架构部署的服务。
  7. 监控 Nginx 的 7 种连接状态。

5.3.3 监控服务通用方法

  1. 监控端口 netstat ss lsof ==》 wc -l

  2. 监控进程 ps -ef|grep 进程 | wc -l 试运行一下

  3. 模拟客户端的使用方式监控服务端

web ==》 curl

mysql ==》 select insert

memcache ==》 set 再 get

5.4 实施全网监控

安装客户端脚本,for centos6

  1. #!/bin/bash
  2. #设置解析 # echo '10.0.0.1 mirrors.aliyuncs.com mirrors.aliyun.com repo.zabbix.com' >> /etc/hosts
  3. #安装 zabbix 源、aliyu nYUM 源
  4. curl -o /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
  5. curl -o /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
  6. rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/6/x86\_64/zabbix-release-3.0-1.el6.noarch.rpm
  7. yum clean all
  8. yum clean all #安装 zabbix 客户端
  9. yum install zabbix-agent -y
  10. sed -i.ori 's#Server=127.0.0.1#Server=172.16.1.61#' /etc/zabbix/zabbix_agentd.conf /etc/init.d/zabbix-agent start #写入开机自启动
  11. chmod +x /etc/rc.d/rc.local
  12. cat >>/etc/rc.d/rc.local<<EOF /etc/init.d/zabbix-agent start
  13. EOF

5.4.1 使用自动发现规则

添加自动发现规则

zabbix - 图67

创建发现动作

zabbix - 图68

查看自动发现的机器。

zabbix - 图69

5.4.2 监控备份服务器

利用系统自带键值进行监控net.tcp.listen[port] 创建新的模板

zabbix - 图70

在服务端进行测试

  1. [root@m01 ~]# zabbix_get -s 172.16.1.41 -p 10050 -k "net.tcp.listen[873]"
  2. 1 # 1 为端口在监听 0 为端口未监听

将模板添加到主机

zabbix - 图71

5.4.3 监控 NFS 服务器

创建 nfs 监控模板

使用 proc.num[,,,] 键值,检测 nfs 进程的数量

zabbix - 图72

在服务端进行测试

  1. [root@m01 ~]# zabbix_get -s 172.16.1.31 -p 10050 -k "proc.num[,,,rpc]"
  2. 5
  3. [root@m01 ~]# zabbix_get -s 172.16.1.31 -p 10050 -k "proc.num[nfsd,,,]
  4. 8

将模板绑定到主机

zabbix - 图73

5.4.4 监控 MySQL 服务器

将自带的 mysqlkey 值加上 mysql 的账户密码,否则不能获取到数据。

zabbix - 图74

使用系统自带模板 net.tcp.port[,port] 利用自带的监控端口键值进行监控

zabbix - 图75

添加新的 mysql 监控项端口

zabbix - 图76

  1. [root@m01 ~]# zabbix_get -s 172.16.1.51 -p 10050 -k "net.tcp.port[,3306]"
  2. 1 #检查是否能建立 TCP 连接到指定端口。返回 0 - 不能连接;1 - 可以连接

将模板关联到主机

zabbix - 图77

5.4.5 监控 web 服务器

创建监控模板 监控 nginx 服务与 80 端口

  1. proc.num\[<name>,<user>,<state>,<cmdline>\] 进程数。返回整数
  2. net.tcp.port\[<ip>,port\] 检查是否能建立 TCP 连接到指定端口。返回 0 - 不能连接;1 - 可以连接

zabbix - 图78

  1. [root@m01 ~]# zabbix_get -s 172.16.1.8 -p 10050 -k "proc.num[,,,nginx]"
  2. 2
  3. [root@m01 ~]# zabbix_get -s 172.16.1.8 -p 10050 -k "net.tcp.port[,80]"
  4. 1

将模板关联到主机

zabbix - 图79

5.4.6 监控 URL 地址

创建监测页面

  1. echo ok >> /application/nginx/html/www/check.html

测试监控面页

  1. [root@web03 ~]# for ip in 7 8 9 ;do curl 10.0.0.$ip/check.html ;done
  2. ok
  3. ok
  4. ok

创建 web 监测模板

创建应用集

zabbix - 图80

创建 Web__场景

zabbix - 图81

创建图形


zabbix - 图82

将模板关联到主机

zabbix - 图83

监测结果

zabbix - 图84

5.4.7 监控反向代理服务器

创建自定义 key

  1. [root@lb01 ~]# cat /etc/zabbix/zabbix_agentd.d/userparameter_nk.conf
  2. UserParameter=keep-ip,ip a |grep 10.0.0.3|wc -l

在服务端测试

  1. [root@m01 ~]# zabbix_get -s 172.16.1.5 -p 10050 -k "keep-ip"
  2. 1
  3. [root@m01 ~]# zabbix_get -s 172.16.1.6 -p 10050 -k "keep-ip"
  4. 0

在 web 界面添加模板

zabbix - 图85

将模板关联到主机

zabbix - 图86

5.4.8 监控 Nginx 的 7 种连接状态

  1. nginx 服务器显示 status
  2. ……
  3. location /status {
  4. stub_status on;
  5. access_log off;
  6. }
  7. ……
  1. [root@web01 ~]# for ip in 7 8 9 ;do curl 172.16.1.$ip/status ;done
  2. Active connections: 1 server accepts handled requests 73 73 69 Reading: 0 Writing: 1 Waiting: 0
  3. Active connections: 1 server accepts handled requests 134 134 127 Reading: 0 Writing: 1 Waiting: 0
  4. Active connections: 1 server accepts handled requests 7 7 7 Reading: 0 Writing: 1 Waiting: 0

在 nginx 服务器上添加 key

  1. cat >/etc/zabbix/zabbix_agentd.d/userparameter_nginx_status.conf <<'EOF' UserParameter\=nginx_active,curl -s 127.0.0.1/status|awk '/Active/ {print $NF}' UserParameter\=nginx_accepts,curl -s 127.0.0.1/status|awk 'NR3 {print $1}' UserParameter\=nginx_handled,curl -s 127.0.0.1/status|awk 'NR3 {print $2}' UserParameter\=nginx_requests,curl -s 127.0.0.1/status|awk 'NR3 {print $3}' UserParameter\=nginx_reading,curl -s 127.0.0.1/status|awk 'NR4 {print $2}' UserParameter\=nginx_writing,curl -s 127.0.0.1/status|awk 'NR4 {print $4}' UserParameter\=nginx_waiting,curl -s 127.0.0.1/status|awk 'NR4 {print $6}'EOF

服务端测试

  1. [root@m01 ~]# zabbix_get -s 172.16.1.7 -p 10050 -k "nginx_waiting"
  2. 0
  3. [root@m01 ~]# zabbix_get -s 172.16.1.8 -p 10050 -k "nginx_waiting"
  4. 0
  5. [root@m01 ~]# zabbix_get -s 172.16.1.9 -p 10050 -k "nginx_waiting"
  6. 0

在 zabbix-web 上添加

zabbix - 图87

监控项

zabbix - 图88

添加图形

zabbix - 图89

将模板关联到主机

zabbix - 图90

查看添加的图形

zabbix - 图91

zabbix - 图92

6.1 自动注册与自动注册

6.1.1 简介

自动发现:

zabbix Server 主动发现所有客户端,然后将客户端登记自己的小本本上,缺点 zabbix server 压力山大(网段大,客户端多),时间消耗多。

自动注册:

zabbix agent 主动到 zabbix Server 上报到,登记;缺点 agent 有可能找不到 Server(配置出错)

6.1.2 两种模式

被动模式:默认 agent 被 server 抓取数据 (都是在 agent 的立场上说)
主动模式:agent 主动将数据发到 server 端 (都是在 agent 的立场上说)

注意: 两种模式都是在 agent**上进行配置 **

zabbix 的使用要在 hosts**文件中预先做好主机名的解析 **

6.2 自动发现 — 被动模式

第一个里程碑:完成之前的安装

第二个里程碑:配置 agent 客户端

zabbix agent 安装完毕,注意配置 Server=172.16.1.61

第三个里程碑:在 web 界面上进行配置

  1. web界面:配置 >> 自动发现 >> Local network
  2. 使用自带的自动发现规则(进行修改)即可

zabbix - 图93

在 ip 范围内输入 ip,注意格式;
延迟在实际的生产环境中要大一些,实验环境可以小一些

zabbix - 图94

创建发现动作

  1. 配置 >> 动作 >> Auto discovery. Linux servers.

zabbix - 图95

① 配置动作

zabbix - 图96

② 在条件中添加条件,让添加更准确

zabbix - 图97

③ 在操作中添加

a) 添加主机与启用主机

zabbix - 图98

然后等待者客户端自动上门就好😏

6.3 自动注册 — 主动模式

第一个里程碑:zabbix Server 安装完毕 (完成)

第二个里程碑:zabbix agent 安装完毕,需要额外增加的配置

  1. vim /etc/zabbix/zabbix_agentd.conf
  2. ServerActive\=172.16.1.61
  3. # Hostname=Zabbix server
  4. HostnameItem=system.hostname
  5. systemctl restart zabbix-agent.service
  6. netstat -tunlp|grep zabbix

源文件与修改后对比

zabbix - 图99
zabbix - 图100

第三个里程碑:在 web 见面上进行配置

1 配置 >> 动作 >> 事件源 (自动注册) >> 创建动作

zabbix - 图101

创建动作,添加名称即可

zabbix - 图102

条件中也无需修改

zabbix - 图103

在动作中添加动作

(添加主机、添加到主机群组、链接到模板)

zabbix - 图104

添加完动作后,等待就行了

注意:重启客户端可以加速发现。但是在生产环境中勿用。

zabbix - 图105

7.1 分布式监控

7.1.1 作用

分担压力,减轻负载

多机房监控

zabbix Server ===》 zabbix agent (只能同一个局域网监控)

分担压力,降低负载

zabbix Server ===》 zabbix proxy ===》zabbix agent1 agent2 agent3 。。。 172.16.1.61 172.16.1.21 172.16.1.0/24
===》 zabbix proxy ===》zabbix agent4 agent5 agent6 …

多机房监控

  1. zabbix Server(北京) ==》 zabbix proxy(每个机房搭建) ==》 zabbix agent 122.71.240.233/172.16.1.61 122.71.241.11/172.16.2.21 172.16.2.0/24

7.1.2 环境说明

zabbix server m01
zabbix proxy cache01
zabbix agent cache01

7.1.3 配置 zabbix proxy

第一个里程碑:配置 zabbix yum 源,并安装 proxy

  1. rpm -ivh http://repo.zabbix.com/zabbix/3.0/rhel/7/x86\_64/zabbix-release-3.0-1.el7.noarch.rpm
  2. yum install zabbix-proxy-mysql -y

第二个里程碑:安装数据库

zabbix proxy 也需要数据库,这个数据库不是用于存储监控数据的 只是用于存储配置信息

  • 安装数据库

    1. yum -y install mariadb-server
    2. systemctl start mariadb.service
  • 建立数据库

    1. mysql
    2. create database zabbix_proxy character set utf8 collate utf8_bin;
    3. grant all privileges on zabbix_proxy.* to zabbix@'localhost' identified by 'zabbix';
    4. exit

    导入数据文件

    1. zcat /usr/share/doc/zabbix-proxy-mysql-3.0.13/schema.sql.gz |mysql -uzabbix -pzabbix zabbix_proxy

    配置 zabbix proxy 连接数据库

    1. sed -i.ori '162a DBPassword=zabbix' /etc/zabbix/zabbix_proxy.conf
    2. sed -i 's#Server=127.0.0.1#Server=172.16.1.61#' /etc/zabbix/zabbix_proxy.conf
    3. sed -i 's#Hostname=Zabbix proxy#Hostname=cache01#' /etc/zabbix/zabbix_proxy.conf # Hostname 作为后面

    添加的代理程序名称,要保持一致

启动

  1. systemctl restart zabbix-proxy.service

检查端口

  1. [root@cache01 ~]# netstat -lntup |grep zabbix
  2. tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 105762/zabbix_agent
  3. tcp 0 0 0.0.0.0:10051 0.0.0.0:* LISTEN 85273/zabbix_proxy
  4. tcp6 0 0 :::10050 :::* LISTEN 105762/zabbix_agent
  5. tcp6 0 0 :::10051 :::* LISTEN 85273/zabbix_proxy

第三个里程碑: 修改 agent 配置指向 proxy

  1. [root@cache01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
  2. Server=172.16.1.61
  3. ServerActive\=172.16.1.61
  4. [root@cache01 ~]# sed -i 's#172.16.1.61#172.16.1.21#g' /etc/zabbix/zabbix_agentd.conf
  5. [root@cache01 ~]# grep ^Server /etc/zabbix/zabbix_agentd.conf
  6. Server=172.16.1.21
  7. ServerActive\=172.16.1.21
  8. [root@cache01 ~]# systemctl restart zabbix-agent.service

第四个里程碑: web 界面添加代理

管理 >> agent 代理程序 >> 创建代理

zabbix - 图106

代理程序名称要填写主机名

zabbix - 图107

稍等片刻就能在程序中出现代理

zabbix - 图108

在主机中能发现主机代理

zabbix - 图109

7.2 SNMP 监控

7.2.1 使用范围

无法安装 agent 很多前辈的监控软件都可以监控各种设备 都是通过 snmp 监控

snmp simple network manager protocol 简单网络管理协议

简单网络管理协议(SNMP),由一组网络管理的标准组成,包含一个应用层协议(application layer protocol)、数据库模型(database schema)和一组资源对象。该协议能够支持网络管理系统,用以监测连接到网络上的设备是否有任何引起管理上关注的情况。

7.2.2 安装 snmp 程序

  1. yum -y install net-snmp net-snmp-utils

7.2.3 配置 snmp 程序

  1. sed -i.ori '57a view systemview included .1' /etc/snmp/snmpd.conf
  2. systemctl start snmpd.service

7.2.4 测试 snmp

  1. [root@m01 ~]# snmpwalk -v 2c -c public 127.0.0.1 sysname
  2. SNMPv2-MIB::sysName.0 = STRING: m01

说明:

snmpwalk 类似 zabbix_get

-v 2c 指定使用 snmp 协议的版本 snmp 分为 v1 v2 v3

-c public 指定暗号

sysname 类似 zabbix 的 key

7.2.5 在 web 界面进行配置

添加新的主机,注意使用 snmp 接口

zabbix - 图110

选择模板,注意使用 SNMP 的模板

zabbix - 图111

添加完成就能够在主机中看到 snmp 监控对的主机

zabbix - 图112

7.2.6 附录

  1. ##SNMP OID列表 监控需要用到的OID
  2. http://www.ttlsa.com/monitor/snmp-oid/ cmdb 资源管理系统