linux下安装zabbix服务器shell脚本-添加主机-邮件监控报警zabbix-自动化运维

时间:2022-07-25
本文章向大家介绍linux下安装zabbix服务器shell脚本-添加主机-邮件监控报警zabbix-自动化运维,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
1.手动安装,2.脚本自动安装
 1.手动安装
yum install -y ntpdate                  # 安装时间工具
timedatectl set-timezone Asia/Shanghai
                                                        # 设置时区:亚洲/上海
systemctl restart ntpdate               # 重新启动ntp
systemctl enable ntpdate                # 添加开机启动; system [ˈsɪstəm] 系统; enable [ɛˈnebəl] 启动;  
cat /etc/redhat-release                         # 查看系统版本
yum install -y wget                             # 下载工具
rpm -Uvh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
                                                        # -U            upgrade [ʌpˈɡreɪd] 改进 
                                                        # -v            verbose [vəːˈbəʊs] 沉长的;provide more detailed output   [prəˈvʌɪd] [mɔr] [ˈdiːteɪld]  [ˈaʊtpʊt] 提供更详细的输出
                                                        # -h            hash [haʃ] 在...什么(打撒,混杂);print hash marks as package installs  [mɑːks]标记 [ˈpakɪdʒ] [ɪnˈstɔːl]安装包 ;在软件包安装时打印散列标记
wget -rndp /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
                                                        # wget -O 下载文件到指定目录;此处是替换原有文件
systemctl stop firewalld                        # 关闭防火墙 firewall  [ˈfaɪrwɑl]
setenforce 0                                    # 临时关闭selinux;永久关闭:sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config ; reboot
yum -y install httpd mariadb mariadb-server php php-mysql php-bcmath php-mbstring zabbix-server-mysql zabbix-web-mysql zabbix-agent
                                                                                # 安装mariadb  等软件
sed -i s/index.html/index.php/g /etc/httpd/conf/httpd.conf
                                                                                # 修改默认访问文件;  find / -name "httpd.conf" | grep "etc"  # 查找 etc目录下的这个文件
                                                                                # httpd.conf 修改 index 添加运用:x-httpd-php .php  去过滤grep Add 
cat -n `find / -name "httpd.conf" | grep etc` | grep "AddType application" 
                                                                                # cat -n 查看文件显示行号;`find / -name "httpd.conf" | grep etc` 反单引号是执行结果为一个整体变量;find 查找文件路径
                                                                                # grep 查找
sed -i "272 aAddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf
                                                                                # 添加运用的位置 ; a 是在指定272行下面插入字符
                                                                                # 由上个查看行号有四行,任意位置可以添加,我这里是272行
cat -n /etc/php.ini | grep "date.timezone"              # 查看时间区域行号;我这里是878行
sed -i "878 adate.timezone = Asia/Shanghai" /etc/php.ini 
systemctl start mariadb                 # 重启mariadb数据库
systemctl enable mariadb                # enable [ɛˈnebəl] 启动;开机启动
mysql                                           # 默认没有密码,直接mysql 进入数据库;设置密码后需要 mysql -uroot -p密码  进入数据库
set password = password('eisccn') ;       # 设置密码
create database zabbix character set utf8 collate utf8_bin;
                                                                        # create  [kriˈet] 创建 ;database [ˈdædəˌbeɪs] 数据库;character [ˈkɛrɪktər] 字符,设置字符类型,collate [kəˈlet] 核对字符
                                                                        # 登陆数据库,创建库编码为utf8
grant all on zabbix.* to 'zabbix'@'localhost' identified by '123'
                                                                        # grant [grænt] 授权;all 所有,on 在...上;    授予zabbix账户在 localhost [ləʊkæl'həʊst] 本机的所有权限; identified [aɪ'dentɪfaɪd] 识别(设置密码)
                                                                        # identified [aɪ'dentɪfaɪd] 标识;by 由 123密码:设置zabbix 的 DBPassword
                                                                        # 123 是密码,需要单引号,数据库账户和本机需要
find / -name "create.sql.gz"                            # 查找数据库文件路径
zcat /usr/share/doc/zabbix-server-mysql-4.4.10/create.sql.gz | mysql -uzabbix -p123 zabbix
                                                                        # 将查到的文件导入数据库账户 zabbix 下的库名zabbix下
cat -n /etc/zabbix/zabbix_server.conf | grep DBPassword
                                                                        # 查看到是124行
sed -i "$NRuser aDBPassword=123" /etc/zabbix/zabbix_server.conf
                                                                        # 配置密码
