运维监控小能手之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

<?php

        phpinfo();

?>

# systemctl restart nginx

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


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’


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


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


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


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


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


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


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


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


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


通过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


4.zabbix报警媒介


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

4.1 zabbix微信报警

4.1.1创建企业微信


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


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


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


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


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




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

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


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


4.1.3 zabbix的web界面设置


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


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

{ALERT.SENDTO}

{ALERT.SUBJECT}

{ALERT.MESSAGE}

单击“更新”,如下图。


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


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


如下图,单击“更新”。


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


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


切换至“操作”,默认操作步骤持续时间 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

单击“添加”。


切换至“恢复操作”,

默认标题:{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

单击“添加”。


切换至“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报警测试,任意找一台服务器调整阈值来测试微信是否可以收到zabbix告警,如成功如下图。


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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容