学习zabbix(十)

Zabbix 3.0 基础介绍 [一]

 

一、Zabbix介绍

 

zabbix 简介

  Zabbix 是一个高度集成的网络监控解决方案,可以提供企业级的开源分布式监控解决方案,由一个国外的团队持续维护更新,软件可以自由下载使用,运作团队靠提供收费的技术支持赢利
  zabbix是一个基于Web界面的,提供分布式系统监控以及网络监视功能的企业级的开源解决方案。
  zabbix能监视各种网络参数,保证服务器系统的安全运营,并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题
  zabbix主要由2部分构成zabbix server和zabbix agent,可选组建zabbix proxy
  zabbix server可以通过SNMP,zabbix agent,fping端口监视等方法对远程服务器或网络状态完成监视,数据收集等功能。同时支持Linux以及Unix平台,Windows平台只能安装客户端
 

Zabbix 功能

  ①具备常见的商业监控软件所具备的功能(主机的性能监控、网络设备性能监控、数据库、性能监控、FTP 等通用协议监控、多种告警方式、详细的报表图表绘制)
  ②支持自动发现网络设备和服务器(可以通过配置自动发现服务器规则来实现)
  ③支持自动发现(low discovery)key 实现动态监控项的批量监控(需写脚本)
  ④支持分布式,能集中展示、管理分布式的监控点
  ⑤扩展性强,server 提供通用接口(api 功能),可以自己开发完善各类监控(根据相关接口编写程序实现)编写插件容易,可以自定义监控项,报警级别的设置。
  ⑥数据收集
 可用和性能检测
 支持snmp(包括trapping and polling),IPMI,JMX,SSH,TELNET
 自定义的检测
 自定义收集数据的频率
 服务器/代理和客户端模式
 灵活的触发器
 可以定义非常灵活的问题阈值,称为触发器,从后端数据库的参考值
 高可定制的报警
 发送通知,可定制的报警升级,收件人,媒体类型
 通知可以使用宏变量有用的变量
 自动操作包括远程命令
 实时的绘图功能
 监控项实时的将数据绘制在图形上面
 WEB 监控能力
 ZABBIX 可以模拟鼠标点击了一个网站,并检查返回值和响应时间

Api 功能
  应用api功能,可以方便的和其他系统结合,包括手机客户端的使用。
更多功能请查看
http://www.zabbix.com/documentation.php

 

Zabbix版本

Zabbix 3.0 Manual
Zabbix 2.4 Manual
Zabbix 2.2 Manual
Zabbix 2.0 Manual
下载地址:http://www.zabbix.com/documentation.php
本次采用yum安装,安装zabbix3.0.使用Centos7

 

Zabbix优缺点

优点
 1、开源,无软件成本投入
 2、Server 对设备性能要求低
 3、支持设备多,自带多种监控模板
 4、支持分布式集中管理,有自动发现功能,可以实现自动化监控
 5、开放式接口,扩展性强,插件编写容易
 6、当监控的item 比较多服务器队列比较大时可以采用被动状态,被监控客户端主动从
 7、server 端去下载需要监控的item 然后取数据上传到server 端。这种方式对服务器的负载比较小。
 8、Api 的支持,方便与其他系统结合
缺点
  需在被监控主机上安装agent,所有数据都存在数据库里,产生的数据据很大,瓶颈主要在数据库

 

Zabbix监控原理

  Zabbix 通过C/S 模式采集数据,通过B/S模式在web 端展示和配置。
被监控端:主机通过安装agent 方式采集数据,网络设备通过SNMP 方式采集数据
Server 端:通过收集SNMP 和agent 发送的数据,写入数据库(MySQL,ORACLE 等),再通过php+apache 在web 前端展示。

 

Zabbix 运行条件