/usr/bin/systemctl restart httpd zabbix-server zabbix-agent
/usr/bin/systemctl enable httpd zabbix-server zabbix-agent
                                                                        # enable [ɛˈnebəl] 启动; 开机启动
#################################添加主机####################################
rpm -Uvh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
yum list                                                                # 更新yum
yum -y install zabbix-agent
read -p "请输入Zabbix-serve的ip地址:" server_IP
sed -i s/127.0.0.1/$server_IP/g /etc/zabbix/zabbix_agentd.conf
 /bin/systemctl restart zabbix-agent.service
网页操作:
ZABBIX 顶部导航栏 ---> 配置 --- 主机群组 --- 创建主机群组 --- 定义名称:ceshi  --- 点击添加
ZABBIX 顶部导航栏 ---> 配置 --- 主机 --- 创建主机 ---
主机名称:zabbix_ceshi 
群组: 选择刚创建的 ceshi
agent代理程序的接口: 被监控的主机IP地址, 端口10050  保存
ZABBIX 顶部导航栏 ---> 配置 --- 主机 --- 模版 --- 选择模板 Template OS Linux by Zabbix agent --- 更新
ps aux | grep zabbix                    # 查看服务是否启动
yum install -y telnet                   # 端口测试工具
telnet x.x.x.x 10050                            # 测试端口是否联通
再到首页查看状态
##########################################邮件报警ping监控###################################################
systemctl stop firewalld                        # 关闭防火墙
yum install fping -y                    # 在server和proxy端均安装fping
FpingLocation=/usr/sbin/fping   # 在server和proxy端的配置文件里面打开注释
telnet hc1.ssh.gs 10050                 # ping 端口
ZABBIX 顶部导航栏 ---> 配置 --- 主机群组 --- 点击刚刚创建的用户组里的用户zabbix_cesshi --- 监控项 --- 创建监控项
名称:ping test
类型:简单检查
键值:icmpping[43.225.156.172,2,1000,68,3000]
主机接口:默认
信息类型:数字
更新间隔:30s
自定义时间间隔:类型:灵活    间隔:50s    期间:默认
历史数据保留时长:90d
储存时间 :365d
查看值:不变
应用集:无
保存
ZABBIX 顶部导航栏 ---> 配置 --- 主机群组 --- 点击刚刚创建的用户组里的用户zabbix_cesshi --- 监控项 --- 触发器 --- 创建触发器
名称:fping
严重性:警告
表达式:选择 ping test
保存
ZABBIX 顶部导航栏 ---> 配置 --- 主机群组 --- 点击刚刚创建的用户组里的用户zabbix_cesshi --- 图形 --- 创建图形
名称:fping
监控项 --- 添加 --- ping test
添加保存
##########################################实现邮件报警功能 server 端口配置###################################################
yum install mailx -y                                            # 安装linux邮件工具,在控制节点:server 端进行操作; agent 是被监控端
vi /etc/mail.rc
set bsdcompat
set sendcharsets=iso-8859-1,utf-8
set from=xitong-mail@eisc.cn
set smtp=smtp://smtp.exmail.qq.com
set smtp-auth-user=xitong-mail@eisc.cn
set smtp-auth-password=xxxxxx
set smtp-auth=login
                                        # 编辑邮件登陆配置信息
echo "这是一封测试邮件" | mail -s "zabbix" xxx@eisc.cn
                                                                        # 测试邮件发送是否正常
mkdir -p /data/zabbix_server/data/alertscripts  # 创建发邮件发警的脚本所在目录
zabbix=`find / -name "zabbix_server.conf"`              # 查找zabbix配置文件目录,将结果赋值给zabbix变量
cat -n $zabbix | grep "AlertScriptsPath"                        # 查看需要更改的位置
sed -i "517 s/AlertScriptsPath.*/AlertScriptsPath=/data/zabbix_server/data/alertscripts/g" $zabbix
                                                                                # 517 指定517行的内容进行修改
                                                                                # sed 修改, 将AlertScriptsPath.*  后面的所有内容修改为:AlertScriptsPath=/data/zabbix_server/data/alertscripts   特殊符号 /,用转译 
systemctl restart zabbix-server.service                 # 重启服务

