阿里云环境迁移记录 - 服务监控及报警

服务监控的方案有很多,譬如naigos,zabbix这种,不但可以监控服务,还可以监控cpu、内存、磁盘、网络流量、服务端口等,关于naigos和zabbix的搭建配置,需要另外篇幅介绍,这里使用服务器自身的定时任务+脚本+邮件功能完成一个简单的监控。

Part1 邮件服务搭建

安装mailx

yum -y install mailx

############################
##qq个人邮箱配置
############################

vim /etc/mail.rc
添加如下配置:

set from=xxxxxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxxxxx@qq.com
set smtp-auth-password=你的 QQ 邮箱授权码 (登录qq邮箱到账户设置中,打开smtp服务时,提示的验证码,此验证码非密码。)
set smtp-auth=login
#set smtp-use-starttls 这里是不需要配置的,很多地方没说明,配置了反而会验证失败,所以我注释掉;
set ssl-verify=ignore
set nss-config-dir=/root/.certs

##创建证书

mkdir -p /root/.certs/
cd /root/.certs/
echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p‘ > ~/.certs/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/qq.crt
certutil -L -d /root/.certs
##认证
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt

#返回如下提示即可:
Notice: Trust flag u is set automatically if the private key is present.

#发送主题为“邮箱测试”,内容为当前目录下 message_fiel.txt 文件内容到 xxxx@qq.com 邮箱。
mailx -s "邮箱测试" xxxx@qq.com < message_file.txt

############################
##qq企业邮箱配置
############################

vim /etc/mail.rc
添加如下配置:

set from=noreply@88gongxiang.com
set smtp=smtps://smtp.exmail.qq.com:465
set smtp-auth-user=noreply@88gongxiang.com
set smtp-auth-password=*****(登录密码,不同于个人邮箱的授权码)
set smtp-auth=login
set ssl-verify=ignore
set nss-config-dir=/etc/pki/nssdb/

cd /etc/pki/nssdb/
#生成证书

echo -n | openssl s_client -connect smtp.qq.com:465 | sed -ne ‘/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p‘ > /etc/pki/nssdb/qq.crt
certutil -A -n "GeoTrust SSL CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/qq.crt
certutil -A -n "GeoTrust Global CA" -t "C,," -d /etc/pki/nssdb/ -i /etc/pki/nssdb/qq.crt
certutil -L -d /etc/pki/nssdb/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i qq.crt #认证

同样,认证完会返回如下提示:
Notice: Trust flag u is set automatically if the private key is present.

##测试
echo "this email come from centos 172.26.27.71"|mail -v -s "mysql check test" weiyonglai@88gongxiang.com

Part2 监控脚本准备

  1. mysql监控脚本

大致想法:mysql监控脚本分别运行在两个实例上,如果当前实例宕机,则重启本机mysql服务,如果其他服务器上的mysql连接不上则邮件通知。

#!/bin/bash

notify_addr=‘weiyonglai@88gongxiang.com,393369540@qq.com‘
error_log="/opt/script/logs/check_mysql.err"

###定义一个简单判断mysql是否可用的函数
function excute_query {
    echo -e "`date "+%F  %H:%M:%S"`    -----checking mysql instance $1 by querying -----" >> ${error_log}
    /usr/local/mysql/bin/mysql -uroot -p88gongxiangMYSQL -h $1 --port 30468 -e "select 1;" 2>> ${error_log}
}

###定义无法执行查询,且mysql服务异常时的处理函数
function service_error {
    echo -e "`date "+%F  %H:%M:%S"`    -----mysql service error,notify manager now-----" >> ${error_log}
    systemctl restart mysql.service
    echo "$1 无法连接并被重启"|mail -s "MYSQL $1 实例正在被重启, 请及时登录查看状态!" ${notify_addr} 2>> ${error_log}
    echo -e "\n---------------------------------------------------------\n" >> ${error_log}
}