Server:Zabbix Server 需运行在LAMP(Linux+Apache+Mysql+PHP)环境下(或者LNMP),对硬件要求低
Agent:目前已有的agent 基本支持市面常见的OS,包含Linux、HPUX、Solaris、Sun、
windows
SNMP:支持各类常见的网络设备
SNMP(Simple Network Management Protocol,简单网络管理协议

Zabbix监控过程逻辑图
1.png-212.6kB

 

监控类型

硬件监控 适用于物理机、远程管理卡(iDRAC),IPMI(只能平台管理接口)
ipmitools:,MegaCli(查看Raid磁盘)
系统监控: 监控cpt:lscpu、uptime、top、vmstat 1 、mpstat 1、htop
监控内存: free -m、
**监控硬盘:**df -h、iotop
**监控网络:**iftop、netstat、ss
**应用服务监控:**nfs、MySQL、nginx、apache、php、rsync
更详细的监控类型可以参考:http://www.abcdocker.com/abcdocker/1376

 

引入zabbix

所有监控范畴,都可以整合到Zabbix
   硬件监控:Zabbix、IPMI、lnterface
   系统监控:Zabbix、Agent、Interface
   Java监控:Zabbix、JMX、lnterface
   网络设备监控:Zabbix、SNMP、lnterface
   应用服务监控:Zabbix、Agent、UserParameter
   MySQL数据库监控:percona-monitoring-plulgins
   URL监控:Zabbix Web监控
2.png-25.1kB

 

二、Zabbix 环境配置

1、环境信息

 
  1. [root@localhost ~]# cat /etc/redhat-release
  2. CentOSLinux release 7.2.1511(Core)
  3. [root@localhost ~]# uname -r
  4. 3.10.0-327.28.3.el7.x86_64

2、yum安装
阿里云yum源已经提供了zabbix3.0,因此我们需要使用官方yum源。官方yum源下载会比较慢

 
  1. [root@localhost ~]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

问题:为什么要下载release版本的zabbix?

 
  1. [root@localhost ~]# ls /etc/yum.repos.d/
  2. CentOS-Base.repo CentOS-Media.repo epel.repo.rpmnew
  3. CentOS-CR.repo CentOS-Sources.repo epel-testing.repo
  4. CentOS-Debuginfo.repo CentOS-Vault.repo zabbix.repo
  5. CentOS-fasttrack.repo epel.repo

因为下载这个版本会在yum.repos.d下面生成一个zabbix.repo的文件

3、安装相关软件包

 
  1. [root@localhost ~]# yum install zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql mariadb-server mariadb -y
  2. 注:如果Server端也需要监控则需要安装zabbix-agent

提示:在Centos7中,mysql改名为mariadb

4、修改PHP时区设置

 
  1. [root@localhost ~]# sed -i 's@# php_value date.timezone Europe/Riga@php_value date.timezone Asia/Shanghai@g'/etc/httpd/conf.d/zabbix.conf
  2. #要注意需要改的配置文件是/etc/httpd/conf.d/zabbix.conf而不是/etc/php.ini,
 

三、数据库设置

1.启动数据库

 
  1. [root@localhost ~]# systemctl start mariadb

2.创建zabbix数据库及用户

 
  1. mysql
  2. create database zabbix character set utf8 collate utf8_bin;
  3. grant all on zabbix.* to zabbix@'localhost' identified by '123456';
  4. exit

3.导入数据

 
  1. [root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.0.4/
  2. [root@localhost zabbix-server-mysql-3.0.4]# ll
  3. total 1836
  4. -rw-r--r--1 root root 98Jul2211:05 AUTHORS
  5. -rw-r--r--1 root root 687803Jul2211:05ChangeLog
  6. -rw-r--r--1 root root 17990Jul2211:06 COPYING
  7. -rw-r--r--1 root root 1158948Jul2402:59 create.sql.gz
  8. -rw-r--r--1 root root 52Jul2211:06 NEWS
  9. -rw-r--r--1 root root 188Jul2211:05 README
  10. [root@localhost zabbix-server-mysql-3.0.4]# zcat create.sql.gz |mysql -uzabbix -p123456 zabbix

我们使用zcat,专门查看sql.gz包。和cat基本相似

4.修改zabbix配置文件

 
  1. [root@localhost zabbix-server-mysql-3.0.4]# vim /etc/zabbix/zabbix_server.conf
  2. DBHost=localhost #数据库所在主机
  3. DBName=zabbix #数据库名
  4. DBUser=zabbix #数据库用户
  5. DBPassword=123456#数据库密码

5.启动zabbix及apache

 
  1. [root@localhost ~]# systemctl start zabbix-server
  2. [root@localhost ~]# systemctl start httpd
  3. 注意:如果没有启动成功,要看一下是不是80端口被占用

6.Web界面安装master
访问地址:http://192.168.56.11/zabbix/setup.php
1.png-22.4kB

点击Next step进行安装
1.png-35.9kB

首先要确保没有no,如果时区没有改好会提示我们进行修改
1.png-32.2kB

账号密码都是我们刚刚在配置文件中设置的,端口默认就是3306
2.png-24kB

为我们的zabbix起个名字,一会在右上角会显示
1.png-31.8kB

最后是展示我们的配置信息,可以查看到哪里有错误
1.png-23kB

点击Finish
1.png-19.3kB

2.png-61kB

提示:上去之后请立即修改密码

7.配置zabbix-agent端

 
  1. [root@localhost ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. Server=127.0.0.1修改Server端的IP地址(被动模式IP地址)
  3. ServerActive=127.0.0.1主动模式,主动向server端报告
  4. [root@localhost ~]# systemctl start zabbix-agent

查看端口号

 
  1. [root@localhost ~]# netstat -lntp
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:33060.0.0.0:* LISTEN 7806/mysqld
  5. tcp 000.0.0.0:220.0.0.0:* LISTEN 1062/sshd
  6. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2208/master
  7. tcp 000.0.0.0:100500.0.0.0:* LISTEN 11511/zabbix_agentd
  8. tcp 000.0.0.0:100510.0.0.0:* LISTEN 11335/zabbix_server
  9. tcp 00127.0.0.1:1990.0.0.0:* LISTEN 2692/snmpd
  10. tcp6 00:::80:::* LISTEN 11408/httpd
  11. tcp6 00:::22:::* LISTEN 1062/sshd
  12. tcp6 00::1:25:::* LISTEN 2208/master
  13. tcp6 00:::443:::* LISTEN 11408/httpd
  14. tcp6 00:::10050:::* LISTEN 11511/zabbix_agentd
  15. tcp6 00:::10051:::* LISTEN 11335/zabbix_server
  16. 10051server端口,10050agent端口
 

四、Web界面配置

找到Configuration---->Hosts 添加一台监控主机
1.png-95.1kB

2.png-52.3kB

开启后,如果出现错误我们可以看一下zabbix的日志

 
  1. [root@localhost ~]# ls /var/log/zabbix/zabbix_
  2. zabbix_agentd.log zabbix_server.log

3.png-32.5kB

当ZBX变成绿色的时候,说明监控成功。因为我们没有配置SNMP、JMX、IPMI等。所以我发监控
4.png-19.4kB

因为我们现在只安装了一台服务器,所以只有一个主机。我们可以查看现在这台主机的CPU等及基本的信息
5.png-34.8kB

点击Monitoring-----Graphs,选择我们要监控的内容
6.png-15.9kB

我们选择可以随便选择一个进行查看信息
例如:我们查看CPU的负载
1.png-60.8kB

  某一段时间内,CPU正在处理以及等待CPU处理的进程数的之和。Load Average是从另一个角度来体现CPU的使用状态的。
  这些监控其实就是zabbix在数据库查找数据,然后使用jd进行画图
Zabbix性能依赖于mysql数据库

 

五、Zabbix页面安全设置

1、设置默认账号密码
2.png-43.5kB

3.png-36.4kB

  设置完中文
1.png-72.5kB

 

六、Zabbix 菜单说明

Zabbix 上方的菜单简单介绍说明
2.png-54.1kB

Doshboard下面可以设置你想设置的图形,添加方法如下:
3.png-67.2kB

4.png-73.4kB

  这时,就可以找到你喜爱的了,直接打开
6.png-5.1kB

screens其实就是一个聚合图形,可以把多个图片合在一起。然后放在大屏幕上,供别人查看
1.png-3.9kB

maps就是一个架构图
2.png-3.2kB

Status of Zabbix就是一个状态栏
1.png-18.4kB

 第一行是Server是否运行[yes]和后面的运行地址
 第二行监控的机器 (启用的/关闭的/模板)
 第三行监控项 (启用的/关闭的/不支持的)
 第四行触发器的状态 (启用的/关闭的/【故障/正常】)
 第五行 当前用户数量 (在线数量)
 第六行 zabbix每秒可以收到的一个新值

告警的级别
2.png-8kB

我们可以设置报警响铃,让他在前端响
3.png-57.9kB

4.png-36.8kB

我们首页的监控列表是可以随意拖动的
5.png-79kB

我们还可以将它关闭,并且设置刷新时间
6.png-19.8kB

 ##################################################################################

Zabbix 3.0 部署监控 [二]

一、添加监控主机及设置

1.创建主机

1.png-47.5kB

2.png-52.5kB

Agent可以干一些SNMP无法干的事情,例如自定义监控项
snmp相关文章:http://www.abcdocker.com/abcdocker/1376
3.png-32kB

这里我们先不着急点add,还需要设置其他选项
1.png-17.4kB

点击监控模板
  zabbix监控是由监控项组成(cpu使用率监控就是一个监控项/内存使用率就是一个监控项),如果是100台服务器就需要监控模板了。只需要将监控项和模板关联起来即可
举个例子:我们上面主机使用的是SNMP,就可以直接搜索SNMP提示:有的模板需要自己定义
2.png-30.2kB

温馨提示:请点击下面的小add 然后在点大的。否则会出现问题哦
1.png-32.6kB

IPMI如果有的话,需要在这里写上用户名密码
2.png-23kB

宏定义,这个宏其实就是一个变量。我们给可以给变量附一个值
3.png-15.1kB

  因为我们设置的是SNMPSNMP有一个团体名。并且可以设置定义
  团体名是中间的abcdocker,具体的可以看http://www.abcdocker.com/abcdocker/1376

 
  1. [root@localhost ~]# cat /etc/snmp/snmpd.conf
  2. rocommunity abcdocker 192.168.56.11

1.png-23.1kB

值:{$SNMP_COMMUNITY}
2.png-43.1kB

主机资产设置分为3中
1、关闭 Disabled
2、手动 Manual
3、自动 Automatic (自动代表的是你在定义监控项的时候,他有一个小箭头,勾上之后监控项的值就会填写在这里)
   我们这设置好模板就可以选择add
3.png-43.8kB

SNMP变绿就好了
4.png-52.6kB

  现在的状态是用SNMP进行监控了,我们只是添加了一个SNMP OS LINUX的模板,但是出现了4个。这4个链接。可以和多个模板连起来用
1.png-46.6kB

进入监控项,下面这个菜单是过滤搜索用的
2.png-57.3kB

下面全都是模板
  我们可以随便点击一个,这里我们新建一个监控项
3.png-65.2kB

点击创建
类型选择
  Zabbix agent 被动
  Zabbix agent (active主动模式)
  Simple check 简单检测
  SNMPv1 agent ......
1.png-45kB

在Key这行点击Select 可以进行选择
2.png-97.3kB

我们随便选择一个,例如agent.version。查看agent的版本
Numeric是无符号整数型
1.png-20.3kB

 

2.图形说明

Configuration----hosts----Graphs
1.png-81.6kB

绘图靠的是监控项,我们可以随便打开一个看看
2.png-58.6kB

颜色等都是可以随意设置

 

3、聚合图形screens设置

1.png-42kB

提示:因为咱们用的版本是3.0当2.4的时候需要在Configuration----下面来创建screens

创建Screens
2.png-16.3kB

我们创建一个2*2 命名为test screensscreens
3.png-37.5kB

然后我们点进去
点击编辑
1.png-34.9kB

点击Change进行设置
1.png-32.5kB

2.png-25.8kB

多添加几个之后就是以下结果
3.png-96.9kB

 

二、监控案例[自定义监控项]

例如:我们自己添加一个监控项来进行监控当前的活动连接数 [Nginx 安装请看上一篇]
nginx安装地址:http://www.abcdocker.com/abcdocker/1376
Nginx状态模块配置如下,过于简单不说了

 
  1. [root@localhost ~]# cat /usr/local/nginx/conf/nginx.conf
  2. listen 8080;
  3. location /status {
  4. stub_status on;
  5. access_log off;
  6. allow 192.168.56.0/24;
  7. deny all;
  8. }

修改nginx端口并重启
测试:http://192.168.56.11:8080/status
1.png-8.7kB

解释说明:使用zabbix来监控活动连接数,通过status状态模块为前提
  我们现在命令取出我们想要的值,例如:

 
  1. [root@localhost ~]# curl -s http://192.168.56.11:8080/status|grep Active|awk -F "[ ]"'{print $3}'
  2. 1

因为我们是监控他的活动连接数,他的活动连接数为1

 
  1. [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. Include=/etc/zabbix/zabbix_agentd.d/

#提示: 如果想要加自定义监控项,不要在配置文件中写入,可以在Include里面定义的目录写上
  只要我们写在Include目录下,都可以识别到

 
  1. [root@linux-node1 ~]# cd /etc/zabbix/zabbix_agentd.d/
  2. [root@linux-node1 zabbix_agentd.d]# ls
  3. userparameter_mysql.conf
  4. #默认有一个MySQL的,我们可以参考MySQL的进行操作
  5. UserParameter=mysql.ping,HOME=/var/lib/zabbix mysqladmin ping | grep -c alive
  6. #提示,前面是key的名称 后面的key的命令
  7. UserParameter=mysql.version,mysql -V

我们自己编辑一个文件

 
  1. [root@linux-node1 zabbix_agentd.d]# cat nginx.conf
  2. UserParameter=nginx.active,/usr/bin/curl -s http://192.168.56.11:8080/status|grep Active|awk -F "[ ]"'{print $3}'
  3. #提示,此处配置文件的名字可以随便起

  如果是多个命令可以写一个脚本,命令最好写绝对路径!这个过程其实就是我们定义监控的过程,前面是key的名字,后面是命令
修改完配置文件之后需要重启zabbix-agent

 
  1. [root@linux-node1 zabbix_agentd.d]# systemctl restart zabbix-agent

  配置完成之后先在server端测试,是否可以获取到agent上的值。不要着急添加
  我们现在只用了1台服务器,本机是server也是agent。然后使用zabbix-get进行测试

 
  1. [root@linux-node1 zabbix_agentd.d]# yum list|grep zabbix
  2. zabbix-agent.x86_64 3.0.4-1.el7@zabbix
  3. zabbix-release.noarch 3.0-1.el7 installed
  4. zabbix-server-mysql.x86_64 3.0.4-1.el7@zabbix
  5. zabbix-web.noarch 3.0.4-1.el7@zabbix
  6. zabbix-web-mysql.noarch 3.0.4-1.el7@zabbix
  7. python-pyzabbix.noarch 0.7.3-2.el7 epel
  8. uwsgi-stats-pusher-zabbix.x86_64 2.0.13.1-2.el7 epel
  9. zabbix-get.x86_64 3.0.4-1.el7 zabbix
  10. 查看zabbix_get
  11. [root@linux-node1 zabbix_agentd.d]# yum install -y zabbix-get

zabbix-get使用参数如下:

 
  1. [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.56.11-p 10050-k "nginx.active"
  2. -s 指定我们要查看的服务器
  3. -p 端口,可以不加。默认是10050
  4. -k 监控项的名称(根据上面的配置来定义的)
  5. 更多参数:zabbix_get --help
 

错误案例:

如果出现如下错误,大致意思是拒绝连接

 
  1. [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.56.11-p 10050-k "nginx.active"
  2. zabbix_get [24234]:Check access restrictions inZabbix agent configuration

解决方法:

 
  1. [root@linux-node1 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. Server=192.168.56.11

因为我们当时只允许本机127.0.0.1进行连接。所以会出现这样问题

 
  1. [root@linux-node1 ~]# systemctl restart zabbix-agent

修改完配置文件都要重启
提示: zabbix-agent的配置文件中指定允许那个server连接,那个才可以进行连接。

 
  1. [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.56.11-p 10050-k "nginx.active"
  2. 1

正确结果如上!
提示:如果在zabbix-agent上面修改了,还需要在网页上进行修改
1.png-73.8kB

/etc/zabbix/zabbix-agent.conf上面指定的Server是谁,就只会允许谁通过。如果有多个ip可以使用逗号进行分割

 

添加item

2.png-97.6kB

找到一个安装zabbix-agent,点击
3.png-80.8kB

点击items
1.png-68.9kB

然后添加Create item(创建item)
1.png-38.4kB

2.png-4.3kB

Data type:数据类型,这里我们选择Decimal。其他的基本上用不上
Units:单位 超过1千就写成1k了。 可以在这里做一个单位的设置。默认就可以
Use custom multiplier:如果这里面设置了一个数,得出来的结果都需要乘以文本框设定的值
1.png-17.2kB

Update interval(in sec) 监控项刷新时间间隔(一般不要低于60秒)
Custom intervals 创建时间间隔(例如:1点-7点每隔多少秒进行监控)格式大致为:周,时,分
2.png-21.7kB

History storage period 历史数据存储时间(根据业务来设置,默认就可以)
Trend storage period 趋势图要保存多久
New application 监控项的组
application 选择一个监控项组
Populates host inventory field 资产,可以设定一个监控项。把获取的值设置在资产上面
1.png-22.1kB

描述!必须要写。 要不你就是不负责任
2.png-6.4kB

添加自定义监控项小结:
   1、添加用户自定义参数(在/etc/zabbix/zabbix.agent.d/定义了一个nginx.conf步骤如上)
   2、重启zabbix-agent
   3、在Server端使用zabbix_get测试获取(命令如上)
   4、在web界面创建item(监控项)
   

 

自定义图形

3.png-110.3kB

Name:名字
Width:宽度
Height:高度
Graph type:图形类型
其他默认即可
1.png-45.3kB

然后我们点击Add添加Items监控项,找到我们刚刚设置的服务器
2.png-145.4kB

然后找到我们刚刚添加的监控项
3.png-11.2kB

还可以选择颜色,添加其他的很多设置。不细说
4.png-36.5kB

  点击Prewview可以进行预览,如果出现字符乱码可以阅读我们另一篇文章(zabbix默认不支持中文)
  确定没有问题,选择下方Add即可
5.png-92.3kB

出现我们添加的
image_1at7vvch71hlq19i09hc1754tr6gp.png-75.2kB

需要在Monitoring--->Graphs--->选择我们添加的主机即可
接下来我们需要进行测试
测试前:
6.png-13kB

使用ab测试工具进行测试,设置100万并发进行访问

 
  1. [root@linux-node1 ~]# ab -c 1000-n 1000000 http://192.168.56.11:8080/
  2. ThisisApacheBench,Version2.3<$Revision:1430300 $>
  3. Copyright1996AdamTwiss,ZeusTechnologyLtd, http://www.zeustech.net/
  4. Licensed to TheApacheSoftwareFoundation, http://www.apache.org/
  5. Benchmarking192.168.56.11(be patient)

测试后:
1.png-14.5kB

我们可以查看zabbix监控图标
2.png-69.9kB

我们中间设置了间隔60秒,说明每隔60秒我们进行获取一次
  我们可以设置它的方式显示
找到Graph选择类型,Stacked是堆叠显示,其他的大家可以自行百度。不细说
  堆叠显示如下:
3.png-58.8kB

如果我们想加多个图形都显示在一张图上,可以进行如下操作
4.png-57.1kB

找到Graphs
5.png-89.8kB

找到我们设置的图形
1.png-64.4kB

点击添加即可

我们可以让多个图标显示在一个图片上
2.png-41.9kB

点击我们创建一个聚合图形(screens
1.png-45.5kB

点击进去
2.png-40.5kB

点击编辑
1.png-28.3kB

选择item添加的地方,因为上面创建聚合图形的时候我们选择了2X2 所以这里会显示2个
2.png-53.8kB

找到相对应的添加即可
我们可以多添加几个
3.png-60.3kB

结果如上图显示
除了显示图片还可以显示其他内容
4.png-24.4kB

Action log:日志
Clock:时间
Data overview:数据概述
Graph:图形
History of events:历史事件
Host group issues:主机组问题
Host issues:主机问题
Hosts info:主机信息
Plain text:文本
Map:架构图
Screen:屏幕
Server info:服务器信息
Simple graph:简单的图
Simple graph prototype:简单的原型图
System status:系统状态
Triggers info:触发器信息
Tiggers overview:概述
URL:URL地址
 

例如我们输入一个URL:

1.png-24.4kB

2.png-54.9kB

我们还可以自定义一个Maps,一张架构图。操作如下:
3.png-45.4kB

第二步:选择编辑Edit map
4.png-45.8kB

因为他默认图片比较小,我们可以点击下方,进行调整图片大小。
5.png-41.4kB

点击右上角编辑,然后我们点中图中的服务器即可
6.png-53.4kB

我们模拟有2台服务器
7.png-47.6kB

然后我们选中新添加的服务器进行修改
8.png-68.4kB

点击Apply就可以了。
按住Ctrl点中zabbix server和另台服务器
9.png-63.9kB

然后我们点击左上方的Link:他们就连接起来了
1.png-77.6kB

温馨提示:修改完成后需要点击保存[update]如果不点后果就是从新在做一遍~
2.png-49.7kB

 

##########################################################################################

Zabbix 3.0 部署监控 [三]

 


 

Dashboard首页信息介绍

image_1at7sropgp1kv041gtmh5vg2o9.png-92.9kB

 

Status of Zabbix(Zabbix状态)介绍

image_1at7ssci91f5ksqs1rbhklo733m.png-24.3kB

Zabbix server is running                           #Zabbix服务器是否运行
Number of hosts (enabled/disabled/templates)          #主机数量(已启用/已禁用/模板)
Number of items (enabled/disabled/not supported)   #监控项数量(已启用/已禁用/不支持)
Number of triggers (enabled/disabled [problem/ok])   #触发器数量(已启用/已禁用/问题/正常)
Number of users (online)                                             #用户数(线上)
Required server performance, new values per second #要求的主机性能,每秒新值

此处需要注意的事项如下:
1、需要时刻关注那些主机数量中已禁用的(例如:那一天有一台监控有问题,顺手关闭了。没有打开 结果后期导致监控出现问题)
2、监控项数量里面最好不要放置已禁用,要么删除这个监控项或者不让他报警。尽量不要给他禁用
3、触发器只禁用几个没什么大问题,但是如果一下禁用几十个不方便进行管理
4、正式环境最好划分主机组,可以按照业务划分,类型划分。那个出现问题都方便查看处理

 

Latest data 最新数据介绍

image_1at7sv4aq82pkpc1jed1mb5g0413.png-119.6kB

 

加入监控

  刚刚之前我们一直使用的是一台服务器,因为不方便解释。我们新添加一台服务器
 加入监控的几个步骤:
  1、安装软件
  2、修改配置
1、设置yum源

 
  1. [root@linux-node2 ~]# rpm -ivh http://mirrors.aliyun.com/zabbix/zabbix/3.0/rhel/7/x86_64/zabbix-release-3.0-1.el7.noarch.rpm

2、安装软件包

 
  1. [root@linux-node2 ~]# yum install -y zabbix-agent

3、修改配置文件

 
  1. [root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. Server=192.168.56.11
  3. ServerActive=192.168.56.11
  4. #提示:这里的IP地址改成Server端的IP地址

4、启动

 
  1. [root@linux-node2 ~]# systemctl start zabbix-agent
  2. [root@linux-node2 ~]# netstat -lntup|grep zabbix
  3. tcp 000.0.0.0:100500.0.0.0:* LISTEN 10088/zabbix_agentd
  4. tcp6 00:::10050:::* LISTEN 10088/zabbix_agentd

5、web界面设置
克隆~
image_1at7t4i0n7k1199jf5s1bhq40f1g.png-74.4kB

步骤:我们随便点击一个进去。拉到最下面有一个全部克隆
image_1at7t57m016pq4g61ktm1sn1hp01t.png-17.9kB

剩下的我们就改一下就可以了
image_1at7t5hhv11mvkuaof7kif4n12a.png-47.4kB

模板修改
image_1at7t5ue2afu1cb41oni9pn8gi2n.png-32.6kB

其他的就没有什么可以配置的,模板主要是添加Template OS Linux。然后我们选择Add即可
创建完成如下:
image_1at7t6om91kpan1d8repkv1oju34.png-70.7kB

新添加的IP如上述所示

 

Maps 优化设置

上次只是简单的连接线的设置,这次我们进行深入设置
路径:Monitoring--->Maps--->Edit map进行修改
image_1at7t8f9b7pe4ih3b214951hg23h.png-89.8kB

我们点击Zabbix server没有设置主机的,选择Host 修改linux-node2
image_1at7t98pb1knv170hde81tmvooa3u.png-66.6kB

提示:此处我们修改了2台主机,这个可以根据业务需求进行设置
image_1at7ta0a0v731jv6mpegb412ge4b.png-81.8kB

我们新添加一台,然后进行连接。Ctrl + 主机 然后点击Link:Add
  例如我们想查看他们的流量带宽
image_1at7tas5rfon1lkhc0mbnace74o.png-80.6kB

  首先,他们必须要连接在一起,然后点击Links选项后面的Edit进行编辑
  我们可以在Label表里面写监控项的值
  我们可以在Configuration--->Hosts--->items中查看到
image_1at7tcc9e1uqm1ot5d0b17aq13bb55.png-127.7kB

括号内写入发下:

 
  1. {linux-node2.example.com:net.if.out[eth0].last(0)}
  2. linux-node2.example.com=主机名
  3. net.if.out=key
  4. last0)=获取最新的一个数据

image_1at7td1u31bb4f491a4hqr2p7a5i.png-68.3kB

  现在我们就可以实时的监控流量
  切记需要update
保存如下图显示
image_1at7te2sf18r9pc5s481r6b19ks5v.png-41.8kB

 

如何让Zabbix报警

  我们可以先打开Events查看事件
image_1at7tes1e1raorqorsa1hvd6ni6c.png-46.6kB

zabbix事件有很多类型
Trigger=触发器的事件
Disovery=自动发现事件
还有内部的事件以及自动注册的事件

image_1at7to690v6siva1f758tmk1c6p.png-4.9kB

我们可以选择主机,查看相对应的事件

  Zabbix的报警可以当做事件通知,当这个事件发生时。zabbix进行通知(报警)
  事件报警分为2种方式:
1、怎么通知
2、通知给谁

Zabbix通知方式:
Zabbix通知方式通过Actions进行通知
image_1at7tr4jh17qc1d7k1qoo346hi176.png-41.6kB

Zabbix默认有一个,我们可以点开进行查看
image_1at7trff617jn1hiba20ge1g8m7j.png-60.4kB

条件设置
image_1at7ts6lofcrhpc1beq1add1b4n80.png-38.7kB

操作设置
image_1at7tsk41gqi18402c518ad19h28d.png-28.4kB

image_1at7tspfo1eun1ela1p5o46o12tt8q.png-76.9kB

温馨提示:保存的时候需要先点击下方小的Update 否则就木有啦
  这里的步骤可以让报警邮件发送的级别、例如:先发送给运维、项目经理、项目总监
例如如下:
image_1at7ttpa1gqu1e6d1jobsfu1rk797.png-30.2kB

  刚刚的填写完成,现在提示的是1-2 发送的人 我们可以点击下面的New在添加几个
image_1at7tuid0npvvke15d51l14roh9k.png-31.3kB

  模拟设置,当报警1-2次时候发送给XX,2-4次发送给XX依次叠加
   我们需要配置报警媒介类型,用于发送邮件
image_1at7u03971t0o1hl2bph1otj72ja1.png-38.3kB

  温馨提示:3.0之前发送邮件需要启动邮件相关服务来进行安全认证,3.0之后默认自带安全认证
  我们以qq邮箱为例
image_1at7u16rk89o1hos11cot4514v6ae.png-36.6kB

  我们还需要配置用户的邮箱,因为上面已经选择发送给那个用户。接下来就改配置用户的邮箱
image_1at7u1umt1phk18cuat7161o2k0ar.png-40.1kB

我们点开之后选择Media报警媒介进行设置)如果看不懂英文我们可以设置中文
image_1at7u2jtn13gimma1b2gqqf0jb8.png-14.1kB

然后我们选择下方的Add
image_1at7u35b8rca5np4p1h40t22bl.png-48.6kB

  设置收件人地址
image_1at7u3r9s5g91uqun11um1oluc2.png-27.8kB

小结:步骤就不截图了,可以调成中文,按照步骤来。

1、报警媒介
2、动作(active)配置(操作--编辑)  注意点小的update
3、创建用户群组(注意权限)
4、创建用户(权限和报警媒介设置)权限只能按照用户组分配(我们可以选择用户/管理员/超级管理员)

提示:添加新主机后,要注意确认权限分配
  我们的使用QQ邮箱需要开启SNMP和一个授权码。 填写发件人密码时需要设置授权码为密码
image_1at7u6f9bv4siqh1qs3nrf1onacf.png-34.1kB

邮件结果如下:
异常
image_1at7u6vis13ql6so14lujt8167tcs.png-46.6kB

因为我们开启了正常之后继续发送邮件,所以正常之后邮件如下
image_1at7u7u9fr5hkms1o3e1o3s1obkd9.png-36.6kB

提示:当异常时它会一直发邮件,直到服务正常或者匹配规则到时

#################################################################################

Zabbix 3.0 生产案例 [四]

Zabbix 生产案例实战

1.png-18.9kB

 

一、项目规划

 

1、主机分组:

   交换机
   Nginx
   Tomcat
   MySQL

 

2、监控对象识别:

  1、使用SNMP监控交换机
  2、使用IPMI监控服务器硬件
  3、使用Agent监控服务器
  4、使用JMX监控Java应用
  5、监控MySQL
  6、监控Web状态
  7、监控Nginx状态

 

3、操作步骤:

SNMP监控
 1.1 在交换机上开启Snmp

 
  1. config t
  2. snmp-server community public ro
  3. end
  4. 提示:如果不知道我们可以百度

 1.2 在Zabbix上添加SNMP监控
 步骤:Configuration--->Hosts--->设置
 1.png-72.3kB

 1.3 Host页面设置
2.png-51.3kB

 1.4 Templates 模板设置
3.png-46.9kB

设置SNMP团体名称Macros宏
这里的设置要跟我们创建的SNMP的设置相同
4.png-36.4kB

因为Zabbix监控的时候依赖团体名称
 1.5 生产图片
3.png-46.9kB

  Zabbix会自动给我们进行检测端口,每个端口都会添加一个网卡的流量图,每个端口都会加上一个触发器。(端口的状态) 还会帮我们添加VLAN的一个监控
 1.6 案例图
  含有有进口和出口流量
5.jpg-54kB

提示:此图是Zabbix SNMP模板自动生成的


IPMI监控
  2.1 添加IPMI
Configuration--->Hosts--->选择主机--->设置IPMI端口及主机--->用户名密码
  因为IMP容易超时,建议使用自定义item,本地执行ipmitool命令来获取数据

JMX监控
  Zabbix默认提供了一个监控JMX
通过java gateway来监控java
2.png-113.7kB

地址:https://www.zabbix.com/documentation/3.2/manual/appendix/config/zabbix_java
  JAVA GATEWAY需要独立安装,相当于一个网关,因为zabbix_server和zabbix-agent不可以直接获取java信息。所以需要一个代理来获取
1.jpg-11.8kB

zabbix java Gateway不存任何数据,只是一个简单的代理
1、安装

 
  1. [root@linux-node1 ~]# yum install -y zabbix-java-gateway java-1.8.0
  2. 提示:java-gateway 需要java环境

2、配置
修改java-gateway

 
  1. [root@linux-node1 ~]# vim /etc/zabbix/zabbix_java_gateway.conf
  2. # LISTEN_IP="0.0.0.0" 监听的IP地址
  3. # LISTEN_PORT=10052 监听的端口
  4. PID_FILE="/var/run/zabbix/zabbix_java.pid"存放pid路径
  5. # START_POLLERS=5 开通几个进程,默认是5。你有多少java进行可以设置多少个,也可以设置java进程的一半。
  6. TIMEOUT=3超时时间1-30,如果网络环境差,超时时间就修改长一点

我们默认就可以了,不进行修改
3、启动

 
  1. [root@linux-node1 ~]# systemctl start zabbix-java-gateway.service

4、端口、进程查看
我们可以进行进程的查看

 
  1. [root@linux-node1 ~]# netstat -lntp
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:33060.0.0.0:* LISTEN 10439/mysqld
  5. tcp 000.0.0.0:80800.0.0.0:* LISTEN 33484/nginx: master
  6. tcp 000.0.0.0:220.0.0.0:* LISTEN 1054/sshd
  7. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2484/master
  8. tcp 000.0.0.0:100500.0.0.0:* LISTEN 76482/zabbix_agentd
  9. tcp 000.0.0.0:100510.0.0.0:* LISTEN 34572/zabbix_server
  10. tcp 00127.0.0.1:1990.0.0.0:* LISTEN 11143/snmpd
  11. tcp6 00:::80:::* LISTEN 10546/httpd
  12. tcp6 00:::22:::* LISTEN 1054/sshd
  13. tcp6 00::1:25:::* LISTEN 2484/master
  14. tcp6 00:::10050:::* LISTEN 76482/zabbix_agentd
  15. tcp6 00:::10051:::* LISTEN 34572/zabbix_server
  16. tcp6 00:::10052:::* LISTEN 13465/java

10052 zabbix-java-gateway默认端口已经起来了!
  它是一个java应用,需要安装jdk

 
  1. [root@linux-node1 ~]# ps -aux|grep java
  2. root 134650.43.4224894434060?Sl19:170:01 java -server -Dlogback.configurationFile=/etc/zabbix/zabbix_java_gateway_logback.xml -classpath lib:lib/android-json-4.3_r3.1.jar:lib/logback-classic-0.9.27.jar:lib/logback-core-0.9.27.jar:lib/slf4j-api-1.6.1.jar:bin/zabbix-java-gateway-3.0.4.jar-Dzabbix.pidFile=/var/run/zabbix/zabbix_java.pid -Dzabbix.timeout=3-Dsun.rmi.transport.tcp.responseTimeout=3000 com.zabbix.gateway.JavaGateway
  3. root 135840.00.0112648972 pts/0 S+19:210:00 grep --color=auto java

5、通知zabbix-server
  我们需要通知zabbix-serverjava-gateway在哪里
修改配置文件

 
  1. [root@linux-node1 ~]# vim /etc/zabbix/zabbix_server.conf
  2. 编辑zabbix-server来指定zabbix-java-gateway
  3. JavaGateway=192.168.56.11#IP地址是安装java-gateway的服务器
  4. # JavaGatewayPort=10052 端口,默认就可以
  5. StartVMwareCollectors=5预启动多少个进程[zabbix--->java-gateway的数量]

6、重启zabbix-server

 
  1. [root@linux-node1 ~]# systemctl restart zabbix-server.service

7、准备apache
我们安装tomcat-8版本
官网:http://tomcat.apache.org
下载软件包

 
  1. [root@linux-node2 src]# wget http://mirror.bit.edu.cn/apache/tomcat/tomcat-8/v8.5.5/bin/apache-tomcat-8.5.5.tar.gz

我们将tomcat安装在apache服务器上,来模拟监控jvm

 
  1. [root@linux-node2 src]# tar xf apache-tomcat-8.5.5.tar.gz
  2. [root@linux-node2 src]# mv apache-tomcat-8.5.5/usr/local/
  3. [root@linux-node2 src]# ln -s /usr/local/apache-tomcat-8.5.5/ /usr/local/tomcat
  4. [root@linux-node2 src]# yum install -y java-1.8.0#tomcat 需要在java环境运行
  5. [root@linux-node2 src]#/usr/local/tomcat/bin/startup.sh
  6. Using CATALINA_BASE:/usr/local/tomcat
  7. Using CATALINA_HOME:/usr/local/tomcat
  8. Using CATALINA_TMPDIR:/usr/local/tomcat/temp
  9. Using JRE_HOME:/usr
  10. Using CLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  11. Tomcat started.

在web2上面查看运行状态

 
  1. [root@linux-node2 src]# netstat -lntup
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:220.0.0.0:* LISTEN 1073/sshd
  5. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2498/master
  6. tcp 000.0.0.0:100500.0.0.0:* LISTEN 10088/zabbix_agentd
  7. tcp6 00:::8080:::* LISTEN 25750/java
  8. tcp6 00:::22:::* LISTEN 1073/sshd
  9. tcp6 00::1:25:::* LISTEN 2498/master
  10. tcp6 00:::10050:::* LISTEN 10088/zabbix_agentd
  11. tcp6 00127.0.0.1:8005:::* LISTEN 25750/java
  12. tcp6 00:::8009:::* LISTEN 25750/java

1.png-412.3kB

JMX三种类型:
  1.无密码认证
  2.用户面密码认证
  3.ssl

开启JMX远程监控
官方文档:http://tomcat.apache.org/tomcat-8.0-doc/monitoring.html
我们创建一个无密码认证

 
  1. [root@linux-node2 src]# vim /usr/local/tomcat/bin/catalina.sh
  2. CATALINA_OPTS="$CATALINA_OPTS -Dcom.sun.management.jmxremote
  3. -Dcom.sun.management.jmxremote.port=8888    #端口号
  4. -Dcom.sun.management.jmxremote.ssl=false     #SSL 关闭
  5. -Dcom.sun.management.jmxremote.authenticate=false #用户密码验证关闭
  6. -Djava.rmi.server.hostname=192.168.56.12"        #监控的主机

修改完成后重启tomcat
可以使用./shutdown.sh 或者使用kill的方式

 
  1. [root@linux-node2 src]#/usr/local/tomcat/bin/shutdown.sh
  2. Using CATALINA_BASE:/usr/local/tomcat
  3. Using CATALINA_HOME:/usr/local/tomcat
  4. Using CATALINA_TMPDIR:/usr/local/tomcat/temp
  5. Using JRE_HOME:/usr
  6. Using CLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  7. 中间可以使用px -aux|grep java 查看是否被杀死
  8. [root@linux-node2 src]#/usr/local/tomcat/bin/startup.sh
  9. Using CATALINA_BASE:/usr/local/tomcat
  10. Using CATALINA_HOME:/usr/local/tomcat
  11. Using CATALINA_TMPDIR:/usr/local/tomcat/temp
  12. Using JRE_HOME:/usr
  13. Using CLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  14. Tomcat started.

我们JMX端口设置为8888

 
  1. [root@linux-node2 src]# netstat -lntup
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:220.0.0.0:* LISTEN 1073/sshd
  5. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2498/master
  6. tcp 000.0.0.0:100500.0.0.0:* LISTEN 10088/zabbix_agentd
  7. tcp6 00:::8080:::* LISTEN 26226/java
  8. tcp6 00:::22:::* LISTEN 1073/sshd
  9. tcp6 00:::8888:::* LISTEN 26226/java
  10. tcp6 00::1:25:::* LISTEN 2498/master
  11. tcp6 00:::10050:::* LISTEN 10088/zabbix_agentd
  12. tcp6 00:::38532:::* LISTEN 26226/java
  13. tcp6 00127.0.0.1:8005:::* LISTEN 26226/java
  14. tcp6 00:::8009:::* LISTEN 26226/java
  15. tcp6 00:::38377:::* LISTEN 26226/java

 我们可以在windows上面安装jdk ,使用命令行来监控java
1.png-264.3kB

  我们下载安装,具体步骤不说了,然后我们找到jconsole.exe文件运行
2.png-267kB

填写安装JMX的服务器
4.png-84.8kB

  因为在配置文件中我们设置的是无密码认证,所以这里不需要输入密码直接连接。端口号我们设置的是8888连接即可
5.png-71.3kB

这样我们就可以在图形化监控tomcat
6.png-91.7kB

  提示:按照现在观察,java-gateway已经安装成功,我们可以加入到zabbix中
  找我们要添加的主机
1.png-178kB

填写安装java-gateway的主机
1.png-120.5kB

我们还需要设置一个模板
2.png-69.9kB

这个模板就是我们自带的一个监控JMX的模板,然后我们点击Update.更新
3.png-85kB

我们需要等待一会才可以出图

提示:可以在Zabbix-server上使用zabbix-get获取某一台机器的某一个key
效果图如下:需要等待一会
1 (1).png-566kB

手动检测监控状态
Zabbix-Server操作:

 
  1. [root@linux-node1 ~]# yum install -y zabbix-get

Key:
2 (1).png-165.8kB

我们随便找一个key,然后我们复制后面的key

1.png-146.9kB

 
  1. [root@linux-node1 ~]# zabbix_get -s 192.168.56.12-k jmx["java.lang:type=Runtime",Uptime]
  2. ZBX_NOTSUPPORTED:Unsupported item key.

提示:未支持的key,现在并不能获取到这个key 因为没有获取到这个值,所以不会显示。我们可以获取别的试一下

 
  1. [root@linux-node1 ~]# zabbix_get -s 192.168.56.12-k system.cpu.util[,user]
  2. 0.079323
  3. [root@linux-node1 ~]# zabbix_get -s 192.168.56.12-k system.cpu.util[,user]
  4. 0.075377
  5. [root@linux-node1 ~]# zabbix_get -s 192.168.56.12-k system.cpu.util[,user]
  6. 0.075377
  7. [root@linux-node1 ~]# zabbix_get -s 192.168.56.12-k system.cpu.util[,user]
  8. 0.073547

小结: Zabbix其实就是通过zabbix_get 获取到的这个值进行比较的

 

日志

开启zabbix debug模式

 
  1. [root@linux-node2 tomcat]# systemctl restart zabbix-agent
  2. ### Option: DebugLevel
  3. # Specifies debug level:
  4. # 0 - basic information about starting and stopping of Zabbix processes
  5. # 1 - critical information
  6. # 2 - error information
  7. # 3 - warnings
  8. # 4 - for debugging (produces lots of information)
  9. # 5 - extended debugging (produces even more information)
  10. DebugLevel=4

如果及别是4就是debug模式,修改完配置文件之后需要重启生效

 

Zabbix生产案例

1.开启Nginx监控
2.编写脚本来进行数据采集
3.设置用户自定义参数
4.重启zabbix-agent
5.添加item
6.创建图形
7.创建触发器
8.创建模板

 

实践步骤

  1. 脚本编写: 我们这里提供已经写好的脚本
  链接:https://pan.baidu.com/s/19JrCetaRZYGY_mvq4CyoJQ 密码:94us

  2. 需要修改一下zabbix-agent的配置文件

 
  1. vim /etc/zabbix/zabbix_agentd.conf
  2. #修改Include设置,这样我们可以把脚本放在这个目录下。配置就是.conf结尾
  3. Include=/etc/zabbix/zabbix_agentd.d/*.conf

  3.添加权限及测试脚本

 
  1. [root@linux-node1 zabbix_agentd.d]# chmod +x zabbix_linux_plugin.sh
  2. [root@linux-node1 zabbix_agentd.d]# sh zabbix_linux_plugin.sh
  3. Usage: zabbix_linux_plugin.sh {tcp_status key|memcached_status key|redis_status key|nginx_status key}

提示: 这个脚本要用zabbix用户执行的权限,因为都是zabbix用户在执行,监控TCP会在/tmp/目录生成一个文件用于监控使用

 4.修改nginx配置文件

 
  1. 提示:nginx 默认路径是/usr/local/nginx 编译安装需要查看安装路径
  2. [root@linux-node1 zabbix_agentd.d]# vim /usr/local/nginx/conf/nginx.conf
  3. location /nginx_status {
  4. stub_status on;
  5. allow 127.0.0.1;
  6. access_log off;
  7. }

因为脚本的url是nginx_status所以我们配置文件也要这样修改
  测试脚本

 
  1. [root@linux-node1 zabbix_agentd.d]# curl 192.168.56.11:8080/nginx_status
  2. Active connections:1
  3. server accepts handled requests
  4. 282368228236822821835
  5. Reading:0Writing:1Waiting:0
  6. [root@linux-node1 zabbix_agentd.d]#./zabbix_linux_plugin.sh nginx_status 8080 active
  7. 1
  8. [root@linux-node1 zabbix_agentd.d]#./zabbix_linux_plugin.sh nginx_status 8080 reading
  9. 0
  10. [root@linux-node1 zabbix_agentd.d]#./zabbix_linux_plugin.sh nginx_status 8080 handled
  11. 2823688

设置Key,首先是Key的名称

 
  1. [root@linux-node1 zabbix_agentd.d]# cat linux.conf
  2. UserParameter=linux_status[*],/etc/zabbix/zabbix_agentd.d/zabbix_linux_plugin.sh "$1""$2""$3"
  3. [*]代表一个传参,可以将后面的$1,$2,$3引入进行
  4. ,后面是脚步本的路径

需要重启agent

 
  1. [root@linux-node1 zabbix_agentd.d]# systemctl restart zabbix-agent

我们使用zabbix_get进行测试

 
  1. [root@linux-node1 zabbix_agentd.d]# zabbix_get -s 192.168.56.11-k linux_status[nginx_status,8080,active]
  2. 1
  3. [-k]就是指定key 不细说了
  4. [*]*的作用在web界面配置item会显示出来

 5.Zabbix web界面设置
  我们需要添加item,因为要加好多。我们就使用模板的方式进行添加
CKD_1XOES2~JK28{8XIFKP3.png-318.8kB

1.png-75.9kB

2.png-27.6kB

提示:我们写一下注释然后选择Add即可
找到我们的模板
3.png-209.7kB

我们创建item
1.png-93.9kB

创建
2.png-139.6kB

各参数前文都有讲解不细说!
 修改完成吼点击Add
3.png-92.6kB

  添加完成后我们要复制很多个用来监控Nginx status的所有状态,所以我们使用克隆。来克隆多个进行设置
4.png-145kB

点进我们的item,然后拖到最下面选择克隆
5.png-42.3kB

填一些基本的修改即可,例如下:
1.png-97.6kB

添加完成如下图:
3.png-210.1kB

item添加完成我们还需要添加一个图形,用于展示,找到图形路径。点击创建
4.png-85.3kB

5.png-132.8kB

因为我们主机还没有加入我们的模板,所以我们这里是没有数据的
1.png-106.8kB

下面将模板加入到主机中
2.png-193.8kB

修改模板
3.png-97.4kB

查看结果如下:
4.png-258.4kB

 6.导出模板
因为设置模板比较麻烦,我们可以将模板导出

5.png-403.2kB

导出之后我们需要修改名称就可以了

 7.导入模板
我们需要导出自然需要导入,操作如下:
6.png-289.1kB

点击添加即可
7.png-241.7kB

提示: 模板之间的名称不可以相同

 

以上就是Nginx完整的监控使用

 8.导入TCP模板
  加入模板的步骤跟刚刚加入Nginx的一样,这里我们就使用模板了。
下载链接:http://pan.baidu.com/s/1i54ULjJ 密码:25lh
我们导入模板即可
1.png-82.8kB

导入完成之后我们可以查看模板
2.png-330.1kB

  在里面我们可以见到TCP的11种状态,这个item是我们需要根据我们脚本进行同步的。
3.png-245.6kB

我们可以随便点击一个进行查看,其中这里的key要和脚本的相同
4.png-130.9kB

5.png-33.2kB

我们在两台服务器都加载这个模板
6.png-97kB

步骤和上面的一样
7.png-95.5kB

添加完成
8.png-166.2kB

  查看脚本需要等待1分钟,这主要看我们设置的获取值的时间而定。
我们可以查看图形
2.png-64.9kB

 

 

###########################################################################################

Zabbix 3.0 生产案例 [五]

上面我们说到了监控TCP和Nginx状态,但是光是监控是没有任何作用的。监控完我们不知道跟没监控没啥区别,下面我们进行`监控项的讲解

1.触发器

  首先我们给Nginx添加触发器
1.选择Configuration--->Hosts
2.找到我们相对应的主机进入
3.选择主机中的Triggers--->添加(Create trigger)
1.png-109.2kB

我们设置一个事件
2.png-163.6kB

3.png-72.4kB

我们选择Insert,然后选择Add即可
4.查看报警状态
 因为我们设置的级别大于1就报警,默认Nginx是0,随便访问以下就是1.所以肯定就会报警。报警邮件可以根据我们前面 [Zabbix 3.0 部署监控 [三]]文章进行设置
 报警邮件如下:
5.png-218.5kB

我们可以查看这个事件的相关过程
4.png-214.1kB

以上就是我们添加的一个触发器报警步骤

1 (1).png-100.5kB

 Zabbix默认触发器的预值比较低,我们需要调大。这个在面试过程中会被问到

我们进行修改默认模板
路径下图:
2.png-33.3kB

1.png-159.9kB

3.png-333.3kB

我们可以看到默认是大于300进行报警,我们点进去修改即可
4.png-102.4kB

  根据实际情况进行修改,我们设置600即可。同时触发器支持多个条件进行报警,如or all等,只需要在上面的值后面继续添加即可。
  我们修改完之后
  1.png-137.9kB

  还有一个有警告显示磁盘不够,因为是虚拟机我们不予理会,我们可以查看到恢复之后的邮件

 

2.脚本发送邮件

提示: Zabbix邮件报警是3.0才有的,以前不支持用户名密码。所以早期都是使用脚本进行发送邮件报警。
 由于时间关系我们就不进行写了请下载发送邮件的python脚本:
链接:http://pan.baidu.com/s/1gfkGrgZ 密码:6bsh

脚本注释:

 
  1. Python脚本中三个相关的参数
  2. receiver = sys.argv[1]
  3. #收件人地址
  4. subject = sys.argv[2]
  5. #发送邮件的主题
  6. mailbody = sys.argv[3]
  7. #发送邮件的内容
  8. smtpserver ='smtp.exmail.qq.com'
  9. #邮件服务器地址,本脚本使用的是企业邮箱
  10. username ='username'
  11. #用户名
  12. password ='password'
  13. #密码
  14. sender = username
  15. #发送人名称

我们如果要写一个发送邮件的脚本,需要支持个参数
1、收件人
2、标题
3、内容

 

 

自定义告警脚本

 我们也可以使用shell写一个最简单的
脚本存放路径:我们可以在配置文件中查看

 
  1. [root@linux-node1 web]# vim /etc/zabbix/zabbix_server.conf
  2. AlertScriptsPath=/usr/lib/zabbix/alertscripts

提示: 这行配置文件定义了邮件脚本的存放路径,因为它默认会从usr/lib/zabbix/alertscripts查找邮件脚本

 
  1. [root@linux-node1 web]# vim /usr/lib/zabbix/alertscripts/sms.sh
  2. #!/bin/bash
  3. ALTER_TO=$1
  4. ALTER_TITLE=$2
  5. ALTER_BODY=$3
  6. echo $ALTER_TO >>/tmp/sls.log
  7. echo $ALTER_TITLE >>/tmp/sms.log
  8. echo $ALTER_BODY >>/tmp/sms.log

我们可以写完之后进行检测,如果这里有信息说明已经调用这个脚本。 如果我们有短信通道将里面的内容换一下即可,短信通道都是有售后的

 
  1. 修改权限
  2. [root@linux-node1 web]# chmod +x /usr/lib/zabbix/alertscripts/sms.sh
  3. [root@linux-node1 web]# ll /usr/lib/zabbix/alertscripts/sms.sh
  4. -rwxr-xr-x 1 root root 152Oct820:26/usr/lib/zabbix/alertscripts/sms.sh

  我们写的脚本是短信报警,首先你需要有一个短信通道,我们可以使用阿里云大鱼,本次我们使用文件追加的形式来模拟.
  

 

Zabbix页面设置

1.png-90.4kB

点击右上角创建报警介质
5.png-73.4kB

点击最下面的Add
4.png-70.3kB

5.png-71.3kB

6.png-120.4kB

提示:先点击小的Update在点最下面的Update
我们还需要修改报警媒介
7.png-96kB

找到相对应的用户,点击。
8.png-61.1kB

1.png-89.7kB

  接下来就需要我们触发报警了
3.png-230.6kB

上面我们设置的连接数是大于1,所以我们多刷新几次就可以了
4.png-248.3kB

这里显示发送完成,我们去日志进行查看
2.png-46.9kB

 
  1. 13122323232为发送的手机号
  2. PROBLEM为主题信息NginxActive监控项
  3. Original........:为故障信息,2代表连接数是2

提示: 因为中国的短信收费是70个字符2毛,字母也算是。所以我们发送邮件的报警信息就需要简介明了一点

 

优化图如下:

1.png-118.5kB

修改后如下:
2.png-77.4kB

  设置完成之后最好数一下,不要超过70个字符
3.png-226.8kB

http://www.alidayu.com/
有兴趣的同学可以自己了解一下阿里大鱼,可以提供短信通道、语音、验证码等业务。
1.png-80.7kB

短信通道比较出名的几款产品:
  亿美软通 阿里大鱼 腾讯云也有

 

微信报警

  短信报警和邮件报警已经说过了,我们简单的说一下微信报警
4.png-42.1kB

  因为在很早之前就说过,个人服务号和订阅号不支持直接跟订阅用户进行沟通。如果是企业号可以直接获取到一个类似key,拿着这个key直接curl就可以了发了。 具体内容可以进行百度或者谷哥搜索。

扩展: 除了以上三种报警,还有钉钉报警以前还有QQ报警飞信报警,但是现在已经不开源了
提示: 上面那三行最好不要删除,在生产环境中追加到一个文件中。记录发送邮件的信息

#####################################################################################

Zabbix 3.0 监控MySQL [六]

Mysql监控

  zabbix自带了一个监控mysql的模板,但是真正监控mysql的并不是zabbix自带的模板。而是percona公司的一个监控mysql模板
 percona官网: www.percona.com

Percona组成介绍

1、php脚本    用来数据采集
2、shell脚本  用来调用采集信息
3、zabbix配置文件
4、zabbix模板文件

安装文档:https://www.percona.com/doc/percona-monitoring-plugins/LATEST/zabbix/index.html
  percona 利用的是php来获取mysql的相关信息,所以如果我们想使用percona插件监控mysql就需要在agent端安装php。在安装文档上有写哦~
1.png-135.5kB

安装步骤: 查看上面的链接也可以进行安装
我们安装在zabbix-server上,因为上面有一个MySQL

 
  1. [root@linux-node1 web]# yum install http://www.percona.com/downloads/percona-release/redhat/0.1-3/percona-release-0.1-3.noarch.rpm
  2. [root@linux-node1 web]# yum install percona-zabbix-templates php php-mysql -y
  3. #percona插件是通过php去获取mysql的参数,所以我们要安装php和php-mysql
  4. 我们可以查看它都安装了那些软件
  5. [root@linux-node1 web]# rpm -ql percona-zabbix-templates
  6. /var/lib/zabbix/percona
  7. /var/lib/zabbix/percona/scripts
  8. /var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh #shell脚本
  9. /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php #php获取mysql信息
  10. /var/lib/zabbix/percona/templates
  11. /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf #zabbix配置文件
  12. /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml #zabbix模板文件
  13. percona组成我们已经说过了,此处只是略微介绍。

我们将zabbix模板下载下来

 
  1. [root@linux-node1 web]# sz /var/lib/zabbix/percona/templates/zabbix_agent_template_percona_mysql_server_ht_2.0.9-sver1.1.6.xml

  然后我们需要将模板通过web界面导入到zabbix中
2.png-310.6kB

2.png-90kB

提示:如果出现错误,可能是zabbix 3.0版本的问题。我们这里提供了一个生产的模板
下载链接:https://pan.baidu.com/s/1TgsPR3qjWyxjwKYQrz6fWQ 密码:u09h
然后从新上传即可

复制配置文件

 
  1. [root@linux-node1 web]# cp /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf /etc/zabbix/zabbix_agentd.d/
  2. [root@linux-node1 web]# ls /etc/zabbix/zabbix_agentd.d/
  3. #安装完软件包后会在/var/lib/zabbix/percona/templates/目录下产生一个配置文件,我们将它拷贝,因为在前面的博文中,我们已经修改过zabbix的配置文件[Include=/etc/abbix/zabbix_agentd.d/
  4. ]所以将配置文件放在这个目录下,zabbix就会自己在这个目录下查找相关信息
  5. [root@linux-node1 web]# systemctl restart zabbix-agent.service
  6. 重启一下!

下面就应该配置与MySQL的连接
/var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf创建一个文件

 
  1. [root@linux-node1 ~]# cat /var/lib/zabbix/percona/scripts/ss_get_mysql_stats.php.cnf
  2. <?php
  3. $mysql_user ='root';
  4. $mysql_pass ='';
  5. #用户名密码可以自己创建,有密码写密码,没密码为空就好了

提示: 正常这里的用户我们应该创建一个专门用来监控的,由于我这里是测试环境。就不浪费时间了

 

测试

查看是否可以获取到值,随便找一个测试

 
  1. [root@linux-node1 ~]# cat /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf
  2. 选择一个肯定有值的key
  3. [root@linux-node1 ~]# cat /var/lib/zabbix/percona/templates/userparameter_percona_mysql.conf|grep gm
  4. UserParameter=MySQL.read-views,/var/lib/zabbix/percona/scripts/get_mysql_stats_wrapper.sh gm
  5. 测试结果如下:
  6. [root@linux-node1 ~]# cd /var/lib/zabbix/percona/scripts/
  7. [root@linux-node1 scripts]#./get_mysql_stats_wrapper.sh gm
  8. 1
  9. [root@linux-node1 scripts]#./get_mysql_stats_wrapper.sh gw
  10. 9736342
  11. 可以获取到值,说明没有问题

温馨提示: shell脚本中数据库的路径是localhost,如果我们没有授权localhost会获取不到值

 
  1. [root@linux-node1 scripts]# cat get_mysql_stats_wrapper.sh
  2. HOST=localhost
  3. RES=`HOME=~zabbix mysql -e 'SHOW SLAVE STATUSG'| egrep '(Slave_IO_Running|Slave_SQL_Running):'| awk -F:'{print $2}'| tr ' '','`
  4. #mysql是通过命令来获取的,如果环境变量不一样 也可能造成影响

Zabbix_Web界面配置
  模板已经上传到zabbix中,这时候我们就需要进行设置了
1.png-155.4kB

2.png-106.9kB

提示: 我们还需要授权/tmp下的一个文件,因为默认情况下 zabbix在文件中获取的值
3.png-60.7kB

修改完就可以获取值了,所以我们还需要测试
4.png-131.9kB

结果如下图
5.png-202.5kB

思想:
  如果出现错误我们需要先查看shell的脚本,因为shell是去调用php。 错误的因素有很多,最简单的方法就是用shell 后面加上key 看看是否可以有值。
  其中报错最多的地方就是php和mysql连接的问题,还有我们mysql授权的一些问题。

#######################################################################################

Zabbix 3.0 监控Web [七]

  Zabbix 默认自带一个web监控
我们可以从Monitoring--->Web进行查看

一、检查

  首先我们需要检查192.168.56.12是否有tomcat,是否可以运行。能否访问

 
  1. 1.查看进程
  2. [root@linux-node2 ~]# ps -ef|grep java
  3. root 804825468010:31 pts/000:00:00 grep --color=auto java
  4. root 4275710Sep26 pts/000:38:59/usr/bin/java -Djava.util.logging.config.file=/usr/local/tomcat/conf/logging.properties -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager-Djdk.tls.ephemeralDHKeySize=2048-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=8888-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.56.12-classpath /usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar -Dcatalina.base=/usr/local/tomcat -Dcatalina.home=/usr/local/tomcat -Djava.io.tmpdir=/usr/local/tomcat/temp org.apache.catalina.startup.Bootstrap start
  5. 2.查看端口
  6. [root@linux-node2 ~]# lsof -i:8080
  7. COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
  8. java 42757 root 48uIPv63793790t0 TCP *:webcache (LISTEN)
  9. 3.测试是否可以访问8080端口
  10. [root@linux-node2 ~]# curl -I 192.168.56.11:8080
  11. HTTP/1.1200 OK
  12. Server: nginx/1.10.1
  13. Date:Mon,10Oct201605:08:18 GMT
  14. Content-Type: text/html
  15. Content-Length:612
  16. Last-Modified:Mon,19Sep201601:59:49 GMT
  17. Connection: keep-alive
  18. ETag:"57df4695-264"
  19. Accept-Ranges: bytes
 

二、Zabbix Web界面配置

1.png-178.7kB

提示: 监控Web 不依赖于agent,是server直接发送请求的

2.png-105.8kB

3.png-31kB

提示: 这里名字叫做Web场景,因为我们可以设置触发上面3个选项后,才进行报警

1 (1).png-73.9kB

2 (1).png-105.6kB

提示: 字符串里面可以添加一些字符串,当请求下来有这个字符串就是正常,没有就是不正常。但是最常用的还是状态
3 (1).png-49.7kB

然后我们选择Add
4.png-141.9kB

  比较坑的一点是,我们新添加了一个Web监控。zabbix默认没有给我们安装触发器
  
1.png-240.8kB

 

三、触发器添加

2.png-164.3kB

Web监控中默认不含有触发器,所以需要手动添加
点右上角,进行创建触发器
0.1.png-96.1kB

1.png-53.9kB

2.png-254.9kB

 

四、触发器报警测试

1、停掉tomcat,要想返回值不是200 停掉tomcat是最简单的

 
  1. [root@linux-node2 ~]#/usr/local/tomcat/bin/shutdown.sh
  2. Using CATALINA_BASE:/usr/local/tomcat
  3. Using CATALINA_HOME:/usr/local/tomcat
  4. Using CATALINA_TMPDIR:/usr/local/tomcat/temp
  5. Using JRE_HOME:/usr
  6. Using CLASSPATH:/usr/local/tomcat/bin/bootstrap.jar:/usr/local/tomcat/bin/tomcat-juli.jar
  7. 检查
  8. [root@linux-node2 ~]# ps aux|grep tomcat
  9. root 87230.00.0112648976 pts/1 R+12:210:00 grep --color=auto tomcat

报警如下:
1.png-229.3kB

 

1.png-78.1kB

2.png-73.7kB

回复如上
邮件报警设置可以访问 Zabbix 3.0 生产案例 [五]
我们还可以优化动作[Actions]
111.png-70.4kB

  Zabbix 就是一个万能的什么都可以监控,只要我们有key。什么都可以监控
key我们可以使用脚本,程序等等等

###########################################################################################

Zabbix 3.0 主备模式 [八]

监控常遇到的问题?

  1.监控主机多,性能跟不上,延迟大
  2.多机房,防火墙因素
Zabbix轻松解决以上问题,Nagios不太好解决的问题。

Zabbix 模式介绍:
1、被动模式
2、主动模式

  默认是被动模式,我们可以通过以下方式查看监控项是什么模式
1 (1).png-433.3kB

因为我们使用的是模板,无法进行修改。我们可以修改配置文件或者新建item的时候设置。
2.png-175.3kB

  注意:
 1、当监控主机超过300+,建议使用主动模式(此处是一个经验值,要根据服务器的硬件来进行考虑)
 2、还需要保证Queue对列里面没有延迟的主机

Queue 对列介绍
如果此处的延迟主机有点多的话,我们就需要将被动模式修改为主动模式.
1.png-196.7kB

 

主动模式设置

192.168.56.12监控设置为主动模式
1、修改配置文件
为了方便模拟,我们将node2(192.168.56.12)从Zabbix删除从新添加
3.png-617.3kB

 
  1. [root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. #Server=192.168.56.11
  3. #我们需要注释Server,因为这个是被动模式用的
  4. StartAgents=0
  5. #设置为0之后就不会TCP端口,之前监听TCP端口是因为Server要去问agent信息所以需要开启
  6. ServerActive=192.168.56.11
  7. #此处可以是IP或者是域名,他会连接10051端口
  8. Hostname=linux-node2.example.com
  9. #唯一识别符,我们需要修改成我们本机的主机名。如果我们不设置,它默认会通过item来获取
  10. [root@linux-node2 ~]# systemctl restart zabbix-agent.service
  11. 保存重启

保存重启之后我们可以查看我们监听的一些端口,因为我们关闭的被动模式所以不会在监听zabbix端口了

 
  1. [root@linux-node2 ~]# netstat -lntup
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:220.0.0.0:* LISTEN 1073/sshd
  5. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2498/master
  6. tcp6 00:::44589:::* LISTEN 9052/java
  7. tcp6 00:::8080:::* LISTEN 9052/java
  8. tcp6 00:::22:::* LISTEN 1073/sshd
  9. tcp6 00:::8888:::* LISTEN 9052/java
  10. tcp6 00::1:25:::* LISTEN 2498/master
  11. tcp6 00:::39743:::* LISTEN 9052/java
  12. tcp6 00127.0.0.1:8005:::* LISTEN 9052/java
  13. tcp6 00:::8009:::* LISTEN 9052/java

我们可以查看日志,进行检查

 
  1. [root@linux-node2 ~]# tailf /var/log/zabbix/zabbix_agentd.log
  2. 14932:20161011:084303.210****Enabled features ****
  3. 14932:20161011:084303.210IPv6 support: YES
  4. 14932:20161011:084303.210 TLS support: YES
  5. 14932:20161011:084303.210**************************
  6. 14932:20161011:084303.210 using configuration file:/etc/zabbix/zabbix_agentd.conf
  7. 14932:20161011:084303.210 agent #0 started [main process]
  8. 14933:20161011:084303.227 agent #1 started [collector]
  9. 14934:20161011:084303.227 agent #2 started [active checks #1]
  10. 14934:20161011:084303.271 no active checks on server [192.168.56.11:10051]: host [linux-node2.example.com]not found
  11. 14934:20161011:084503.415 no active checks on server [192.168.56.11:10051]: host [linux-node2.example.com]not found

日志解释:
zabbix—agent设置完主动模式后,会去主动问server需求。相当于入职刚入职运维需要老大进行分配任务。并且以后就会根据这个任务清单进行执行 因为我们还没有配置server,所以现在会出现错误

Zabbix-web设置
我们需要添加zabbix-agent
4.png-237.1kB

5.png-108kB

添加模板zabbix没有提供主动模式的模板。所以我们需要克隆一下OS Linux
6.png-195.7kB

找到OS Linux 模板,移动到最下面 点击复制
8.png-85.8kB

我们从新进行设置名称
2 (1).png-109.6kB

修改我们刚刚添加的模板名为OS Linux Active
2.png-430.9kB

我们点击刚刚创建模板的item
3.png-295.1kB

4.png-381.8kB

5.png-121.2kB

然后选择最下方Update
结果如下:
6.png-311kB

在次查看模板,发现zabbix还依赖一个模板。我们需要把它也改了或者是删掉。

我们添加主机
8.png-113kB

添加模板
10.png-70.3kB

11.png-226.6kB

13.png-231.7kB

#提示:我们已经可以获取到数据了,但是发现zabbix 这个模块发红。可能是由于我们没有修改他的依赖造成的
如下图:
14.png-229kB

可能是通过agent.ping来获取信息,没有看过源码 所以不太清楚,我研究它
12.png-326kB

zabbix主备模式完成

#########################################################################################

Zabbix 3.0 分布式监控 [九]

  Zabbix Proxy是一个类似于代理的服务,可以代替Zabbix-server获取 zabbix-agent信息。其中数据存到本地(Proxy有自己的数据库)然后在发送给Server,这样可以保证数据不丢失
  Zabbix-server ----->Zabbix-Proxy ----->Zabbix-Server
  3.png-95.2kB

地址:https://www.zabbix.com/documentation/3.0/manual/distributed_monitoring/proxies

 

Zabbix Proxy 使用场景

  常用于多机房情况或者监控主机特别多,几千台左右。这时候使用Zabbix Proxy 可以减轻服务器server的压力,还可以减轻Zabbix的维护。
  最常用的特点是适用于多机房网络不稳定的时候,因为如果直接由Zabbix-server发送信息可能agent没有收到,但是直接使用Zabbix-Proxy就不会遇到这个问题。
  
Zabbix官方说明(分布式监控)
Proxy 有如下功能
2.png-118.7kB

地址: https://www.zabbix.com/documentation/3.0/manual/distributed_monitoring
NO - 中文解释
1.没有Web界面
2.本身不做任何告警通知(告警通知都是Server做)

小结:
  Zabbix Proxy 可以有多个,用来代理Zabbix server来运行。Proxy会将所有数据暂存于本地,然后同一转发到Zabbix Server上
  Proxy只需要一条TCP链接,可以连接到Zabbix-server上即可。所以防火墙只需要添加一条Zabbix Proxy即可 我们可以参考上面的Zabbix Proxy图
  Proxy是需要使用单独的数据库,所以不能将ServerAgent放在一起
Proxy说明:https://www.zabbix.com/documentation/3.0/manual/distributed_monitoring/proxies
安装文档:https://www.zabbix.com/documentation/3.0/manual/installation/install
 官方文档使用的是源码安装,因为方便我们使用yum安装,因为我们只有2台,所以就用agent当做Proxy

 
  1. [root@linux-node2 ~]# yum install -y zabbix-proxy zabbix-proxy-mysql mariadb-server
  2. 我们需要启动MySQL
  3. [root@linux-node2 ~]# systemctl start mariadb.service

我们还需要创建一个

 
  1. mysql
  2. create database zabbix_proxy character set utf8;
  3. grant all on zabbix_proxy.* to zabbix_proxy@localhost identified by 'zabbix_proxy';

我们需要导入数据

 
  1. [root@linux-node2 ~]# cd /usr/share/doc/zabbix-proxy-mysql-3.0.5/
  2. [root@linux-node2 zabbix-proxy-mysql-3.0.5]# zcat schema.sql.gz | mysql -uzabbix_proxy -p zabbix_proxy
  3. Enter password:
  4. #密码是:zabbix_proxy 是我们数据库授权的密码

检查数据库

 
  1. mysql
  2. show databases;
  3. use zabbix_proxy;
  4. show tables;
  5. #查看是否含有数据

我们需要修改proxy的配置文件

 
  1. [root@linux-node2 zabbix-proxy-mysql-3.0.5]# vim /etc/zabbix/zabbix_proxy.conf
  2. Server=192.168.56.11
  3. Hostname=Zabbix proxy
  4. DBName=zabbix_proxy
  5. #数据库名称
  6. DBUser=zabbix_proxy
  7. #用户名
  8. DBPassword=zabbix_proxy
  9. #用户密码
  10. 配置文件中没有配置的内容如下:(有需要可以配置)
  11. # ProxyLocalBuffer=0
  12. #数据保留的时间(小时为单位)
  13. # ProxyOfflineBuffer=1
  14. #连不上Server,数据要保留多久(小时为单位,默认1小时)
  15. # DataSenderFrequency=1
  16. #数据的发送时间间隔(默认是1秒)
  17. # StartPollers=5
  18. #启动的线程数
  19. # StartIPMIPollers=0
  20. #启动IPMI的线程数
  21. 从这往下都是性能的监控,就不一次说明了。上面都有中文注释

过滤修改过的配置如下:

 
  1. [root@linux-node2 zabbix-proxy-mysql-3.0.5]# grep '^[a-Z]'/etc/zabbix/zabbix_proxy.conf
  2. Server=192.168.56.11
  3. Hostname=Zabbix proxy
  4. LogFile=/var/log/zabbix/zabbix_proxy.log
  5. LogFileSize=0
  6. PidFile=/var/run/zabbix/zabbix_proxy.pid
  7. DBName=zabbix_proxy
  8. DBUser=zabbix_proxy
  9. DBPassword=zabbix_proxy
  10. SNMPTrapperFile=/var/log/snmptrap/snmptrap.log
  11. Timeout=4
  12. ExternalScripts=/usr/lib/zabbix/externalscripts
  13. LogSlowQueries=3000

启动

 
  1. [root@linux-node2 ~]# systemctl start zabbix-proxy

查看proxy进程

 
  1. [root@linux-node2 ~]# netstat -lntup
  2. ActiveInternet connections (only servers)
  3. ProtoRecv-Q Send-Q LocalAddressForeignAddressState PID/Program name
  4. tcp 000.0.0.0:33060.0.0.0:* LISTEN 15685/mysqld
  5. tcp 000.0.0.0:220.0.0.0:* LISTEN 1073/sshd
  6. tcp 00127.0.0.1:250.0.0.0:* LISTEN 2498/master
  7. tcp 000.0.0.0:100510.0.0.0:* LISTEN 15924/zabbix_proxy
  8. tcp6 00:::44589:::* LISTEN 9052/java
  9. tcp6 00:::8080:::* LISTEN 9052/java
  10. tcp6 00:::22:::* LISTEN 1073/sshd
  11. tcp6 00:::8888:::* LISTEN 9052/java
  12. tcp6 00::1:25:::* LISTEN 2498/master
  13. tcp6 00:::39743:::* LISTEN 9052/java
  14. tcp6 00:::10051:::* LISTEN 15924/zabbix_proxy
  15. tcp6 00127.0.0.1:8005:::* LISTEN 9052/java
  16. tcp6 00:::8009:::* LISTEN 9052/java

Zabbix-proxy 监控10051端口,因为是代理就必须跟Server的端口相同,对于Agent Proxy就是Server

Zabbix Web 添加
1.png-96.4kB

2 (1).png-57.7kB

点击Add即可
3 (1).png-247.6kB

4.png-49.5kB

我们需要将这台主机的Server设置为Proxy
编辑192.168.56.12 这台主机,需要将Server的IP地址修改成自己的
因为现在是主动模式,我们只需要修改主动模式的Server即可

 
  1. [root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. ServerActive=192.168.56.12
  3. #配置文件修改完需要重启
  4. [root@linux-node2 ~]# systemctl restart zabbix-agent

这时候我们就可以看到那个proxy都管理了那些机器,做到方便管理的机制
1.png-222.9kB

proxy简单的理解就是一个Server

##########################################################################
Zabbix 3.0 自动化监控 [十]

自动化分类

所有的自动化都可以分为2
1.自动注册
 Zabbix agnet 自动添加
2.主动发现
 1.自动发现 Discover
 2.zabbix api
 因为我们只有2web,为了方便演示。我们将原来添加的proxy删掉.
1.png-252.7kB

提示: 主动模式下设置自动注册

 

一、自动注册设置

agent配置文件修改

 
  1. [root@linux-node2 ~]# vim /etc/zabbix/zabbix_agentd.conf
  2. LogFileSize=0
  3. StartAgents=0
  4. Server=192.168.56.11
  5. ServerActive=192.168.56.11
  6. Hostname=192.168.56.11
  7. HostMetadata=system.uname
  8. #Server IP地址
  9. HostMetadataItem=system.uname
  10. #特征
  11. 1.可以我们自己写一个特征
  12. 2.我们执行一个key
  13. #手写级别大于执行key

过滤出我们的配置[如下]

 
  1. [root@CentOS6 zabbix]# egrep -v "#|^$" zabbix_agentd.conf
  2. PidFile=/var/run/zabbix/zabbix_agentd.pid
  3. LogFile=/var/log/zabbix/zabbix_agentd.log
  4. LogFileSize=0
  5. StartAgents=0
  6. Server=192.168.56.11
  7. ServerActive=192.168.56.11
  8. Hostname=192.168.56.12
  9. HostMetadata=system.uname
  10. Include=/etc/zabbix/zabbix_agentd.d/

我们先不重启,因为重启就生效了。我们需要设置一个规则.

注意自动发现必须要设置ServerActive让客户端启动主动去寻找服务端
提示,zabbix-agent起来的时候去找server,这时候就会产生一个事件,然后我们可以基于这个事件来完成一个动作

提示: zabbix-agent起来的时候回去找Server,这时候就会产生一个事件,然后我们可以基于这个事件来完成一个动作。
3.png-140.5kB

我们需要选中,然后在进行创建
4.png-83.8kB

2.png-82.2kB

2 (1).png-72.5kB

如果选项匹配到Linux,为什么匹配Linux呢? 因为Linux 可以在输入任何命令都可以生成

 
  1. [root@linux-node2 ~]# uname
  2. Linux
  3. [root@linux-node2 ~]# uname -a
  4. Linux linux-node2.example.com 3.10.0-327.36.1.el7.x86_64 #1 SMP Sun Sep 18 13:04:29 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

提示: 需要点击小的Add 才可以继续操作
3.png-78.6kB

设置操作
3 (1).png-63.9kB

我们先点击Add,在选择Host
4.png-84.8kB

我们在添加一个主机组,随便选一个就可以。
4 (1).png-98.2kB

我们在添加一个模板

解释: 这样设置后我发现你这台主机我会给你设置一个主机组和一个模板。并且是Linux
最后我们选择Add
5.png-99.2kB

修改完之后我们在重启一下

 
  1. [root@linux-node2 ~]# systemctl restart zabbix-agent.service

6.png-252.9kB

如果还没有出来,我们可以稍等一会
6 (1).png-152.2kB

自动注册完!

----------分割线---------------


 

二、自动发现设置

因为我们的服务器只用了2台,所以昨晚自动注册我们在把它停掉。要不总会影响我们
2.png-103.7kB

我们在删除刚刚添加的主机
3.png-354.7kB

自动发现可以去扫描IP地址范围(需要手动设置)进行发现的动作
2 (1).png-26.3kB

官方说明: https://www.zabbix.com/documentation/3.0/manual/discovery/network_discovery

创建Zabbix自动发现(生产一般不用)
1.png-86.9kB

2.png-102.7kB

唯一的标识我们可以设置IP地址,或者key值
3.png-97.7kB

  然后我们创建一个Action(动作)
4.png-117kB

4 (1).png-104.6kB

现在它自己就添加上去了
5.png-244.6kB

 

三、API介绍

  Zabbix提供了一个丰富的APIZabbix提供的API有2种功能。
一个是管理
一个是查询
3.png-28.3kB

请求方法 POST
我们可以进行访问查看
3 (1).png-12.3kB

无法打开,我们需要进行POST请求才可以。
官方说明文档:https://www.zabbix.com/documentation/3.0/manual/api

 
  1. curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "user.login",
  5. "params": {
  6. "user": "zhangsan",
  7. "password": "123456"
  8. },
  9. "id": 1
  10. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool

-d 请求的内容
-H 类型
id 名字,类似一个标识
user 我们登陆用的是zhangsan 默认是Admin
password 默认是zabbix,我们修改为123456了

 
  1. [root@linux-node1 ~]# curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. > {
  3. > "jsonrpc": "2.0",
  4. > "method": "user.login",
  5. > "params": {
  6. > "user": "zhangsan",
  7. > "password": "123456"
  8. > },
  9. > "id": 1
  10. > }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool
  11. --------------------------分割线------------------------
  12. 下面是返回的结果!!!!!!!!!!!!!!!!!!!!!!
  13. {
  14. "id":1,
  15. "jsonrpc":"2.0",
  16. "result":"d8286f586348b96b6b0f880db3db8a02"
  17. }

例如:我们获取所有主机的列表
官方文档:https://www.zabbix.com/documentation/3.0/manual/api/reference/host/get

 
  1. curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "host.get",
  5. "params": {
  6. "output": ["host"]
  7. },
  8. "auth": "d8286f586348b96b6b0f880db3db8a02",
  9. "id": 1
  10. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool

提示: auth里面填写的是我们刚刚返回的result里面的值,如果我们在["hostid"]加上id就会显示id。想全显示主机名就直接写host

 
  1. [root@linux-node1 ~]# curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "host.get",
  5. "params": {
  6. "output": ["host"]
  7. },
  8. "auth": "d8286f586348b96b6b0f880db3db8a02",
  9. "id": 1
  10. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool
  11. {
  12. "id":1,
  13. "jsonrpc":"2.0",
  14. "result":[
  15. {
  16. "host":"Zabbix server",
  17. "hostid":"10084"
  18. },
  19. {
  20. "host":"linux-node1.example.com",
  21. "hostid":"10105"
  22. },
  23. {
  24. "host":"linux-node1.example.com1",
  25. "hostid":"10107"
  26. },
  27. {
  28. "host":"linux-node2.example.com",
  29. "hostid":"10117"
  30. }
  31. ]
  32. }

                         对比图
1.png-235.6kB

例如:如何获取模板
官方文档:https://www.zabbix.com/documentation/3.0/manual/api/reference/template/get

 
  1. curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "template.get",
  5. "params": {
  6. "output": "extend"
  7. },
  8. "auth": "d8286f586348b96b6b0f880db3db8a02",
  9. "id": 1
  10. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool

默认太多不发了,看图!
2.png-151kB

  过滤
过滤主机有OS LINUX的模板

 
  1. curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "template.get",
  5. "params": {
  6. "output": "extend",
  7. "filter": {
  8. "host": [
  9. "Template OS Linux"
  10. ]
  11. }
  12. },
  13. "auth": "d8286f586348b96b6b0f880db3db8a02",
  14. "id": 1
  15. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool

效果图如下!
2 (1).png-146.8kB

  我们提供一个快速认证的Python脚本
链接:http://pan.baidu.com/s/1gf0pQwF 密码:m7dq
脚本内容如下

 
  1. [root@linux-node1 ~]# cat zabbix_auth.py
  2. #!/usr/bin/env python
  3. # -*- coding:utf-8 -*-
  4. import requests
  5. import json
  6. url ='http://192.168.56.11/zabbix/api_jsonrpc.php'
  7. post_data ={
  8. "jsonrpc":"2.0",
  9. "method":"user.login",
  10. "params":{
  11. "user":"zhangsan",
  12. "password":"123123"
  13. },
  14. "id":1
  15. }
  16. post_header ={'Content-Type':'application/json'}
  17. ret = requests.post(url, data=json.dumps(post_data), headers=post_header)
  18. zabbix_ret = json.loads(ret.text)
  19. ifnot zabbix_ret.has_key('result'):
  20. print'login error'
  21. else:
  22. print zabbix_ret.get('result')

我们可以执行一下进行查看
提示: 需要修改里面的用户名密码

 
  1. #安装python环境
  2. [root@linux-node1 ~]# yum install python-pip -y
  3. [root@linux-node1 ~]# pip install requests
  4. You are using pip version 7.1.0, however version 8.1.2is available.
  5. You should consider upgrading via the 'pip install --upgrade pip' command.
  6. Collecting requests
  7. Downloading requests-2.11.1-py2.py3-none-any.whl (514kB)
  8. 100%|████████████████████████████████|516kB204kB/s
  9. Installing collected packages: requests
  10. Successfully installed requests-2.11.1
  11. ################################################
  12. ################################################
  13. ################################################
  14. 执行结果
  15. [root@linux-node1 ~]# python zabbix_auth.py
  16. 5b21317186f2a47404214556c5c1d846
 

四、案例:使用API进行自动添加主机

首先我们需要删除主机和自动发现
4.png-190kB

4 (1).png-493.2kB

我们使用API来实现自动添加监控主机
使用API添加主机:https://www.zabbix.com/documentation/3.0/manual/api/reference/host/create

 
  1. curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. {
  3. "jsonrpc": "2.0",
  4. "method": "host.create",
  5. "params": {
  6. "host": "Zabbix agent 192",
  7. "interfaces": [
  8. {
  9. "type": 1,
  10. "main": 1,
  11. "useip": 1,
  12. "ip": "192.168.56.12",
  13. "dns": "",
  14. "port": "10050"
  15. }
  16. ],
  17. "groups": [
  18. {
  19. "groupid": "8"
  20. }
  21. ],
  22. "templates": [
  23. {
  24. "templateid": "10001"
  25. }
  26. ]
  27. },
  28. "auth": "5b21317186f2a47404214556c5c1d846",
  29. "id": 1
  30. }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool

用户组ID获取方法
2.png-114.7kB

模板IP查看方法
2 (1).png-141.1kB

执行结果如下:

 
  1. [root@linux-node1 ~]# curl -s -X POST -H 'Content-Type:application/json-rpc'-d'
  2. > {
  3. > "jsonrpc": "2.0",
  4. > "method": "host.create",
  5. > "params": {
  6. > "host": "Zabbix agent 192",
  7. > "interfaces": [
  8. > {
  9. > "type": 1,
  10. > "main": 1,
  11. > "useip": 1,
  12. > "ip": "192.168.56.12",
  13. > "dns": "",
  14. > "port": "10050"
  15. > }
  16. > ],
  17. > "groups": [
  18. > {
  19. > "groupid": "8"
  20. > }
  21. > ],
  22. > "templates": [
  23. > {
  24. > "templateid": "10001"
  25. > }
  26. > ]
  27. > },
  28. > "auth": "5b21317186f2a47404214556c5c1d846",
  29. > "id": 1
  30. > }' http://192.168.56.11/zabbix/api_jsonrpc.php | python -m json.tool
  31. {
  32. "id":1,
  33. "jsonrpc":"2.0",
  34. "result":{
  35. "hostids":[
  36. "10118"
  37. ]
  38. }
  39. }

查看Zabbix 页面
3.png-242.1kB

提示: 里面的主机名/模板 都是我们设置好的

Zabbix完!
4.png-43.8kB

 

原文地址:https://www.cnblogs.com/wuhg/p/10511179.html