Zabbix监控服务部署

一、Zabbix介绍

1.监控概述

    简单地理解,就是第一时间发现、定位并记录异常;复杂地理解,就是从外部/内部、业务/基础环境、功能/性能、预算/收入等各个方面对业务数据进行采集、展现和告苦的体系。对于运维人员,通过对各层次数据的展示和告警设置,快速、直观地发现和定位故障。按监控类型划分,可分硬件监控、系统监控、网络监控、应用监控等。

硬件监控:可以利用IPMI 监视服务器的物理特征如温度、电压、电扇工作状态、电源供应以及机箱入侵等。详细过程见http://www.ibm.com/developerworks/cn/linux/l-ipmi/磁盘监控:MegaCli是一款管理维护硬件RAID软件。可以通过它来了解当前raid卡的所有信息,包括 raid卡的型号,raid的阵列类型,raid上各磁盘状态,等等。http://blog.chinaunix.net/uid-25135004-id-3139293.html

系统监控:主要监控CPU 使用率、内存使用情况、磁盘io速度、传输和读/写比率等。可以利用nmon,帮助在一个屏幕上显示所有重要的性能优化信息,并动态地对其进行更新。

网络监控:Smokeping、基调、博睿等。

2.Zabbix简介

zabbix(音同 zbix)是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案。zabbix能监视各种网络参数,保证服务器系统的安全运营;并提供灵活的通知机制以让系统管理员快速定位/解决存在的各种问题。zabbix由2部分构成,zabbixserver与可选组件zabbix agent。zabbixserver可以通过SNMP,zabbix agent,ping,端口监视等方法提供对远程服务器/网络状态的监视,数据收集等功能,它可以运行在Linux,Solaris,HP-UX,AIX,Free BSD,OpenBSD,OS X等平台上。

zabbix官网地址:http://www.zabbix.com/download.php

手册:https://www.zabbix.com/documentation/3.0/manual/

