运维监控小能手之zabbix

1.zabbix的简介

zabbix是一个高度集成的监控解决方案;可以实现企业级的开源分布式监控;zabbix通过C/S模式采集监控数据;zabbix通过B/S模式实现web管理。zabbix监控主要有监控服务器和被监控主机组成,监控服务器通过SNMP或Agent采集数据,然后将采集到的数据写入mysql,oracle等数据库中,最后通过LAMP实现web前端的管理;监控主机只需要安装Agent。

2.搭建LAMP平台

2.1安装nginx


安装说明:nginx主要作用是为了zabbix实现web前端的管理,需要提前ss  -pltanu  | grep  80 检查80端口是否被占用,如果被占用需要修改为其他端口。

# yum -y install nginx-1.16.1-1.el7.ngx.x86_64.rpm

# cd  /etc/nginx/conf.d/

# vim zabbix.conf

    server {

    listen       8081;

    server_tokens off;

    root /data/www/zabbix;

    index index.php index.html index.htm;

    location / {

        if ( -f $request_filename) {

            break;

        }

        if ( !-e $request_filename) {

            rewrite ^(.*)$ /index.php/$1 last;

            break;

        }

    }

    error_page   500 502 503 504  /50x.html;

    location = /50x.html {

        root   /usr/share/nginx/html;

    }

    location ~ .*\.(gif|jpg|jpeg|png|bmp|swf)$

    {

        expires      1h;

    }

    location ~ .*\.(js|css)?$

    {

         expires      1h;

    }

    location ~ .+\.php($|/) {

        set $script $uri;

        set $path_info "";

        if ($uri ~ "^(.+\.php)(/.+)") {

           set $script $1;

           set $path_info $2;

        }

        fastcgi_pass   127.0.0.1:9000;

        fastcgi_index  index.php?IF_REWRITE=1;

        fastcgi_param    PATH_INFO    $path_info;

        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

        fastcgi_param    SCRIPT_NAME    $script;

        include        fastcgi_params;

    }

    location ~ /\. {

        deny  all;

    }


}

# systemctl start nginx

# systemctl enable nginx

2.2安装mysql


安装说明:mysql主要作用用于存放zabbix的监控数据,mysql相关软件包需要自行网上下载,可以通过这个网址下载: http://ftp.ntu.edu.tw/MySQL/Downloads/;centos/rhel的系统有自带mariadb,需要检查一下是否有安装,如果有安装但想用mysql,那么可以抱mariadb卸载。

# ll Mysql-5.6.47/

MySQL-client-5.6.47-1.el7.x86_64.rpm

MySQL-devel-5.6.47-1.el7.x86_64.rpm

MySQL-embedded-5.6.47-1.el7.x86_64.rpm

MySQL-server-5.6.47-1.el7.x86_64.rpm

MySQL-shared-5.6.47-1.el7.x86_64.rpm

MySQL-shared-compat-5.6.47-1.el7.x86_64.rpm

MySQL-test-5.6.47-1.el7.x86_64.rpm

# yum -y install MySQL-*.rpm

# vim /etc/my.cnf

[mysqld]

datadir=/data/mysql/

socket=/var/lib/mysql/mysql.sock

symbolic-links=0

#skip-grant-tables


[mysqld_safe]

log-error=/var/log/mysqld.log

pid-file=/var/run/mysqld/mysqld.pid

sql_mode=ALLOW_INVALID_DATES,ANSI,NO_AUTO_CREATE_USER

# systemctl start mysql

# ss -pltanu | grep :3306

# grep password /var/log/mysqld.log       #初始化获取登录密码

2019-04-27T12:53:27.754281Z 1 [Note] A temporary password is generated for root@localhost: 3ApSddNyu0%j

# mysql -uroot -p

mysql> alter user user() identified by '***********';

#修改root密码,不然无法进行任何数据库操作

