zabbix监控搭建

常见开源监控软件

  • cacti、nagios、zabbix、smokeping、open-falcon等等php

  • cacti、smokeping偏向于基础监控,成图很是漂亮python

  • cacti、nagios、zabbix服务端监控中心,须要php环境支持,其中zabbix和cacti都须要mysql做为数据存储,nagios不用存储历史数据,注重服务或者监控项的状态,zabbix会获取服务或者监控项目的数据,会把数据记录到数据库里,从而能够成图mysql

  • open-falcon为小米公司开发,开源后受到诸多大公司和运维工程师的追捧,适合大企业,滴滴、360、新浪微博、京东等大公司在使用这款监控软件,值得研究linux

  • 目前流行的监控为: zabbix ,Prometheus+grafanaios

  • 扩展:使用Prometheus+grafana打造高逼格监控平台:http://blog.51cto.com/youerning/2050543nginx


zabbix监控介绍

  • C/S架构,基于C++开发,监控中心支持web界面配置和管理
  • 单server节点能够支持上万台客户端
  • 最新版本3.4,官方文档https://www.zabbix.com/manuals
  • zabbix须要LAMP环境。

zabbix监控的5个组件

  • zabbix-server 监控中心,接收客户端上报信息,负责配置、统计、操做数据
  • 数据存储 存放数据,好比mysql
  • web界面 也叫web UI,在web界面下操做配置是zabbix简单易用的主要缘由
  • zabbix-proxy 可选组件,它能够代替zabbix-server的功能,减轻server的压力
  • zabbix-agent 客户端软件,负责采集各个监控服务或项目的数据,并上报


安装zabbix

首先要准备两台机器。web

官网下载地址 www.zabbix.com/download

下载yum源 wget https://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm

下载好后安装 :rpm -ivh zabbix-release-3.4-2.el7.noarch.rpm

两台机器都要下载安装sql

有了yum源以后须要yum安装如下软件:

  • 服务端安装:

yum install -y zabbix-agent zabbix-get zabbix-server-mysql zabbix-web zabbix-web-mysql数据库

  • 客户端安装:

yum install -y zabbix-agentvim

  • 会连带安装httpd和php
  • 若是mysql以前没有安装的话,须要根据lamp那一章的mysql安装方法安装mysql,也能够yum安装mysql

编辑vim /etc/my.cnf 增长字符集 utf8

若是不设置在web界面zabbix中文显示会有问题。

增长内容以下:

character_set_server = utf8

添加完后重启下mysql

mysql建立库

  • 首先登录 mysql -uroot -p123456

  • 登录后指定字符集 create database zabbix character set utf8;

  • 为了让php代码连接mysql等,在建立用户,指定来源IP,建立密码。

grant all on zabbix.* to 'zabbix'@'127.0.0.1' identified by 'aming-zabbix';

  • 退出

导入原始数据

没有这些数据zabbix没法工做。

  • cd /usr/share/doc/zabbix-server-mysql-3.4.11/
  • gzip -d create.sql.gz
  • 导入: mysql -root -p123456 zabbix < create.sql