###定义无法执行查询,但mysql服务正常的处理函数
function query_error {
    echo -e "`date "+%F  %H:%M:%S"`    -----mysql instance $1 query error, retry after 30s-----" >> ${error_log}
    sleep 30
    excute_query $1
    if [ $? -ne 0 ];then
        echo -e "`date "+%F  %H:%M:%S"`    -----mysql instance $1 still can‘t execute query-----" >> ${error_log}
        echo "mysql isntance $1 is down"|mail -s "MYSQL $1 无法连接查询, 请及时处理!from(172.26.27.70)" ${notify_addr} 2>> ${error_log}
    else
        echo -e "`date "+%F  %H:%M:%S"`    -----mysql instance $1 query ok after 10s-----" >> ${error_log}
        echo -e "\n---------------------------------------------------------\n" >> ${error_log}
    fi
}

###监控本机mysql状态
excute_query 172.26.27.70
if [ $? -ne 0 ];then
     systemctl status mysql.service  &>/dev/null
    if [ $? -ne 0 ];then
        service_error 172.26.27.70
    else
        query_error 172.26.27.70
    fi
  else
     echo -e "\n-----------mysql instance 172.26.27.70 is ok for query-------------\n" >> ${error_log}
fi
###监控备机mysql状态
excute_query 172.26.27.71
if [ $? -ne 0 ];then
      query_error 172.26.27.71
    else
     echo -e "\n-----------mysql instance 172.26.27.71 is ok for query-------------\n" >> ${error_log}
fi
  1. mongo监控脚本

大致思想:通过mongo命令登录或者mongostat判断节点是否正常运行。

notify_addr=‘weiyonglai@88gongxiang.com,393369540@qq.com‘
error_log="/opt/script/logs/check_mongo.err"

###定义一个简单判断mysql是否可用的函数
function connect_db {
    echo -e "`date "+%F  %H:%M:%S"`    -----checking mongo instance $1 by login -----" >> ${error_log}
    echo "db.serverStatus().mem" | /usr/local/mongodb/bin/mongo admin -uroot -p88gongxiangds --host $1 --port 20467  2>> ${error_log}
}

function replication_stat_query {
    echo -e "`date "+%F  %H:%M:%S"`    -----checking mongo instance $1 by mongostat -----" >> ${error_log}
    /usr/local/mongodb/bin/mongostat --uri=mongodb://suroot:88gongxiangds@$1:20467/admin  2>> ${error_log}
}

###定义无法执行查询,且mysql服务异常时的处理函数
function service_error {
    echo -e "`date "+%F  %H:%M:%S"`    -----mongo service $1 error,notify manager now-----" >> ${error_log}
    ##/usr/local/mongo/bin/mongod -f /etc/mongo.conf --shutdown
    echo "$1 mongo连接失败,请及时处理"|mail -s "Mongo $1 实例无法连接, 请及时登录处理!from(172.26.27.70)" ${notify_addr} 2>> ${error_log}
    echo -e "\n---------------------------------------------------------\n" >> ${error_log}
}

###监控本机mongo node 状态
function monitor_node {
connect_db $1
if [ $? -ne 0 ];then
    service_error $1
 #else
 #replication_stat_query $1
 #if [ $? -ne 0 ];then
 #service_error $1
 #else
 #echo -e "\n-----------mongostat of node $1 is ok! -------------\n" >> ${error_log}
           echo -e "\n-----------mongo connection to  node $1 is ok! -------------\n" >> ${error_log}
 #fi
fi
}
###监控本机mongo node 状态
monitor_node 172.26.27.70
monitor_node 172.26.27.71
monitor_node 172.26.27.72
  1. redis监控脚本

大致思想: 通过redis-cli登录并检索clusterinfo是否enable来判断该节点及集群是否正常工作。

#!/bin/bash

notify_addr=‘weiyonglai@88gongxiang.com,393369540@qq.com‘
error_log="/opt/script/logs/check_redis.err"

###定义无法执行查询,且mysql服务异常时的处理函数
function service_error {
    echo -e "`date "+%F  %H:%M:%S"`    -----redis service $1:$2 error,notify manager now-----" >> ${error_log}
    ##/usr/local/mongo/bin/mongod -f /etc/mongo.conf --shutdown
    echo "$1 redis连接异常,请及时处理"|mail -s "Redis $1:$2 节点连接失败, 请及时登录处理!(from 172.26.27.70)" ${notify_addr} 2>> ${error_log}
    echo -e "\n---------------------------------------------------------\n" >> ${error_log}
}