mysql> create database zabbix character set utf8 collate utf8_bin;  

#创建存放zabbix的数据库,支持中文字符集

mysql> create user zabbix@'%' identified by '*********';

#创建可以访问数据库的账户和密码

mysql> GRANT all ON zabbix.* TO 'zabbix'@'%' IDENTIFIED BY '**********';

#给zabbix授权,让其有访问zabbix数据库的权限

2.3安装php


安装说明:php的作用是zabbix网页文件是php写的,需要php解释器,php-fpm这个软件包需要自行下载,下载网址:https://mirrors.aliyun.com/centos/7.6.1810/os/x86_64/Packages/,

但是要注意系统版本和php-fpm的版本。

# yum -y install gcc automake autoconf libtool make gcc-c++ glibc libxslt-devel libjpeg libjpeg-devel libpng libpng-devel freetype freetype-devel libxml2 libxml2-devel zlib zlib-devel glibc glibc-devel glib2 glib2-devel bzip2 bzip2-devel ncurses ncurses-devel curl curl-devel e2fsprogs e2fsprogs-devel krb5-devel libidn libidn-devel openssl openssl-devel pcre pcre-devel libmcrypt libmcrypt-devel  libcurl libcurl-devel gmp gmp-devel readline readline-devel

# tar -xf php-7.1.12.tar.gz

# cd php-7.1.12

# ./configure --prefix=/usr/local/php7 --with-config-file-path=/usr/local/php7/etc --with-mcrypt=/usr/local/libmcrypt --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --with-gd --with-iconv --with-zlib --enable-xml --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --enable-mbregex --enable-fpm --enable-mbstring --enable-ftp --enable-gd-native-ttf --with-openssl --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --without-pear --with-gettext --enable-session --with-curl --with-jpeg-dir --with-freetype-dir --enable-opcache

# make && make install

# cp php.ini-production /usr/local/php7/etc/php.ini

# cp sapi/fpm/init.d.php-fpm /etc/init.d/php7-fpm

# cp /usr/local/php7/etc/php-fpm.conf.default /usr/local/php7/etc/php-fpm.conf

# cp /usr/local/php7/etc/php-fpm.d/www.conf.default /usr/local/php7/etc/php-fpm.d/www.conf

# vim /usr/local/php7/etc/php-fpm.d/www.conf

[www]

listen = 127.0.0.1:9000 //PHP端口号

pm.max_children = 32 //最大进程数量

pm.start_servers = 15 //最小进程数量

pm.min_spare_servers = 5 //最少需要几个空闲着的进程

pm.max_spare_servers = 32 //最多允许几个进程处于空闲状态

# vim /usr/local/php7/etc/php.ini

date.timezone = Asia/Shanghai    #设置时区

max_execution_time = 300       #最大执行时间秒

post_max_size = 32M           #POST数据量最大容量

max_input_time = 300          #服务器接收数据的时间限制

memory_limit = 128M          #内存容量限制

mbstring.func_overload = 0

# chmod u+x /etc/init.d/php7-fpm

# /etc/init.d/php7-fpm start

测试php:

[root@zabbix ~]# vim /data/www/test/test.php

        phpinfo();

?>

# systemctl restart nginx

打开浏览器,在地址栏输入ip回车进行测试,正确的测试结果如下图:


运维监控小能手之zabbix_第1张图片

3.搭建zabbix监控平台

3.1安装zabbix


# yum install -y net-snmp-devel curl-devel libevent-devel

# tar -xf zabbix-4.0.19.tar.gz

# cd zabbix-4.0.19

# ./configure  --enable-server --enable-proxy --enable-agent --with-mysql=/usr/bin/mysql_config --with-net-snmp --with-libcurl --prefix=/usr/local/zabbix

// --enable-server安装部署zabbix服务器端软件

// --enable-agent安装部署zabbix被监控端软件

// --enable-proxy安装部署zabbix代理相关软件

