抱歉,您的浏览器无法访问本站
本页面需要浏览器支持(启用)JavaScript
了解详情 >

[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常用术语

  1. 主机Host: 要监控的网络设备;
  2. 主机组Host Group: 分类监控的服务器,一组模板(监控项,触发器,等等);
  3. 监控项item: zabbix进行数据收集的核心,一个指定的监控指标;
  4. 触发器trigger: 是指一个表达式,评估item收集的数据是否在合理范围内;
  5. 事件event: 即发生一件值得关注的事情,例如trigger状态由problem转为ok状态;
  6. 动作action: 即预先定义的处理方法,通过定义的动作,发送邮件,知信等等;
  7. 报警升级escalation:发送报警,或者执行远程命令,每五分钟发一次,共发5次等;
  8. 媒介media: 发送通知的手段或通道,如Email、Jobber、SMS 或者微信等等;
  9. 通知notification:通过选定的媒介向用户发送有关的某件事情;
  10. 远程命令(remote command): 预定义的命令,可以在被监控的主机处于某特定条件下时自动执行;
  11. 模板(template): 用于快度定义被监控主机的的预设条目集合,通常包含了item、trigeer、graph、screen;
  12. 另外,模板可以直接链接至单个主机;
  13. 应用(application):一组item的集合;
  14. web场景(web scennario):用于检测web站点可用性的一个或多个HTTP请求;
  15. 前端(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产生的数据组成共有四部分

  1. 配置数据;
  2. 历史数据 50Bytes;
  3. 历史趋势数据 128Bytes;
  4. 事件数据130Bytes;

Zabbix 目前部署在Linux服务器最为常见

zabbix 官方源码

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变成为未知道状态

评论