linux云计算之Zabbix监控概念架构工作流程和组件及其作用和搭建Zabbix
监控 zabbix
1.zabbix的概念 监控工具/软件
1.监控体系概述 为什么 怎么开启自定义监控 监控 具备的功能 工具
怎么开启自定义监控
1、首先编写自定义监控脚本
2、修改zabbix_agentd.conf配置文件
3、选择要增加监控项的主机
4、创建监控项
5、根据自定义键值填写监控项,自定义的键值只能手动输入,不能通过选择。
6、添加成功后,在最新数据中查看是否获取到数据
7、为这个监控项添加触发器,在这里我们定义当check_httpd监控项返回为0的时候告警。即httpd进程不存在
8、创建触发器,自定义触发器名称以及严重程度,然后表达式哪里,点击添加
9、添加触发器表达式,监控项选择我们自定义监控项,功能可以根据自己的需求选择,这里我们选择最后一个值是0的时候则告警(即httpd进程不存在)
10、至此,自定义监控项和自定义告警已添加完成,如果有其他监控需求,自己写监控脚本即可。
1.为什么要监控?
保证业务的正常稳定运行(关注指标是否正常)
2.监控什么? IT架构体系 (服务器)
硬件监控(风扇、电源、硬盘)
系统监控(CPU/内存/硬盘/网络吞吐量/进程)
应用监控(服务状态:web服务 nginx 数据库 每秒钟执行多少事务)
3.怎么来监控?
远程管理服务器
监控硬件
监控系统资源(CPU、内存、磁盘、网络)
4.监控需要具备的功能?
收集数据
存储数据
图形展示(可视化)
告警通知(提前设置阈值,比如cpu使用率到达75%,发邮件或者短信通知管理员)
2.监控工具
Nagios 配置比较复杂
Cacti仙人掌
Cacti主要是对网络做一些流量的监控
Zabbix c/s
Prometheus(普罗米修斯)
1.Prometheus 是一套开源的系统监控、报警、时间序列数据库的组合,最初有 SoundCloud 开发的,后来随着越来越多公司使用,于是便独立成开源项目。
2.常用的 Kubernetes 容器集群管理中,通常会搭配 Prometheus 一起来进行监控。Prometheus 基本原理是通过 Http 协议周期性抓取被监控组件的状态,输出这些被监控的组件的 Http 接口为 Exporter,
3.好处是任意组件只要提供HTTP接口就可以接入监控系统,不需要任何SDK或者其他的集成过程。
非常适合虚拟化环境比如VM或者Docker。
3.Zabbix概述 组成 支持的通信方式
zabbix是一个基于WEB界面的 提供分布式系统监视 以及网络监视功能的 企业级的开源解决方案。
Zabbix由zabbix-server服务端和zabbix-agent监控端组成。
Zabbix支持的通信方式
agent(代理):专用的代理服务方式进行监控,专属的协议,装有zabbix-agent的主机就可以被zabbix-server监控。主动或被动的方式,把数据给到server进行处理。
ssh/telent:Linux主机支持ssh/telent协议
SNMP:网络设备路由器、交换机不能安装第三方程序(agent),使用简单网络管理协议。大多数的路由交换设备支持SNMP协议。
IPMI:通过IPMI接口进行监控,我们可以通过标准的IPMI硬件接口,监控被监控对象的物理特征,比如电压,温度,风扇状态,电源状态等。
IPMI(Intelligent Platform Management Interface)协议被广泛用于服务器监控中,包括采集CPU温度、风扇转速、主板温度,以及远程开关机等等。而且IPMI独立于硬件和操作系统,无论是CPU、BIOS,还是OS出现故障,都不会影响IPMI的工作。因为IPMI的硬件设备BMC(Baseboard Management Controller)是一个独立的板卡,独立供电。
JMX:通过JMX进行监控,JMX(Java Management Extensions,即Java管理扩展),监控JVM虚拟机时,使用这种方法也是非常不错的选择。
4.Zabbix架构 组件介绍 分布式架构
Zabbix组件介绍
1. Zabbix Server:负责接收Agent发送的报告信息,组织所有配置、数据和操作。
2. Database Storage: 存储配置信息以及收集到的数据
3. Web Interface:Zabbix的GUI接口,通常与server运行在同一台机器上
4. Proxy: 可选组件,常用于分布式监控环境中
5. Agent: 部署在被监控主机上,负责收集数据发送给Server
分布式架构
5.zabbix的工作流程
Agent获取被监控端数据,发送给Server。
Server记录所接收到的数据,存储在Database中并按照策略进行相应操作。
如果是分布式,Server会将数据传送一份到上级Server中。
Web Interface将收集到的数据和操作信息显示给用户。
监控模式:主动模式/被动模式
agent, trapper, proxy 三种常见zabbix 监控模式
0,agent 被动模式:
Server=192.168.10.10
zabbix-agent 启动 10050 端口
zabbix-server 主动向已注册的 zabbix-agent 拉取监控数据
1,agent 主动模式:
ServerActive=192.168.10.10
zabbix-server 启动 10051 端口
zabbix-agent主动向 zabbix-server 推送监控数据
2,trapper 模式:
zabbix-server 启动 10051 端口
zabbix-sender 主动向 zabbix-server 推送监控数据
3,proxy 模式:
ProxyMode 0为主动拉取zabbix-agent数据,1 为被动接收zabbix-agent数据
zabbix-agent -> zabbix-proxy -> zabbix-server
zabbix的进程
6.默认情况下zabbix包含5个程序 即服务组件程序 的各自作用
zabbix_agentd、 zabbix_get、 zabbix_proxy、 zabbix_sender、 zabbix_server,
另外zabbix_java_gateway是可选,这个需要另外安装。
服务组件 各自的作用
1.zabbix_agentd:客户端守护进程,此进程收集客户端数据,例如cpu负载、内存、硬盘使用情况等。
2.zabbix_get:zabbix 排错 工具,单独使用的命令,通常在server或者proxy端执行获取远程客户端信息的命令,通常用户排错。例如在server端获取不到客户端的内存数据,我们可以使用zabbix_get获取客户端的内存的方式来做故障排查。
3.zabbix_sender:zabbix主动提交数据 工具,用于发送数据给server或者proxy,通常用于耗时比较长的检查。很多检查非常耗时间,导致zabbix超时。可以在收集监控数据的脚本执行完毕之后,使用sender主动提交数据。
4.zabbix_server:zabbix服务端守护进程。zabbix_agentd、zabbix_get、zabbix_sender、zabbix_proxy、zabbix_java_gateway的数据最终都是提交到server。
备注:当然不是数据都是主动提交给zabbix_server,也有的是server主动去取数据。
5.zabbix_proxy:zabbix代理守护进程。功能类似server,唯一不同的是它只是一个中转站,它需要把收集到的数据提交 主/被提交到server里。
6.zabbix_java_gateway:zabbix2.0之后引入的一个功能。顾名思义:Java网关,类似agentd,但是只用于Java方面。
需要特别注意的是,它只能主动去获取数据,而不能被动获取数据。它的数据最终会给到server或者proxy。
7.zabbix的逻辑关系图
2.zabbix组件及其作用
1)zabbix server:负责接收agent发送的报告信息的核心组件,所有配置、统计数据及操作数据都由它组织进行;
2)database storage:专用于存储所有配置信息,以及由zabbix收集的数据;
3)web interface:zabbix的GUI接口;通常与 Server 运行在同一台主机上;
4)proxy:可选组件,常用于监控节点很多的分布式环境中,代理server收集部分数据转发到server,可以减轻server的压力;
5)agent:部署在被监控的主机上,负责收集主机本地数据如cpu、内存、数据库等数据发往server端或proxy端; 第六个
3.Zabbix监控环境常用术语
zabbix监控环境中相关术语
主机(host):要监控的网络设备,可由IP或DNS名称指定;
主机组(host group):主机的逻辑容器,可以包含主机和模板,但同一个组织内的主机和模板不能互相链接;
主机组通常在给用户或用户组指派监控权限时使用;
监控项(item):一个特定监控指标的相关的数据;这些数据来自于被监控对象;item是zabbix进行数据收集的核心,相对某个监控对象,每个item都由”key”标识;
触发器(trigger):一个表达式,用于评估某监控对象的特定item内接收到的数据是否在合理范围内,也就是阈值;接收的数据量大于阈值时,触发器状态将从”OK”转变为”Problem”,当数据再次恢复到合理范围,又转变为”OK”;
事件(event):触发一个值得关注的事情,比如触发器状态转变,新的agent或重新上线的agent的自动注册等;
动作(action):指对于特定事件事先定义的处理方法,如发送通知,何时执行操作;
报警升级(escalation):发送警报或者执行远程命令的自定义方案,如每隔5分钟发送一次警报,共发送5次等;
媒介(media):发送通知的手段或者通道,如Email、Jabber或者SMS等;
通知(notification):通过选定的媒介向用户发送的有关某事件的信息;
远程命令(remote command):预定义的命令,可在被监控主机处于某特定条件下时自动执行;
模板(template):用于快速定义被监控主机的预设条目集合,通常包含了item、trigger、graph、screen、application以及low-level discovery rule;模板可以直接链接至某个主机;
应用(application):一组item的集合;
web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求;
前端(frontend):Zabbix的web接口。
4.Zabbix服务端安装 基本配置环境
Zabbix有集中式安装 和 分布式安装。这里为集中式安装。版本选择zabbix3.4。
安装部署思路
准备工作:安装源码库配置部署包
安装zabbix server
初始化zabbix database
配置zabbix server端并启动
安装zabbix sweb配置并启动
访问zabbix 需要zabbix的web界面 要成功访问web界面 需要启动Http服务 需要对http服务进行配置
初始化zabbix配置
安装zabbix agent
修改配置文件
启动zabbix agent
1.环境配置 联网 配置yum 关闭selinux防火墙
ping www.baidu.com
vim fhq
iptables -F
iptables -X
iptables -Z
systemctl stop firewalld.service
setenforce 0
systemctl disable firewalld
chmod 777 fhq
./fhq
vi /etc/sysconfig/selinux
改为disabled
getenforce查看selinux的状态
配置yum 下载源
cd /etc/yum.repos.d
vi CentOS-Base.repo
#[base]
#name=CentOS-$releasever - Base
#baseurl=file:///media/cdiso
#gpgcheck=0
#gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-7
[os]
name=os
enable=1
gpgcheck=0
baseurl=http://mirrors.aliyun.com/centos/7.7.1908/os/x86_64/
[extras]
name=ext
enable=1
gpgcheck=0
baseurl=http://mirrors.aliyun.com/centos/7.7.1908/extras/x86_64/
[zabbix]
name=zabbix
enable=1
gpgcheck=0
baseurl=http://mirrors.aliyun.com/zabbix/zabbix/3.4/rhel/7/x86_64/
[non-supported]
name=non-supported
enabled=1
gpgcheck=0
baseurl=http://mirrors.aliyun.com/zabbix/non-supported/rhel/7/x86_64/
2.安装zabbix和mysql软件包
1.安装Zabbix部署包
yum install zabbix-server-mysql zabbix-web-mysql zabbix-agent mariadb-server -y
2.安装初始化数据库密码为zabbix
systemctl start mariadb
mysql -uroot -p回车进入即可
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
show databases;
exit;
3.导入初始架构(Schema)和数据
cd /usr/share/doc/zabbix-server-mysql-3.4.15/
zcat create.sql.gz |mysql -uroot zabbix -p 回车导入即可
查看压缩包,查看后交给mysql
mysql -uroot -p回车即可
show databases;
use zabbix;
show tables;
4.在zabbix_server.conf中编辑数据库配置
指定数据库的主机是谁,数据库名称,用户和密码是什么。
vi /etc/zabbix/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=zabbix
systemctl enable zabbix-server
systemctl start zabbix-server
systemctl status zabbix-server
grep '^[a-Z]' /etc/zabbix/zabbix_server.conf ?????
5.编辑Zabbix前端httpd的PHP配置 修改时区
调整一个时区,如果不调整,一打开页面会有很多乱码。
vi /etc/httpd/conf.d/zabbix.conf
php_value date.timezone Asia/ShangHai增加这行即可
systemctl start httpd
systemctl status httpd
6.登陆页面 注册信息
192.168.10.10/zabbix/
每点一步都是在生成配置文件。
zabbix_server服务端端口是10051
zabbix_agent监控端端口是10050
server端安装zabbix-get
agent端安装zabbix-sender
数据库连接
Localhost本机
0表示默认端口3306
密码为zabbix
设置关于页面的信息
Zabbix_Server表示监控主机的意思
确认信息
假如配置写错, 可去文件中查看修改
vim /etc/zabbix/web/zabbix.conf.php
登录
Admin为用户名
Zabbix为密码
修改为中文模式点击右上角 选Chinese update更新保存即可
7.解决乱码问题
登录后,可以调整为中文,还会遇到乱码的情况,是因为zabbix自身对中文简体的支持不完善,需要我们手动的去上传新的字体进行替换:
/usr/share/zabbix/include/defines.inc.php文件中字体的配置,将里面关于字体设置从graphfont替换成msyh
vi /usr/share/zabbix/include/defines.inc.php
命令行查找替换修改
:s/graphfont/msyh/g
systemctl restart zabbix-server.service
8.配置 服务端的agent监控server 启动server
vim /etc/zabbix/zabbix_agentd.conf
被动模式
主动模式
这个控制主机名
systemctl start zabbix-agent.service
systemctl status zabbix-agent.service
启动
Ip改为192.168.10.10
更新
5.Zabbix客户端安装 和基本操作
1.安装agent客户端软件 修改被动主动模式 客户端服务名称 启动服务
yum install -y zabbix-agent.x86_64
vim /etc/zabbix/zabbix_agentd.conf 修改配置文件的模式
被动模式
主动模式
修改服务主机名
Hostname=zabbix_agent01
修改完成启动agent服务
systemctl start zabbix-agent.service
systemctl status zabbix-agent.service
2.添加监控 客户端的主机
配置 主机 添加主机
选择好模板 添加 更新
可见名称是在外可见的主机名称
新的组群可自己创建
Ip地址为agent客户端的ip
下面 添加ip是同一个主机服务端 的另一个网卡
SNMP为网络接口
JMX接口为JAVA虚拟主机的接口
IPMI物理性能上的指标
模板里面有 触发器 监控项 图形
3.客户端 添加监控项 自定义item
当前登录用户不超过2个,如果超过就报警->触发动作->通知
定义key->触发器->通知给谁,发邮件
查看
who
w执行的是echo $PATH 环境中的w
echo $PATH
which w
w|awk 'NR==1{print $4}'命令行获取当前登录用户个数
vi /etc/zabbix/zabbix_agentd.conf 写入agent配置文件
末行模式 查找/UserParameter=
UserParameter=log_user,/usr/bin/w|awk 'NR==1{print $4}'
log_user监控项对应的key
/usr/bin/w|awk 'NR==1{print $4}'写绝对路径来找 用户登录的数值
systemctl restart zabbix-agent.service 写完要重启下zabbix-agent服务
添加监控项
键值 对应 key
新的应用集表示监控项的集合
4.客户端anent创建图形 get获取
在 检测中 图形 群组 主机 图形中查看
yum -y install zabbix-get.x86_64 在zabbix server主机上
zabbix_get -s 192.168.10.20 -k log_user
在添加之前,先用zabbix_get验证是不是能获取到,再添加到dashboard上。
5.添加触发器
创建
写入名称 和 严重性 添加表达式
{zabbix_agent01:log_user.last()}>3 01主机 log_user监控项 调用.last函数 >3成立
点击表达式构造器 测试
关闭 表达式构造器
完成添加
6.zabbix实现钉钉报警
一,申请钉钉账号,登录账号。
二,创建一个告警群组,添加一个机器人。
三,脚本配置
在 主服务器的 cd /usr/lib/zabbix/alertscripts目录下面创建脚本,名称为zabbix_dingding.py
vi zabbix_dingding.py
脚本的内容如下:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import requests
import json
import sys
import requests
import json
import sys
import os
headers = {'Content-Type': 'application/json;charset=utf-8'}
api_url = "写机器人的webhook链接"
def msg(text):
json_text= {
"msgtype": "text",
"text": {
"content": text
},
"at": {
"atMobiles": [
"1xxxxxxxxxxxxx"
],
"isAtAll": False
}
}
print requests.post(api_url,json.dumps(json_text),headers=headers).content
if __name__ == '__main__':
text = sys.argv[1]
msg(text)
只修改这个即可
复制这个
chmod +x zabbix_dingding.py
ll zabbix_dingding.py
测试
./zabbix_dingding.py test
会报错因为缺少pip包
yum -y install epel-release
yum -y install python-pip
pip install requests
./zabbix_dingding.py test
7.添加报警媒介类型
1.创建报警媒介
管理-报警媒介类型-创建媒介类型 名称“钉钉”-类型“脚本”-脚本名称“zabbix_dingding.py”-脚本参数“{ALERT.MESSAGE}”
注意脚本名称要和 写的配置文件要一样
zabbix_dingding.py脚本名称
脚本参数
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
8.绑定到用户
管理- 用户admin- 报警媒介-添加
9.创建动作
在增加操作
服务器:{HOST.NAME}发生: {TRIGGER.NAME}故障!
消息内容
告警主机: {HOST.NAME}
告警IP: {HOST.IP}
告警时间:{EVENT.DATE}-{EVENT.TIME}
告警等级: {TRIGGER.SEVERITY}
告警信息: {TRIGGER.NAME}:{ITEM.VALUE}
事件 ID: {EVENT.ID}
点击新的 增加用户和组
仅送到dingding
点击上面的 小添加
也可以 增加条件
然后点击 恢复操作
默认标题
服务器:{HOST.NAME}: {TRIGGER.NAME}已恢复!
消息内容
恢复主机: {HOST.NAME}
恢复IP: {HOST.IP}
恢复时间:{EVENT.DATE}-{EVENT.TIME}
恢复等级: {TRIGGER.SEVERITY}
恢复信息: {TRIGGER.NAME}:{ITEM.VALUE}
恢复 ID: {EVENT.ID}
恢复操作 也增加 用户 和 组 仅送到
点击添加 动作添加完成
??进阶管理 操作 新的
6.简答& 实验
简答题
Zabbix主要组件有哪些?
简述zabbix报警流程?
如何实现自定义监控项?
实验题
安装zabbix server和zabbix agent
添加主机、监控项、媒介、触发器和动作等常用操作
实现钉钉告警