[root@localhost ~]# cd /usr/share/doc/zabbix-server-mysql-3.4.11/
[root@localhost zabbix-server-mysql-3.4.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql.gz  NEWS  README
[root@localhost zabbix-server-mysql-3.4.11]# gzip -d create.sql.gz 
[root@localhost zabbix-server-mysql-3.4.11]# ls
AUTHORS  ChangeLog  COPYING  create.sql  NEWS  README
[root@localhost zabbix-server-mysql-3.4.11]# mysql -root -p123456 zabbix < create.sql 
Warning: Using a password on the command line interface can be insecure.
[root@localhost zabbix-server-mysql-3.4.11]#

修改zabbix启动文件否则没法正常启动

vim /etc/zabbix/zabbix_server.conf

  • 定义数据库IP(搜索DBHost)
### Option: DBHost
#       Database host name.
#       If set to localhost, socket is used for MySQL.
#       If set to empty string, socket is used for PostgreSQL.
#
# Mandatory: no
# Default:
# DBHost=localhost
DBHost=127.0.0.1

正常生产环境中数据库可能在另外一台机器上,须要定义那台机器得IP.

  • 定义DBName 要和数据库定义得名字同样

  • 定义DBUser,以及密码。

# DBUser=

DBUser=zabbix
DBPassword=aming-zabbix

以后启动zabbix服务

  • systemctl start zabbix-server

启动后用ps aux |grep zabbix检查一下,若是出现特别多得内容说明启动成功了,若是只有几行说明启动得有问题。

  • 启动httpd服务:systemctl start httpd(启动前检查是否启动了nginx监听80端口,若是启动须要停掉)

  • 加入开机启动里: systemctl enable zabbix-server ,systemctl enable httpd

检查zabbix监听端口(10051)

  • netstat -lntp |grep zabbix
[root@localhost ~]# netstat -lntp |grep zabbix
tcp        0      0 0.0.0.0:10051           0.0.0.0:*               LISTEN      2486/zabbix_server  
tcp6       0      0 :::10051                :::*                    LISTEN      2486/zabbix_server

以后能够配置zabbix web界面了

  • 访问zabbix-server IP/zabbix/出现以下界面:

  • 点下一步后出现报错,Time zone for PHP is not set (configuration parameter "date.timezone").

只看faild 不用管ok的。vi /etc/php.ini 找到timezone,添加

[Date]
; Defines the default timezone used by the date functions
; http://php.net/date.timezone
date.timezone =Asia/Shanghai

定义完成以后重启httpd服务。以后刷新网页就会没有刚刚的报错,直接点下一步便可。

  • 以后填写如下数据库的信息,跟服务器设置保持一致便可。

  • 下一步后,填写name无所谓写什么自定义便可。

  • 完成以后出现登录界面,默认用户名:Admin 密码:zabbix

  • 进入后台第一件事情就是修改密码

忘记zabbix 登录Admin密码如何作

  • 进入mysql数据量命令行,选择zabbix库
mysql -u root -p123456
use zabbix
  • mysql -uroot -p zabbix

  • update users set passwd=md5(‘newpasswd’) where alias=‘Admin’;

  • 这样就更改了Admin用户的密码

Zabbix 客户端配置

  • 编辑配置 vim /etc/zabbix/zabbix_agentd.conf //修改以下配置

其中有三个地方须要修改

Server=127.0.0.1修改成Server=192.168.159.128 //定义服务端的ip(被动模式)
ServerActive=127.0.0.1修改成ServerActive=192.168.159.128 //定义服务端的ip(主动模式)
Hostname=Zabbix server修改成Hostname=aming-01 //这是自定义的主机名,一会还须要在web界面下设置一样的主机名
  • systemctl start zabbix-agent 启动服务
  • systemctl enable zabbix-agent 设置开机自启

主动模式和被动模式

  • 主动或者被动是相对客户端来说的

  • 被动模式,服务端会主动链接客户端获取监控项目数据,客户端被动地接受链接,并把监控信息传递给服务端

  • 主动模式,客户端会主动把监控数据汇报给服务端,服务端只负责接收便可。

  • 当客户端数量很是多时,建议使用主动模式,这样能够下降服务端的压力。

  • 服务端有公网ip,客户端只有内网ip,但却能连外网,这种场景适合主动模式


添加监控主机

  • 首先添加主机群组 aming-text

  • 而后点击主机,添加主机命名为:aming-01,配置如图:

监控项可定义主动模式被动模式

  • 应用集就是监控项目的集合

  • 自动发现规律:会自动发现客户端的磁盘分区,网卡流量,文件系统进行监控。

添加自定义模板

  • 首先先新建模板

  • 而后连接其余模板

之因此连接模板是由于会把自动发现选项的模板也连接过来。自动发现的模板没法单独复制。连接完以后,把不须要的在删除。

  • 删除连接模板

连接以后的模板没法删除,由于是连接其余组的膜拜你。可是取消连接以后,自定义组会保留以前连接的全部模板,这样就能够删除没有用的了。

  • 而后就能够删除无用模板

先删除监控项,后删除应用集。

保留如下选项,其余均可以删除

最后必定要选择主机,把刚刚建好的模板给链接上,

处理图形中的乱码

  • 刚开始看图形界面会出现汉字没法显示的状况

设置为中文后,zabbix图形的中文文字会显示小方框 这是由于在zabbix的字体库中没有中文字体,须要从windows上借用一个过来

  • 更改字体服务端打开 vim /usr/share/zabbix/include/defines.inc.php //搜索ZBX_FONTPATH

它定义的路径是“fonts”,它是一个相对路径,绝对路径为/usr/share/zabbix/fonts,而字体文件为“ZBX_GRAPH_FONT_NAME”所定义的“graphfont”,它是一个文件,绝对路径为/usr/share/zabbix/fonts/graphfont windows字体路径为“C:\Windows\Fonts\”,找到“simfang.ttf”(其实就是那个仿宋简体),先把它复制到桌面上,而后上传到linux的/usr/share/zabbix/fonts/,而且更名为graphfont.ttf

自动发现

  • 把自动发现更新时间改成1分钟,而后重启server和agent

  • 看到图形就会自动识别网卡之类的

  • 为了防止服务器压力,在更新出新图表后把自动发现更新时间改成时间稍微长一点。


添加自定义监控项目

需求:监控某台web的80端口链接数,并出图

  • 编辑 vim /usr/local/sbin/estab.sh //内容以下
#!/bin/bash
##获取80端口并发链接数
netstat -ant |grep ':80 ' |grep -c ESTABLISHED
  • chmod 755 /usr/local/sbin/estab.sh

  • 客户端上编辑配置文件 vim /etc/zabbix/zabbix_agentd.conf//增长

UnsafeUserParameters=1  //表示使用自定义脚本
UserParameter=my.estab.count[*],/usr/local/sbin/estab.sh (这个名字后面要填写到键值里面key)//自定义监控项的key为my.estab.count,后面的[*]里面写脚本的参数,参数由逗号分隔若是没有参数则能够省略,脚本为/usr/local/sbin/estab.sh
  • 重启zabbix-agent服务 systemctl restart zabbix-agent

  • 首先到服务端验证,看客户端脚本是否生效,执行命令值为0,说明正常

[root@localhost ~]# zabbix_get -s 192.168.159.130 -p 10050 -k 'my.estab.count'
0
  • 而后在zabbix监控中心(浏览器)配置增长监控项目

  • 添加图形

  • 添加触发器

表达式


配置邮件告警

使用163或者QQ邮箱发告警邮件

首先登陆你的163邮箱,设置开启POP三、IMAP、SMTP服务

开启并记录受权码

而后到监控中心设置邮件告警

  • “管理”,“报警媒介类型”,“建立媒体类型”

  • 脚本参数 {ALERT.SENDTO} ,{ALERT.SUBJECT},{ALERT.MESSAGE}

  • 脚本必须放在这个目录下, 由于服务端的配置文件就是这样定义的,/usr/lib/zabbix/alertscripts/

  • 在客户端建立脚本mail.py

#!/usr/bin/env python
#-*- coding: UTF-8 -*-
import os,sys
reload(sys)
sys.setdefaultencoding('utf8')
import getopt
import smtplib
from email.MIMEText import MIMEText
from email.MIMEMultipart import MIMEMultipart
from  subprocess import *

def sendqqmail(username,password,mailfrom,mailto,subject,content):
    gserver = 'smtp.qq.com'
    gport = 25

    try:
        msg = MIMEText(unicode(content).encode('utf-8'))
        msg['from'] = mailfrom
        msg['to'] = mailto
        msg['Reply-To'] = mailfrom
        msg['Subject'] = subject

        smtp = smtplib.SMTP(gserver, gport)
        smtp.set_debuglevel(0)
        smtp.ehlo()
        smtp.login(username,password)

        smtp.sendmail(mailfrom, mailto, msg.as_string())
        smtp.close()
    except Exception,err:
        print "Send mail failed. Error: %s" % err


def main():
    to=sys.argv[1]
    subject=sys.argv[2]
    content=sys.argv[3]
##定义QQ邮箱的帐号和密码,你须要修改为你本身的帐号和密码(请不要把真实的用户名和密码放到网上公开,不然你会死的很惨)
    sendqqmail('1234567@qq.com','aaaaaaaaaa','1234567@qq.com',to,subject,content)

if __name__ == "__main__":
    main()
    
    
#####脚本使用说明######
#1. 首先定义好脚本中的邮箱帐号和密码
#2. 脚本执行命令为:python mail.py 目标邮箱 "邮件主题" "邮件内容"
  • 权限必定不要忘记更改 chmod 755 /usr/lib/zabbix/alertscripts/mail.py

  • 测试脚本是否可用

[root@localhost alertscripts]# python mail.py 13261666323@163.com "这是一个测试标题" "这是一个测试内容,124234djgajgoaiodjboshjb"

测试成功,只不过中文是乱码。

建立一个接受告警邮件的用户

建立一个接受告警邮件的用户,“管理”,“用户”,“建立用户”,“报警媒介”,类型选择“baojing”,注意用户的权限,若是没有须要到用户组去设置权限

  • 用户组设置权限

  • 设置动做

设置动做,“配置”,“动做”,“建立动做”,名称写“sendmail”(自定义),“操做”页面,内容以下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}
ID:{EVENT.ID}

新的触发条件”,A维护状态 非在 维护,B触发器示警度>=未分类,操做”,选择发送的用户为刚建立的用户,仅送到选择“baojing”

切换到“恢复操做”,把信息改为以下

HOST:{HOST.NAME} {HOST.IP}
TIME:{EVENT.DATE}  {EVENT.TIME} 
LEVEL:{TRIGGER.SEVERITY} 
NAME:{TRIGGER.NAME}
messages:{ITEM.NAME}:{ITEM.VALUE}

点击“新的”,“操做”,选择发送的用户为刚建立的用户,仅送到选择“baojing”

测试告警


测试告警

估计把监控改为有问题的,测试是否会发送邮件。

  • 建立自定义触发器

此触发器是检测系统负载小于1的时候发送邮件。

邮件发送成功


扩展

相关文章
相关标签/搜索