目录
一、监控介绍
二、监控软件区别
三、zabbix监控架构
四、zabbix监控介绍
1、zabbix优点
2、zabbix缺点
3、zabbix监控系统监控对象
4、zabbix监控方式
五、zabbix相关组件
1、组件介绍
2、zabbix-server配置文件详解
六、zabbix常用术语的含义
七、zabbix监控部署
1、部署zabbix-server和zabbix-agent
2、监控项
3、创建监控图表
4、触发器
5、监控项值预处理
6、使用自定义key
7、zabbix监控php
8、zabbix监控图形中出现乱码解决方案
八、zabbix报警媒介
1、zabbix企业微信报警
2、zabbix邮箱报警,建议使用163邮箱
3、zabbix关联睿象云,电话报警
九、zabbix自动发现
在学习zabbix之前先提出几个问题:
zabbix是什么?
zabbix用来做什么?
zabbix优缺点?
zabbix工作模式?
zabbix组件?
zabbix常见监控项?
1、cacti
Cacti 是一套基于 PHP、MySQL、SNMP 及 RRD Tool 开发的监测图形分析工具,Cacti 是使用轮询的方式由主服务器向设备发送数据请求来获取设备上状态数据信息的,如果设备不断增多,这个轮询的过程就非常的耗时,轮询的结果就不能即时的反应设备的状态了。Cacti 监控关注的是对数据的展示,却不关注数据异常后的反馈。如果凌晨 3 点的时候设备的某个数据出现异常,除非监控人员在屏幕前发现这个异常变化,否则是没有任何报警机制能够让我们道出现了异常。
2、Nagios
Nagios 是一款开源的免费网络监控报警服务,能有效监控Unix、Windows和Linux的主机状态,交换机、路由器和防火墙等网络设置,打印机、网络投影、网络摄像等设备。在系统或服务状态异常时发出邮件或短信报警第一时间通知运维人员,在状态恢复后发出正常的邮件或短信通知。Nagios 有完善的插件功能,可以方便的根据应用服务扩展功能。
Nagios 已经可以支持由数万台服务器或上千台网络设备组成的云技术平台的监控,它可以充分发挥自动化运维技术特点在设备和人力资源减少成本。只是 Nagios 无法将多个相同应用集群的数据集合起来,也不能监控到集群中特殊节点的迁移和恢复。
3、ganglia
Ganglia 是 UC Berkeley 发起的一个开源集群监视项目,设计用于测量数以千计的节点。Ganglia 的核心包含 gmond、gmetad 以及一个 Web 前端。主要是用来监控系统性能,如:CPU 、内存、硬盘利用率, I/O 负载、网络流量情况等,通过曲线很容易见到每个节点的工作状态,对合理调整、分配系统资源,提高系统整体性能起到重要作用,目前是监控HADOOP 的官方推荐服务。
4、Zabbix
zabbix是什么:
Zabbix 是一个基于 WEB 界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。Zabbix 是由 Alexei Vladishev 创建,目前由 Zabbix SIA 在持续开发和支持。Zabbix 是一个企业级的分布式开源监控方案。 Zabbix 是一款能够监控各种网络参数以及服务器健康性和完整性的软件。
zabbix能做什么:
zabbix 能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。Zabbix使用灵活的通知机制,允许用户为几乎任何事件配置基于邮件的告警。这样可以快速反馈服务器的问题。
基于已存储的数据,Zabbix提供了出色的报告和数据可视化功能。这些功能使得Zabbix成为容量规划的理想方案。
Zabbix支持主动轮询和被动捕获。Zabbix所有的报告、统计信息和配置参数都可以通过基于Web的前端页面进行访问。
1、nagios图形不好看,可以安装图形插件,但效果也不好看
2、nagios一般情况下如果需要图形可以和cacti配合使用
3、cacti的监控是轮询监控,效率低,图形相对nagios比较好看
4、zabbix和nagios因为是并发监控,对cpu的要求更高,zabbix在性能和功能上都强大很多,zabbix的图形相当漂亮,支持多种监控方式 zabbix-agent snmp 等等,支持分布式监控,能监控的agent非常多,zabbix有图形的web配置界面,配置简洁,zabbix支持自动发现功能。
zabbix-server
|
------------------------------
| |
---proxy--- ---proxy---
| | | |
agent agent agent agent
1、开源,无软件成本投入
2、Server 对设备性能要求低
3、支持设备多,自带多种监控模板
4、支持分布式集中管理,有自动发现功能,可以实现自动化监控
5、开放式接口,扩展性强,插件编写容易
6、Api 的支持,方便与其他系统结合
需在被监控主机上安装 agent,所有数据都存在数据库里, 产生的数据据很大,瓶颈主要在数据库。
agent插件主要用来监控数据库、集群、应用软件一类的
IPMI插件主要用来监控硬件,比如服务器,存储,网络设备
SNMP插件主要用来监控网络流量
被动模式:
相对于agent而言;server向agent请求获取配置的各监控项相关的数据,agent接收请求、获取数据并响应给server。
主动模式:
相对于agent而言;agent(active),向server请求与自己相关监控项配置,主动地将server配置的监控项相关的数据发送给server。
1、zabbix server
zabbix server 是agent 程序报告系统可用性、系统完整性和统计数据的核心组件,是所有配置信息、统计信息和操作数据的核心存储器。
2、zabbix数据库存储
配置信息以及搜集到的数据存储在数据库
3、zabbix web界面
目的:能够从任何地方访问到zabbix,该界面是zabbix server的一部分,通常(但不一定)跟Zabbix Server运行在同一台物理机器上。
如果使用 SQLite,Zabbix Web 界面必须要跟Zabbix Server运行在同一台物理机器上。
4、Zabbix Proxy 代理服务器
代替zabbix server搜集数据并转给server,这只是官方提供的一种方案。我们没必要一定要去用,只有要监控的服务器过多的时候或者跨区域监控的时候才会用到代理,主要是用来帮助单台zabbix server分担负载压力。
5、Zabbix Agent 监控代理
Zabbix agents监控代理 部署在监控目标上,能够主动监控本地资源和应用程序,并将收集到的数据报告给Zabbix Server。
6、zabbix数据流
数据流就是监控某个指标的流程。
1、为Server X创建一个host并关联一个用于对CPU进行监控的监控项(Item)。
2、创建一个Trigger,设置成当CPU负载过高时会触发
3、Trigger被触发,发送告警邮件
虽然看起来有很多步骤,但是使用模板的话操作起来其实很简单,Zabbix 这样的设计使得配置机制非常灵活易用。
1、Zabbix 日志
默认用文件记录,也可以发送给我们的 rsyslog 日志记录系统,如果我们选择默认,则日志存放在 LogFile=/var/log/zabbix/zabbix_server.log 中,也可以自己设置。
2、日志的滚动
默认值为1,表示滚动。我们设为0则表示不滚动。当数据特别多的时候,我们也可以设置成为1,然后在 Maximum size of log file in MB 设置当数据文件最大到多少时会自动滚动。
3、日志的级别
一共有6个级别。我们可以根据自己的需要来设置级别。其中0表示输出最少的信息,5表示输出最详细的信息,默认值为3,设置为3的话就表示,0、1、2、3四个级别都显示。考虑到生产系统中的压力时,这里的信息,如果没有必要的话,越简单越好,只要在出错的时候,我们可以依据其进行排错即可。
4、数据库相关的设置
DBHost=192.168.37.111 #数据库对外的主机
DBName=zabbix #数据库名称
DBUser=zabbix #数据库用户
DBPassword=keer #数据库密码
DBPort=3306 #数据库启动端口
1、主机(host)
一台你想监控的网络设备,用IP或域名表示
2、主机组(host group)
主机的逻辑组;它包含主机和模板。一个主机组里的主机和模板之间并没有任何直接的关联。通常在给不同用户组的主机分配权限时候使用主机组。
3、监控项(item)
你想要接收的主机的特定数据,一个度量数据。
4、触发器(trigger)
一个被用于定义问题阈值和“评估”监控项接收到的数据的逻辑表达式 当接收到的数据高于阈值时,触发器从“OK”变成“Problem”状态。当接收到的数据低于阈值时,触发器保留/返回一个“OK”的状态。
5、事件(event)
单次发生的需要注意的事情,例如触发器状态改变或发现有监控代理自动注册
6、异常(problem)
一个处在“异常”状态的触发器
7、动作(action)
一个对事件做出反应的预定义的操作
一个动作由操作(例如发出通知)和条件(当时操作正在发生)组成
8、升级(escalation)
一个在动作内执行操作的自定义场景; 发送通知/执行远程命令的序列
9、媒介(media)
发送告警通知的手段;告警通知的途径
10、通知(notification)
利用已选择的没题途径把跟事件有关的信息发给用户
11、远程命令(remote command)
一个预定义好的,满足一些条件的情况下,可以在被监控主机上自动执行的命令
12、模板(template)
一组可以被应用到一个或多个主机上的实体(监控项,触发器,图形,聚合图形,应用,LLD,Web场景)的集合
模板的任务就是加快对主机监控任务的实施;也可以使监控任务的批量修改更简单。模板是直接关联到每台单独的主机上。
13、应用(application)
一组监控项组成的逻辑分组
14、web场景(web scenario)
利用一个或多个HTTP请求来检查网站的可靠性
15、前端(frontend)
zabbix提供的web界面
16、zabbix API
zabbix API允许你是用json RPC协议(是一个无状态且轻量级的远程过程调用(RPC协议),其传递内容透过JSON为主)来创建、更新和获取zabbix对象(如主机、监控项、图形和其他)信息或者执行任何其他的自定义的任务
17、zabbix server
zabbix软件实现监控的核心程序,主要功能是与zabbix proxies和Agents进行交互、触发器计算、发送告警通知;并将数据集中保存等
18、zabbix agent
监控谁就把agent安装在谁上边,即部署在监控对象上,能够主动监控本地资源和应用的程序
zabbix agent 部署在监控的目标上,主动监测本地的资源和应用(硬件驱动,内存,处理器统计的等)
zabbix agent 收集本地的操作信息并将数据报告给zabbix server 用于进一步处理。一旦出现异常(比如硬盘空间已满或者有崩溃的服务进程),zabbix server会主动警告管路员指定机器上的异常。zabbix agents的极端高效源于它可以调用本地系统来完成统计数据的搜集。
19、被动(passive)和主动(active)检查
zabbix agent可以执行被动和主动两种检查方式
1、被动检查(passive check)模式中,agent应答数据请求,zabbix server(或者proxy)询问agent数据,rucpu的负载情况,然后zabbix agent回送结果
2、主动检查(active checks)出路过程相对复杂。agent必须首先从zabbixserver索取监控项列表以进行独立处理,然后周期性地发送新的值给server
执行被动和主动检查是通过选择相应的监测项目类型来配置的。item type.zabbix agent处理监控项类型有zabbix agent和zabbix agent(active)
20、zabbix proxy
一个帮助 Zabbix Server 收集数据,分担Zabbix Server的负载的程序。
Zabbix Proxy 是一个可以从一个或多个受监控设备收集监控数据,并将信息发送到Zabbix sever的进程,基本上是代表 sever工作的。 所有收集的数据都在本地进行缓存,然后传送到 proxy 所属的 Zabbix sever。
部署 Proxy 是可选的,但是可能非常有益于分散单个 Zabbix sever 的负载。 如果只有 proxy 收集数据,sever上的进程就会减少 CPU 消耗和磁盘 I / O 负载。
Zabbix proxy 是完成远程区域、分支机构、没有本地管理员的网络的集中监控的理想解决方案。
Zabbix proxy需要使用独立的数据库。
实验环境:
zabbix-server:192.168.242.136
zabbi-agent:192.168.242.137
关闭防火墙、关闭selinux、保证yum仓库可用、保证网络可用
实验思路:
1、安装仓库
2、下载zabbix-server-mysql zabbix-agent (两个服务安装在一起是为了自己监控自己,要确保这两个服务都安装上了,刚才下载完没报错但是zabbix-server-mysql没有安装上,导致没有/etc/zabbix/zabbix_server.conf这个文件,而且zabbix-server-mysql没安装上,后边就无法导入数据库)
3、安装zabbix前端
yum -y install centos-release-scl (这个仓库提供插件)
4、编辑zabbix仓库,/etc/yum.repos.d/zabbix.repo并启用zabbix-frontend存储库。
5、安装zabbix前端包
yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
6、安装mysql5.7
7、启动mysqld,查看密码,更改密码,创建zabbix数据库并设置字符集为utf-8,授权账户访问zabbix库 ()
8、数据导入
zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
9、为Zabbix前端配置PHP
vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf 取消注释并为您设置正确的时区。
php_value[date.timezone] = Asia/Shanghai
10、为Zabbix服务器配置数据库
DBName=zabbix
DBUser=zabbix
数据库名字跟用户要跟刚才创建的一致
11、重启zabbix
systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
浏览器访问
按照提示填写数据库的名字,用户,密码
实验过程:
1、zabbix-server端部署:
zabbix-server:
[root@localhost ~]# rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@localhost ~]# yum -y install zabbix-server-mysql zabbix-agent
[root@localhost ~]# yum -y install centos-release-scl #(这个仓库提供插件)
[root@localhost ~]# vim /etc/yum.repos.d/zabbix.repo #启用zabbix-frontend
...
[zabbix-frontend]
name=Zabbix Official Repository frontend - $basearch
baseurl=http://repo.zabbix.com/zabbix/5.0/rhel/7/$basearch/frontend
enabled=1
gpgcheck=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX-A14FE591
....
[root@localhost ~]# yum -y install zabbix-web-mysql-scl zabbix-apache-conf-scl
安装mysql5.7,启动mysql5.7,修改初始密码,进入数据库(略)
创建zabbix数据库,并设置字符集为utf-8
mysql> create database zabbix character set utf8 collate utf8_bin;
授权账户访问zabbix库
mysql> grant all on zabbix.* to zabbix@'%' identified by '1';
数据库导入:
[root@localhost ~]# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -p zabbix
Enter password: #用户zabbix的密码
为Zabbix前端配置PHP:
[root@localhost ~]# vim /etc/opt/rh/rh-php72/php-fpm.d/zabbix.conf,
.....
php_value[date.timezone] = Asia/Shanghai #找到这一项取消注释并为您设置正确的时区。
为Zabbix服务器配置数据库:
[root@localhost ~]# vim /etc/zabbix/zabbix_server.conf
....
DBName=zabbix
... #数据库名字跟用户要跟刚才创建的一致,
DBUser=zabbix
...
DBPassword=1
...
重启zabbix
[root@localhost ~]# systemctl restart zabbix-server zabbix-agent httpd rh-php72-php-fpm
浏览器测试访问
使用浏览器访问192.168.242.136/zabbix
,第一次访问时需要进行一些初始化的设置,我们按照提示操作即可:
出现以下登录界面,Zabbix监控平台有默认管理员用户;默认用户名Admin,密码为zabbix;
zabbix有内置的中文界面,我们可以调成中文
2、zabbix-agent端部署:
1、安装zabbix仓库
[root@localhost ~]# rpm -ivh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
2、下载zabbix-agent
[root@localhost ~]# yum -y install zabbix-agent
3、编辑zabbix-agent的配置文件
[root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
....
Server=192.168.242.136 #这里的ip是zabbix-server的
...
ServerActive=192.168.242.136 #这里的ip是zabbix-server的
...
Hostname=zcg
...
UnsafeUserParameters=1 #将注释取消并设置为1,是否限制用户自定义 keys 使用特殊字符 1是可以启用特殊字符 0是不可以启用特殊字符
4、启动zabbix-agent
[root@localhost ~]# systemctl start zabbix-agent
创建主机群组(名字自定义)
创建主机
(下面这个图中的ip写错了没及时改正。应该是192.168.242.137)
我们得有需要监控的内容,就以nginx为例,设置监控项,监控网页加载时间。(监控案例:网站访问延迟(范文一个网站所需要的时间我们称之为是访问延迟,如果打开网站时间过长会影响用户体验))
[root@localhost ~]# yum -y install nginx
[root@localhost ~]# echo "hello xiaoxiongmao" > /usr/share/nginx/html/index.html
[root@localhost ~]# systemctl start nginx
zabbix-server配置监控项
(下图是键值的选择)
设置触发器,因为是模拟实验,所以我们就把触发条件设置的非常小,也就是网页加载时间超过这个数值,zabbix记录这个异常。
访问nginx
可以看到zabbix产生了一个报警记录,产生原因:我们访问ngixn页面的连接时间大于我们所设定的值
在企业中,出现报警后,如果我们人工修复了这个问题,报警信息会自动取消,我们现在模拟环境,可以通过修改我们设置的触发条件,让这个报警信息取消。
再去仪表盘查看报警信息在不在(可能需要等待一分钟),可以看到不在了
预处理允许为接收到的监控项值定义转换规则。 在将值保存到数据库之前,可以进行一次或多次转换。 转换按照它们定义的顺序执行。 预处理是由Zabbix server或者Zabbix proxy (代理监控项)执行。
预处理规则可以在创建监控项的时候添加,也可以在原有监控项上添加
可以根据需要选择预处理规则。
以最简单的自定义倍数为例
自定义用户参数,也就是自定义key,有时,你可能想要运行一个代理检查,而不是Zabbix的预定义,你可以编写一个命令来检索需要的数据,并将其包含在代理配置文件("UserParameter"配置参数)的用户参数中。
语法格式:
UserParameter=,
A user parameter also contains a key 一个用户参数也包含一个键
The key will be necessary when configuring an item 在配置监控项时,key是必需的
Note: Need to restart the agent 注意:需要重新启动agent 服务
例如:
[root@localhost ~]# cd /etc/zabbix/zabbix_agentd.d/
[root@localhost zabbix_agentd.d]# vim memused.conf
UserParameter=memory.used,free | awk '/^Mem/{print $3}'
[root@localhost zabbix_agentd.d]# systemctl restart zabbix-agent
然后在zabbix-web界面添加这个监控项
然后给这个监控项创建图形(过程略了)
用法升级
[root@localhost zabbix_agentd.d]# cat /proc/meminfo
MemTotal: 1867024 kB
MemFree: 1277328 kB
MemAvailable: 1554564 kB
Buffers: 2108 kB
Cached: 398496 kB
SwapCached: 0 kB
Active: 320984 kB
Inactive: 145064 kB
......
[root@localhost zabbix_agentd.d]# cat /proc/meminfo|awk '/MemFree/{print $2}'
1277328
我们要监控内存的空闲量,就要创建一个相关配置文件,要监控内存可用情况,又要创建一个,所有可以在这个基础上升级一下
[root@localhost zabbix_agentd.d]# vim memory_usage.conf
UserParameter=memory.stats[*],cat /proc/meminfo |awk '/^$1/{print $$2}'
可以在zabbix-server端测试一下
[root@localhost ~]# zabbix_get -s 192.168.242.137 -p 10050 -k "memory.stats[MemTotal]"
995684
[root@localhost ~]# zabbix_get -s 192.168.242.137 -p 10050 -k "memory.stats[MemFree]"
233732
[root@localhost ~]# zabbix_get -s 192.168.242.137 -p 10050 -k "memory.stats[Buffers]"
2104
同样可以创建监控项
创建图形的时候可以选择多个监控项
查看
zabbix-agent端:
1、下载php-fpm
[root@localhost ~]# yum -y install php-fpm php
2、修改php配置文件
[root@localhost ~]# vim /etc/php-fpm.d/www.conf
....找到以下内容,修改
user = nginx
group = nginx
pm.status_path = /php-fpm-status #php-fpm 的状态监测页 修改完记得把注释取消
ping.path = /ping #ping 接口,存活状态是否ok
ping.response = pong #响应内容pong
[root@localhost ~]# systemctl start php-fpm
3、下载nginx使nginx支持php
[root@localhost ~]# yum -y install nginx
[root@localhost ~]# vim /etc/nginx/nginx.conf
user nginx;
....
server {
listen 80;
server-name localhost;
location ~ \.php$ {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
location ~* /(php-fpm-status|ping) {
fastcgi_pass 127.0.0.1:9000;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $fastcgi_script_name;
include fastcgi_params;
access_log off;
}
}
...
[root@localhost ~]# nginx -t
[root@localhost ~]# systemctl start nginx
4、用其他机器查询验证
[root@localhost ~]# curl 192.168.242.137/php-fpm-status
pool: www
process manager: dynamic
start time: 27/Sep/2020:16:46:32 +0800
start since: 5
accepted conn: 1
listen queue: 0
max listen queue: 0
listen queue len: 128
idle processes: 4
active processes: 1
total processes: 5
max active processes: 1
max children reached: 0
slow requests: 0
注意:
pool – fpm池子名称,大多数为www
process manager – 进程管理方式,值:static, dynamic or ondemand. dynamic
start time – 启动日期,如果reload了php-fpm,时间会更新
start since – 运行时长
accepted conn – 当前池子接受的请求数
listen queue – 请求等待队列,如果这个值不为0,要增加FPM的进程数量
max listen queue – 请求等待队列最高的数量
listen queue len – socket等待队列长度
idle processes – 空闲进程数量
active processes – 活跃进程数量
total processes – 总进程数量
max active processes – 最大的活跃进程数量(FPM启动开始算)
max children reached - 进程最大数量限制的次数,如果这个数量不为0,那说明你的最大进程数量太小了,请改大一点。
slow requests – 启用了php-fpm slow-log,缓慢请求的数量
5、zabbix-agent端设置用户参数(自定义key)
[root@localhost ~]# cd /etc/zabbix/zabbix_agentd.d
[root@localhost ~]# vim php.conf
UserParameter=php_status[*],curl -s http://192.168.242.137/php-fpm-status | awk '/^$1/{print $$NF}'
6、zabbix-server端验证
[root@localhost ~]# zabbix_get -s 192.168.242.137 -p10050 -k "php_status[idle]"
5
7、zabbix-server的web界面展示
zabbix web界面创建监控php的监控项
创建图形
[root@zabbix-server zabbix]# cd /usr/share/zabbix/assets/fonts/
[root@zabbix-server fonts]# mv graphfont.ttf graphfont.ttf.bak
上传新的字符集文件
[root@zabbix-server fonts]# mv simkai.ttf graphfont.ttf
将原有字符集文件备份
1、注册企业微信
注册完成企业微信后,自己创建一个企业,并邀请员工到企业
2、创建部门,并在部门内添加员工
3、创建企业应用
4、 做完上边的步骤之后,我们需要搜集一些信息。如下:
企业id:wwcfe382c022903fa6
部门id:2
应用id:1000002
密钥:sirryHyD_alJeWbrjyrnxvQTEe4NNm1dU_6JRsKLzoA
密钥查看位置:
5、准备企业微信脚本
以下的操作都是在zabbix-server端做的。
[root@localhost ~]# vim /usr/lib/zabbix/alertscripts/wechat.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import urllib,urllib2,json
import sys
reload(sys)
sys.setdefaultencoding( "utf-8" )
class WeChat(object):
__token_id = ''
# init attribute
def __init__(self,url):
self.__url = url.rstrip('/')
self.__corpid = 'wwcfe382c022903fa6' #企业id
self.__secret = 'sirryHyD_alJeWbrjyrnxvQTEe4NNm1dU_6JRsKLzoA' #密钥
# Get TokenID
def authID(self):
params = {'corpid':self.__corpid, 'corpsecret':self.__secret}
data = urllib.urlencode(params)
content = self.getToken(data)
try:
self.__token_id = content['access_token']
# print content['access_token']
except KeyError:
raise KeyError
# Establish a connection
def getToken(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'gettoken?'
try:
response = urllib2.Request(url + data)
except KeyError:
raise KeyError
result = urllib2.urlopen(response)
content = json.loads(result.read())
return content
# Get sendmessage url
def postData(self,data,url_prefix='/'):
url = self.__url + url_prefix + 'message/send?access_token=%s' % self.__token_id
request = urllib2.Request(url,data)
try:
result = urllib2.urlopen(request)
except urllib2.HTTPError as e:
if hasattr(e,'reason'):
print 'reason',e.reason
elif hasattr(e,'code'):
print 'code',e.code
return 0
else:
content = json.loads(result.read())
result.close()
return content
# send message
def sendMessage(self,touser,message):
self.authID()
data = json.dumps({
'touser':touser,
'toparty':2, #部门id
'msgtype':"text",
'agentid':"1000002", #应用id
'text':{
'content':message
},
'safe':"0"
},ensure_ascii=False)
response = self.postData(data)
print response
if __name__ == '__main__':
a = WeChat('https://qyapi.weixin.qq.com/cgi-bin')
a.sendMessage(sys.argv[1],sys.argv[3])
[root@localhost ~]# chmod 777 /usr/lib/zabbix/alertscripts/wechat.py
[root@localhost ~]# chown zabbix.zabbix /usr/lib/zabbix/alertscripts/wechat.py
6、测试脚本
[root@localhost ~]# /usr/lib/zabbix/alertscripts/wechat.py Zhangxxx "主题:test" "内容:hello"
7、创建监控项和触发器,监控nginx的运行状态。
(1)创建监控项
(2)创建触发器
8、创建报警媒介
9、创建用户关联报警媒介(并不是必须要创建,可以直接使用管理员账户 Admin 对应用户组),让这个用户关联报警媒介,添加收件人
为了方便,我直接用管理员用户关联这个报警媒介
注意:收件人:在企业微信中用户名
10、创建动作,企业微信报警
定义操作
然后在客户端停掉nginx,验证
1、在server端创建一个发送邮箱的简单脚本
[root@localhost ~]# vim /usr/lib/zabbix/alertscripts/sendmail.sh
echo "$3" |sed s/'\r'//g |mail -s "$2" $1
三个$都是位置变量
$3是邮件内容
$2是邮件主题
$1是邮箱地址
2、在web界面创建报警媒介(就还使用刚才创建的监控nginx运行状态的监控项和触发器)
3、创建用户,使用户关联报警媒介,让这个用户关联报警媒介,添加收件人
添加完之后记得更新!!!不更新等于没保存
4、创建动作,发送邮件报警
排错:如果出现问题,就去仪表盘里查看,下面这个位置会提示错误
1、免费注册一个睿象云账号,首次注册会送几次免费语音通话此数。
注册完之后会生成一个默认的用户,就是我们注册时的用户名,该用户的电话就是我们的电话
3、创建分派策略和通知策略
4、 zabbix-server端安装睿象云agent
[root@localhost ~]# cd /usr/lib/zabbix/alertscripts/
[root@localhost alertscripts]# wget https://download.aiops.com/ca_agent/zabbix/ca_zabbix_release-4.0.1.tar.gz
[root@localhost alertscripts]# tar -xzf ca_zabbix_release-4.0.1.tar.gz
[root@localhost alertscripts]# cd cloudalert/bin
[root@localhost bin]# bash install.sh 8879731ca7cb49878d22f646b3040407
请输入Zabbix管理地址:http://192.168.242.136/zabbix
Check connection success!
请输入Zabbix管理员账号:Admin
请输入Zabbix管理员密码:zabbix
...
Create new action success!
Install zabbix agent success!
关联成功了,会在zabbix-web自动创建 用户:Cloud Alert User 动作:Cloud Alert Action
关联成功后我们什么都不用做,模拟报警产生,会自动通过睿象云电话通知我们报警产生
我们随便创建一个监控项,触发器,模拟报警产生,就会有电话通知我们产生了报警
1、介绍
网络发现:zabbix server扫描指定网络范围内的主机;
网络发现是zabbix 最具特色的功能之一,它能够根据用户事先定义的规则自动添加监控的主机或服务等。
2、优点
加快Zabbix部署
简化管理
在快速变化的环境中使用Zabbix,而不需要过度管理
3、发现方式
ip地址范围;
可用服务(ftp, ssh, http, ...)
zabbix_agent的响应;
4、网络发现通常包含两个阶段
① discovery:
Zabbix定期扫描网络发现规则中定义的IP范围;
② actions:网络发现中的事件可以触发action,从而自动执行指定的操作,把discvery events当作前提条件;
添加/删除主机
启用/禁用host
向组中添加主机
移除组中的主机
从模板链接主机或取消链接
5、部署自动发现
使用一台新的机器
1、安装agent端的包
[root@localhost ~]# rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm
[root@localhost ~]# yum -y install zabbix-agent zabbix-sender
2、修改配置文件
[root@localhost ~]# cd /etc/zabbix/
[root@localhost zabbix]# mv zabbix_agentd.conf zabbix_agentd.conf.bak
可以把之前设置好的agent端的配置文件传过来
之前的agent机器:scp zabbix_agentd.conf [email protected]:/etc/zabbix/
只需要修改一下主机名即可
[root@localhost zabbix]# vim /etc/zabbix/zabbix_agentd.conf
Hostname=hjf
3、用户提权
[root@localhost zabbix]# visudo
93:zabbix ALL=(ALL) NOPASSWD: ALL
重启服务
[root@localhost zabbix]# systemctl restart zabbix-agent
6、设置自动发现规则discovery
在zabbix-server端测试:
[root@localhost ~]# zabbix_get -s 192.168.242.148 -p 10050 -k "system.hostname"
localhost.localdomain
在检测中查看
7、创建模板
先创建模板(可以创建模板后在模板里创建监控项和触发器,也可以创建一个模板后,将这个模板关联到其他模板,这样就不用创建监控项和触发器或者图形了,直接就能使用被关联的模板中的数据)
(1)创建模板并关联
(2)创建模板并添加监控项触发器等设置
创建一些监控项和触发器(略)
8、创建发现主机后的动作
只要发现主机,就会添加该主机,并将其添加到主机群组zcg-web1,并关联刚才创建的模板,关联模板就不用我们再创建监控项等设置。(在企业中我们一般都会提前创建好模板,没当发现主机之后,就根据模板中的设置,对该主机进行监控,很少添加主机后,再往模板中新增监控的内容)
然后创建报警媒介,创建用户关联这个报警媒介,创建动作,然后可以模拟报警产生,验证是否能做仪表盘看到报警信息。
总结 (zabbix的监控 监控内容的获取)https://www.zabbix.com/documentation/5.0/zh/manual
基本监控流程:
主机群组--主机(自动发现)--监控项(监控项模板[官方文档https://www.zabbix.com/]、自定义key[zabbix-agent配置])--触发器[官方文档https://www.zabbix.com/]--图形
模板:系统自带 手动创建
(平时也可使用模板对主机进行监控)
告警机制:
主机群组--主机--监控项--触发器--报警媒介--用户--动作 (顺序可以变化,只要做到相互关联即可)
企业微信
邮件报警
电话报警
Trigger actions:配置告警,当触发触发器的时候,通过配置动作,告知我们管理员,使用那种媒介都可以
Discovery actions:自动发现功能相关联 配置了自动发现后,可以使用该动作,来完成发现主机后的操作(发送消息、添加主机、添加主机群组、发送命令、关联模板)
自动发现:
主机群组--自动发现主机--模板--动作(Discovery actions)--报警媒介--用户--动作(Trigger actions) 能够将自动发现的主机发送故障后,通知管理员
监控的内容: 监控访问延迟 监控服务存活状态(nginx、php、tomcat、es、kibana、mysql....) cpu mem disk 监控mysql主从状态 disk I/O .....
在企业中我们只监控有意义的数据,(怎样去获取监控内容)因为有自定义key
【腾讯文档】zabbix监控数据库mysql实战 https://docs.qq.com/doc/DSmNRQU1qUFlPVlJw
【腾讯文档】zabbix监控磁盘性能实战 https://docs.qq.com/doc/DSkFGTG9Gd3d1TUtv