1.关闭防火墙、关闭SELINUX


systemctl stop firewalld.service

setenforce 0


配置mysql源


#下载MySQL源

wget https://dev.mysql.com/get/mysql80-community-release-el7-5.noarch.rpm

#安装依赖环境

yum -y install gcc-c++ mysql-devel net-snmp-devel libevent-devel

#配置MySQL源

yum -y install mysql80-community-release-el7-5.noarch.rpm


下载MySQL和zabbix


#下载zabbix

wget https://cdn.zabbix.com/zabbix/sources/stable/6.0/zabbix-6.0.1.tar.gz

#下载MySQL

wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar


解压并安装下载好的MySQL安装包


#创建MySQL目录

mkdir /usr/local/mysql

#解压MySQL安装包

tar xf mysql-8.0.28-1.el7.x86_64.rpm-bundle.tar -C /usr/local/mysql

#移动到mysql目录

cd /usr/local/mysql/

#RPM方式安装MySQL

rpm -ivh mysql-community-common-8.0.28-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-libs-8.0.28-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-libs-compat-8.0.28-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-client-8.0.28-1.el7.x86_64.rpm --force --nodeps

rpm -ivh mysql-community-server-8.0.28-1.el7.x86_64.rpm --force --nodeps


检查MySQL的个RPM包是否被安装


rpm -qa |grep mysql

#显示如下安装包

mysql-community-server-8.0.28-1.el7.x86_64

mysql-community-libs-compat-8.0.28-1.el7.x86_64

mysql-community-client-plugins-8.0.29-1.el7.x86_64

mysql-community-common-8.0.29-1.el7.x86_64

mysql-community-devel-8.0.29-1.el7.x86_64

mysql-community-common-8.0.28-1.el7.x86_64

mysql-community-libs-8.0.29-1.el7.x86_64

mysql80-community-release-el7-5.noarch

mysql-community-libs-compat-8.0.29-1.el7.x86_64

mysql-community-client-8.0.28-1.el7.x86_64

mysql-community-libs-8.0.28-1.el7.x86_64


启动MySQL并加入开机自启


#启动MySQL

systemctl start mysqld

#MySQL加入开启自启

systemctl enable mysqld



检查MySQL服务是否启动



systemctl status mysqld.service



启动mysql后会初始化 查找mysql密码



cat /var/log/mysqld.log | grep password

2022-06-23T16:15:31.370137Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Dfo5Dm-!fVZG

#密码为:Dfo5Dm-!fVZG



修改MySQL的root密码



#由于MySQL8.0 有密码验证组件,若希望设置简单的密码,需要修改服务验证条件

# 密码检查等级,0/LOW、1/MEDIUM、2/STRONG

set global validate_password.policy=0;

# 密码的最短长度

set global validate_password.length=6;

# 密码至少要包含的小写字母个数和大写字母个数

set global validate_password.mixed_case_count=0;

# 设置密码

mysql -uroot -p

ALTER USER 'root'@'localhost' IDENTIFIED BY 'Resset@)@@2022';



创建zabbix库



#创建zabbix库

create database zabbix character set utf8 collate utf8_bin;

#创建zabbix用户

create user zabbix@localhost identified by 'Resset@)@@123';

#授权

grant all privileges on zabbix.* to zabbix@localhost;



安装zabbix 6.1



#创建zabbix目录

mkdir /usr/local/zabbix

#解压

tar -zxvf zabbix-6.0.1.tar.gz -C /usr/local/zabbix/



创建用户账户



#创建zabbix组

groupadd zabbix

#创建zabbix用户

useradd -g zabbix -M -s /sbin/nologin zabbix



在zabbix目录中编译安装



#移动到zabbix目录

cd /usr/local/zabbix/zabbix-6.0.1/

#编译

./configure --prefix=/usr/local/zabbix/ --enable-server --enable-agent --with-net-snmp --with-mysql

make install



安装PHP




由于CentOS7自带PHP版本为5.6,所以需要安装额外的库,也是remi的库



yum -y install https://rpms.remirepo.net/enterprise/remi-release-7.rpm  

yum -y install yum-utils

yum-config-manager --disable 'remi-php*'

yum-config-manager --enable   remi-php74

yum -y install php php-bcmath php-gd php-xml  php-mbstring php-mysqlnd php-ldap

yum -y install curl-devl libxml2 libxml2-devel






需要修改php参数(网页预配置必要条件)



vim /etc/php.ini

修改post_max_size为16M

修改max_execution_time为300

修改max_input_time为300



配置httpd



移动前端文件至web服务的根目录并授权



