Centos搭建zabbix、zabbix邮件和企业微信报警


安装数据库

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

yum install zabbix-server-mysql zabbix-web-mysql zabbix-server zabbix-agent mariadb-server -y

mysql_secure_installation

systemctl start mariadb

systemctl enable mariadb

mysql –uroot -p

MariaDB [(none)]> create database zabbix character set utf8 collate utf8_bin;

MariaDB [(none)]> grant all privileges on zabbix.* to zabbix@localhost identified by '123456';



导入储室架构和数据

cd /usr/share/doc/zabbix-server-mysql-3.4.15/

zcat create.sql.gz | mysql -uroot zabbix -p123456


配置zabbix-server

vi /etc/zabbix/zabbix_server.conf

DBHost=localhost(指定的ip,本机为内网。其他为公网)

DBName=zabbix

DBUser=zabbix

DBPassword=123456     (zabbix数据库密码一致)

cat /etc/zabbix/zabbix_server.conf | grep -v ^#| grep -v ^$    (过滤#与空行的)

systemctl start zabbix-server

systemctl enable zabbix-server


更改时区

vi /etc/httpd/conf.d/zabbix.conf

php_value date.timezone Asia/Shanghai

systemctl start httpd

systemctl enable httpd

防火墙(在官网设置,在主机内可跳过)

firewall-cmd --permannet -add-service=http(开启http端口,可直接写http)

firewall-cmd --reload

firewall-cmd --list-all


vi /etc/chrony.conf

server cn.ntp.org.cn iburst(注释其他4个时间server)

systemctl start chronyd

systemctl enable chronyd

timedatectl(查看是否同步,同步为yes)


访问网站

http://ip/zabbix/

默认用户名:Admin

默认密码  :zabbix


二、Web乱码问题,用winscp上传本地电脑C:\Windows\Fonts的   simkai.ttf

find / -name graphfont.ttf 直接找到zabbix(linux)字体文件夹


cd /usr/share/zabbix/fonts/

rm -f /etc/alternatives/zabbix-web-font

ln -s /usr/share/zabbix/fonts/simkai.ttf  /etc/alternatives/zabbix-web-font

systemctl restart zabbix-server



安装zabbix_agent客户端

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

yum install -yzabbix-agent zabbix-sender

设置映射

vi /etc/hosts #写入公网和对应的虚拟机名字

服务端公网IP server

管理端公网ip 214agent


vi/etc/zabbix/zabbix_agentd.conf

Server=$zabbix_server_ip(zabbix_server服务端的内网ip,有些会报错)


firewall-cmd –permanent–add-port=10050/tcp

firewall-cmd –reload

添加linux主机

添加群组(群组中模板可共用,就不用重新添加监控项)

我自己创建的模板

成功为绿色

添加监控项

https://www.zabbix.com/documentation/4.2/manual/config/items/itemtypes/zabbix_agent(键值参考)

 

键值使用可参考zabbix官网

 

传参

在agent写入绝对路径的脚本

UserParameter=Meminfo[*],/usr/bin/cat /proc/meminfo|grep $1|awk '{print $$2}'

在server中用zabbix_get命令执行测试,命令可运行,无报错,查看结果正常

在web界面找到写入参数的agent的主机,去创建监控项

写入想查的项 例如:Meminfo[Buffers]  Meminfo[MemFree]等。

查出来是没有单位的

find / -name func.inc.php

cat /usr/share/zabbix/include/func.inc.php |grep blackList

在$ blackList中加入单位,注意格式逗号隔开

邮件报警系统

流程:触发器----动作----报警媒介

创建触发器

创建报警媒介(我用的163这个是配置发送邮箱)

再配置接收人的邮箱

创建动作

 

这个在网上截取的,只改前面的正文

操作”里的

告警主机:{HOSTNAME1}

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

告警等级:{TRIGGER.SEVERITY}

告警信息:{TRIGGER.NAME}

告警项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件  ID:{EVENT.ID}

恢复操作

恢复主机:{HOSTNAME1}

恢复时间:{EVENT.DATE} {EVENT.RECOVERY.TIME}

恢复等级:{TRIGGER.SEVERITY}

恢复信息:{TRIGGER.NAME}

恢复项目:{TRIGGER.KEY1}

问题详情:{ITEM.NAME}:{ITEM.VALUE}

当前状态:{TRIGGER.STATUS}:{ITEM.VALUE1}

事件  ID:{EVENT.ID}


添加完成后,开始测试,写入代码在agent中

dd if=/dev/zero of=/tmp/zabbix bs=1G count=25

/dev/zero—传字符设备

/tmp/zabbix:到这个临时文件

bs=1G:字符产生的每个文件大小为1G

count=25:数量25个

 

删除:

直接删除文件

rm –rf /tmp/zabbix

若没有恢复就kill掉进程

查看结果

 

 