// --with-mysql配置mysql_config路径

// --with-net-snmp允许zabbix通过 snmp协议监控其他设备

//--with-libcurl安装相关curl库文件,这样zabbix就可以通过curl连接http等服务

# make && make install

# cd database/mysql

# mysql -uzabbix -p zabbix < schema.sql

# mysql -uzabbix -p zabbix < images.sql

# mysql -uzabbix -p zabbix < data.sql

//刚刚创建是空数据库,zabbix源码包目录下,有提前准备好的数据

//使用my sql导入这些数据即可(注意导入顺序)

# cd ../../frontends/php/

# cp -r * /data/www/zabbix/

# chmod -R 777 /data/www/zabbix/*

# vim /usr/local/zabbix/etc/zabbix_server.conf

ListenPort=10051

DBHost=localhost

DBName=zabbix

DBUser=zabbix

DBPassword=数据库密码

LogFile=/tmp/zabbix_server.log

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

# useradd  -s /sbin/nologin  zabbix

# /usr/local/zabbix/sbin/zabbix_server  -c

 /usr/local/zabbix/etc/zabbix_server.conf    #zabbix_server启动

# /usr/local/zabbix/sbin/zabbix_agentd  -c

  /usr/local/zabbix/etc/zabbix_agentd.conf    #zabbix_agentd启动

3.2 zabbix界面管理


打开浏览器,在地址栏输入:ip/Zabbix-----à回车,单击‘next step’


运维监控小能手之zabbix_第2张图片

注意查看是否全部为ok,单击‘next step’


运维监控小能手之zabbix_第3张图片

注意填写:根据上面数据库的用户名,密码,库名,端口号进行填写,一旦一项错误,无法完成设置,设置完成,单击‘next step’


运维监控小能手之zabbix_第4张图片

以下可填可不填,单击‘next step’


运维监控小能手之zabbix_第5张图片

再一次确认刚刚填写的数据库信息是否正确,单击‘next step’


运维监控小能手之zabbix_第6张图片

看到以下情景,单击‘finish’,完成所有设置。


运维监控小能手之zabbix_第7张图片

输入用户名Admin和密码zabbix登录zabbix界面。


运维监控小能手之zabbix_第8张图片

设置中文环境:Administrator-User-Language-(Chinese(zh_cn)),效果如下:


运维监控小能手之zabbix_第9张图片

将界面改为中文;当改为中文后,在查看图表时会遇到乱码问题,这是由于字体格式不一致导致。zabbix默认使用的是“graphfont.ttf”,该字体对中文支持度不好,因此下方数据会有乱码。


运维监控小能手之zabbix_第10张图片

在本地的C:\Windows\Fonts下选择自己喜欢的字体,,此处选择黑体(我只测试过宋体,楷体,黑体,幼圆其他中文字体应该都支持)


运维监控小能手之zabbix_第11张图片

通过xftp(或其他上传工具)将黑体字体上传至zabbix的fonts目录(zabbix的web安装路径下的fonts)

# cd /data/www/zabbix/assets/fonts/

# chmod 777 simhei.ttf

# cd /data/www/zabbix/include/

# vim defines.inc.php

……

define('ZBX_GRAPH_FONT_NAME',           'simhei'); // font file name

…….

define('ZBX_FONT_NAME', 'simhei');

……

# systemctl  restart nginx


运维监控小能手之zabbix_第12张图片

4.zabbix报警媒介


zabbix触发器到了要发送通知的情况下,需要一个中间介质来接收并传递它的消息给我们运维人员,通常用脚本发送邮件,发送微信或者短信来达到报警。这个脚本实际上就是一个媒介,也就是我们通常说的报警媒介。

4.1 zabbix微信报警

4.1.1创建企业微信