vi /data/zabbix_server/data/alertscripts/mailx.sh       # 编写发邮件脚本
#!/bin/bash
#echo "$3" | mail -s "$2" "$1"
FILE=/tmp/mailtmp${RANDOM}.txt
touch $FILE
echo "$3" >$FILE
dos2unix -k $FILE
mailx -v -s "$2" "$1" < $FILE
rm -rf $FILE
chmod +x /data/zabbix_server/data/alertscripts/mailx.sh
chown zabbix:zabbix /data/zabbix_server/data/alertscripts/mailx.sh
                                                                                # 脚本增加执行权限
sudo -u zabbix /data/zabbix_server/data/alertscripts/mailx.sh xxx@eisc.cn "zabbix alert" "/etc/passwd is changed"
                                                                                # 测试一封邮件
# zabbix页面配置web
ZABBIX 顶部导航栏 ---> 管理 ---> 报警媒介类型 ---> 创建媒体类型 ---> 
名称:agent 报警器
类型:脚本
脚本名称:mailx.sh
脚本参数(增加三个):
{ALERT.SENDTO}
{ALERT.SUBJECT}
{ALERT.MESSAGE}
# 创建用户 email 
导航栏 --- 管理 --- 用户 --- 右上角创建用户 --- 
别名:email 
选择群组: Zabbix administrators
密码:aaaassss
保存
# 创建用户组
导航栏 --- 管理 --- 用户群组 --- 右上角创建用户群组
组名:emailgroup
用户(点击选择):email 
再点击二级栏目的权限为读写
保存
# 配置用户报警媒介:
导航栏 --- 管理 --- 报警媒介类型 --- 创建媒体类型 --- 类型选择脚本
名称:Email脚本
类型:脚本
脚本名称:mail.sh
# 点击添加,保存
# alert [əˈlərt] 报警 ;   to send   [sɛnd tu] 发送到 ;  message  [ˈmɛsɪdʒ] 消息
#用户配置 
ZABBIX 顶部导航栏 ---> 管理 --->  用户 ---> Admin ---> 报警媒介 ---> 添加 ---> 
类型:agent 报警器
接受人: xxx@eisc.cn
启用时间默认
如果存在严重性则使用:全选
勾选已启用
点击添加
# 配置动作
ZABBIX 顶部导航栏 ---> 配置 --->  动作 ---> 创建动作 
名称: tcping
新的触发条件:  主机    等于             test_centos
选择后,再点击已启用上面的【添加】
再点击【操作】
暂停操作以制止问题
操作【新的】
发送到用户群组:【添加】【emailgroup】   【zabbix administrator】
发送到用户: 【admin】 【email】
点击蓝色【添加】上面的【添加】
再点击【恢复操作】
操作【新的】
发送到用户群组:【添加】【emailgroup】   【zabbix administrator】
发送到用户: 【admin】 【email】
点击蓝色【添加】上面的【添加】
再点击下已启用下面的【添加】 总添加完成
ZABBIX 顶部导航栏 ---> 管理 --- 用户 --- Admin --- 报警媒介 --- 添加 : 填写收件人:xxx@eisc.cn
 2.脚本安装
#!/bin/bash
###################check network###################
echo '正在检测网络是否和zabbix官方通畅......'
ping -c 2 www.zabbix.com > /dev/null            # 将ping -c 2  拼两次的消息结果重定向到空洞/dev/null,清除消息记录
if [ $? != 0 ];then                                             # $? 是上一个程序执行是否成功的标志,如果执行成功则$? 为0,否则 不为0
 echo "请检查网络!"
 exit                                                                   # 运行到此情况(网络异常ping不通);就全局退出脚本 [ˈɛgzɪt] exit 出口
else
 echo "网络正常!"                                              # 正常情况不仅仅打印一句话,然后继续往下执行
fi
###################set yum#################################
yum install -y ntpdate
ntpdate -u cn.pool.ntp.org
timedatectl set-timezone Asia/Shanghai  # 
systemctl start ntpd                                    # start [stɑrt] 开始;开始执行
systemctl enable ntpd                                   # enable [ɛˈnebəl] 启动;加入开启启动
#时间矫正
rm -rf /var/run/yum.pid                                 # yum.pid 作用:防止启动多个进程副本;此处不需要
yum -y install wget
system=`cat /etc/redhat-release | awk -F "." '{print $1}'`
                                                                        # release [riˈlis] 发布; system [ˈsɪstəm] 系统
                                                                        # 查看系统版本,awk字段处理以点为分隔符:打印第一列;将结果赋值给变量 system