3. zabbix的主要特点

  多种数据收集方式(SNMPIPMIJMX)(SERVERPROXYAGENTS

  高级告警配置(自定义告警升级、告警信息支持使用宏macro变量、远程命令实现自动化动作)

  实时绘图(自定义创建多监控项视图、网络拓扑、自定义面板screen,并允许在dashboard页面显示)

  历史数据存储(数据存储在数据库中,可配置、内置数据清理机制)

  多模板使用(模板中可以添加组监控、模板允许继承)

  网络自动发现(自动发现网络设备、自动agent注册)

  ZabbixAPI接口(提供程序级别的访问接口、第三方程序可很快接入)

4.Zabbix主要功能

   - CPU负荷

   - 内存使用

   - 磁盘使用

   - 网络状况

   - 端口监视

   - 日志监视。

5.Zabbix进程构成

   zabbix_agentd(客户端守护进程,手机客户端数据,如cpu负载、内存、磁盘使用等...)

   zabbix_get(zabbix工具,单独使用,常用于在server或者proxy端执行,用户获取监控数据,通常用于排错)

   zabbix_sender(用于向server端主动发送数据,常用于再执行耗时比较长的check时,导致zabbix超时,使用sender主动提交一次数据)

   zabbix_proxy(代理守护进程,数据中转站,最后还要将获取到的数据提交到server里,一般跨机房、地区的环境需要使用到proxy)

   zabbix_java_gateway(监控java时候使用到代理网关,类似于agent,最后数据还要提交给server)

   zabbix_server(server端守护进程,server可以被动去搜集数据,也可以让客户端主动提交数据)

二、 Zabbix安装

    要想搭建一个Zabbix的工作环境,需要从服务器入手。与服务器通信,管理员需要使用一个Zabbix前端界面,与Zabbix服务器和数据库进行通信。三个关键(界面、服务器和数据库)可以安装在同一台服务器上,但是如果你拥有一个更大更复杂的环境,将它们安装在不同的主机上也是一个选项。Zabbix服务器能够直接监控到同一网络中的设备,如果其他网络的设备也需要被监控,那还需要一台Zabbix代理服务器。

1.环境准备

zabbix-server:192.168.80.107

zabbix-client:192.168.80.103、192.168.80.107

[root@zabbix ~]# cat /etc/redhat-release
CentOS release 6.6 (Final)
[root@zabbix ~]# uname -r
2.6.32-504.el6.x86_64

2.安装依赖

wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-6.repo
yum -y install httpd  php mysql mysql-server mysql-devel php-pdo php-mysql gcc gcc-c++ glibc libxml2-devel curl curl-devel net-snmp net-snmp-devel libssh2-devel OpenIPMI-devel php-common php-gd perl-DBI php-xml php-mbstring php-bcmath
/etc/init.d/httpd start
/bin/cp /usr/share/mysql/my-medium.cnf /etc/my.cnf
vi /etc/my.cnf            #在[mysqld]中加入如下内容
default-storage-engine = innodb
innodb_file_per_table
collation-server = utf8_general_ci
init-connect = 'SET NAMES utf8'
character-set-server = utf8
/etc/init.d/mysqld start
mysql
create database zabbix character set utf8 collate utf8_bin;
grant all on zabbix.* to zabbix@'localhost' identified by '123456';
flush privileges;
exit
yum install zabbix22-agent -y

 3.  安装zabbix

1.编译安装

cd /server/tools/
wget http://jaist.dl.sourceforge.net/project/zabbix/ZABBIX%20Latest%20Stable/2.4.8/zabbix-2.4.8.tar.gz
tar zxvf zabbix-2.4.8.tar.gz
cd zabbix-2.4.8/database/mysql/
mysql -uzabbix -p123456 zabbix <schema.sql
mysql -uzabbix -p123456 zabbix <p_w_picpaths.sql
mysql -uzabbix -p123456 zabbix <data.sql
cd ../..
./configure --prefix=/usr/local/zabbix-2.4.8 --enable-server --with-mysql --enable-ipv6 --with-net-snmp --with-libcurl --with-libxml2 --with-openipmi --with-ssh2
make install                  #不需要make
cd frontends/php/
cp -rp ./* /var/www/html/
chown -R apache.apache /var/www/html
ln -s /usr/local/zabbix-2.4.8 /usr/local/zabbix
vi /usr/local/zabbix/etc/zabbix_server.conf
DBHost=localhost
DBName=zabbix
DBUser=zabbix
DBPassword=123456
/usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
注意:安装zabbix22-agent,会自动添加zabbix用户,如果提前没有安装,会启动失败,需要自己手动添加zabbix用户

    访问http://192.168.80.107进行安装,发现会有报错,可以修改php的配置文件达到报错的要求

vi /etc/php.ini
post_max_size = 16M
max_execution_time = 300
max_input_time = 300
date.timezone = PRC
/etc/init.d/httpd restart

#重启apache,然后刷新进行安装,其中Zabbix servername可以随便写,也可以为空,安装后登录,默认用户名密码为Adminzabbix  注意:用户名必须大写。

    2. yum安装

注意:此种方法可能安装不成功
[root@zabbix ~]# rpm -ivh http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
Retrieving http://repo.zabbix.com/zabbix/2.2/rhel/6/x86_64/zabbix-release-2.2-1.el6.noarch.rpm
warning: /var/tmp/rpm-tmp.zKPszZ: Header V4
DSA/SHA1 Signature, key ID 79ea5ed4: NOKEY
Preparing...               ########################################### [100%]
   1:zabbix-release        ########################################### [100%]
[root@zabbix ~]# rpm -ql zabbix-release
/etc/pki/rpm-gpg/RPM-GPG-KEY-ZABBIX
/etc/yum.repos.d/zabbix.repo
/usr/share/doc/zabbix-release-2.2
/usr/share/doc/zabbix-release-2.2/GPL
[root@zabbix ~]# yum install -y zabbix zabbix-server zabbix-web zabbix-server-mysql zabbix-web-mysql zabbix-agent
[root@zabbix ~]# yum install mysql-server mysql

 4.  客户端安装

yum install zabbix22-agent -y
vi /etc/zabbix/zabbix_agentd.conf
Server=192.168.80.107
/etc/init.d/zabbix-agent start

三、  配置监控

1.  修改zabbix web界面字体

    拷贝控制面板---字体--微软雅黑--上传到zabbix server中家目录下

cd /var/www/html/fonts/
mv /root/msyh.ttf .
chown apache.apache msyh.ttf

2. 自定义监控

客户端操作

[root@client ~]# vi /etc/zabbix/zabbix_agentd.conf
UserParameter=mysql-check,ps aux|grep mysql|grep -cv grep
[root@client ~]# /etc/init.d/zabbix-agent restart
服务器端测试:
[root@zabbix ~]# zabbix_get -s 192.168.80.103 -k mysql-check

测试成功后添加主机项目,然后可以创建图表显示和触发器。

3. 自定义报警动作

   服务端操作

[root@zabbix ~]# vi /usr/local/zabbix/etc/zabbix_server.conf +425
AlertScriptsPath=/usr/local/zabbix/lib/alertscripts
[root@zabbix ~]# mkdir /usr/local/zabbix/lib/alertscripts
[root@zabbix alertscripts]# killall zabbix_server
[root@zabbix alertscripts]# /usr/local/zabbix/sbin/zabbix_server -c /usr/local/zabbix/etc/zabbix_server.conf
[root@zabbix ~]# cd /usr/local/zabbix/lib/alertscripts   
[root@zabbix alertscripts]# vi pymail.py
#!/usr/bin/python
#coding: utf-8
import smtplib
import sys
from email.mime.text import MIMEText
from email.header import Header
from email.Utils import COMMASPACE
 
receiver = 'sys.argv[1]'
subject = 'sys.argv[2]'
mailbody = 'sys.argv[3]'
smtpserver = 'smtp.163.com'
username = '18753365278'
password = '6180878lwb'
sender = username
 
msg = MIMEText(sys.argv[3],'html','utf-8') #中文需参数‘utf-8',单字节字符不需要
msg['Subject'] = Header(subject, 'utf-8')
msg['From'] = username
msg['to'] = receiver
 
smtp = smtplib.SMTP()
smtp.connect('smtp.163.com')
smtp.login(username, password)
smtp.starttls()
smtp.sendmail(msg['From'], msg['to'],msg.as_string()))
smtp.quit()
[root@zabbix alertscripts]# chmod +x pymail.py

  1. 创建报警媒介

    Administration-->Media types-->Create Media Type创建报警动作(执行报警脚本),默认会有三个报警类型(Email、Jabber、SMS)。类型选择Scripts,脚本名为pymail.py,然后保存。

  2.编辑用户选择报警介质

    Administration-->Users-->Media选项进行添加

  3.添加行为

    Administration-->Actions -->编辑Report problems to Zabbix administrators-->(Action、Conditions、Operations)

4.查看最近所有监控项的数据

    Monitoring-->Latest data查看

5.客户端主动模式

  1.服务端克隆模板

    Configuration-->Templates-->Template OS Linux(选中其中一个进去)-->Full Clone-->填写名称(例如Template OS Linux Active)-->添加

    然后再克隆Template OS Linux链接的模板(如Template App Zabbix Agent)并且让Template OS Linux链接其克隆的模板。注意:链接表示模板项目的并集

  2.把模板里项目全选,批量更新,项目类型改为主动方式,链接的模板项目也得改为主动方式

  3.修改客户端配置文件

[root@client ~]# vi /etc/zabbix/zabbix_agentd.conf
#Server=192.168.80.107         #注释此项,编辑如下三项
StartAgents=0
ServerActive=192.168.80.107
Hostname=data-1
[root@client ~]# /etc/init.d/zabbix-agent start

  4.添加主机

6.  zabbix分布式

  1.代理客户端安装,即安装zabbix-proxy

[root@client ~]# yum install -y zabbix-proxy zabbix-proxy-mysql mysql-server
[root@client ~]# /etc/init.d/mysql start
[root@client ~]# mysql
mysql> create database zabbix_proxy character set utf8;
mysql> grant all on zabbix_proxy.* to zabbix@localhost identified by 'zabbix';
mysql> use zabbix_proxy
mysql> source /usr/share/doc/zabbix-proxy-mysql-2.4.6/create/schema.sql;
[root@client ~]# grep '^[a-Z]' /etc/zabbix/zabbix_proxy.conf
ProxyMode=0   #0主动,1被动
Server=192.168.80.107   #主动模式设置
Hostname=client  #必须改
LogFile=/var/log/zabbix/zabbix_proxy.log
LogFileSize=0
PidFile=/var/run/zabbix/zabbix_proxy.pid
DBName=zabbix_proxy
DBUser=zabbix
DBPassword=zabbix
DBSocket=/var/lib/mysql/mysql.sock
ExternalScripts=/usr/lib/zabbix/externalscripts
[root@client ~]# /etc/init.d/zabbix-proxy start
[root@client ~]# lsof -i:10051

2.在服务端添加

Administration-->Proxies-->Createproxy

之后在服务端添加主机(选上代理即可),要监控的机器agent配置文件ip改成代理的ip

四、自动化监控

1.  zabbix-agent自动注册(使用proxy)

    1.修改客户端配置文件

[root@client ~]# grep '^[a-Z]'
/etc/zabbix/zabbix_agentd.conf
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=0
ServerActive=192.168.80.103  #这里用了代理的ip
Hostname=client
HostMetadataItem=system.uname
Include=/etc/zabbix/zabbix_agentd.d/
[root@client ~]# /etc/init.d/zabbix-agent start

服务器端测试:

[root@zabbix ~]# zabbix_get -s 192.168.80.103 -k system.uname
Linux client 2.6.32-504.el6.x86_64 #1 SMP Wed Oct 15 04:27:16 UTC 2014 x86_64

2.服务端操作

     Configuration-->Actions-->事件源选择Auto registration-->创建

     条件可以写使用哪个代理、Metadata值等;Action operations可以写添加主机、添加模板等

  2.  主机探索(不使用proxy,被动模式)

1.修改客户端配置文件

[root@client ~]# grep '^[a-Z]'
/etc/zabbix/zabbix_agentd.conf                
PidFile=/var/run/zabbix/zabbix_agentd.pid
LogFile=/var/log/zabbix/zabbix_agentd.log
LogFileSize=0
StartAgents=3
Server=192.168.80.107
Hostname=client
HostMetadata=system.uname
UserParameter=login-user,uptime| awk -F' ' '{print $4}'
[root@client ~]# /etc/init.d/zabbix-agent restart

2.服务端操作

    Configuration--> Discovery-->修改默认的Local network

Zabbix监控服务部署_监控

之后Configuration-->Actions-->事件源选择Discovery-->修改默认的Action-->然后启用。稍等会儿查看Monitoring-->Events(查看添加事件);或者查看主机

3.使用zabbix-api

  1.获取验证

    官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/user/login

在linux命令行执行如下命令

curl -s -X POST -H 'Content-Type:application/json'
-d '
{
   "jsonrpc": "2.0",
   "method": "user.login",
   "params": {
       "user": "Admin",
       "password": "zabbix"
    },
   "id": 1
}' http://192.168.80.107/api_jsonrpc.php | python
-mjson.tool

显示结果如下

[root@client ~]# curl -s -X POST -H
'Content-Type:application/json' -d '
> {
>    
"jsonrpc": "2.0",
>    
"method": "user.login",
>    
"params": {
>        
"user": "Admin",
>        
"password": "zabbix"
>     },
>    
"id": 1
> }' http://192.168.80.107/api_jsonrpc.php |
python -mjson.tool
{
   "id": 1,
   "jsonrpc": "2.0",
   "result": "58512eef345e5ba2f01b474324819db2"
}

  2.获取监控主机(带上session id)

官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/host/get

在linux命令行执行如下命令

curl -s -X POST -H 'Content-Type:application/json' -d '
{	
    "jsonrpc": "2.0",
    "method": "host.get",
    "params": {
        "output": ["hostid"]
    },
    "auth": "58512eef345e5ba2f01b474324819db2",
    "id": 2
}' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool

    显示如下

[root@client ~]# curl -s -X POST -H 'Content-Type:application/json' -d '
> {
>     "jsonrpc": "2.0",
>     "method": "host.get",
>     "params": {
>         "output": ["hostid"]
>     },
>     "auth": "58512eef345e5ba2f01b474324819db2",            #必须和获取到的session相同
>     "id": 2
> }' http://192.168.80.107/api_jsonrpc.php | python -mjson.tool   #下边为输出
{
    "id": 2, 
    "jsonrpc": "2.0", 
    "result": [
        {
            "hostid": "10084"
        }
    ]
}

Zabbix监控服务部署_监控_02

 3.创建主机

官方文档:https://www.zabbix.com/documentation/2.4/manual/api/reference/host/create

    在linux命令行执行如下命令(带上获取的session id)

curl -s -X POST -H 'Content-Type:application/json'
-d '
{
   "jsonrpc": "2.0",
   "method": "host.create",
   "params": {
       "host": "Linux server",
       "interfaces": [
            {
               "type": 1,
               "main": 1,
               "useip": 1,
               "ip": "192.168.80.103",
               "dns": "",
               "port": "10050"
            }
        ],
       "groups": [
            {
               "groupid": "8"
            }
        ],
       "templates": [
            {
               "templateid": "10001"
            }
        ]
    },
   "auth": "58512eef345e5ba2f01b474324819db2",
   "id": 1
}' http://192.168.80.107/api_jsonrpc.php | python
-mjson.tool

获取模板的id号

Zabbix监控服务部署_监控_03

另外一种方式

点击模板进去,在网址输入框查看id号,如下图所示

同理可得组等id。

Zabbix监控服务部署_监控_04

执行命令的输出

{
    "id": 1, 
    "jsonrpc": "2.0", 
    "result": {
        "hostids": [
            "10111"             #返回的主机id
        ]
    }
}

Zabbix监控服务部署_zabbix_05