微信现在离不开我们的生活,所以选择微信就是一个不错的媒介工具。使用微信作为报警媒介,首先我们需要注册一个微信公众号用来接收告警信息。申请微信公众号网址:https://qy.weixin.qq.com/,登录微信网址,根据提示申请微信公众号。登录网址,进入以下界面,单击“立即注册”。


运维监控小能手之zabbix_第13张图片

如下图,填写企业名称,行业类型,人员规模,管理员姓名,管理员手机号,短信验证码,还有需要扫码管理员微信,也就是你申请人的微信或者公司提供微信。


运维监控小能手之zabbix_第14张图片

企业微信号注册完成进入企业微信首页并且进入企业微信,应用与小程序--->创建应用,如下图


运维监控小能手之zabbix_第15张图片

在应用与小程序中创建一个应用用于zabbix监控告警,如下图


运维监控小能手之zabbix_第16张图片

创建成功后,如下图所示,在创建脚本时,以下参数需要被调用。


运维监控小能手之zabbix_第17张图片


运维监控小能手之zabbix_第18张图片


运维监控小能手之zabbix_第19张图片

4.1.2 zabbix服务器端配置


# grep AlertScriptsPath /etc/zabbix/zabbix_server.conf

AlertScriptsPath=/usr/local/zabbix/alertscripts

#在配置文件查找报警脚本路径的存放位置

安装python需要调用的simplejson

#wget https://pypi.python.org/packages/f0/07/26b519e6ebb03c2a74989f7571e6ae6b82e9d7d81b8de6fcdbfc643c7b58/simplejson-3.8.2.tar.gz

# tar zxvf simplejson-3.8.2.tar.gz && cd simplejson-3.8.2

# python setup.py build

# python setup.py install

在我们书写脚本时,我们需要得到以下信息,方便脚本调用微信,成员账号、组织部门ID、应用ID、CorpID和Secret这几个测试,按照4.1.1最后几张均可查到相应的参数。

# vim /usr/local/zabbix/alertscripts /weixin.py

#!/usr/bin/python

#_*_coding:utf-8 _*_


import urllib,urllib2

import json

import sys

import simplejson


reload(sys)

sys.setdefaultencoding('utf-8')


def gettoken(corpid,corpsecret):

    gettoken_url = 'https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=' + corpid + '&corpsecret=' + corpsecret

    print  gettoken_url

    try:

        token_file = urllib2.urlopen(gettoken_url)

    except urllib2.HTTPError as e:

        print e.code

        print e.read().decode("utf8")

        sys.exit()

    token_data = token_file.read().decode('utf-8')

    token_json = json.loads(token_data)

    token_json.keys()

    token = token_json['access_token']

    return token


def senddata(access_token,user,subject,content):


    send_url = 'https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=' + access_token

    send_values = {

        "touser":"Admin",

        #企业号中的用户帐号,在zabbix用户Media中配置,如果配置不正常,将按部门发送。

        "toparty":"2",          #企业号中的部门id。

        "msgtype":"text",       #消息类型。

        "agentid":"********",    #企业号中的应用id。

        "text":{

            "content":subject + '\n' + content

           },

        "safe":"0"

        }

#    send_data = json.dumps(send_values, ensure_ascii=False)

    send_data = simplejson.dumps(send_values, ensure_ascii=False).encode('utf-8')

    send_request = urllib2.Request(send_url, send_data)

    response = json.loads(urllib2.urlopen(send_request).read())

    print str(response)

if __name__ == '__main__':

    user = str(sys.argv[1])     #zabbix传过来的第一个参数

    subject = str(sys.argv[2])  #zabbix传过来的第二个参数

    content = str(sys.argv[3])  #zabbix传过来的第三个参数


    corpid =  '***************'   #CorpID是企业号的标识

    corpsecret='****************************************'   #corpsecretSecret是管理组凭证密钥

    accesstoken = gettoken(corpid,corpsecret)

senddata(accesstoken,user,subject,content)

[root@zabbix ~]# chown zabbix.zabbix /usr/local/zabbix/alertscripts /weixin.py 

