2024年3月

第1章 zabbix监控

1.1 为什么要监控

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

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

     网站/服务器 的可用性

1.1.1 网站可用性

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

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

1.2 监控什么东西

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

1.2.1 监控范畴

1.3 怎么来监控

1.3.1 远程管理服务器

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

1.3.2 监控硬件

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

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

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

1.3.3 查看cpu相关

  lscpu、uptime、top、htop vmstat mpstat

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

[znix@clsn ~]$lscpu
Architecture:          x86_64
CPU op-mode(s):        32-bit, 64-bit
Byte Order:            Little Endian
CPU(s):                1On-line CPU(s) list:   0
Thread(s) per core:    1Core(s) per socket:    1Socket(s):             1NUMA node(s):          1Vendor ID:             GenuineIntel
CPU family:            6Model:                 85Model name:            Intel(R) Xeon(R) Platinum 8163 CPU @ 2.50GHz
Stepping:              4CPU MHz:               2494.150BogoMIPS:              4988.30Hypervisor vendor:     KVM
Virtualization type:   full
L1d cache:             32K
L1i cache:             32K
L2 cache:              1024K
L3 cache:              33792K
NUMA node0 CPU(s):     0

1.3.4 内存够不够可以用

  free

[znix@clsn ~]$free -h
             total       used       free     shared    buffers     cached
Mem:          996M       867M       128M       712K       145M       450M-/+ buffers/cache:       271M       725M
Swap:         1.0G         0B       1.0G

1.3.5 磁盘剩多少写的快不快可以用

  df、dd、iotop

[znix@clsn ~]$df -h
Filesystem      Size  Used Avail Use% Mounted on/dev/vda1        40G   24G   15G  62% /tmpfs           499M   20K  499M   1% /dev/shm/dev/vdb1        20G  4.4G   15G  24% /data

1.3.6 监控网络

  iftop nethogs

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

1.4 监控工具总览

  mrtg 流量监控出图

  nagios 监控

  cacti  流量监控出图

  zabbix 监控+出图

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的组成

 

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

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

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

1.5.2 zabbix监控范畴

  ²  硬件监控 :Zabbix IPMI Interface

  ²  系统监控 :Zabbix Agent Interface

  ²  Java 监控:ZabbixJMX Interface

  ²  网络设备监抟:Zabbix SNMP Interface

  ²  应用服务监控:Zabbix Agent UserParameter

  ²  MySQL 数据库监控:percona-monitoring-pldlgins

  ²  URL监控:Zabbix Web监控

第2章 安装zabbix

2.1 环境检查

[root@m01 ~]# cat /etc/redhat-releaseCentOS Linux release 7.4.1708 (Core)

[root@m01 ~]# uname -r3.10.0-693.el7.x86_64

[root@m01 ~]# getenforceDisabled

[root@m01 ~]# systemctl status firewalld.service● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; disabled; vendor preset: enabled)
   Active: inactive (dead)
     Docs: man:firewalld(1)

2.2 安装zabbix过程

2.2.1 安装方式选择

  编译安装 (服务较多,环境复杂)

  yum安装(干净环境)

  使用yum 需要镜像yum源 http://www.cnblogs.com/clsn/p/7866643.html

2.2.2 服务端快速安装脚本

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

2.2.3 客户端快速部署脚本

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

2.3 检测连通性

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

yum install zabbix-get

2.3.2 在服务端进行测试

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

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

测试结果

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

第3章 web界面操作

3.1 zabbix的web安装

3.1.1 使用浏览器访问

  http://10.0.0.61/zabbix/setup.php

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

 

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

 

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

 

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

 

   安装完成、点击finsh

 

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

 

3.2 添加监控信息

3.2.1 修改监控管理机zabbix server

配置 >> 主机

 

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

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

 

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

 

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

 

3.2.2 添加新的主机

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

 

注意勾选以启用

 

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

 

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

 

3.2.3 查看监控内容

检测中  >> 最新数据

   在最新数据中需要筛选,

 

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

 

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

 

3.2.4 查看图像

检测中 >> 图形

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

 

第4章 自定义监控与监控报警

4.1 自定义监控

4.1.1 说明

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

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

4.1.2 预备知识

自定义key能被server和agent认可

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

4.2 实现自定义监控

4.2.1 自定义语法

UserParameter=<key>,<shell command>UserParameter=login-user,who|wc -l
UserParameter=login-user,/bin/sh /server/scripts/login.sh

4.2.2 agent注册

[root@cache01 ~]# cd /etc/zabbix/zabbix_agentd.d/[root@cache01 zabbix_agentd.d]# vim userparameter_login.confUserParameter=login-user,who|wc -l
UserParameter=login-user2,who|wc -l
UserParameter=login-user3,who|wc -l

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

# 修改完成后重启服务

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

   在server端进行get测试

[root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user"3[root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user2"3[root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user3"3[root@m01 ~]# zabbix_get -s 172.16.1.21 -p 10050 -k "login-user4"ZBX_NOTSUPPORTED: Unsupported item key.

4.2.3 在server端注册(web操作)

①   创建模板

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

 

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

 

   查看创建出来的模板。↑

②   创建应用集

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

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

 

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

③   创建监控项

监控项 >> 创建监控项

 

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

 

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

 

④   创建触发器

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

(根据需求创建)

触发器 >> 创建触发器

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

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

   严重性自定义。

 

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

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

 

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

 

⑤   创建图形

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

图形 >> 创建图形

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

 

⑥   主机关联模板

配置 >> 主机

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

 

4.2.4 查看监控的图形

 

4.3 监控报警

4.3.1 第三方报警平台

http://www.onealert.com

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

4.3.2 onealert配置

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

 

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

 


zabbix3.4.1使用教程

一、 Zabbix概念

1. Zabbix简介

2. zabbix的主要特点

3. Zabbix主要功能

4. 各组件介绍

二、 Zabbix的安装

1. 网络配置

2. 安装配置zabbix server(同时数据库)

3. 安装zabbix web

4. 安装配置zabbix agent

三、 Zabbix使用

1. 监控主机

2. 监控磁盘空间

监控项

触发器

3. 监控服务端口

监控项

触发器

4. 监控服务器CPU

监控项

触发器

5. 监控服务日志

创建监控项(**自定义键值**)

步骤

1、zabbix_agent.conf配置文件中引入配置文件

2、配置文件

3、自定义脚本

wc命令:

4、创建监控级别

监控项

触发器

6. 实现发送邮件功能

1. 安装邮件发送工具mailx

2. 配置zabbix_service.conf文件,引入发送脚本

3. 编写发送脚本

4. zabbix-web页面配置

1).新建媒介类型

2).用户添加报警媒介