cp -r /usr/local/zabbix/zabbix-6.0.1/ui/* /var/www/html/

chown apache:apache /var/www/html -R



导入数据库架构及数据



mysql -uzabbix -p zabbix < /usr/local/zabbix/zabbix-6.0.1/database/mysql/schema.sql

mysql -uzabbix -p zabbix < /usr/local/zabbix/zabbix-6.0.1/database/mysql/images.sql

mysql -uzabbix -p zabbix < /usr/local/zabbix/zabbix-6.0.1/database/mysql/data.sql



修改配置zabbixserver文件数据库密码



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

# DBPassword= 修改为MySQL的zabbix用户密码

DBPassword=Resset@)@@123



开启httpd  zabbix



service httpd start

systemctl enable httpd.service

cd /usr/local/zabbix/sbin/

./zabbix_server



网页验证



http://192.168.0.40/index.php




选择中文,并点击一步




夜莺监控钉钉告警模板_夜莺监控钉钉告警模板


必要条件都已满足,点击下一步


夜莺监控钉钉告警模板_运维_02


DB连接配置


夜莺监控钉钉告警模板_运维_03


夜莺监控钉钉告警模板_centos_04


输入账号密码


夜莺监控钉钉告警模板_夜莺监控钉钉告警模板_05


登录成功


夜莺监控钉钉告警模板_linux_06


监控公司web网页状态并配置钉钉告警


添加监控的网站信息


夜莺监控钉钉告警模板_centos_07


点击创建web场景填写名称和需要监控的URL,添加完后点击更新


夜莺监控钉钉告警模板_centos_08


夜莺监控钉钉告警模板_centos_09


点击检测--主机查看检测情况


夜莺监控钉钉告警模板_运维_10


添加报警媒介类型---创建群聊---右上角点击群设置---智能群助手---开启推送消息---复制保存Webhook连接


夜莺监控钉钉告警模板_linux_11


在加签打钩---复制保存密钥


夜莺监控钉钉告警模板_mysql_12


添加钉钉配置脚本


#创建存放目录

mkdir -p /opt/zabbix/alertscripts

#修改zabbix存放脚本路径

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

AlertScriptsPath=/opt/zabbix/alertscripts


vim /opt/zabbix/alertscripts/dingding.py


#!/usr/bin/env python3

# coding:utf8

import time

import hmac

import hashlib

import base64

import urllib.parse

import requests

import json

import sys





# webhook URL

api_url = 'xxx'                                 ###填写dingdingWebhook连接地址

# secret key

api_secret = 'xxx'                           ###填写加签密钥

# is @all

at_all = True





def get_timestamp_sign():

    timestamp = str(round(time.time() * 1000))

    secret = api_secret

    secret_enc = secret.encode('utf-8')

    string_to_sign = '{}\n{}'.format(timestamp, secret)

    string_to_sign_enc = string_to_sign.encode('utf-8')

    hmac_code = hmac.new(secret_enc, string_to_sign_enc, digestmod=hashlib.sha256).digest()

    sign = urllib.parse.quote_plus(base64.b64encode(hmac_code))

    return timestamp, sign



def get_signed_url():

    timestamp, sign = get_timestamp_sign()

    webhook = api_url + "&timestamp=" + timestamp + "&sign=" + sign

    return webhook



def get_webhook(mode):

    if mode == 0:

        webhook = api_url

    elif mode == 1:

        webhook = get_signed_url()

    else:

        webhook = ""

    return webhook



def get_message(text, user_info):

    message = {

        "msgtype": "text",

        "text": {

            "content": text

        },

        "at": {

            "atMobiles": [

                user_info,

            ],

            "isAtAll": at_all

        }

    }

    return message



def send_ding_message(text, user_info):

    webhook = get_webhook(1)

    header = {

        "Content-Type": "application/json",

        "Charset": "UTF-8"

    }

    message = get_message(text, user_info)

    message_json = json.dumps(message)

    info = requests.post(url=webhook, data=message_json, headers=header).json()

    code = info["errcode"]

    errmsg = info["errmsg"]

    if code == 0:

        print("send success return:%s %s\n" % (code, errmsg))

    else:

        print("send fail return:%s %s\n" % (code, errmsg))

        exit(3)



if __name__ == "__main__":

    text = sys.argv[3]

    user_info = sys.argv[1]

    send_ding_message(text, user_info)


#修改属组和属主

chown -R zabbix:zabbix dingding.py

#添加执行权限

chmod +x dingding.py


测试是否能成功发送测试信息


./dingding.py 13653134215 title 测试



到Zabbix web页面添加报警媒介类型


夜莺监控钉钉告警模板_夜莺监控钉钉告警模板_13


添加告警发送内容


故障{TRIGGER.STATUS},服务器:{HOSTNAME1}发生: {TRIGGER.NAME}故障!


告警主机:{HOSTNAME1}


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


告警等级:{TRIGGER.SEVERITY}


告警信息: {TRIGGER.NAME}


告警项目:{TRIGGER.KEY1}


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


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


夜莺监控钉钉告警模板_linux_14


恢复告警通知内容


恢复{TRIGGER.STATUS}, 服务器:{HOSTNAME1}: {TRIGGER.NAME}已恢复!


告警主机:{HOSTNAME1}


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


告警等级:{TRIGGER.SEVERITY}


告警信息: {TRIGGER.NAME}


告警项目:{TRIGGER.KEY1}


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


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


夜莺监控钉钉告警模板_mysql_15


创建检测web网页的触发器


点击配置---主机---选择触发器


1代表检测故障


0代表检测正常


夜莺监控钉钉告警模板_夜莺监控钉钉告警模板_16


创建动作


夜莺监控钉钉告警模板_centos_17


新建动作---条件选项中点击添加---类型:触发器---触发器:选择刚创建的触发器名称


夜莺监控钉钉告警模板_linux_18


选择故障发送用户和发送方式


夜莺监控钉钉告警模板_mysql_19


选择恢复发送用户和发送方式


夜莺监控钉钉告警模板_linux_20


添加发送账号


夜莺监控钉钉告警模板_linux_21


测试


夜莺监控钉钉告警模板_运维_22


夜莺监控钉钉告警模板_夜莺监控钉钉告警模板_23