zabbix监控supervisorctl中的服务

1、首先获取supervisorctl status

#!/bin/env python
#_*_ coding:utf-8 _*_

import sys
import os
res = {}
path = '/opt/zabbix/scripts/supervisorctl/'

file1 =os.popen('sudo supervisorctl status')
for line in file1.readlines():
        #获取服务名&服务状态
        ser_name = line.split()[0].strip()
        ser_res = line.split()[1].strip()

        #判断服务运行状态,1为成功,0为失败
        if ser_res == 'RUNNING':
                ser_res = '1'
        else:
                ser_res = '0'
        #aa = path + ser_name
        #file_object =open(aa,'wb')
        #file_object.write(ser_res)
        #file_object.close()
        res[ser_name] = ser_res

user_input = str(sys.argv[1].strip())
print(res[user_input])

2、在zabbix中添加自定义参数

UserParameter=supervisorctl.status[*],python /etc/zabbix/scripts/supervisorctl.py $1

3、默认zabbix的账户没有supervisorctl status执行权限,需要配置zabbix免密sudo

## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
zabbix  ALL=(ALL)       NOPASSWD:/usr/bin/supervisorctl

zabbix 按CPU核数监控负载状态

使用zabbix自带的key来实现多核CPU监控

system.cpu.discovery

自动发现CPU核数:

未分类

定义宏

未分类

按核数监控CPU负载

$2:指key中的第二个参数,这里是idle(CPU空闲比例)

未分类

    us(user):非nice用户进程占用CPU的比率

    sy(system):内核、内核进程占用CPU的比率;

    ni(nice):如果一些用户进程修改过优先级,这里显示这些进程占用CPU时间的比率;

    id(idle):CPU空闲比率,如果系统缓慢而这个值很高,说明系统慢的原因不是CPU负载高;

    wa(iowait):CPU等待执行I/O操作的时间比率,该指标可以用来排查磁盘I/O的问题,通常结合wa和id判断

    hi(irq):CPU处理硬件终端所占时间的比率;

    si(softirq):CPU处理软件终端所占时间的比率;

    st(stealstealon):流逝的时间,虚拟机中的其他任务所占CPU时间的比率;

  用户进程占比高,wa低,说明系统缓慢的原因在于进程占用大量CPU,通常还会伴有教低的id,说明CPU空转时间很少;

  wa低,id高,可以排除CPU资源瓶颈的可能。  

  wa高,说明I/O占用了大量的CPU时间,需要检查交换空间的使用,交换空间位于磁盘上,性能远低于内存,当内存耗尽开始使用交换空间时,将会给性能带来严重影响,所以对于性能要求较高的服务器,一般建议关闭交换空间。另一方面,如果内存充足,但wa很高,说明需要检查哪个进程占用了大量的I/O资源。

    tps: 每秒I/O传输请求量;

    kB_read/s:每秒读取多少KB;

    kB_wrtn/s:每秒写多少KB;

    kB_read:一共读了多少KB;

    kB_wrtn:一共写了多少KB。

zabbix触发器表达式详解

Zabbix trigger是zabbix 进行告警通知的设定条件 ,当监控获取的值触发了设定的条件时,会按照触发器的设定,执行相应的action 操作 。在zabbix中为了比较方便的设定各种条件,zabbix为我们设计了相应的函数和操作符 。本篇就重点介绍下trigger的函数相关的内容。

一、创建触发器

触发器可以是和模板关联的,也可以是和主机关联的。即在创建模板时,就设定好相应的触发器,和模板相关联的主机同时也关联了触发器,一旦条件满足就执行相应的操作(如告警),我们可以认为他是全局性的;和主机关联的触发器是属于局限性的触发器,该触发只针对特别设定的主机有效,对其他主机无效。

针对全局性触发器和局限性触发器的不同,所以其可以在configuration 下的hosts 里配置trigger ,也可以在 configuration 下的tmplates 里配置 trigger。无论在那一处配置,其界面都是类似如下:

未分类

如上图所示,通过设置name、条件、描述、告警级别等保存并启用即可完成一个触发器的新增。

二、触发器表达式

触发器的表达式即上面的expression里填写的内容,其格式为:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

以上面的截图为例,key为icmppingloss ,function函数是min ,parameter参数值为5分钟 ,运算符是大于 。

1、时间参数

zabbix 触发条件里,很多是对单位时间内的数字参数进行表达式表达的,其中涉及到的常用时间单位如下:

s - seconds (when used, works the same as the raw value)
m - minutes
h - hours
d - days
w - weeks

2、运算符

运算符对应表达式中的operator部分,可以使用的操作符有:

未分类