3).配置中给触发器添加动作

4).操作和恢复操作设置

5).查看状态

四、其他

一、 Zabbix概念

1. Zabbix简介

   zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。

   zabbix由zabbix server与可选组件zabbix agent两部门组成。

   zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视。

   zabbix agent需要安装在被监视的目标服务器上,它主要完成对硬件信息或与操作系统有关的内存,CPU等信息的收集。

1

2

3

4

2. zabbix的主要特点

- 安装与配置简单,学习成本低 

- 支持多语言(包括中文)

- 免费开源

- 自动发现服务器与网络设备

- 分布式监视以及WEB集中管理功能

- 可以无agent监视

- 用户安全认证和柔软的授权方式

- 通过WEB界面设置或查看监视结果

- email等通知功能

1

2

3

4

5

6

7

8

9

3. Zabbix主要功能

 - CPU负荷

 - 内存使用

 - 磁盘使用

 - 网络状况

 - 端口监视

 - 日志监视 

1

2

3

4

5

6

4. 各组件介绍

zabbix agent:部署在被监控主机上,负责被监控主机的数据,并将数据发送给zabbix server。

zabbix server:负责接收agent发送的报告信息,并且负责组织配置信息、统计信息、操作数据等。

zabbix database:用于存储所有zabbix的配置信息、监控数据的数据库。

zabbix web:zabbix的web界面,管理员通过web界面管理zabbix配置以及查看zabbix相关监控信息,可以单独部署在独立的服务器上。

zabbix proxy:可选组件,用于分布式监控环境中,zabbix proxy代表server端,完成局部区域内的信息收集,最终统一发往server端。

1

2

3

4

5

二、 Zabbix的安装

1. 网络配置

连接centos 系统后,首先关闭防火墙和SELINUX,如不关闭会各种拦截,网页访问等故障,容易造成蛋疼哦.


# systemctl stop firewalld.service #关闭防火墙服务


# systemctl disable firewalld.service #开机不启动


# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config #替换文本参数


# grep SELINUX=disabled /etc/selinux/config #查文本状态


# setenforce 0 #关闭当前SELINUX

1

2

3

4

5

6

7

8

9

备注:必须关闭selinux监控,否则zabbix服务端没有权限访问zabbix客户端文件。


2. 安装配置zabbix server(同时数据库)

 安装mysql数据库


# yum -y install mariadb mariadb-devel mariadb-server  # centos7下安装的是mariadb

# systemctl enable mariadb # 设置开机自启动

# systemctl start mariadb # 启动

# systemctl status mariadb # 查看状态

1

2

3

4

设置mysql的root密码


# mysqladmin -u root -h localhost password 'xxxxxxxx'

1

 创建数据库 zabbix 并授权


# mysql -uroot -pxxxxxx

1

create database zabbix character set utf8 collate utf8_bin;

grant all privileges on zabbix.* to zabbix@localhost identified by ‘xxxxxxxx’;

quit


安装zabbix-server,因为mysql初始化数据的脚本通过安装zabbix-server下载的


 备份本地yum 源


# cp -r /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup # 

1

 下载3.4.1 rpm


# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-1.el7.centos.noarch.rpm

1

 Zabbix-server

在3.X版本中,没有单独的zabbix-server安装包,安装了zabbix-server-mysql即为安装了server端包。

同时,我们可以在服务端安装zabbix_get包,以便向agent端发起测试。


# yum install zabbix-server-mysql zabbix-get

1

 导入zabbix初始化数据


# zcat /usr/share/doc/zabbix-server-mysql*/create.sql.gz | mysql -uzabbix -pxxxxxxxx Zabbix

1

 配置zabbix_server的配置文件


# vim /etc/zabbix/zabbix_server.conf


37:LogFile=/var/log/zabbix/zabbix_server.log

48:LogFileSize=0

71:PidFile=/var/run/zabbix/zabbix_server.pid

81:SocketDir=/var/run/zabbix

90:DBHost=localhost

99:DBName=zabbix

115:DBUser=zabbix

123:DBPassword=123456

130:DBSocket=/var/lib/mysql/mysql.sock

138:DBPort=3306

328:SNMPTrapperFile=/var/log/snmptrap/snmptrap.log

445:Timeout=4

487:AlertScriptsPath=/usr/lib/zabbix/alertscripts

497:ExternalScripts=/usr/lib/zabbix/externalscripts

533:LogSlowQueries=3000

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

 启动zabbix-server


# systemctl start zabbix-server

1

 查看状态


# systemctl status zabbix-server

1

3. 安装zabbix web

 安装


# yum install zabbix-web-mysql

1

 编辑Zabbix前端的PHP配置

Zabbix前端的Apache配置文件位于 /etc/httpd/conf.d/zabbix.conf 。一些PHP设置已经完成了配置,重点是调整时区的配置,修改为亚洲上海。


# vim /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai

1

2

 修改zabbix server访问端口:


编辑httpd.conf文件 :


#vim /etc/httpd/conf/httpd.conf

1

修改默认的侦听端口和ServerName


136 Listen 8383

1

重启apache服务,使配置生效:


# service httpd restart

1

添加防火墙规则,允许端口访问 (前边防火墙关了,这里可以不用管)


# vim /etc/sysconfig/iptables

zabbix web -A INPUT -m state --state NEW -m tcp -p tcp --dport 8008 -j ACCEPT

重启防火墙:service iptables restart

1

2

3

浏览器访问http://IP:8383/zabbix 测试是否修改成功


 访问Zabbix Web页面,http://IP:8383/zabbix,默认的用户名/密码为 Admin/zabbix




确保PHP所有项目都OK,然后点击“Next step”