企业微信报警(要自己去注册,比较简单 地址:https://work.weixin.qq.com

配置环境

创建应用:1、上传一张图片 2、写入应用名称

记住3个值

Corpid(企业ID)     :ww5ee*************

Secret                       :eHn5mdONdjckh**********************

Agentid                       :1000002                        

在server修改拥有人与拥有组

chown -R zabbix:zabbix/usr/lib/zabbix/alertscripts/

 

在网上找的python脚本写入alertscripts(.py结尾,如wechat.py)

脚本内容(修改圈起部分)

 

#!/usr/bin/python2.7

#_*_coding:utf-8 _*_


import requests,sys,json

import urllib3

urllib3.disable_warnings()


reload(sys)

sys.setdefaultencoding('utf-8')


defGetTokenFromServer(Corpid,Secret):

    Url ="https://qyapi.weixin.qq.com/cgi-bin/gettoken"

    Data = {

        "corpid":Corpid,

        "corpsecret":Secret

    }

    r = requests.get(url=Url,params=Data,verify=False)

    print(r.json())

    if r.json()['errcode'] != 0:

        return False

    else:

        Token = r.json()['access_token']

        file =open('/tmp/zabbix_wechat_config.json', 'w')

        file.write(r.text)

        file.close()

        return Token


defSendMessage(User,Agentid,Subject,Content):

    try:

        file =open('/tmp/zabbix_wechat_config.json', 'r')

        Token = json.load(file)['access_token']

        file.close()

    except:

        Token = GetTokenFromServer(Corpid,Secret)


    n = 0

    Url ="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" %Token

    Data = {

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

        #"totag": Tagid,                                #企业号中的标签id,群发使用(推荐)

        #"toparty": Partyid,                             #企业号中的部门id,群发时使用。

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

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

        "text": {

            "content": Subject + '\n'+ Content

        },

        "safe": "0"

    }

    r =requests.post(url=Url,data=json.dumps(Data),verify=False)

    while r.json()['errcode'] != 0 and n <4:

        n+=1

        Token = GetTokenFromServer(Corpid,Secret)

        if Token:

            Url ="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=%s" %Token

            r =requests.post(url=Url,data=json.dumps(Data),verify=False)

            print(r.json())


    return r.json()



if __name__ == '__main__':

    User = sys.argv[1]                                                                 # zabbix传过来的第一个参数

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

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


   Corpid ="ww5ee**************"                                                       #CorpID是企业号的标识

    Secret = "eHn5mdONdjc******************"                              # Secret是管理组凭证密钥

    #Tagid = "1"                                                                       #通讯录标签ID

    Agentid ="1000002"                                                                #应用ID

    Partyid = "2"                                                                     #部门ID


    Status =SendMessage(User,Agentid,Subject,Content)

    print Status



if __name__ =='__main__':

    User = sys.argv[1]                                                                 # zabbix传过来的第一个参数

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

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


    Corpid = "ww5ee8*************"                                                       #CorpID是企业号的标识

    Secret = "eHn5mdONdj*******************"                              # Secret是管理组凭证密钥

    #Tagid = "1"                                                                       #通讯录标签ID

    Agentid = "1000002"                                                                #应用ID

    #Partyid = "1"                                                        #部门ID(点击 部门后面的省略号可查看)


    Status =SendMessage(User,Agentid,Subject,Content)

print Status


 

 

下载simplejson压缩包

可以在网址搜索包名 https://pypi.org/

 

wget https://files.pythonhosted.org/packages/98/87/a7b98aa9256c8843f92878966dc3d8d914c14aad97e2c5ce4798d5743e07/simplejson-3.17.0.tar.gz

 

解压:tar -zxvf

simplejson-3.17.0.tar.gz

进目录安装

cd simplejson-3.17.0

python setup.py build

python setup.py install

 

安装request,否则运行会报错,还要安装额外的两个工具

wget https://pypi.python.org/packages/source/s/setuptools/setuptools-12.0.3.tar.gz

tar -xvf setuptools-12.0.3.tar.gz

cd setuptools-12.0.3

python setup.py install

wget https://files.pythonhosted.org/packages/ce/ea/9b445176a65ae4ba22dce1d93e4b5fe182f953df71a145f557cffaffc1bf/pip-19.3.1.tar.gz

tar -xvf pip-19.3.1.tar.gz

cd pip-19.3.1

python setup.py install

pip install requests

 

运行测试

/usr/lib/zabbix/alertscripts/wechat.py chenyuexiang zabbix "test"


测试成功

开始配置触发器,和邮件配置差不多

 

创建用户

创建动作

创建报警媒介

写入宏定义语言:

{ALERT.SENDTO} (收件人)

{ALERT.SUBJECT}   (标题)

{ALERT.MESSAGE}    (内容)

利用ping提高入口流量

ping -n 1000 -l 65500 agetn_ip

 

 

 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • # 一度蜜v3.0协议 --- # 交互协议 [TOC] ## 协议说明 ### 请求参数 下表列出了v3.0版协...
    c5e350bc5b40阅读 672评论 0 0
  • width: 65%;border: 1px solid #ddd;outline: 1300px solid #...
    邵胜奥阅读 4,894评论 0 1
  • AFN发送网络请求,后台要数组参数。google后发现原来AFN 提交array参数的时候是将参数名转为了...&...
    Roader阅读 197评论 0 0
  • 摘要:Zabbix可以通过多种方式把告警信息发送到指定人,常用的有邮件,短信报警方式,但是越来越多的企业开始使用z...
    think_lonely阅读 4,931评论 0 8
  • 文:许大果 她抬起头,发现天上有个黑色的物体坠落下来,在视线里从一个黑点渐渐放大,慢慢呈现出模样,似乎是一个黑背包...
    许大果阅读 262评论 0 2