###监控redis 状态
function monitor_node {
echo -e "`date "+%F  %H:%M:%S"`    -----checking mongo redis  $1:$2 by cli -----" >> ${error_log}
/usr/local/bin/redis-cli -h $1 -p $2 -a 88gongxiangrds info |grep  cluster_enabled
if [ $? -ne 0 ];then
    service_error $1 $2
    echo -e "\n-----------redis connection to  node $1:$2 is ok! -------------\n" >> ${error_log}
fi
}

###监控本机mongo node 状态
monitor_node 172.26.27.70 6239
monitor_node 172.26.27.70 6339
monitor_node 172.26.27.71 6239
monitor_node 172.26.27.71 6339
monitor_node 172.26.27.72 6239
monitor_node 172.26.27.72 6339
  1. rabbitmq监控脚本

通过rabbitmqctl查看集群状态或者节点状态

#!/bin/bash

notify_addr=‘weiyonglai@88gongxiang.com,393369540@qq.com‘
error_log="/opt/script/logs/check_redis.err"

###定义无法执行查询,且mysql服务异常时的处理函数
function service_error {
    echo -e "`date "+%F  %H:%M:%S"`    -----rabbitmq service  error,notify manager now-----" >> ${error_log}
    #ps -ef | grep ^rabbitmq | awk ‘{print $2}‘ | xargs kill -9
    #service rabbitmq-server start
    echo "$1 rabbitmq服务异常, 请及时处理"|mail -s " $1 RabbitMQ服务异常, 请及时登录处理!(from $2)" ${notify_addr} 2>> ${error_log}
    echo -e "\n---------------------------------------------------------\n" >> ${error_log}
}

###监控rabbitmq 状态
function monitor_node {
echo -e "`date "+%F  %H:%M:%S"`    -----checking mongo redis  $1:$2 by cli -----" >> ${error_log}
#/usr/lib/rabbitmq/bin/rabbitmqctl  cluster_status |grep cluster_name
/usr/sbin/rabbitmqctl cluster_status | grep cluster_name

if [ $? -ne 0 ];then
    service_error $1 $2
    echo -e "\n-----------redis connection to  node $1:$2 is ok! -------------\n" >> ${error_log}
fi
}

monitor_node 172.26.27.72 172.26.27.72

Part3 定时任务配置

crontab -e

*/1 * * * *    /opt/script/check_mysql.sh  > /opt/script/logs/cron_result.log 2>&1
*/3 * * * *    /opt/script/check_mongo.sh  > /opt/script/logs/cron_result.log 2>&1
*/5 * * * *    /opt/script/check_redis.sh  > /opt/script/logs/cron_result.log 2>&1
*/5 * * * *    /opt/script/check_rabbitmq.sh  > /opt/script/logs/cron_result.log 2>&1

原文地址:http://blog.51cto.com/10705830/2351870

时间: 2024-08-30 01:41:13

阿里云环境迁移记录 - 服务监控及报警的相关文章

阿里云环境迁移记录

最近公司计划将目前托管在数据中心服务器环境迁移到阿里云,过程中涉及到服务器规划.申请.服务搭建.数据同步以及运维监控,特撰文记录. 下面是服务端环境规划: 我的工作从数据服务组的准备开始,包括如下内容:1. mysql高可用搭建MYSQL高可用 mongo集群搭建 redis集群搭建 rabbitmq搭建 数据迁移方案 分别会用五篇文章记录下,以此迎接2019新年. 原文地址:http://blog.51cto.com/10705830/2351452

阿里云环境迁移记录 - MYSQL高可用搭建

MYSQL高可用方案主要分为两大类,一类是前置管理,一类是后置管理.前置管理的思想是利用各种前置管理工具,动态切换或者分发请求到不同的实例并切换master,如keepalived.MHA.packmaker+Corosync.MySQLProxy等,一般通过暴露VIP将整个MYQL集群隐藏起来,其中Proxy主要用以读写分离.后置管理则是利用共享存储的思想,如NDB方案.由于我们的用户尚不足百万,所以一开始的计划是选择最简单的前置管理模式-双主+keepalived方案,后来因为阿里云停用了V

阿里云环境迁移记录 - Mongo ReplicationSet搭建