此处为连接mysql的配置,请按照前面安装时的配置填写,然后点击“Next step”




Name处可以填写网站的名称,然后点击“Next step”



根据提示可以看到下面图形界面的操作都写到一个配置文件中,/etc/zabbix/web/zabbix.conf.php,确认无误后,点击“Finish”




登陆zabbix前端,默认账号为 Admin,默认密码为zabbix




 配置zabbix中文界面

#修改PHP配置文件

确认zabbix是否开启了中文件支持功能,


# vim /usr/share/zabbix/include/locales.inc.php

1

浏览器登陆zabbix前端,设置语言为Chinese(zh_CN),然后点击“Update”,刷新页面就可以看到中文了。




4. 安装配置zabbix agent

安装zabbix-agent


# rpm -ivh http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-agent-3.4.4-2.el7.x86_64.rpm

# yum install -y zabbix-agent zabbix-get

1

2

配置zabbix-agent


# vim /etc/zabbix/zabbix_agentd.conf # 修改agent配置文件

Server=172.18.0.113 # zabbix服务端内网IP

ServerActive=172.18.0.113 # zabbix服务端内网IP,Active表示agent主动推送

Hostname=172.18.0.106 # zabbix客户端主机名称,需要和web端添加的名称一致,一般写自己ip

Include=/etc/zabbix/zabbix_agentd.d/*.conf

1

2

3

4

5

启动zabbix-agent


# systemctl start zabbix-agent

1

三、 Zabbix使用

1. 监控主机

Web端添加Linux主机

配置-主机-创建主机,按下图配置好后点击“更新”




2. 监控磁盘空间

监控项

配置-主机-监控项-创建监控项

名称随意,其他看图片,配置完点“更新“,键值:vfs.fs.size[/,pused]




触发器

配置磁盘使用超过80%的触发器,超过报警



定时触发器:

表达式

{192.168.0.111:net.tcp.port[,8000].last()}=0 and {192.168.0.111:net.tcp.port[,8000].time()}>=033000 and {192.168.0.111:net.tcp.port[,8000].time()}<=213000


监控8000端口使用情况,每天03:30~21:30期间触发器生效


3. 监控服务端口

监控项

以redis(port:6379)为例,键值:net.tcp.port[,6379]




触发器

键值:{172.18.0.106:net.tcp.port[,6379].last()}=0




4. 监控服务器CPU

监控项

键值:system.cpu.util[,idle]




触发器

超过85%报警,表达式:{172.18.0.113:system.cpu.util[,idle].avg(1m)}<15



5. 监控服务日志

创建监控项(自定义键值)

思想

通过自定义键值,引入脚本,根据脚本实现服务的日志监控


步骤

1、zabbix_agent.conf配置文件中引入配置文件

vim /etc/zabbix/zabbix_agentd.conf

Include=/etc/zabbix/zabbix_agentd.d/*.conf

1

2

2、配置文件

cd /etc/zabbix/zabbix_agentd.d/

userparameter_jvm.conf  userparameter_log.conf  userparameter_mysql.conf

配置文件内容

UserParameter=test_log,/etc/zabbix/script/logs/log_usercenter-service.sh

UserParameter=usercenter_count,/etc/zabbix/script/logs/count_eq-usercenter-service.sh

1

2

3

4

5

3、自定义脚本

/etc/zabbix/script/logs/log_usercenter-service.sh


#!/bin/bash

source /etc/zabbix/log.conf

logdate=$(date "+%Y-%m-%d")

msg=`tail -n "$row" /service1/usercenter-service1/logs/usercenter-service."$logdate"-*.log |grep -E "${logtype_02}"|grep -E "${logtype_01}"`

#msg=`grep -E "${logtype_01}" /usr/service/usercenter-service/logs/usercenter-service."$logdate"-0.log `

count=`echo "$msg" | wc -l`


if [ ! -n "$msg" ];then

echo "OK"

exit 0

fi

if [ $count -gt 0 ];then

echo "$msg"

exit 1

else

echo "OK"

exit 0

fi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

监控日志中出现的error数量


/etc/zabbix/script/logs/count_eq-usercenter-service.sh


#!/bin/bash

source /etc/zabbix/log.conf

logdate=$(date "+%Y-%m-%d")

msg=`tail -n "$row" /zyqservice1/eq-usercenter-service1/logs/eq-usercenter-service."$logdate"-*.log |grep -E "${logtype_02}"|grep -E "${logtype_01}"`

#msg=`grep -E "${logtype_01}" /usr/zeqservice/eq-usercenter-service/logs/eq-usercenter-service."$logdate"-0.log `

count=`echo "$msg" | wc -l`

if [ ! -n "$msg" ];then

        echo "0"

        exit 0

fi

if [ $count -gt 0 ];then

        echo "$count"

        exit 1

else

        echo "OK"

        exit 0

fi

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

注意:(给脚本设置权限)chmod 777 *.sh


wc命令:

wc -l : 统计行

wc -c: 统计字节数

wc -m:统计字符数,不能与-c同时使用

wc -w:统计字数

wc -L:打印最长长度


4、创建监控级别

vim /etc/zabbix/log.conf

logtype_01=ERROR

logtype_02=Exception

row=10000


脚本存放位置

/etc/zabbix/script/logs/

1

2

3

4

5

6

7

8

监控项



触发器

报错超过50个示警

表达式:{172.18.0.106:usercenter_count.last()}>50



查看监控结果


监控中 - 仪表盘

监控项达到触发器设置的提示点,会在仪表盘中显示错误信息,需要确认后信息才会消失。


监控中 - 最新数据

看数据


6. 实现发送邮件功能

1. 安装邮件发送工具mailx

yum install mailx # 安装

cp /etc/mail.rc /etc/mailrc.bak # 备份原来配置文件


vi /etc/mail.rc # 修改配置文件内容,添加发送邮件的邮箱信息


set from=...@qq.com

set smtp=smtp.qq.com:25

set smtp-auth-user=...@qq.com

set smtp-auth-password=  # 邮箱密码使用SMTP授权码

set smtp-auth=login

1

2

3

4

5

6

7

systemctl restart postfix.service #重启服务


echo hello word | mail -s " title" …@qq.com # 接收的邮箱,测试一下


2. 配置zabbix_service.conf文件,引入发送脚本

/etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/lib/zabbix/alertscripts

ExternalScripts=/usr/lib/zabbix/externalscripts

1

2

3

3. 编写发送脚本

/usr/lib/zabbix/alertscripts/sendmail.sh


内容:


#!/bin/bash 

messages=`echo $3 | tr '\r\n' '\n'`


subject=`echo $2 | tr '\r\n' '\n'`


echo "${messages}" | mail -s "${subject}" $1 >>/tmp/sendmail.log 2>&1

1

2

3

4

5

6

4. zabbix-web页面配置

1).新建媒介类型

管理 – 报警媒介类型 – 创建媒体类型


脚本名称与引入的文件名称一直

新增三个脚本参数:


{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

1

2

3

更新即可



2).用户添加报警媒介

管理 – 用户 – admin – 报警媒介 – 添加



添加报警媒介:



3).配置中给触发器添加动作

配置 – 动作 – 创建动作


动作页面:触发条件选择触发器,选择中选择你要选择的触发器,最后添加,更新





4).操作和恢复操作设置

标题:


警报:{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!

1

消息内容:


告警主机:{HOSTNAME1}


告警时间:{EVENT.DATE} {EVENT.TIME}


告警等级:{TRIGGER.SEVERITY}


告警信息: {TRIGGER.NAME}

1

2

3

4

5

6

7

操作:如图

最后点击添加



5).查看状态

触发器触发时,仪表板上如下显示,动作下不为空,点击后可看mail发送状态




四、其他

官方文档:https://www.zabbix.com/documentation/


zabbix报错排错大全

https://www.cnblogs.com/dbslinux/p/9465803.html


日志文件: vi /var/log/zabbix/zabbix-agentd.log


1.系统提示zabbix共享内存报错

zabbix_agentd [5922]: cannot open log: cannot create semaphore set: [28] No space left on device


解决:

修改 vim /etc/sysctl.conf


kernel.sem =500  64000   64      256

1

sysctl -p /etc/sysctl.conf


后便能够正常启动了。(报错原因:kernel.sem参数设置过小 ,原先系统默认设置的为 250 32000 32 128)


2.数据库问题

浏览器打开zabbix页面报Error connecting to database: Access denied for user ‘zabbix’ @ ‘localhost’ to databas


/etc/zabbix/web/zabbix.conf.php

————————————————


                            版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

                        

原文链接:https://blog.csdn.net/weixin_42170236/article/details/99942384


作者:北海

链接:https://www.zhihu.com/question/19973178/answer/2890691700

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


综合感觉Zabbix更好,包括灵活性和社区等。但在实际工作中,发现告警洪灾很消耗运维工作量,所以也有些思考。下面介绍一种基于Zabbix实现贴合业务场景的告警聚合的方法。本方法的思路是通用的,并不局限于某一具体的软件。注意,具体的参数可以根据实际情况进行设置和选用,文中所述仅是一种示例。<img src="https://pic1.zhimg.com/50/v2-2ad29d0b66403ae2438f04362d4cdc03_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1560" data-rawheight="360" data-original-token="v2-1392f650c61e6516429bda26f2251651" class="origin_image zh-lightbox-thumb" width="1560" data-original="https://picx.zhimg.com/v2-2ad29d0b66403ae2438f04362d4cdc03_r.jpg?source=1def8aca"/>1. 引言1.1 背景IT运维怕什么?告警。而告警洪灾更是噩梦,正愉快写着文档时猛然来了无数个夺命连环Call,现在只是稍微想象一下就开始头疼了。一般来说,告警洪灾的常见原因有:算法(包括简单的预测算法以及机器学习)的局限性;告警规则配置不合理;将过多的指标放入了告警规则中,而其实人并不需要对它们进行处理;告警阈值过于苛刻;外部通知(邮件、企业微信等)过于零散;初步分析:算法的局限性现实情况复杂多变,比如节日的抢购或甚至临时上线的活动,而有时网络波动也会导致数据异常进而误触发告警。当然,长期的机器学习以及算法的进步应该能缓解这一问题,但较短时间内难以看到成效,而且可能会起到反作用。目前它还更多的是在探索试用阶段,本文暂不对此进行讨论。告警规则配置不合理不论是将过多的指标放入了告警规则中,还是告警阈值过于苛刻,都是因为开始的时候会担心错过了告警,追求大而全的监控和告警配置。当然可以通过结合自身监控需求来撸一遍所有告警规则,选择设置关心的指标和阈值即可。只是,被监控资源会不停慢慢添加,监控需求也会不停迭代,隔三差五就撸一遍所有告警规则实在是劳心费力。外部通知(邮件、企业微信等)过于零散因为告警消息是直接一条条推送出来的,所以外部通知必然零散,导致运维人员会收到数量过多的通知,且不便于寻找相关告警信息。1.2 思路基于上述分析,提出以下实现贴合业务场景的告警聚合的方法。利用三方平台接入来自于Zabbix的告警消息,按照人为设置的消息聚合规则进行聚合收敛,生成精简的事件集,并基于事件集来配置外部通知规则,从而极大减少发出告警的数量。重点在于消息聚合规则里,要按实际运维需要对告警消息进行分组,比如将一定时间范围内严重及以上级别的所有服务器告警归为一类,并分配给服务器运维团队或某一位具体的运维人员。这样就能在不去修改原始的告警规则(毕竟可能有成千上万的告警规则)的前提下,保证告警消息的聚合是贴近实际业务,同时也减少了告警的频繁轰炸。而运维人员在后续进行具体排查时,是可以在系统内部同时看到精简的事件集信息以及事件集下的所有告警事件明细的。2. 流程2.1 Zabbix环境首先需要准备好Zabbix环境,推荐使用Zabbix官方的长期支持版本比如 Zabbix 6.0 LTS。相关安装要求和流程请见官方下载安装Zabbix,更详细的说明请见官方文档的安装章节。2.2 Argus环境为了对Zabbix产生的告警进行聚合以及外部通知,需要借助于Argus运维平台,一个基于Zabbix的IT运维监控平台。这里主要是使用Argus的事件中心来设置贴合业务的事件聚合规则、消息分派规则,同时可查看与管理事件集与事件。如图为Argus事件中心的概览页,想了解更多或试用可点击前面的链接。<img src="https://pic1.zhimg.com/50/v2-eb9f91532d749bfe4badf3b645acb482_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1920" data-rawheight="1054" data-original-token="v2-df45b10eb8738a322ff39da2db4f0b73" class="origin_image zh-lightbox-thumb" width="1920" data-original="https://picx.zhimg.com/v2-eb9f91532d749bfe4badf3b645acb482_r.jpg?source=1def8aca"/>2.3 添加部门在Argus的 控制台 -> 用户管理 -> 部门管理 内,添加部门,如下图所示。<img src="https://picx.zhimg.com/50/v2-21aeb84370af51400002479ec5509156_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1094" data-rawheight="462" data-original-token="v2-f78ae2e09432bae4511fca57127967b3" class="origin_image zh-lightbox-thumb" width="1094" data-original="https://picx.zhimg.com/v2-21aeb84370af51400002479ec5509156_r.jpg?source=1def8aca"/>2.4 添加用户在Argus的 控制台 -> 用户管理 -> 用户管理 内,添加用户,如下图所示。<img src="https://pic1.zhimg.com/50/v2-eaf05d46fe3765febae7e9129469e678_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1064" data-rawheight="695" data-original-token="v2-0faf3cd9efb4a6d56a0517f44b090665" class="origin_image zh-lightbox-thumb" width="1064" data-original="https://pica.zhimg.com/v2-eaf05d46fe3765febae7e9129469e678_r.jpg?source=1def8aca"/>2.5 添加监控资源在Argus的 资源管理 -> 资源配置 -> 资源综合管理 内,添加资源,逻辑与在Zabbix内添加主机类似,如下图所示。<img src="https://picx.zhimg.com/50/v2-ab4530fb24288b7e14e90c0d717a0cdd_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1052" data-rawheight="1056" data-original-token="v2-a903d42140c2112a098a195bf52f9a1d" class="origin_image zh-lightbox-thumb" width="1052" data-original="https://pic1.zhimg.com/v2-ab4530fb24288b7e14e90c0d717a0cdd_r.jpg?source=1def8aca"/>注意,该资源使用的依然是Zabbix内的监控模版,所以资源上的告警规则也就是Zabbix模板内自带的告警规则。2.6 配置消息发送参数在Argus的 事件中心 -> 消息发送参数 内,设置外部消息的发送参数,如下图所示。<img src="https://picx.zhimg.com/50/v2-306ec3f91618b7c556a4d1b621e356cd_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="817" data-rawheight="578" data-original-token="v2-4aee47bba6dbeb6fc334a31c368c44bb" class="origin_image zh-lightbox-thumb" width="817" data-original="https://pic1.zhimg.com/v2-306ec3f91618b7c556a4d1b621e356cd_r.jpg?source=1def8aca"/>2.7 配置Zabbix内的告警规则在前面Argus内添加监控资源的步骤后,资源会自动应用对应模板,同时继承获得模板上的告警规则。如果需要对告警规则进行增改,可以直接在Zabbix内进行配置操作,入口位于Zabbix网页端的 配置 -> 主机 列表 ->对应主机行内的 触发器。具体操作可参考官方文档的触发器章节。2.8 添加事件聚合规则事件聚合规则可以通过组合条件将一定时间范围内不同的告警消息纳入同一个事件集。在Argus的 事件中心 -> 事件聚合规则 内,添加事件聚合规则,如下图所示。<img src="https://picx.zhimg.com/50/v2-51b910afe6f7df05179caae5e09848dc_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1442" data-rawheight="696" data-original-token="v2-d2e639a620c2de94794fa851cb372c90" class="origin_image zh-lightbox-thumb" width="1442" data-original="https://picx.zhimg.com/v2-51b910afe6f7df05179caae5e09848dc_r.jpg?source=1def8aca"/>注意这里仅仅是举了一个简单的例子,实际可以按照真实的运维需求进行更加复杂多样的条件设置。2.9 添加消息分派规则消息分派规则可以将符合特定多个事件聚合规则的事件集分派给选定的多个部门或人员。在Argus的 事件中心 -> 消息分派规则 内,添加消息分派规则,如下图所示。<img src="https://picx.zhimg.com/50/v2-68104f14108cf78646090912d185ec3d_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1128" data-rawheight="857" data-original-token="v2-2c32020e11f44b080136c79440a70a5f" class="origin_image zh-lightbox-thumb" width="1128" data-original="https://picx.zhimg.com/v2-68104f14108cf78646090912d185ec3d_r.jpg?source=1def8aca"/>2.10 告警消息的接收与处理在Zabbix告警触发后,Argus内会自动生成新的事件集,并通过上述消息分派方式进行外部通知。除了通过邮件、企业微信等通知给具体人员,Argus还会通过Webhook的方式将消息推送给三方系统,若有需要,后续可由三方系统继续进行自动化的流程处理。下图为邮件通知的截图,其中会包含事件集、事件集内首条事件及相关信息。在 事件中心 -> 聚合事件 中可以看到所有的事件集,同时可展开某一事件集,查看其下的事件列表、趋势图表,便于运维人员分析处理问题,如下图所示。<img src="https://pic1.zhimg.com/50/v2-a758a68cf1a5524c8ba3ffb07a8c3ea5_720w.jpg?source=1def8aca" data-caption="" data-size="normal" data-rawwidth="1492" data-rawheight="976" data-original-token="v2-2a58591dcc91adcd156db6155c07a923" class="origin_image zh-lightbox-thumb" width="1492" data-original="https://pic1.zhimg.com/v2-a758a68cf1a5524c8ba3ffb07a8c3ea5_r.jpg?source=1def8aca"/>


运维行业有句话:“无监控、不运维”,是的,一点也不夸张,监控俗称“第三只眼”。没了监控,什么基础运维,业务运维都是“瞎子”。

所以说监控是运维这个职业的根本。尤其是在现在DevOps这么火的时候,用监控数据给自己撑腰,这显得更加必要。

有人说运维是背锅侠,那么,有了监控,有了充足的数据,一切以数据说话,运维还需要背锅吗,所以作为一个运维工程师,如何构建一套监控系统是你的第一件工作。

让我们以全局的眼光,探讨一下运维监控工具如何选型以及构建运维监控平台的设计思路。

1.常见的运维监控工具

现在运维监控工具非常多,哪个好,哪个不好,哪个适合你,哪个不适合你,其实只有你了解了他们的特性后,才知道,所以从这里开始讲起。

Cacti

Cacti是一套基于PHP,MySQL,SNMP及RRDTool开发的网络流量监测图形分析工具。

简单的说Cacti就是一个PHP程序。它通过使用SNMP协议获取远端网络设备和相关信息,(其实就是使用Net-SNMP 软件包的snmpget 和snmpwalk 命令获取)并通过RRDTOOL工具绘图,通过PHP程序展现出来。我们使用它可以展现出监控对象一段时间内的状态或者性能趋势图。

Cacti是很老的一款监控工具了,其实说它是一款流量监控工具更合适,对流量监控比较精准,但缺点很多,出图不好看,不支持分布式,也没有告警功能,所以使用的人会越来越少。


Nagios

Nagios是一款开源的免费网络监视工具,能有效监控Windows、Linux和Unix的主机状态,交换机路由器等网络设置,打印机等。在系统或服务状态异常时发出邮件或短信报警第一时间通知网站运维人员,在状态恢复后发出正常的邮件或短信通知。

Nagios主要的特征是监控告警,最强大的就是告警功能,可支持多种告警方式,但缺点是没有强大的数据收集机制,并且数据出图也很简陋,当监控的主机越来越多时,添加主机也非常麻烦,配置文件都是基于文本配置的,不支持web方式管理和配置,这样很容易出错,不宜维护。


Zabbix

Zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供强大的通知机制以让系统运维人员快速定位/解决存在的各种问题。

Zabbix由2部分构成,zabbix server与可选组件zabbix agent。zabbix server可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux, Solaris, HP-UX, AIX, Free BSD, Open BSD, OS X等平台上。

Zabbix解决了cacti没有告警的不足,也解决了nagios不能通过web配置的缺点,同时还支持分布式部署,这使得它迅速流行起来,zabbix也成为目前中小企业监控最流行的运维监控平台。

当然,Zabbix也有不足之处,它消耗的资源比较多,如果监控的主机非常多时,可能会出现监控超时、告警超时等现象,不过也有很多解决办法,比如提高硬件性能、改变zabbix监控模式等。


Ganglia

Ganglia是一款为HPC(高性能计算)集群而设计的可扩展的分布式监控系统,它可以监视和显示集群中的节点的各种状态信息,它由运行在各个节点上的gmond守护进程来采集CPU 、内存、硬盘利用率、I/O负载、网络流量情况等方面的数据,然后汇总到gmetad守护进程下,使用rrdtool存储数据,最后将历史数据以曲线方式通过PHP页面呈现。

Ganglia监控系统有三部分组成,分别是gmond、gmetad、webfrontend。gmond安装在需要收集数据的客户端,gmetad是服务端,webfrontend是一个php的web ui界面,ganglia通过gmond收集数据,然后在webfrontend进行展示。

Ganglia的主要特征是收集数据,并集中展示数据,这是ganglia的优势和特色,ganglia可以将所有数据汇总到一个界面集中展示,并且支持多种数据接口,可以很方面的扩展监控,同时,最为重要的是,ganglia收集数据非常轻量级,客户端的gmond程序基本不耗费系统资源,而这个特点刚好弥补了zabbix消耗性能的不足。

最后,Ganglia在对大数据平台的监控更为智能,只需要一个配置文件,即可开通Ganglia对hadoop、spark的监控,监控指标有近千个,完全满足了对大数据平台的监控需求。


Centreon

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

Centreon的强项是一键配置和管理,并支持分布式监控,nagios能够完成的功能,通过centreon都能实现,同时,centreon还可以和ganglia进行集成,centreon将ganglia收集到的数据进行整合,可以实现主机自动加入监控以及自动告警的功能。


Prometheus

Prometheus是一套开源的系统监控报警框架,它既适用于面向服务器等硬件指标的监控,也适用于高动态的面向服务架构的监控。对于现在流行的微服务,Prometheus的多维度数据收集和数据筛选查询语言也是非常的强大。Prometheus是为服务的可靠性而设计的,当服务出现故障时,它可以使你快速定位和诊断问题。


Grafana

Grafana是一个开源的度量分析与可视化套件,通俗的说,Grafana就是一个图形可视化展示平台,它通过各种炫酷的界面效果展示我们的监控数据,

如果你觉得zabbix的出图界面不够好看,逼格不够高,就可以使用Grafana的可视化展示,同时,Grafana支持许多不同的数据源,Graphite,InfluxDB,OpenTSDB,Prometheus,Elasticsearch,CloudWatch和KairosDB都可以完美支持。

对比图


2.统一运维监控平台设计思路

运维监控平台不是简单的下载一个开源工具,然后搭建起来就行了,它需要根据监控的环境和特点进行各种整合和二次开发,以达到与自己的需求完全吻合的程度。那么下面就谈谈运维监控平台的设计思路。

构建一个智能的运维监控平台,必须以运行监控和故障报警这两个方面为重点,将所有业务系统中所涉及的网络资源、硬件资源、软件资源、数据库资源等纳入统一的运维监控平台中,并通过消除管理软件的差别。

数据采集手段的差别,对各种不同的数据来源实现统一管理、统一规范、统一处理、统一展现、统一用户登录、统一权限控制,最终实现运维规范化、自动化、智能化的大运维管理。

智能的运维监控平台,设计架构从低到高可以分为6层,三大模块,如下图:

数据收集层:位于最底层,主要收集网络数据、业务系统数据、数据库数据、操作系统数据等,然后将收集到的数据进行规范化并进行存储。

数据展示层:位于第二层,是一个Web展示界面,主要是将数据收集层获取到的数据进行统一展示,展示的方式可以是曲线图、柱状图、饼状态等,通过将数据图形化,可以帮助运维人员了解一段时间内主机或网络的运行状态和运行趋势,并作为运维人员排查问题或解决问题的依据。

数据提取层:位于第三层,主要是对从数据收集层获取到的数据进行规格化和过滤处理,提取需要的数据到监控报警模块,这个部分是监控和报警两个模块的衔接点。

报警规则配置层:位于第四层,主要是根据第三层获取到的数据进行报警规则设置、报警阀值设置、报警联系人设置和报警方式设置等。

报警事件生成层:位于第五层,主要是对报警事件进行实时记录,将报警结果存入数据库以备调用,并将报警结果形成分析报表,以统计一段时间内的故障率和故障发生趋势。

用户展示管理层:位于最顶层,是一个Web展示界面,主要是将监控统计结果、报警故障结果进行统一展示,并实现多用户、多权限管理,实现统一用户和统一权限控制。

在这6层中,从功能实现划分,又分为三个模块,分别是数据收集模块、数据提取模块和监控报警模块,每个模块完成的功能如下:

数据收集模块:此模块主要完成基础数据的收集与图形展示。数据收集的方式有很多种,可以通过SNMP实现,也可以通过代理模块实现,还可以通过自定义脚本实现。常用的数据收集工具有Cacti、Ganglia等。

数据提取模块:此模板主要完成数据的筛选过滤和采集,将需要的数据从数据收集模块提取到监控报警模块中。可以通过数据收集模块提供的接口或自定义脚本实现数据的提取。

监控报警模块:此模块主要完成监控脚本的设置、报警规则设置,报警阀值设置、报警联系人设置等,并将报警结果进行集中展现和历史记录。常见的监控报警工具有Nagios、Centreon等。

在了解了运维监控平台的一般设计思路之后,接下来详细介绍下如何通过软件实现这样一个智能运维监控系统。

下图是根据上图的设计思路形成的一个运维监控平台实现拓扑图,从图中可以看出,主要有三大部分组成,分别是数据收集模块、监控报警模块和数据提取模块。

其中,数据提取模块用于其他两个模块之间的数据通信,而数据收集模块可以有一台或多台数据收集服务器组成,每个数据收集服务器可以直接从服务器群组收集各种数据指标,经过规范数据格式,最终将数据存储到数据收集服务器中。

监控报警模块通过数据抽取模块从数据收集服务器获取需要的数据,然后设置报警阀值、报警联系人等,最终实现实时报警。报警方式支持手机短信报警、邮件报警等,另外,也可以通过插件或者自定义脚本来扩展报警方式。这样一整套监控报警平台就基本实现了。


3.企业运维监控平台选型

中小企业监控平台选择Zabbix

Zabbix是一款综合了数据收集、数据展示、数据提取、监控报警配置、用户展示等方面的一款综合运维监控平台。

Zabbix学习入门较快,功能也很强大,是一个可以迅速用起来的监控软件,能够满足中小企业的监控报警需求,因此是中小型企业运维监控的首选平台。

但是,Zabbix当监控服务器数量较多时,会产生很多问题,如监控数据不准确、报警超时等等问题,这是因为Zabbix对服务器性能要求较高,当监控的服务器数量超过500台后,监控性能急剧下降,此时需要进行分布式监控部署,并且需要提升监控服务器的性能。

安全性方面,Zabbix客户端的agent如果故障,收集到的数据将丢失,同时Zabbix Server也是单点,可能还需要对Zabbix Server做HA保证数据的安全和监控的高可用。

互联网大企业监控平台选择Ganglia+Centreon

开源监控软件组合应用+二次开发是大型互联网企业构建监控平台的一个基本策略,对于有海量服务器、多业务系统的复杂监控,没有哪个软件能独立完成企业的所有监控需求,因此,多种开源监控软件组合应用+二次开发才是监控平台的最终方向。

推荐ganglia是因为ganglia客户端软件对服务资源占用非常低,并且扩展插件非常多,监控扩展也非常容易,同时结合专业的web监控平台centreon,可以实现在数据收集、数据展示、数据提取、监控报警配置、用户展示等方面的完美配合,因此这里对海量服务器进行监控我们推荐ganglia+centreon组合。


4.说说我们运维监控平台的演变历程

这是一个经验和总结,我结合这么多年我们监控平台的演变,总结了一下不同阶段、不同机器数量,监控平台需要的构建思路和策略。

机器数量小于100台的阶段

这个时期由于机器数量较少,因此,对监控的需求也很简单,监控的用途可能主要用于通知问题、快速定位与解决问题,大致总结一下,此阶段监控平台的特点如下:

1>部署简单,上手易用 2>稳定运行,不出故障 3>可进行报警,以邮件、短信等形式

基于以上特点和需求,可以使用比较流行开源的监控软件Nagios,Cacti,Zabbix,Ganglia等等。流行的开源产品文档很多,可快速上手,并且有大量的前人使用经验,遇到问题也很容易解决。

最初我们选择了nagios,因为这款软件是最早流行的,后来因为主机和服务添加不方便,切换到了zabbix上了,此阶段,zabbix应该是最好的选择。

机器数量200到1000的阶段

这个阶段,由于机器数量变多,监控需求也开始变得复杂,不过主要还是用于通知、告警,发现问题,并避免同样的问题再次发生,根据这个阶段的特点,我们在这个时期主要对监控平台做了以下工作:

1>监控内容分类:由于要监控的机器很多,监控内容也随之增多,于是我们将监控根据用途不同,进行了分类,主要分为系统基础监控数据、网络监控数据和业务监控数据。

2>全覆盖式监控:将所有机器均纳入监控中,主要包含软件监控和硬件监控,硬件监控主要是监控硬件性能和故障,软件监控除了第一步提到的各种基础监控数据外,还增加了业务逻辑监控,尽可能的覆盖业务流程,通过大量自定义监控减少和去除重复的问题,保障业务稳定运行。

3>多种告警方式,确保无漏报:将所有监控根据重要程度、紧急程度进行分类,分别用邮件,微信,短信,电话等不同级别的方式进行通知,每个监控对应到不同的人,确保每个监控都有人处理,并且对于重要的业务采用持续通知的方式,不处理就一直通知。

这个阶段的难点是对告警信息的处理,由于机器越来越多,需要监控的服务也越来越多,告警信息就出现了爆发式增长,每天收到上千封报警邮件是经常的事情。 过多的邮件出现,其实就失去了告警的意义,因为我们不可能去查看每一封邮件,而这么多告警邮件中,很多都是非必要的告警,例如系统负载偶尔增高一下,就发了告警邮件,这完全是不需要的。

因此,这个阶段,主要是对监控告警策略进行配置和优化,尽量减少不必要的告警邮件,例如,对系统负载的监控,可以选择连续几次负载超过阀值,然后持续多久之后才进行告警操作,通过对告警策略的优化,告警信息大大减少,每天最多几十封,这样的话,就不会错过任何告警信息了。

机器数量超过1000台的阶段

由于业务持续增长,对服务器需求越来越多,当我们的服务器超过1000台以后,监控的情况发生了变化,或者说监控出现了很多奇怪的问题,主要有如下一些:

1>告警不及时

当我们服务器超过1000台以后,我们的zabbix就经常罢工,有时候监控数据不能及时显示,有时候告警迟迟不来,特别是告警延时,这个是最恐怖的事情,线上业务7*24小时不能出现故障,虽然监控到了异常,但是通过监控系统发出来已经是1个或者几个小时之后了,那监控还有什么意义呢,及时性是监控系统的第一要求,这个是必须要解决的问题。

如何解决这个问题呢,除了对监控进行优化,例如分布式proxy方式部署,开启zabbix主动模式,还对数据收集进行了扩展和优化,我们对基础数据的收集,抛弃了zabbix来实现,而采用ganglia,而对业务数据部分实现仍然采用zabbix完成,通过将收集数据的负载进行分担,大大减低了zabbix的负载,数据收集的准确性,及时性又恢复正常了。


2>告警系统出现了单点故障

由于服务器众多,收集的数据也飞速增长,曾经有一次,监控服务器突然意外宕机了,等系统恢复启动起来,已经是一个小时以后了,这一个小时运维就变成了睁眼瞎了,多可怕的事情。

自从发生监控系统宕机事故后,我们对监控服务器进行了分布式高可用部署,以避免单点故障,同时对监控到的数据进行远程异地备份,当监控服务器故障后,会自动切换到备用监控系统上,并且监控数据自动保存同步。


3>告警需求监控系统无法满足

业务的增加,客户对业务稳定性要求变得更加苛刻,为了保证业务系统稳定运行,业务逻辑监控需求被提出来了,业务逻辑监控就是对业务系统的运行逻辑进行监控,当业务运行逻辑故障时候,也需要进行告警,很显然,对业务逻辑的监控,没有现成的工具和代码,只能根据业务逻辑自行开发,通过提高业务逻辑接口,汇报数据等方式,我们对zabbix进行了多项二次开发,以满足对业务逻辑的监控。

最后,运维监控平台是运维工作中不可或缺的一部分,如何构建适合自己的运维监控平台,每个公司的需求不一样,每个运维面对的痛点也不尽相同,但,不管有什么需求,多少需求,万变不离其宗,有了机器上的各种监控数据,运维就能做很多事情。运维监控的路上,我们一起前行。

原作者:全栈程序员栈长
源链接:javaforall.cn/126659.ht
编辑:IT运维技术圈(侵删)


如果本文对你有帮助的话,欢迎点赞&在看&转发,这对我继续分享&创作优质文章非常重要。感谢

如有错误或其它问题,欢迎小伙伴留言评论、指正。

更多相关Linux运维技术文章,请持续关注:程序员加油站


在现代的IT运维领域,监控和管理网络设备和服务器是至关重要的。Zabbix和Nagios作为两个主要的IT监控工具,一直备受关注。它们都提供了强大的功能和灵活的配置选项,但在某些方面存在差异。本文将对Zabbix和Nagios进行比较,探讨它们的优势和劣势,帮助您选择适合您需求的工具。

Zabbix和Nagios都是当今顶级的网络监控解决方案,被广泛应用于IT行业中。虽然它们都具有高度的稳定性和强大的功能,但它们在规模、特定需求、易用性、预算和技术支持方面都有各自的优势。

Zabbix的卖点之一是其超强的稳定性,能够处理数千个并发设备,并提供了多个平台代理Agent,支持使用SNMP和IPMI协议的采集。它还提供了集中的控制台,支持监控云服务、容器、虚拟机、硬件、服务、数据库、应用程序等,通过API进行集成的空间很大,这对于二次开发者来说是个好消息。Zabbix还具有强大的分析视角,能够帮助您了解网络上某些设备何时出现问题,提供高效的告警系统,让您及时发现和解决设备故障。

相比之下,Nagios则更适合根据您的特定需求为您提供不同的解决方案,具有高效的告警系统,让您了解您的设备何时出现故障。Nagios超出了基本功能,为您和您的组织提供了分析视角,让您知道网络上某些设备何时出现问题。它的设计既强大又易于使用,为您的整个团队提供他们主动监视系统和网络所需的工具,而无需学习全新的界面,它全部基于Web,并可根据您想要的内容进行自定义监控。

虽然这两种产品在功能、易用性和功能方面都有各自的优点,但最终您的选择取决于您的预算和技术能力。如果您想用免费的监控软件,可以选择Zabbix,但您需要自己解决大部分技术问题,或者找第三方技术支持。如果您有预算,可以选择商业版的NagiosXI,它提供商业技术支持。总的来说,Zabbix和Nagios都是全面的监控套件,但最终您需要根据自己的实际情况做出选择。

此外,无论您选择哪种监控解决方案,都需要对其进行合理的部署和管理,以确保其稳定性和有效性。您需要定期维护和更新监控系统,并根据实际情况进行配置和调整,以确保其能够满足您的监控需求。您还需要考虑如何进行数据备份和恢复,以及如何处理监控数据,以便能够及时发现和解决设备故障,确保网络的正常运行。

综上所述,Zabbix和Nagios都是出色的IT监控工具,它们在不同的方面各有优劣。选择适合自己的工具需要考虑诸多因素,如需求、预算、技术能力等。无论您选择哪个工具,都需要深入了解其功能和配置选项,并根据实际情况进行调整和优化。希望本文对您在选择Zabbix或Nagios时提供了一些有用的信息和指导。