if [ "$system" == 'CentOS Linux release 7' ];then
                                                                        # if 判断变量 字符串绝对等于 指定字符串,then 然后执行
    rpm -Uvh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
                                                                        # U更新,升级rpm ;v表示显示安装过程,h表示显示进度
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
                                                                        # wget -O 下载文件到指定目录;此处是替换原有文件
    systemctl stop firewalld                            # 关闭防火墙 firewall  [ˈfaɪrwɑl]
setenforce 0                                                    # 临时关闭selinux
sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
                                                                        #永久关闭selinux ; disabled [dɪˈsebəld] 废除;  config [kən'fɪg] 配置,设置
elif [ "$system" == 'CentOS release 6' ];then
    wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
                                                                        # base [bes] 基地;mirror [ˈmirəz] 镜像,镜子
    rpm -Uvh http://repo.zabbix.com/zabbix/4.4/rhel/7/x86_64/zabbix-release-4.4-1.el7.noarch.rpm
    service iptables stop
setenforce 0                                                    # 临时关闭selinux
sed -i "s/SELINUX=.*/SELINUX=disabled/g" /etc/selinux/config
                                                                        #永久关闭selinux ; disabled [dɪˈsebəld] 废除;  config [kən'fɪg] 配置,设置
fi
##################install###############################
eth=`ip a| grep "BROADCAST" | awk -F ":" 'NR==1{print $2}' | sed "s/ //g"` ; echo "网卡名为:"$eth ;
                                                                                 # 命令 ip a 查看网卡 过滤;broadcast  [ˈbrɔːdkɑːst] >广播;字段的行
                                                                                 # awk -F ":" 以冒号为分隔符 ; 选择第一行,第二列,sed删除空格
                                                                                # 符号  ; 分号表示第一条命令结束,第二条开始
ethCatalog=$(find / -name "*$eth" | grep "/etc/" | sed "s/ //g" ) ;  echo "网卡路径为: "  $ethCatalog
                                                                                # catalog [ˈkætəlɔg] 目录
                                                                                # find 查找网卡名称的路径,grep 过滤/etc 目录下网卡名称。sed删除空格
ip=$(cat $ethCatalog | grep IPADDR | awk -F "=" 'NR==1{print $2}' | sed "s/ //g") ; echo "IP地址为: " $ip
                                                                                # 查看网卡文件,过滤IPADDR的行,awk -F"=" 分隔符是冒号,打印第一行第二列