示例:

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5
#系统负载大于5
{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2
#cpu负载大于5或者最后10分钟负载大于2的时候都会报警。
{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0
#/etc/passwd文件改变会报警
{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K
#在最后5分钟,网卡eth0的流量大于100K报警
{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0
#两个节点上的smtp服务都宕机才会报警,该表达式用了两个主机
{zabbix.zabbix.com:icmpping.count(30m,0)}>5
#在最后30分钟主机不能ping通的次数大于5就报警
{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2
({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

以上参考官方文档 。

三、表达式函数

表达式函数也算是表达式中的一部分,不过内容比较多,这里单独拿出来总结 。

abschange

  • 参数:忽略
  • 支持类型:float,int,str,text,log
  • 作用:返回最近获得的值与之前获得值差的绝对值,对于字符串类型:0表示相等,1表示不同

avg

  • 参数:秒或#num
  • 支持类型:float,int
  • 作用:返回一段时间的平均值

举例:

  • avg(5):最后5秒的平均值

  • avg(#5):表示最近5次得到值的平均值

  • avg(3600,86400):表示一天前的一个小时的平均值

如果仅有一个参数,表示指定时间的平均值,从现在开始算起,如果有第二个参数,表示漂移,从第二个参数前开始算时间,

#n表示最近n次的值

max

  • 参数:秒或#num

  • 支持值类型:float,int

  • 描述:返回指定时间间隔的最大值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.

min

  • 参数:秒或#num

  • 支持值类型:float,int

  • 描述:返回指定时间间隔的最小值.时间间隔作为第一个参数可以是秒或收集值的数目(前缀为#).从Zabbix1.8.2开始,函数支持第二个可选参数time_shift,可以查看avg()函数获取它的使用方法.

sum

  • 参数:秒或#num

  • 支持值类型:float,int

  • 描述:返回指定时间间隔中收集到的值的总和.时间间隔作为第一个参数支持秒或收集值的数目(以#开始).从Zabbix1.8.2开始,本函数支持time_shift作为第二个参数。可以查看avg函数获取它的用法

change

  • 参数:忽略
  • 支持类型:float,int,str,text,log
  • 作用:返回最近获得值与之前获得值的差值,对于字符串0表示相等,1表示不同

举例:

change(0)>n:忽略参数一般输入0,表示最近得到的值与上一个值的差值大于n

count

  • 参数:秒或#num
  • 支持类型:float,int,str,text,log
  • 作用:返回指定时间间隔内数值的统计,

举例:

count(600)最近10分钟得到值的个数
count(600,12)最近10分钟得到值的个数等于12
count(600,12,"gt")最近10分钟得到值的个数大于12
count(#10,12,"gt")最近10个值中,值大于12的个数
count(600,12,"gt",86400)24小时之前的10分钟内值大于12的个数
count(600,6/7,"band")-thenumberofvaluesforlast10minuteshaving'110'(inbinary)inthe3leastsignificantbits.
count(600,,,86400)24小时之前的10分钟数据值的个数

第一个参数:指定时间段

第二个参数:样本数据

第三个参数:操作参数

第四个参数:漂移参数

#支持的操作类型
eq: 相等
ne: 不相等
gt: 大于
ge: 大于等于
lt: 小于
le: 小于等于
like: 内容匹配

diff

  • 参数:忽略
  • 支持值类型:float,int,str,text,log
    -作用:返回值为1表示最近的值与之前的值不同,0为其他情况

last

  • 参数:秒或#num
  • 支持值类型:float,int,str,text,log
  • 作用:最近的值,如果为秒,则忽略,#num表示最近第N个值,请注意当前的#num和其他一些函数的#num的意思是不同的

例子:

last(0)等价于last(#1)

last(#3)表示最近第3个值(并不是最近的三个值)本函数也支持第二个参数time_shift,例如last(0,86400)返回一天前的最近的值
如果在history中同一秒中有多个值存在,Zabbix不保证值的精确顺序
#num从Zabbix1.6.2起开始支持,timeshift从1.8.2其开始支持,可以查询avg()函数获取它的使用方法

logeventid

  • 参数:string

  • 支持值类型:log

  • 描述:检查最近的日志条目的EventID是否匹配正则表达式.参数为正则表达式,POSIX扩展样式.当返回值为0时表示不匹配,1表示匹配。该函数从Zabbix1.8.5起开始支持.

logseverity

  • 参数:忽略

  • 支持值类型:log

  • 描述:返回最近日志条目的日志等级(logseverity).当返回值为0时表示默认等级,N为具体对应等级(整数,常用于Windowseventlogs).Zabbix日志等级来源于Windowseventlog的Information列.

logsource

  • 参数:string

  • 支持值类型:log

  • 描述:检查最近的日志条目是否匹配参数的日志来源.当返回值为0时表示不匹配,1表示匹配。通场用于Windowseventlogs监控.例如logsource[“VMWareServer”]

prev

  • 参数:忽略

  • 支持值类型:float,int,str,text,log

  • 描述:返回之前的值,类似于last(#2)

regexp

  • 参数:第一个参数为string,第二个参数为秒或#num

  • 支持值类型:str,log,text

  • 描述:检查最近的值是否匹配正则表达式,参数的正则表达式为POSIX扩展样式,第二个参数为秒数或收集值的数目,将会处理多个值.本函数区分大小写。当返回值为1时表示找到,0为其他.

str

  • 参数:第一个参数为string,第二个参数为秒或#num

  • 支持值类型:str,log,text

  • 描述:查找最近值中的字符串。第一个参数指定查找的字符串,大小写敏感。第二个可选的参数指定秒数或收集值的数目,将会处理多个值。当返回值为1时表示找到,0为其他.

strlen

  • 参数:秒或#num

  • 支持值类型:str,log,text

  • 描述:指定最近值的字符串长度(并非字节),参数值类似于last函数.例如strlen(0)等价于strlen(#1),strlen(#3)表示最近的第三个值,strlen(0,86400)表示一天前的最近的值.该函数从Zabbix1.8.4起开始支持

time

  • 参数:忽略

  • 支持值类型:any

  • 描述:返回当前时间,格式为HHMMSS,例如123055

date

  • 参数:忽略
  • 支持类型:any
  • 作用:返回当前的时间,格式YYYYMMDD

dayofmonth

返回当前是本月的第几天

dayofweek

返回当前是本周的第几天

delta

  • 参数:秒或#num
  • 支持类型:float,int
  • 作用:返回时间间隔内的最大值与最小值的差值

nodata

  • 参数:秒

  • 支持值类型:any

  • 描述:当返回值为1表示指定的间隔(间隔不应小于30秒)没有接收到数据,0表示其他.

now

  • 参数:忽略

  • 支持值类型:any

  • 描述:返回距离Epoch(1970年1月1日00:00:00UTC)时间的秒数

fuzzytime

  • 参数:秒
  • 支持值类型:float,int
  • 作用:返回值为1表示监控项值的时间戳与ZabbixServer的时间多N秒,0为其他.常使用system.localtime来检查本地时间是否与Zabbixserver时间相同.

函数部分同样可以参看官方页面 。

概述

触发器中的表达式使用很灵活,我们可以创建一个复杂的逻辑测试监控,触发器表达式形式如下:

{<server>:<key>.<function>(<parameter>)}<operator><constant>

{主机:key.函数(参数)}<表达式>常数,具体的例子,请接着往下走,很简单

Functions函数

触发器functions可以引用检索到的值,当前时间或者其他元素。触发器表达式支持的function完整列表请点击官网地址 supported functions

Function参数

大多数数值functions可以使用秒来作为参数。你可以使用前缀“#”来表示它有不同的含义

未分类

last函数使用不同的参数将会得到不同的值,#2表示倒数第二新的数据。例入从老到最新值为1,2,3,4,5,6,7,8,9,10,last(#2)得到的值为9,last(#9)得到的值为2。last函数必须包含参数。
AVG,count,last,min和max函数还支持额外的参数,以秒为单位的参数time_shift(时间偏移量)。例如avg(1h,1d),那么将会获取到昨天的1小时内的平均数据。
[warning]备注:触发器表达式需要使用history历史数据来计算,如果history不可用(time_shift时间偏移量参数无法使用),因此history记录一定要保留长久一点,至少要保留需要用的记录。[/warning]
触发器表达式可以使用单位符号来替代大数字,例如5m替代300,或者1d替代86400,1k替代1024字节等等。

操作符

未分类

触发器示例

示例一

触发器名称:Processor load is too high on www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

触发器说明:

www.zabbix.com:host名称
system.cpu.load[all,avg1]:item值,一分内cpu平均负载值
last(0):最新值

5:最新值大于5
如上所示,www.zabbix.com这个主机的监控项,最新的CPU负载值如果大于5,那么表达式会返回true,这样一来触发器状态就改变为“problem”了。

示例二

触发器名称:www.zabbix.com is overloaded

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(10m)}>2

当前cpu负载大于5或者最近10分内的cpu负载大于2,那么表达式将会返回true.

示例三

触发器名称:/etc/passwd has been changed
使用函数 diff():

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

/etc/passwd最新的checksum与上一次获取到的checksum不同,表达式将会返回true. 我们可以使用同样的方法监控系统重要的配置文件,例如/etc/passwd,/etc/inetd.conf等等。这些zabbix一般都会自带,没带的你自己加上吧。

示例四

触发器名称:Someone is downloading a large file from the Internet

使用函数 min:

{www.zabbix.com:net.if.in[eth0,bytes].min(5m)}>100K

当前主机网卡eth0最后5分钟内接收到的流量超过100KB那么触发器表达式将会返回true

示例五

触发器名称:Both nodes of clustered SMTP server are down

{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

当smtp1.zabbix.com和smtp2.zabbix.com两台主机上的SMTP服务器都离线,表达式将会返回true.

示例六

触发器名称:Zabbix agent needs to be upgraded
使用函数str():

{zabbix.zabbix.com:agent.version.str("beta8")}=1

如果当前zabbix agent版本包含beta8(假设当前版本为1.0beta8),这个表达式会返回true.

示例七

触发器名称:Server is unreachable

{zabbix.zabbix.com:icmpping.count(30m,0)}>5

如上表达式表示最近30分钟zabbix.zabbix.com这个主机超过5次不可到达。

示例八

触发器名称:No heartbeats within last 3 minutes
使用函数 nodata():

{zabbix.zabbix.com:tick.nodata(3m)}=1

tick为Zabbix trapper类型,首先我们要定义一个类型为Zabbix trapper,key为tick的item。我们使用zabbix_sender定期发送数据给tick,如果在3分钟内还未收到zabbix_sender发送来的数据,那么表达式返回一个true,与此同时触发器的值变为“PROBLEM”。

示例九

触发器名称:CPU activity at night time
使用函数 time():

{zabbix:system.cpu.load[all,avg1].min(5m)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

只有在凌晨0点到6点整,最近5分钟内cpu负载大于2,表达式返回true,触发器的状态变更为“problem”

示例十

触发器名称:Check if client local time is in sync with Zabbix server time
使用函数 fuzzytime():

{MySQL_DB:system.localtime.fuzzytime(10)}=0

主机MySQL_DB当前服务器时间如果与zabbix server之间的时间相差10秒以上,表达式返回true,触发器状态改变为“problem”

示例十一

触发器名称:Comparing average load today with average load of the same time yesterday (使用 time_shift 时间偏移量参数).

{server:system.cpu.load.avg(1h)}/{server:system.cpu.load.avg(1h,1d)}>2

This expression will fire if the average load of the last hour tops the average load of the same hour yesterday more than two times.

Hysteresis(迟滞,滞后)

简单的说触发器状态转变为problem需要一个条件,从problem转变回来还需要一个条件才行。一般触发器只需要不满足触发器为problem条件即可恢复。明白了么?不明白就看例子吧。
有时候触发器需要使用不同的条件来表示不同的状态,举个官网很有趣的例子:机房温度正常稳定为15-20°,当温度超过20°,触发器值为problem,直到温度低于15°才会接触警报,异常会解除。别整这些没用的,我们看实例.
为了达到这个效果,我们需要使用如下触发器表达式:

示例1

触发器名称:Temperature in server room is too high

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
 ({TRIGGER.VALUE}=1&{server:temp.last(0)}<15)

如上有两个小括号,前面一个表示触发异常的条件,后面一个表达式表示解除异常的条件。
注意:宏变量 {TRIGGER.VALUE}将会返回当前触发器的值

示例2

触发器名称:Free disk space is too low
Problem: 最近5分钟剩余磁盘空间小于10GB。(异常)
Recovery: 最近10分钟磁盘空间大于40GB。(恢复)
简单说便是一旦剩余空间小于10G就触发异常,然后接下来剩余空间必须大于40G才能解除这个异常,就算你剩余空间达到了39G(不在报警条件里)那也是没用的,有意思不!

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G)
|


({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

结尾

这篇文章很有必要细细读,很重要。

Docker下实战zabbix三部曲之三:自定义监控项

通过上一章《Docker下实战zabbix三部曲之二:监控其他机器》的实战,我们了解了对机器的监控是通过在机器上安装zabbix agent来完成的,zabbix agent连接上zabbix server之后,将自己所在机器的信息定时给到zabbix server,这样就实现了机器的监控;
但是我们能监控到的只有cpu,磁盘这些基础信息,对于一些业务信息例如访问量,某个逻辑的执行成功失败次数等信息,我们也想进行监控,这就需要我们去制作自定义监控项了,本章我们就一起来实战自定义监控项吧。

机器部署情况一览

总的来说,有四台机器,各自的功能如下:
a. 假设有一个机器在运行web应用,容器是tomcat,这个应用有个接口http://localhost:8080/zabbixcustomitemdemo/count,可以返回最近一分钟的某个业务量(例如网站访问次数);

b. 有一台机器安装了zabbix agent,作为自定义监控项的载体;
c. 有一台机器安装了zabbix server;
d. 有一台机器安装了mysql,作为zabbix系统的数据库;

整体部署如下图所示:

未分类

运行web应用的server

这是个基于maven的java web应用,里面有个spring mvc的controller,提供一个http服务,范围某个业务每分钟的业务量,代码如下图所示:

@Controller
public class CountController {

    @RequestMapping("/count")
    @ResponseBody
    public int count(String model, String type) {
        int base;
        int max;
        int min;

        if("a".equals(model)){
            base = 50000;
        }else{
            base =10000;
        }

        if("0".equals(type)){
            max = 9000;
            min = 1000;
        }else{
            max = 1000;
            min = 0;
        }

        return base + new Random().nextInt(max)%(max-min+1);
    }
}

从以上代码我们可以看出,http服务会返回随机数,此服务接受两个参数model和type,当model等于”a”时返回的随机数从50000开始,model不等于”a”时返回的随机数从10000开始,当type等于”0”时,在base的基础上增加的值是1000到9000之间,当type不等于”0”时,在base的基础上增加的值是0到1000之间;

整个工程的代码已经上传到git上,地址是[email protected]:zq2599/blog_demos.git,这个目录下由多个工程,本次实战的工程是zabbixcustomitemdemo,如下图:

未分类

docker-compose.yml文件

上面我们已经把四台机器的功能和关系梳理清楚了,现在就来制定docker-compose.yml文件吧:

version: '2'
services:
  zabbix-mysql-service: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql-service
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server-service:
    image: monitoringartist/zabbix-xxl:3.2.6
    links: 
      - zabbix-mysql-service:mysqlhost
    container_name: zabbix-server-service
    restart: always
    depends_on:
      - zabbix-mysql-service
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888
  zabbix-agent-a:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-a
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-a
      - ZBX_SERVER_HOST=zabbixserverhost
  tomcat-server-service:
    image: bolingcavalry/bolingcavalrytomcat:0.0.1
    container_name: tomcat-server
    restart: always
    ports:
      - "8080:8080"

yml文件的内容如上所示,其中mysql、zabbix server,zabbix agent的配置和上一章《Docker下实战zabbix三部曲之二:监控其他机器》是一样的,新增的是一个tomcat的镜像,这个镜像是我在tomcat官方镜像的基础上做了点小改动,使得这个tomcat支持在线部署web应用,关于tomcat在线部署应用,请看文章《实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署》

准备好yml文件之后,打开终端,在yml文件所在目录下执行docker-compose up -d可以将yml文件中所有的容器都启动;

注意,如果您的电脑之前已经运行过上一章《Docker下实战zabbix三部曲之二:监控其他机器》中的docker-compose.yml文件,那么本次执行docker-compose up -d会提示启动失败,已有同样名称的容器存在,这时候可以去上一章的docker-compose.yml文件所在目录执行docker-compose down,也可以通过docker ps -a将所有容器列出,再通过docker stop命令依次停止所有容器,再执行docker-compose rm命令依次删除;

部署web应用

打开终端,进入web工程zabbixcustomitemdemo的目录下,执行命令mvn clean package -U -Dmaven.test.skip=true tomcat7:redeploy,即可将web工程部署到tomcat容器上,关于在线部署的细节请参照文章《实战docker,编写Dockerfile定制tomcat镜像,实现web应用在线部署》;

部署成功后,打开浏览器,访问http://localhost:8080/zabbixcustomitemdemo/count,web server会返回一个数字,如下图所示:

未分类

制作访问url的shell脚本

接下来我们要在zabbix agent上做一个shell脚本,此脚本的功能时发起http请求http://localhost:8080/zabbixcustomitemdemo/count?model=a&type=0,就能得到web服务响应的数字,如果此脚本每分钟被调用一次,就能得到完整的监控曲线图了;

a. 首先,执行docker exec -it zabbix-agent-a /bin/bash登录zabbix agent的容器;
b. 登录后,执行apt-get update更新apt;
c. 先后执行apt-get install wget和apt-get install vim,安装wget和vi工具;
d. 新建目录/usr/work/,在此目录下用vi创建一个shell文件biz_count.sh,内容如下:

#"!/bin/bash
wget -qO- http://tomcathost:8080/zabbixcustomitemdemo/count?model=$1&type=$2
echo ""

上面代码的功能是访问http服务获取一个数字,其中model和type用的是shell的入参;
注意两个细节:
第一个:最后一行代码echo “”,实践证明这一行是很有用的,有了这一行就会在输出http返回的数字后进行换行,有了换行数据才能成功上报到zabbix server;
第二个:wget命令后面的url参数中,”&”符号前面要加转义的斜杠””;

e. 执行chmod a+x biz_count.sh,给shell赋予可执行权限;

agent上添加监控项

继续在zabbix agent容器上,我们要添加一个自定义监控项,这样后面在zabbix server上就能使用该监控项了:
a. 在/etc/zabbix/zabbix_agentd.d目录下,新增一个biz.conf文件,内容如下:

UserParameter=get_total_num[*],/usr/work/biz_count.sh $1 $2

以上代码配置了一个自定义监控项,名称是get_total_num,可以接受两个入参,该监控项会调用biz_count.sh这个脚本,并且把外部传来的两个入参直接传递给biz_count.sh;

b. 执行chmod a+r biz.conf使得该文件可读;

在zabbix agent上测试

继续在zabbix agent容器上,执行以下命令来测试刚刚新加的监控项:

/usr/sbin/zabbix_agentd -t get_total_num[a,0]

中括号中的a,0表示两个入参分别是”a”和”0”,我们执行四次,入参分别用[a,0]、[b,0]、[a,1]、[b,1],得到的结果如下图所示:

未分类

四个返回值分别是54741、17097、50564、10919,结合前面的java代码可以发现两个参数都生效了,数字的大小范围因入参而变化;

为了让监控项生效,需要重启zabbix agent,不过这里有个更快捷的方法可以试试:
a. 执行exit退出zabbix agent容器;
b. 执行docker restart zabbix-agent-a重启zambia agent容器;

到了这里,自定义监控项已经准备好了,接下来在zabbix server上把它配置成功,我们就能看到监控数据和曲线图了,不过在配置前,我们可以在zabbix server上测试一下能否成功调用zabbix agent上的监控项;

在zabbix server上测试agent机器的监控项

首先我们要搞清楚zabbix agent机器的ip,有两种方法:
第一种,执行docker exec -it zabbix-agent-a /bin/bash登录zabbix agent的容器,在容器中执行ip addr命令可以得到ip;
第二种,直接执行docker exec -it zabbix-agent-a ip addr命令得到ip;

不论哪种,都能得到zabbix-agent的ip是172.31.0.5;

现在我们登录zabbix server容器,执行命令docker exec -it zabbix-server-service /bin/bash即可登录,登录后执行以下命令:

zabbix_get -s 172.31.0.5 -k get_total_num[a,0]

如下图所示,测试成功,调用agent的监控项返回了符合预期的数据:

未分类

还记得我们刚才在zabbix agent上配置好之后,需要重启agent服务或者重启zabbix agent容器,如果您忘了这一步,现在zabbix server上测试会得到如下错误提示:

未分类

这时候去重启一下,再回来测试就可以成功了。

在管理页面上添加监控项

在浏览器上输入”http://localhost:8888/“登录管理页面,先添加agent机器,如下图:

未分类

添加之后,点击下图红框位置,进入监控项页面:

未分类

如下图,点击右上角的“Create item”即可开始添加监控项:

未分类

新增的监控项,我们只要填写Name,Key,Update interval(更新频率)这几个字段,其他的保持不变,每个要更新的字段的内容如下图:

未分类

填写并保存后,我们可以在Monitoring -> Latest data中看到最新的监控项数据,如下图:

未分类

接下来我们添加一个监控图形,操作如下图所示,可以进入图形管理页面:

未分类

如下图,点击右上角的“Create graph”创建一个图形:

未分类

新建图形的时候,名称随意,只要Items选中刚刚创建的监控项即可,如下图:

未分类

创建成功,现在要看看效果了,操作如下图所示:

未分类

点击”add”之后,在弹出的页面上选择刚刚我们新建的图形选项,操作完毕后,点击下图红框位置,就能看见曲线图了:

未分类

曲线图如下:

未分类

以上就是自定义监控项开发和设置的所有过程,基于监控项的操作,除了图形还能添加tirgger用来告警,在添加action用来确定告警的动作,例如邮件短信的,有兴趣的读者可以实际操作实战。

Docker下实战zabbix三部曲之二:监控其他机器

在上一章《Docker下实战zabbix三部曲之一:极速体验》中,我们快速安装了zabbix server,并登录管理页面查看了zabbix server所在机器的监控信息,但是在实际场景中,应该是对应用服务器做监控,所以今天我们来实战将应用服务器的监控加入到zabbix server中。

部署情况

假设实际项目中我们有两台应用服务器,为了监控它们,我们要在上面分别安装zabbix-agent服务,然后通过配置让它们与zabbix server连接,所有监控数据和监控配置数据都被zabbix server保存在mysql中,部署情况如下图:

未分类

真实场景中是在应用服务器上安装zabbix agent服务,但是安装agent的过程和步骤不是本次实践的重点,为了快速体验服务本文使用了zabbix官方的agent镜像,这个镜像实际上就是在ubuntu14上安装了zabbix agent(在服务器上安装zabbix agent的过程就不在本文中详述了,对安装有兴趣的读者们可以去网上搜索相关资料)

docker-compose.yml文件

按照前面图片所示的部署情况,我们的docker-compose.yml内容如下,mysql和zabbix server是必须的,再新增了两个zabbix agent容器,名称分别是zabbix-agent-a和zabbix-agent-b:

version: '2'
services:
  zabbix-mysql-service: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql-service
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server-service:
    image: monitoringartist/zabbix-xxl:3.2.6
    links: 
      - zabbix-mysql-service:mysqlhost
    container_name: zabbix-server-service
    restart: always
    depends_on:
      - zabbix-mysql-service
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888
  zabbix-agent-a:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-a
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-a
      - ZBX_SERVER_HOST=zabbixserverhost
  zabbix-agent-b:
    image: zabbix/zabbix-agent:ubuntu-3.2.6
    links: 
      - zabbix-server-service:zabbixserverhost
    container_name: zabbix-agent-b
    restart: always
    depends_on:
      - zabbix-server-service
    environment:
      - ZBX_HOSTNAME=zabbix-agent-service-b
      - ZBX_SERVER_HOST=zabbixserverhost

如上所示,zabbix agent在配置过程中要用到zabbix server的ip信息,这里我们通过links参数,在zabbix agent的host文件中加入了zabbix server的ip信息,host name是zabbixserverhost;

另外,ZBX_HOSTNAME和ZBX_SERVER_HOST这两个环境变量,在zabbix agent镜像的官方文档中已经说明,如下图,ZBX_HOSTNAME用来表示自己的身份,ZBX_SERVER_HOST是用来标明zabbix server的ip信息的,这里直接用link参数中的alias来表示,就能通过host直接找到zabbix server的ip了:

未分类

启动docker 容器

打开控制台,在docker-compose.yml文件所在的目录下执行命令docker-compose up -d,如图:

未分类

进入控制台

等待大约1分钟,让zabbix server完成初始化,然后就能登录管理页面了,详情请参照《Docker下实战zabbix三部曲之一:极速体验》一文,登录后进入hosts页面,如下图:

未分类

获取监控机器ip

按照前面的部署描述图上的部署,有两台机器装了zabbix agent服务,然后想要加入监控,第一步我们要把机器的ip确定下来,在控制台执行docker exec -it zabbix-agent-a ip addr命令,可以看到如下输出,第一台机器的ip是172.31.0.4:

未分类

在控制台执行docker exec -it zabbix-agent-b ip addr命令,可以看到如第二台机器的ip是172.31.0.5;

添加机器监控

点击hosts页面右上角的Create host按钮,可以添加监控机器,如下图:

未分类

在添加机器的页面,主要参数填写如下:
a. Host name :机器的环境变量ZBX_HOSTNAME的值:zabbix-agent-service-a;
b. Visible name :和Host name的值相同;
c. Groups : 机器分组,这里选择Linux servers;
d. Agent interfaces:这里面只需要填写IP address,就是刚才我们通过命令docker exec -it zabbix-agent-a ip addr得到的ip:172.31.0.4;
这个页面只需要填写以上四点内容,其他的都保持默认值,填写完毕后点击底部的”Add”按钮,如下图:

未分类

增加成功后,在列表中可以看到新增的机器,如下图:

未分类

添加监控项

在机器列表页面中,点击机器名称,如下图红框中位置:

未分类

在打开的页面点击”Templates”,如下图红框所示:

未分类

再点击”Select”按钮,如下图红框所示:

未分类

在弹出的页面中,勾选“Template OS Linux”,然后再点击底部的“Select”按钮,这样就把linux服务的常用监控项给批量添加了,如下图:

未分类

注意,返回的页面中,一定要点击“Add”才能让把刚才的选择加上,如下图:

未分类

然后点击“Update”,完成监控项的批量添加,如下图:

未分类

按照同样的方法把另一台机器的监控也加上;

等待大约1-2分钟后,再刷新hosts页面,就能看到列表中的”ZBX”图标已经变为绿色,表示监控已经生效;

查看监控信息

我们来看看监控曲线图吧,点击下图红框中的“Graphs”:

未分类

可以看到有5个曲线图可以查看,如下图,我们看一下cpu load:

未分类

在跳转的页面中,点击“Previdew”,就能看到cpu load的曲线图了,如下图:

未分类

至此,我们添加监控机器的实战已经完成了,但是在真实场景中,我们除了cpu、磁盘等基础信息的监控,还要监控一些业务有关的数据,例如某个http服务每分钟的访问量,在下一章中,我们一起实战开发一个自定义监控。

Docker下实战zabbix三部曲之一:极速体验

对于想学习和实践zabbix的读者来说,在真实环境搭建一套zabbix系统是件费时费力的事情,本文内容就是用docker来缩减搭建时间,目标是让读者们尽快投入zabbix系统的体验和实践;

创建docker-compose.yml文件

首先创建一份docker-compose.yml文件,内容如下:

version: '2'
services:
  zabbix-mysql: 
    image: daocloud.io/library/mysql:8
    container_name: zabbix-mysql
    environment:
      - MYSQL_ROOT_PASSWORD=888888
    restart: always
  zabbix-server:
    image: monitoringartist/zabbix-xxl
    links: 
      - zabbix-mysql:mysqlhost
    container_name: zabbix-server
    restart: always
    depends_on:
      - zabbix-mysql
    ports:
      - "8888:80"
    environment:
      - ZS_DBHost=mysqlhost
      - ZS_DBUser=root
      - ZS_DBPassword=888888

创建容器

打开命令行,在刚才创建的docker-compose.yml目录下,执行docker-compose up -d,这样就会先后启动mysql和zabbix server两个服务的容器,如下图:

未分类

等待zabbix server初始化

在命令行输入命令docker logs -f zabbix-server-service,查看zabbix server的日志输出,下图是部分日志的截图,可以看到有数据库初始化的操作:

未分类

登录zabbix管理页面体验

等待大约一分钟之后,zabbix server的日志不再滚动,表示初始化已经完成,打开浏览器输入http://localhost:8888,可以看到zabbix的管理系统的登录页面,如下图:

未分类

输入用户名admin,密码zabbix

登录后即可看到管理系统了,如下图:

未分类

按照下图的操作,查看已经监控的主机情况,如图,目前只能看到一台机器的信息,就是zabbix server自己这台机器,从列表的几列信息中可以看到有64个监控项,43个触发器,10个图形:

未分类

上图右侧的红框中显示的status是”Disabled”,表示这个host的监控还没有启动,点击这个”Disabled”就能启动监控,将状态变为”Enabled”,大约1分钟后再刷新页面,可以看到展示如下图:

未分类

除了状态变为”Enabled”,右侧原本灰色的”ZBX”也变成了绿色,表示该机器的监控状态是正常的;

体验监控图形

按照下图的红框和箭头操作,可以看到zabbix server所在机器的cpu load的曲线图:

未分类

显示中文

按照下图的箭头依次点击红框中的内容:

未分类

在打开后的页面中按照下图的箭头依次选择和点击:

未分类

这时候再点击右上角的”注销”按钮,退出重现登录,如下图红框所示:

未分类

再重新登录后,就能看见页面已经全部中文显示了,如下图:

未分类

以上就是Docker下实战zabbix的第一部分,快速体验zabbix系统和服务,但只有一个zabbix server服务器意义不大,毕竟实际场景是要通过zabbix系统去监控其他机器和服务,下一章我们尝试把zabbix agent加入进来,以更接近实际场景的方式来继续学习zabbix。

zabbix 内置变量

文章参考:

zabbix邮件报警变量表:http://blog.csdn.net/apache0554/article/details/45843695
zabbix邮件报警设置方法:http://www.jb51.net/article/56973.htm
zabbix配置发送报警邮件:http://www.cnblogs.com/xkops/p/5457443.html

故障:{TRIGGER.STATUS},服务器:{HOSTNAME1}发生:{TRIGGER.NAME}故障!
告警主机:{HOSTNAME1},IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}
恢复:{TRIGGER.STATUS},服务器:{HOSTNAME1}已经恢复!:{TRIGGER.NAME}
告警主机:{HOSTNAME1} ,IP地址:{HOST.CONN}
告警时间:{EVENT.DATE}{EVENT.TIME}
告警等级:{TRIGGER.SEVERITY}
告警信息:{TRIGGER.NAME}
告警项目:{TRIGGER.KEY1}
问题详情:{ITEM.NAME}:{ITEM.VALUE}
当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}
事件ID:{EVENT.ID}

主机显示名:{HOST.NAME}

CentOS 7编译安装Zabbix server

Zabbix是一个基于WEB界面提供分布式系统监视以及网络监视功能的企业级开源解决方案,如果您手里要需要管理多台服务器,使用Zabbix来监控非常合适。Zabbix由2部分构成,Zabbix server与可选组件zabbix agent。

Zabbix server需要用到PHP + Mysql支持,(SQLite、PostgreSQL等数据库也可以),由于服务器已经安装了OneinStack(Linux + Nginx+ MySQL+ PHP)环境,为了当前环境不受到影响,所以选择源码编译方式安装Zabbix server

1. 编译Zabbix server & agent

#安装各种依赖
yum -y install gcc gcc-c++ curl-devel  mysql-devel curl-devel net-snmp net-snmp-devel
#创建用户 & 用户组
groupadd zabbix
useradd -g zabbix zabbix
#下载源码,可从官方下载最新版
wget http://soft.xiaoz.org/linux/zabbix-3.4.4.tar.gz
#解压
tar -zxvf zabbix-3.4.4.tar.gz && cd zabbix-3.4.4
#编译安装
./configure --enable-server --enable-agent --with-mysql --with-net-snmp --with-libcurl --with-libxml2
make install

注意事项:

xiaoz在写这篇文章的时候Zabbix 最新稳定版为3.4,可以在官方https://www.zabbix.com/download找到最新的源码包

如果编译的时候提示“checking for mysql_config… configure: error: MySQL library not found”这样的报错,这种情况可以指定mysql_config位置,比如:

#查找mysql_config位置
find / -name 'mysql_config'
#指定位置
--with-mysql=/usr/local/mysql/bin/mysql_config

如果编译的时候依然有报错,请根据实际报错情况搜索处理。CentOS 7编译安装Zabbix server后,配置文件路径如下:

/usr/local/etc/zabbix_server.conf
/usr/local/etc/zabbix_agentd.conf

2. 导入数据库

需要自己创建一个数据库(略过),并将源码包里面有3个数据库文件(位于zabbix-3.4.4/database/mysql),一定要按照下面的顺序依次导入:

├─ zabbix-3.4.4/database/mysql
 ├─ schema.sql
 ├─ images.sql
 └─ data.sql

修改配置文件/usr/local/etc/zabbix_server.conf填写正确的数据库账号、密码等信息,然后输入zabbix_server && zabbix_agentd启动Zabbix server和Zabbix agent

3. 安装WEB界面

WEB界面使用PHP开发,所以您需要新建一个站点,PHP源码位于zabbix-3.4.4/frontends/php将里面的所有源码拷贝到您站点目录下,访问您的域名:http://domain.com/输入Zabbix Server的一些基本信息即可完成,安装成功后会看到如下界面。用户名是Admin,密码是zabbix,请登录后务必修改。
未分类
设置中文
Zabbix默认界面是英文语言,可以在个人中心设置为中文语言,方便管理,如下图。
未分类
中文乱码?
打开自己的电脑C:WindowsFonts随便拖一个中文语言字体出来,比如simkai.ttf上传至站点fonts目录下,替换原来的默认字体。

#对原来的字体备份
mv DejaVuSans.ttf DejaVuSans.ttf.bak
#对新上传的字体命名
mv simkai.ttf DejaVuSans.ttf

未分类

4. 开机自动启动

先将Zabbix注册为服务,并赋予权限,再设置开机启动,执行下面的命令即可:

cd zabbix-3.4.4
cp misc/init.d/tru64/zabbix_server  /etc/init.d/zabbix_server
cp misc/init.d/tru64/zabbix_agentd  /etc/init.d/zabbix_agentd
#赋予权限
chmod 755 /etc/init.d/zabbix_*

编辑zabbix_server、zabbix_agentd这两个文件,在头部加入:

#chkconfig: 35 95 95
#description:zabbix Agent server

注册为服务,并开机启动:

chkconfig --add zabbix_server
chkconfig --add zabbix_agentd
chkconfig zabbix_server on
chkconfig zabbix_agentd on

至此安装已基本完成,如果需要监控其它服务器数据,可通过官方RPM包方式仅安装客户端即可。客户端不需要PHP/数据库支持,推荐官方RPM包方式安装客户端,较为便捷。

5. 扩展阅读

  • Zabbix配置文件详解之服务端zabbix_server
  • zabbix_agentd.conf配置文件详解

6. 总结

主机商一般默认带有服务器数据监控功能,但如果您手里有多台服务器且不在一个服务商,管理起来很不方便,而且出现故障无法及时知晓,Zabbix正好可以完美解决这个问题,Zabbix不仅数据详细,且支持多种不同动作及通知等,以及开放的API,可以在现有基础上不断定制和强化。Zabbix功能实在是太强大了,xiaoz连皮毛都还未掌握。
未分类

Zabbix监控nginx进程

本文将介绍:

  • Nginx开启状态模板
  • 创建Nginx检测脚本
  • 图形化导入Nginx模块

此操作均在Zabbix3.2.6

Nginx开启状态模板(agent端)

yum install nginx -y

vi /etc/nginx/conf.d/default.conf

    location /nginx_status{
        stub_status on;
        access_log on;
    allow 127.0.0.1;
        allow 192.168.31.0/24;   只允许192.168.31.0这个网段访问
        deny all;
}
## deny all , 拒绝除 allow 中的主机之外所有主机访问此 URL ,实现过程中如果遇到 403 ,有可能是你把自己测试的机器拒绝了!


nginx -t 检查语法
nginx -s reload 重新加载配置文件  

查看nginx 状态信息:

[root@localhost ~]#  curl http://127.0.0.1/nginx_status
Active connections: 1 
server accepts handled requests
 3721 3721 3714 
Reading: 0 Writing: 1 Waiting: 0

注解:
Active connections: 1 当前活动的连接数

server accepts handled requests

3721 3721 3714

3721 从启动到现在一共处理的连接数

3721 从启动到现在成功创建的握手的次数

3714 总共处理的请求数(requests)
请求的丢失数=(握手-连接)
connection 连接数,tcp连接 
request http请求,GET/POST/DELETE

Reading: 0 Writing: 1 Waiting: 0 
Reading: 0 读取客户端Header的信息数 请求头
Writing: 1 返回给客户端的header的信息数 响应头 
Waiting: 0 等待的请求数

创建Nginx检测脚本

mkdir /usr/local/zabbix/scripts -p
vi /usr/local/zabbix/scripts/nginx_status.sh 

#!/bin/bash 
#Time:2017-11-19
#Author: bks.com

#HOST=`/sbin/ifconfig eth0 | sed -n '/inet /{s/.*addr://;s/ .*//;p}'` 
HOST="127.0.0.1" 
PORT="80" 

# Functions to return nginx stats 
# 检测nginx进程是否存在
function ping {
    /sbin/pidof nginx | wc -l
}
function active { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Active' | awk '{print $NF}' 
} 
function reading { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Reading' | awk '{print $2}' 
} 
function writing { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Writing' | awk '{print $4}' 
} 
function waiting { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| grep 'Waiting' | awk '{print $6}' 
} 
function accepts { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $1}' 
} 
function handled { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $2}' 
} 
function requests { 
/usr/bin/curl "http://$HOST:$PORT/nginx_status" 2>/dev/null| awk NR==3 | awk '{print $3}' 
} 
# Run the requested function 
$1

# 对脚本赋予执行权限

chmod +x /usr/local/zabbix/scripts/nginx_status.sh 


编辑agent配置文件,定义Key

vim /etc/zabbix/zabbix_agentd.conf

UserParameter=nginx.status[*],/usr/local/zabbix/scripts/nginx_status.sh $1

# $1表示[*]这里面的参数,在此为"active",如果命令有$存在,那么在$前面在加上一个$


配置完后一定记得重启:
/etc/init.d/zabbix-agent restart

图形化导入Nginx模块

server端测试:

[root@CentOS7 ~]# zabbix_get -s 192.168.31.155 -p 10050 -k "nginx.status[active]"
1
#有数字信息返回则表示配置正常


图形化操作:

    配置-->模板-->导入   
模板下载:
zbx_export_templates.xml
http://pan.baidu.com/s/1pLFUJc3 密码:1234


为对应的主机导入nginx模板
    配置-->主机-->模板-->添加

yum部署zabbix监控

第1章 yum部署zabbix服务端

1.1 命令行部署

自己搭建的yum仓库(推荐-因为局限于网络-很坑)

[root@m01 ~]# tail -1 /etc/hosts
192.168.19.200 repo.zabbix.com mirrors.aliyun.com

获取yum源(只提供安装zabbix的源)

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

安装zabbix,httpd,php(依赖中有httpd和php)

yum install zabbix-server-mysql zabbix-web-mysql

安装、启动 mariadb (mysql被oracle甲骨文公司收购)

yum -y install mariadb-server
systemctl start mariadb.service

创建数据库,权限

mysql
create database zabbix character set utf8 collate utf8_bin;
grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
flush privileges;
exit

导入数据库sql文件(安装server时下载的)

zcat /usr/share/doc/zabbix-server-mysql-3.0.13/create.sql.gz|mysql -uzabbix -pzabbix zabbix

配置zabbix Server连接mysql(yum安装时,大部分不需要修改)

sed -i.ori '115a DBPassword=zabbix' /etc/zabbix/zabbix_server.conf

修改apache-php配置 (yum安装时,大部分不需要修改)

sed -i.ori '18a php_value date.timezone  Asia/Shanghai' /etc/httpd/conf.d/zabbix.conf

启动 zabbix-server httpd

systemctl start zabbix-server
systemctl start httpd

=======至此,进入web界面进行操作=====

1.1.1 yum源配置-解释

推荐自己搭建yum仓库,安装会很顺利,不局限于网络yum源的各种安装不上的问题。(特别全的需要50G以上)
先准备yum源

[root@CentOS7 ~]# rpm -ql zabbix-release-3.0-1.el7.noarch
/etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
/etc/yum.repos.d/zabbix.repo
/usr/share/doc/zabbix-release-3.0
/usr/share/doc/zabbix-release-3.0/GPL

方法一:网上直接下载(网上安装)

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

方法二:先自行下载此rpm包,再上传,最后安装(网上安装)
未分类

 [root@CentOS7 ~]# rpm -ivh zabbix-release-3.0-1.el7.noarch.rpm

方法三:自己搭建本地yum仓库,(推荐-下载速度更快)
未分类

1.1.2 MariaDB 与 mysql

MariaDB数据库管理系统是MySQL的一个分支,主要由开源社区在维护,采用GPL授权许可。开发这个分支的原因之一是:甲骨文公司收购了MySQL后,有将MySQL闭源的潜在风险,因此社区采用分支的方式来避开这个风险。
MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。

1.2 zabbix-web界面设置

1.2.1 web图文过程详解

未分类
未分类
未分类
未分类
未分类

1.3 添加被监控主机

所有需要被监控的服务器都要执行
更新yum源(或者将此rpm包下载到本地再安装)

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

安装zabbix-agent

yum install zabbix-agent

配置文件

sed -i.ori 's#Server=127.0.0.1#Server=172.16.1.61#' /etc/zabbix/zabbix_agentd.conf

启动

systemctl start zabbix-agent.service

1.3.1 zabbix-web界面操作

未分类

1.3.2 字符集优化

安装 “文泉驿-微米黑字体”

yum -y install wqy-microhei-fonts

替换原有字体

cp /usr/share/fonts/wqy-microhei/wqy-microhei.ttc /usr/share/fonts/dejavu/DejaVuSans.ttf

刷新web页面即可
未分类