[root@zabbix ~]# chmod 755 /usr/local/zabbix/alertscripts /weixin.py

[root@zabbix alertscripts]# ./weixin.py  user 报警测试 error

添加微信插件,接收告警就不用到企业微信上查看,如下图:


运维监控小能手之zabbix_第20张图片

#测试微信告警脚本是否成功,成功则会收到如下图


运维监控小能手之zabbix_第21张图片

4.1.3 zabbix的web界面设置


Zabbix_server的web界面,“管理”---->“报警媒介类型”---->“创建媒介类型”,如下图。


运维监控小能手之zabbix_第22张图片

在报警媒介类型中,填写名称:weixin,类型:脚本,脚本名称:weixin.py(刚刚创建的脚本名称),注意下面要填写的脚本参数:

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

单击“更新”,如下图。


运维监控小能手之zabbix_第23张图片

“管理”--->“用户”---->“Admin”,如下图


运维监控小能手之zabbix_第24张图片

单击“Admin”进入下图,选择“报警媒介”---->“添加”,弹出“报警媒介”,类型:weixin,收件人:1000002,当启用时:1-7,00:00-24:00,单击“添加”。


运维监控小能手之zabbix_第25张图片

如下图,单击“更新”。


运维监控小能手之zabbix_第26张图片

“配置”---->“动作”----->“创建动作”,如下图


单击“创建动作”进入如下图菜单,在“动作”中,名称:weixin,新的触发条件:时间期间。


运维监控小能手之zabbix_第27张图片

切换至“操作”,默认操作步骤持续时间 60,

默认标题:{TRIGGER.STATUS}:{TRIGGER.NAME}

消息内容:

告警主机:{HOST.NAME}

告警IP:{HOST.IP}

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

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}:{ITEM.VALUE}

事件ID:{EVENT.ID}

步骤:1-3

步骤持续时间:60

发送到用户:Admin (Zabbix Administrator)

仅送到:weixin

单击“添加”。


运维监控小能手之zabbix_第28张图片

切换至“恢复操作”,

默认标题:{TRIGGER.STATUS}:{TRIGGER.NAME}

消息内容:

告警主机:{HOST.NAME}

告警IP:{HOST.IP}

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

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}:{ITEM.VALUE}

事件ID:{EVENT.ID}

发送到用户:Admin (Zabbix Administrator)

仅送到:weixin

单击“添加”。


运维监控小能手之zabbix_第29张图片

切换至“Update operations”,

默认标题:{TRIGGER.STATUS}:{TRIGGER.NAME}

消息内容:

告警主机:{HOST.NAME}

告警IP:{HOST.IP}

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

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}:{ITEM.VALUE}

事件ID:{EVENT.ID}

发送到用户:Admin (Zabbix Administrator)

仅送到:weixin

单击“添加”。


运维监控小能手之zabbix_第30张图片

再次单击“添加”即可完成,再进行zabbix报警测试,任意找一台服务器调整阈值来测试微信是否可以收到zabbix告警,如成功如下图。


运维监控小能手之zabbix_第31张图片

5.1 zabbix_agentd客户端配置

# rpm -Uvh

https://repo.zabbix.com/zabbix/4.0/rhel/7/x86_64/zabbix-release-4.0-2.el7.noarch.rpm

# yum clean all

# yum repolist

# yum install zabbix-agent

# vim /etc/zabbix/zabbix_agentd.conf

PidFile=/var/run/zabbix/zabbix_agentd.pid

LogFile=/var/log/zabbix/zabbix_agentd.log

LogFileSize=0

Server=127.0.0.1,172.16.32.6

ServerActive=127.0.0.1,172.16.32.6

Hostname=Zabbix server

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

UnsafeUserParameters=1

# systemctl  restart zabbix-agent

你可能感兴趣的:(运维监控小能手之zabbix)