mongo集群的搭建,至少需要3个节点,2两个数据节点和1个仲裁节点,所以这里使用三台机器搭建一个包含3节点的replicationSet. 1. 下载解压安装:mkdir -P /opt/installcd /opt/install/wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.0.3.tgz #从远程服务器copy到本地安装目录rsync -avzh root@47.92.212.35:/data/in

阿里云的NoSQL存储服务OTS的应用分析

这篇文章主要介绍了阿里云的NoSQL存储服务OTS的应用分析,OTS作为阿里巴巴开发的NoSQL存储技术服务现已面向用户商业化,需要的朋友可以参考下. 1. 概要  OTS是构建在阿里云飞天分布式系统上的NoSQL存储服务,提供海量结构化数据的存储和实时访问.OTS以实例和表来组织数据,通过自动的数据分区和负载均衡技术,对应用提供规模(数据和访问)的无缝扩展.应用通过调用OTS API/SDK或者操作管理控制台来使用OTS服务.OTS服务具有以下几个主要的特点:  规模可扩展:OTS具备可扩展的

阿里云邮件推送服务

提起邮件服务,最早之前一般自建邮件服务器,需要硬软件和运维的支持,稳定性也难保证,随着云服务的普及邮件推送功能的服务化是趋势,也省钱省事省心. 最早开始用过搜狐邮件服务,阿里云生态现在基本都出现了,我们来尝试一下阿里云的邮件推送服务: 一.阿里云控制台操作 首先在阿里云邮件推送控制台添加域名,然后在自己的dns服务器中添加如下的解析(根据控制台中的“配置”): 一个主机名为aliyundm的TXT记录,用于验证域名所有权 一个主机名为空.值为v=spf1 include:spf1.dm.aliy

zabbix 监控--阿里云主机(Proxy分布式监控)

之前写了zabbix server.client端的配置,但这只能监控局域网内主机的所有状态,那如果是夸网段呢?比如阿里云上的主机如何监控,有人会说 你在阿里上在建立个zabbix不就可以了,我嫌麻烦,哈哈 今天就带大家一起陪尝试通过zabbix proxy代理的方式,进行分布式监控:  一.  zabbix proxy介绍: zabbix proxy 是一个数据收集器,它不计算触发器.不处理事件.不发送报警,只是检查并收集数据,将信息反馈给server端. zabbix proxy监控原理图

【初码干货】使用阿里云邮件推送服务架设自己邮件验证与推送体系

提示:阅读本文需提前了解的相关知识 1.电子邮件协议(http://baike.baidu.com/view/2367542.htm) 2.阿里云邮件推送(https://www.aliyun.com/product/directmail) 3.EDM(电子邮件营销)(http://baike.baidu.com/subview/1212416/8602812.htm) 4.SendCloud邮件服务(http://sendcloud.sohu.com/) 阅读目录结构 引: 一.需求分析 二.

zabbix自动发现window(阿里云),去除多余的监控项

1.问题点: 由于使用zabbix 自动发现去批量添加500台阿里云主机, 导致监控项多大120多项, 其中有大量的报警信息, 都是我不想要的,前期由于量太多, 不敢轻易的去删除,只做个在模板里面删除, 但是发现不管用.2.在模板里面删除不要监控项是多的,想法是对的, 但是操作过程有点问题3.正确的方式是:模板 4.将自动发现服务这个去掉, 应该他会自动发现windows(阿里云) 主机多余的监控项5.刚才我们已经禁用了多余监控项了, 现在需要把之前就已经加好的监控项都去掉(关键)6.批量去掉当

阿里云发布链路追踪服务Tracing Analysis

摘要: 近日,在杭州云栖大会上,阿里云发布了链路追踪服务Tracing Analysis,成本是自建链路追踪系统的1/5或更少,可为分布式应用的开发者提供完整的调用链路还原.调用请求量统计.链路拓扑.应用依赖分析等工具,帮助开发者快速分析和诊断分布式应用架构下的性能瓶颈,提高微服务时代下的开发诊断效率. 近日,在杭州云栖大会上,阿里云发布了链路追踪服务Tracing Analysis,成本是自建链路追踪系统的1/5或更少,可为分布式应用的开发者提供完整的调用链路还原.调用请求量统计.链路拓扑.应