sleep 5                                                                         # 等待5秒钟;sleep [slip] 睡眠
server(){
yum -y install httpd mariadb mariadb-server php php-mysql php-bcmath php-mbstring
yum -y install zabbix-server-mysql zabbix-web-mysql zabbix-agent
                                                                                # 安装mariadb  等软件
sed -i s/index.html/index.php/g /etc/httpd/conf/httpd.conf
                                                                                # 修改默认访问文件
#######################修改配置文件##################
# sed -i "N;286iAddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf
# sed -i "N;880idate.timezone = Asia/Shanghai" /etc/php.ini
NRhttpd=$(cat -n /etc/httpd/conf/httpd.conf | grep "AddType application/x-gzip .gz .tgz" | awk -F" " '{print $1}' | sed "s/ //g")
                                # add type  [æd] [taɪp] 添加类型; application [ˌæpləˈkeʃən] 运用;
                                # cat -n 查看文件内容并显示行号
                                # grep 匹配字符串所在行的整行内容
                                # awk -F" " 字段处理指定分隔符为空格,打印第一列;删除空格
echo "根据字符串查找的文本中的行号:"$NR
sed -i "/AddType application/x-httpd-php .php/d" /etc/httpd/conf/httpd.conf
                                # 在写入前,先删除将要插入的字符串,保证不会重复插入
sed -i "$NRhttpd aAddType application/x-httpd-php .php" /etc/httpd/conf/httpd.conf
                                # $NR a  根据查找到行号,的下一行插入字符串
                                # i  是上一行插入字符串
NRdate=`cat -n /etc/php.ini | grep ";date.timezone =" | awk -F" " '{print $1}' | sed "s/ //g"` ; echo $NRdate
sed -i "/Asia/Shanghai/d" /etc/php.ini
sed -i "$NRdate adate.timezone = Asia/Shanghai" /etc/php.ini 
                                # 其中符号 ;  表示注释符号。
####################################################
/usr/bin/systemctl start mariadb                        # 重启mariadb数据库
/usr/bin/systemctl enable mariadb               # enable [ɛˈnebəl] 启动;开机启动
mysql -e "set password = password('WWWeisccn111@#')"
                                                                        # 进入数据库设置密码
mysql -uroot -pWWWeisccn111@# -e "create database zabbix character set utf8 collate utf8_bin;"
                                                                        # create  [kriˈet] 创建 ;database [ˈdædəˌbeɪs] 数据库;character [ˈkɛrɪktər] 字符,设置字符类型,collate [kəˈlet] 核对字符
                                                                        # 登陆数据库,创建库编码为utf8
mysql -uroot -pWWWeisccn111@# -e "grant all on zabbix.* to 'zabbix'@'localhost' identified by '123'"
                                                                        # grant [grænt] 授权;all 所有,on 在...上;    授予zabbix账户在 localhost [ləʊkæl'həʊst] 本机的所有权限; identified [aɪ'dentɪfaɪd] 识别(设置密码)
                                                                        # identified [aɪ'dentɪfaɪd] 标识;by 由 123密码:设置zabbix 的 DBPassword
                                                                        # 123 是密码,需要单引号,数据库账户和本机需要
# 此处已经修改bugfind查看数据库文件
createmysql=$(find / -name "create.sql.gz") ; 
echo "$createmysql 
数据库文件导入中,请耐心等待!"
                                                                        # 查找文件路径并打印
/usr/bin/zcat $createmysql | mysql -uzabbix -p123 zabbix
                                                                        # 导入数据库,登陆数据,用户名zabbix 密码123,并且进入数据库zabbix
                                                                        # zcat 查看压缩包的文件,管道到登陆数据库里面去执行
# sed -i "N;110iDBPassword=123" /etc/zabbix/zabbix_server.conf  # 配置zabbix密码
NRuser=`cat -n /etc/zabbix/zabbix_server.conf | grep "DBUser=zabbix" |awk '{print $1}' | sed "s/ //g"` ; echo $NRuser
sed -i "/DBPassword=123/d" /etc/zabbix/zabbix_server.conf
sed -i "$NRuser aDBPassword=123" /etc/zabbix/zabbix_server.conf
/usr/bin/systemctl restart httpd zabbix-server zabbix-agent
/usr/bin/systemctl enable httpd zabbix-server zabbix-agent
                                                                        # enable [ɛˈnebəl] 启动; 开机启动
echo "请用浏览器访问:http://$ip/zabbix
安装配置:
数据库名:zabbix
数据库用户:zabbix
密码:123
登陆账户/密码:Admin/zabbix"
}
agent(){
yum -y install zabbix-agent
read -p "请输入Zabbix-serve的ip地址:" server_IP
sed -i s/127.0.0.1/$server_IP/g /etc/zabbix/zabbix_agentd.conf
 /bin/systemctl restart zabbix-agent.service
}
##################install menu###########################
MYDATE=`date +%d/%m/%y`                 # 定义一个时间变量:格式化字符为:十进制日期,月份,年份抹除100
THIS_HOST=`hostname -s`
USER=`whoami`
while :
do
  tput clear
  echo "
# cat 与echo 相似,这里打印显示一段话;由 aMAYDAY  开始,也由它来结束;
---------------------------------------------------------
User:$USER            Host:$THIS_HOST        Date:$MYDATE
# cat 这里直接打印字符串和变量的值
---------------------------------------------------------
            1:安装 zabbix-server和zabbix-agent
            2:只安装 zabbix-agent
            H:帮助
            Q:退出
---------------------------------------------------------
"                                                       # 结束打印标记
echo -e -n "tYour Choice [1,2,Q]>"             # -e 开启特殊字符转换 t上一行换行;-n 它的下一行不换行打印;
read CHOICE                                                     # 紧接着上一行的打印字符串,接着让用户输入信息,将输入信息写入变量 $CHOICE
  case $CHOICE in                                               # 判断变量是一下情形
    1) server                                                   # 为 1 执行 server 函数
       ;;
    2) agent
       ;;
    3) who
       ;;
    H|h)                                                        # 输入为 H 则打印一段话
       echo "
          Zabbix-server是服务端,Zabbix-agent是客户端!
"                                               # 打印结束,MAYDAY 他为开始,也以他为结束
       ;;
    Q|q) exit 0                                         # 输入Q 退出
    ;;
    *)  echo -e "t07 输入有有误!"   # 其他所有情况,提示
       ;;
  esac                                                  # case 判断结束
echo -e -n "t按任意键返回菜单!"
read DUMMY
done
# 脚本执行: yum install -y wget ; rm -rf zabbix.sh ; wget eisc.cn/file/shell/zabbix.sh ; chmod 755 zabbix.sh ; source zabbix.sh