[toc]
Zabbix 监控实现文档
理论知识了解
传感器;
数据采集 --> 数据存储 --> 数据展示;
报警: 采集到的数据超出阈值时,通常会执行报警操作;
时间序列数据;
大规模的监控:
开源监控工具:
Nagios
有两种结点类型:
NMS(网络监控系统),周期性的完成数据采集,且最重要的是要完成存储,不仅仅是主机。更重要的路由器;
SNMP 对其它物理设备进行监控, Simple Network Management Protocol
一般而言要对其它结点中安装agent端;
SNMP的工作模式:
NMS向agent采集数据;
agent向NMS报告数据;
NMS请求agent修改配置;
SNMP的组件
MIB: management information base;
SMI: MIB表示符号;
SNMP协议中的 NMS;
SNMP协议的版本;
v1,v2,v3
v2c:NMS --> agent
v3:认证、加密、 解密
NMS 可以发起的操作:
Get, GetNext,Set, Trap(捕获);
agent: Response,返回一个或者多个值;
UDP NMS:161端口 agent:162端口;
cacti: 可以调用编程接口,利用SNMP,即时绘制展示图形;
cacti: 报警能力是非常弱的;
万一服务莫名奇妙的的关闭了,可以尝试启动服务,启动不了后再执行报警操作;
为避免误判,应要多次采样;
Nagios: 可以调用各种报警工具来执行报警操作;
报警次数据和报警范围,报警范围的操作;
代码上线的时候不需要报警,且要定义不报警时间段;
Nagios 可以理解为一个非常强大的报警工具;
NMS 可能要监控数万个指标,那么会对NMS 的磁盘IO,网络带宽,CPU负载等造成较大的压力;
我们可以对设备与网络划分,部署多套监控系统,而且它们是用不同的方法实现的;
但这样对我们的针对式管理就会带来巨大的麻烦;
完成状态转换,并完成报警;
cacti 完成数据收集和展示,但对于报警能力比较薄弱;
Zabbix:结合了以上两种工具的功能;
1、zabbix 会自己先解决
2、zabbix 解决不了报警给部门负责人
3、zabbix 继续报警升级,报警给部门负责人, 部门领导
著名的开源监控工具: zabbix, zennos, opennms, cacti, nagios(icinga),ganglia
(NMS linux) (被监控端 Linux主机)
监控功能的实现:
1、agent
2、ssh
3、SIMP
4、IPMI 智慧平台管理接口
zabbix NMS 与 agent 端双方支持的协议(JSON,XML)
视图(读操作/写操作各定义一个团体)
在linux上要使用snmp功能要使用"Linux: net-snmp程序包"
zabbix:有专用agent的监控工具;
监控主机:
linux、windows、FreeBSD
网络设置、路由交换设备,可以用SNMP这种协议来进行监控;
采集网卡流量,可以将多个网卡流量都加起来进行计算;
报警,需要添加报警策略,另外需要报警跟踪,报警连动;
对监控系统要做系统评估;
zabbix 是由php实现的,所以可以实现功能的二次开发;
监控对象
设备和软件
设备:服务器、路由器 、交换机、IO系统
软件: OS、网络、应用程序
偶发性故障
主机down机、服务不可用、主机不可达
严重故障
主机性能批标
趋势:时间序列数据
数据存储
cacti: rrd(round robin database) 强大的集成工具
zabbix: mysql,pgsql
企业级的监控解决方案;
如果定义了触发器,超出了预值,则执行脚本,而后再执行报警,报警升级操作;
zabbix可以做分布式; zabbix可以部署中心节点,与分布式节点;
要关注系统有多大的压力,需要什么样的组件;
基于Zabbix agent,SNMP Agent, IPMI Agent,SSH.ping,Database Monitoring ,自定义监控脚本;
监控目标: CPU, Memeory, Network, Disk, Service, Log, File, Other
对Web做监控时,可以知道响应的时间,速度,及获取的内容;
获取通知: 邮件,短信,电话等等;
Zabbix 的四个主要功能
Data gathering: 数据的收集
Data storage: 数据的存储
Alerting: 报警
Visualisation:可视化
zabbix 架构中的组件
1、zabbix之间的通信
zabbix-server: 使用C语言研发的
OS zabbix-agent: 使用C语言研发的
zabbix-web: GUI,用于实现zabbix设定和展示
zabbix-proxy:分布式监控环境中的专用组件
因此工作性能也是相当不错的
架构通信协议:
agent架构使用zabbix agent协议进行通信
web pagess 使用http协议
ICMP/IPMI/SNMP: Device
zabbix dabases:
MySQL,PGSQL(postgreSQL),DB2,Orcale,SQLite
zabbix-server(zabbix-get) 与 zabbix-agentd 进行通信
zabbix-get与zabbix-agentd(zabbix-sender) 进行通信
zabbix-server 的日志保存在 /var/log/zabbix/zabbix-server.log中
zabbix-agentd 的日志保存在 /var/log/zabbix/zabbix-agentd.log中
zabbix-gui 接口需要一个lamp平台来运行
2、 zabbix的部署分类
a、可以将zabbix-server,zabbix-gui web (lamp),database分别放在一台服务器上;
然而,zabbix-server与database通信, zabbix-gui也只需要与database通信就可以了;
b、可以将zabbix-server, zabbix-gui web(lamp),database 统一放在一台服务器上;
d、可以将以上组件,两两部署在一台服务器上;
zabbix常用术语
- 主机Host: 要监控的网络设备;
- 主机组Host Group: 分类监控的服务器,一组模板(监控项,触发器,等等);
- 监控项item: zabbix进行数据收集的核心,一个指定的监控指标;
- 触发器trigger: 是指一个表达式,评估item收集的数据是否在合理范围内;
- 事件event: 即发生一件值得关注的事情,例如trigger状态由problem转为ok状态;
- 动作action: 即预先定义的处理方法,通过定义的动作,发送邮件,知信等等;
- 报警升级escalation:发送报警,或者执行远程命令,每五分钟发一次,共发5次等;
- 媒介media: 发送通知的手段或通道,如Email、Jobber、SMS 或者微信等等;
- 通知notification:通过选定的媒介向用户发送有关的某件事情;
- 远程命令(remote command): 预定义的命令,可以在被监控的主机处于某特定条件下时自动执行;
- 模板(template): 用于快度定义被监控主机的的预设条目集合,通常包含了item、trigeer、graph、screen;
- 另外,模板可以直接链接至单个主机;
- 应用(application):一组item的集合;
- web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求;
- 前端(frontend): zabbix的web接口;
可根据系统类型 ,业务需求,设备类型等等将服务器分组;
zabbix server 实现
- watchdog 负责运行的进程是否在运行中;
- housekeeper 管家,指明你的数据将要被保存多久;
- alerter 执行警报操作的;
- poller 监控进程;
- httppoler 监控web页面的专用poller;
- discover 高级的发现机制,可以自动加载进来,但它的工作相当占用资源;
- escalator 报警升级;
- timer 计时器;
- nodewatcher 监控各节点的;
- db_data_syncer 数据库的数据同步器;
- db_config_syncer 数据库的数据同步器;
- pinger 能过ping操作查看各主机是否在线的工具;
zabbix 监控实现的硬件需求
Name | Platform | CPU/Memory | Database | Monitored Hosts |
---|---|---|---|---|
Small | Ubuntu Linux | PII 350MHZ 256MB | SQLite | 20 |
Medium | Ubuntu linux 64 bit | AMD Athlon 320 + 2GB | MySQL InnoDB | 500 |
Large | Ubuntu Linux 64 bit | Inter Dual Core 6400 + 6GB | RAID 10 MySQL InnoDB or PostgreSQL | >1000 |
Verfy Large | RedHat Enterprise | Inter Xeon 2xCPU 8G | FAST RAID 10 MySQl InnoDB or PostgreSQL | >10000 |
zabbix产生的数据组成共有四部分
- 配置数据;
- 历史数据 50Bytes;
- 历史趋势数据 128Bytes;
- 事件数据130Bytes;
Zabbix 目前部署在Linux服务器最为常见
zabbix的安装与使用
zabbix-server 的安装与使用
# yum -y install mariadb-server mariadb
# systemctl enable mariadb
# systemctl start mariadb
# mysql
MariaDB [(none)]> CREATE DATABASE zabbix CHARACTER SET utf8;
MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbxuser'@'127.0.0.1' IDENTIFIED BY 'xxxxxxx%3';
Query OK, 0 rows affected (0.00 sec)
MariaDB [(none)]> GRANT ALL on zabbix.* TO 'zbxuser'@'localhost' IDENTIFIED BY 'xxxxxxx%3';
Query OK, 0 rows affected (0.00 sec)
MariaDB [mysql]> FLUSH PRIVILEGES ;
Query OK, 0 rows affected (0.00 sec)
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MariaDB connection id is 3
Server version: 5.5.56-MariaDB MariaDB Server
Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MariaDB [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| test |
| zabbix |
+--------------------+
3 rows in set (0.00 sec)
MariaDB [(none)]>
这里选用 zabbix 2.2 的包来安装;之后会附zabbix 2.2 升级3.4 的文档
# rpm -i http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
# yum clean all
# yum -y install zabbix zabbix-server zabbix-server-mysql zabbix-get zabbix-web zabbix-web-mysql zabbix-agent zabbix-sender
# systemctl start httpd
# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
# cd /usr/share/doc/zabbix-server-mysql-2.2.21/create/
# mysql zabbix < schema.sql
# mysql zabbix < images.sql
# mysql zabbix < data.sql
# vim /etc/zabbix/zabbix_server.conf
# 参数说明
ListenPort = 10051 指定端口
LogFile = 指定日志文件
LogFileSize =0 表示不做滚动
DebugLevel = 3
PidFile = /var/run/zabbix/zabbix_server.pid
DBHost = localhost
DBName = zabbix
DBUser = zbxuser
DBPassword = xxxxxxx%3
DBSocket = /tmp/mysql.sock
StartPollers = 5 随时等待的进程有多少个
SNMPTrapperFile = /var/log/snmppt/snmptt.log
MaxHousekeeperDelete=500 最多删除多少个
CacheUpdateFrequency= 60 cache 最大的更新频率
StartDBsyncers=4 DB同步进程多少个
StartDiscoverers =1 是启动自动添加模板功能的
StartHTTPPollers =1 作为http浏览器来请求被监控页面的
StartTimers =1 启动计时器
JavaGateway = 1 监控java网关的
一般默认的缓存值不用调
AlertScriptsPath=/usr/lib/zabbix/alertscripts/ 报警脚本的存放位置
ExternalScripts=/usr/lib/zabbix/externalscripts/ 外部脚本的存放位置
FpingLocation=/usr/sbin/fping 并行发送多个请求,可以当作攻击命令
SSLCerLocation = 如果启用SSL的话则配配置该项
# systemctl start zabbix-server
# vim /etc/php.ini
date.timezone = Asia/Chongqing
max_input_time = 600
max_execution_time = 600
post_max_size = 28M
# systemctl restart httpd
如果使用编译安装
# 同时安装 server 和agent ,并支持将数据放入myql数据中,可使用类似如下配置命令;
# ./configure --enable-server --enable-agent --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-ssh2
# 如果仅安装 server,并支持将数据放入mysql数据中,可使用似如下配置命令;
# ./configure --enable-server --with-mysql --with-net-snmp --with-libcurl
# 如果仅安装 proxy,并支持将数据放入mysql数据中,可使用类似如下配置命令;
# ./configure --profix=/usr --enable-proxy --with-net-snmp --with-mysql --with-ssh2
# 如果仅安装 agent,可以使用类似如下配置命令;
# ./configure --enable-agent
# 而后编译安装zabbix 即可;
# make
# make install
zabbix agent 的安装和使用
# vim /etc/zabbix/zabbix_agentd.conf
ServerActive=127.0.0.1,172.16.55.123
Hostname=zabbix-test-server
# systemctl start zabbix-agent
Congiguration --> Hosts --> (将zabbix-server端的agent服务启用)
zabbix 添加额外的agent端
在一台需要被监控的服务器上安装 zabbix-agent
# rpm -i http://repo.zabbix.com/zabbix/2.2/rhel/7/x86_64/zabbix-release-2.2-1.el7.noarch.rpm
# yum clean all
# yum -y install zabbix zabbix-agent zabbix-sender
# vim /etc/zabbix/zabbix_agentd.conf
Server=172.16.55.123
ServerActive=172.16.55.123
Hostname= zabbix-agent-node1
# systemctl start zabbix-agent
# netstat -tnlup | grep zabbix
tcp 0 0 0.0.0.0:10050 0.0.0.0:* LISTEN 30383/zabbix_agentd
tcp6 0 0 :::10050 :::* LISTEN 30383/zabbix_agentd
注: 最好在zabbix-server 做一下探测,确保在zabbix-server 端可以探测通agent的端口
# telnet 172.16.55.124 10050
Trying 172.16.55.124...
Connected to 172.16.55.124.
Escape character is '^]'.
登录zabbix-server 的web接口
Configuration --> Hosts --> Create Hosts -->
[
Host name: zabbix-agent-node1
Visible name: zabbix-agent-node1
Group In goups : Linux servers
Agent interfaces: 这里选用的是ip-> 172.16.55.124
Templates -> Template OS Linux --> Add -> Save -->
IPMI -> 先留空
Macros -> 先留空
Host inventory -> 先留空
]
Host <-- Save
zabbix on CentOS7
Linux开源监控系统:
nagios
cacti
zabbix: 内nagios,cacti
ganglia: 内置强大的聚合功能,这个功能zabbix是不具备的
在大公司能了解到更好规范;
在小公司能够得到更多的经验;
# vim /etc/my.cnf
innodb_file_per_table = 1
skip_name_reslove = 1
CentOS 7.1 安装
~]# yum install zabbix-2.4.6-1.el7.x86_64.rpm zabbix-server-2.4.6-1.el7.x86_64.rpm zabbix-server-mysql-2.4.6-1.el7.x86_64.rpm zabbix-agent-2.4.6-1.el7.x86_64.rpm zabbix-sender-2.4.6-1.el7.x86_64.rpm zabbix-web-2.4.6-1.el7.noarch.rpm zabbix-get-2.4.6-1.el7.x86_64.rpm zabbix-web-mysql-2.4.6-1.el7.noarch.rpm trousers-0.3.11.2-4.el7_1.x86_64.rpm
说明:CentOS 7.1安装zabbix-2.4.6-1.el7,其与trousers-0.3.11.2-3不兼容,需要升级trousers至0.3.11.2-4.el7_1。如果没有zabbix rpm包,可以在官网查找安装yum源rpm包 ,类似以上的安装方法
创建数据库:
server和proxy的运行都依赖于数据库,agent则不需要。
以MySQL数据库为例:
shell> mysql -uroot -p<password>
mysql> create database zabbix character set utf8 collate utf8_bin;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by '<password>';
mysql> quit;
shell> mysql -uzabbix -p<password> zabbix < database/mysql/schema.sql
# stop here if you are creating database for Zabbix proxy
shell> mysql -uzabbix -p<password> zabbix < database/mysql/images.sql
shell> mysql -uzabbix -p<password> zabbix < database/mysql/data.sql
配置zabbix:
(1) zabbix_server
server的配置文件为zabbix_server.conf,至少应该为其配置数据库等相关的信息;例如:
LogFile=/var/log/zabbix/zabbix_server.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_server.pid
DBHost=172.16.100.67
DBName=zabbix
DBUser=zbxuser
DBPassword=zbxpass
DBSocket=/var/lib/mysql/mysql.sock
SNMPTrapperFile=/var/log/snmptt/snmptt.log
AlertScriptsPath=/usr/lib/zabbix/alertscripts
ExternalScripts=/usr/lib/zabbix/externalscripts
(2) 配置php环境
编辑/etc/httpd/conf.d/zabbix.conf,添加如下项。
php_value date.timezone Asia/Shanghai
启动httpd服务:systemctl start httpd.service
访问zabbix web
http://your_host/zabbix
登录:Admin/zabbix
(3) 配置zabbix_agent
agent的配置文件为zaabix_agentd.conf,至少应该为其指定server的IP地址;
zabbix组件
zabbix
zabbix-server
zabbix-database
zabbix-web
zabbix-agent
zabbix-proxy
zabbix 逻辑组件
主机组、主机
item(监控项)、appliction(应用)
trigger(触发器)
even(事件)
action
notice
command
media
users(media)
监控系统: 数据采集、数据存储、报警、数据可视化
zabbix:
database --> zabbix-server (zabbix_server.conf)--> zabbix-web(LAMP平台)
--> http://zabbix-web-server/zabbix/zabbix-agent (zabix-agent.conf)
zabbix 报警入门配置
注: 在添加主机的时候如果要想让支持snmp协议,则安装yum -y install net-snmp
# vim /etc/snmp/snmp.conf
# service snmpd start
# 查看支持的key MariaDB [zabbix]> SELECT key_,type FROM items ;
# 查看支持的items MariaDB [zabbix]> SELECT * FROM items\G;
# zabbix_get -h 向指定的主机获取指定的值的
# zabbix_get -s 172.16.55.124 -k "net.if.out[ens3]"
1161497309
# zabbix_get -s 172.16.55.124 -k "net.if.in[ens3]"
1390144843
# 手动创建item
# 先在zabbix服务器端尝试获取CPU中断数
# zabbix_get -s 172.16.55.124 -k "system.cpu.intr"
597504908
Configuration --> Hosts --> 选定主机的Items
Name: cpu interrupts
Type: zabbix
Key:system.cpu.intr
Host interface:172.16.100.8:10050
Type of information: Numeric(unsigned) : 数据类型决定以下配置是否可用
Data type : Decimal
Units:
Use custom multipier: 做单位换算
New flexible interval Interval(in sec):指定监控时间
History storage period (in days): 历史数据的存放天数,只要满足需要了,尽可能不可时长过多 90
Treand storage period (in days): 历史采样的数据 365
历史数据:采样生成的数据;
历史趋势数据 :每小时的最大值 、最小值 、平均值、统计值
Sotre valus: 数据存储的结果 As is,不做任何处理;
Delta(sppd per second): (value -per_value)/(time - pre_time)
10: 1200 , 20: 13000
添加完以上信息之后,添add即可; 可以在hosts中查看到状态是enabled
同样的方式可以创建 其它Item
手动创建一个图形
Configuration --> Hosts --> --> 选定主机的Graph
Name: cpu interrupts
Width: 900
Heig: 200
Graph type: Normal
Show legend
Show working time
Show triggers
add Items
Preview ,配置完之后,可以预览后添加;
触发器状态严重性,级别
Not classfiled Grey 无分类
Information Light green 资讯
Warning Yellow 警告
Average Orange 觉见问题
High red 高危
Disaster bright red 毁灭
创建触发器
Configuration --> Hosts --> 选定主机的Trigger
Name too many interrupts
Expression add
--> node1:cpu intterrupts
--> last(most recent)T value is > N
--> Last of (T)
--> Time shift
--> N 50
--> add
Description
名称中可以使用宏:
{HOST.HOST},{HOST.NAME},{HOST.IP},{HOST.COMN},{HOST.DNS}
URL: 可以留空,也可以添加一个url,报警则说明由哪个url触发的
# yum -y install hping3 多个hping3可以实现DDOS攻击
# hping3 172.16.55.124 --faster
可以在124上看到,cpu上下文切换速度非常的快,cpu中断飙升
# vmstat 1
定义报媒介
Administration --> Media types
--> Name Email
--> Type Email
--> SMTP Server 可以指定到邮件服务器
--> SMTP helo localhost 指定收件人
--> SMTP email zabbix@xxxxx.com 指定发件人
# 定义报警用户
这里建议不创建报警用户,直接使用admin发
Media 可以实现报警升级功能;在admin用户中配置报警媒介
配置Actions
Configure --> Actions--> Create Actions
Action--> names
信息采用宏,启用报故障恢复后发送信息;
Conditions 条定执行条件
Operations 定义报警升级 (每一次可有多个跨度区间)
zabbix 常用配置
由zabbix监控某关注的指标
host group --> host --> item(存储于MySQL) --> graph (zabbix-web)
--> trigger(触发器) --> action(conditon+operation)
application: 把功能相近的一组item归类在一起统一进行管理组件:
ServerActive= 172.16.55.124 ; 这里在agent中如果指定了,则说明是主动的监控方式;
Actions 可以接收事件,可以发送动作而用来报警;
(Events,Actions,Trigger) 是zabbix的核心组件
Zabbix 完整的监控配置流程大体由如下组成:
Host group --> Hosts --> Applications --> Items --> Triggers --> Events --> Actions (发警告) --> User group
--> Users --> Medias
graph, screen
依赖关系:
Host --> Item --> Trigger --> Action
添加主机到zabbix server:
一定不要让没有监控的服务器上线
定义好discoevery: 可以根据给定的网段,自动描网段,并添加,此种方式是服务器端主动
auto_registrion: 被监控主机,自动向服务端注册
low level discovery: 区别不同的底层设备的
模板(template):
一般模板是套在主机之上的;(item,application,trigger,graph,action)
Item
默认的Iems有多种类型
Zabbix-agent
工作模式: passive, active
网卡流量相关:
net.if.in[if,<mode>]
if: 接口,如eth0
mode:bytes, packets, errors, dropped
net.if.out[if,<mode>]
net.if.total[if.<mode>]
端口相关:
net.tcp.listen[port]
net.tcp.port[<ip>,port]
net.tcp.service[service,<ip>,<port>]
net.udp.listen[port]
监控端口是否处于监听状态
进程相关:
kernel.maxfiles 内核打开的文件数
kernel.maxproc 内核打开的最大进程数
CPU相关:
system.cpu.intr 中断次数
system.cpu.load[<cpu>,<mode>] cpu负载
system.cpu.num[type] cpu个数
system.cpu.switches cpu切换频率
system.cpu.util [<cpu>,<type>,<mode>] cpu哪个指标的利用率
磁盘IO相关:
vfs.dev.read[<device>,<type>,<mode>]
vfs.dev.write[<device>,<type>,<mode>]
vfs.fs.inode [fs,<mode>]
用户可自定义item:
关键:选取一个惟一的key;
命令:收集数据 的命令或脚本;
Trigger:
状态:
OK: 事件转为正状态;
PROBLEM:表示有事件发生;
zabbix server 每次接收到items的新数据时
就会对Item的当前采样值进行判断,即与trigger的表达式进行比较;
一个trigger只能属于一个Item,但一个Item可有有多个Trigger;
Severity:
No classfied: 未知级别,灰色;
Information: 一般信息,亮绿;
Warning: 警告信息,黄色;
Average: 一般故障,红色;
Disater:致命故障,亮红;
Action:
触发条件一般为事件:
Trigger events: OK --> PROBLEM;
Discovery events: zabbix的network discovery工作;
Auto registration events: 主动模式的agent注册时产生的事件;
Internal events: Item变成不再被支持,或Trigger变成为未知道状态