1. 程式人生 > >Linux中使用Shell把報警信息發送至郵件和微信上

Linux中使用Shell把報警信息發送至郵件和微信上

剛才 企業號 part null 成功 直接 xxxxxx 新增 tee

Linux中使用Shell把報警信息發送至郵件和微信上

創建企業微信報警

註冊一個企業微信號

點擊企業微信,進行企業註冊。

技術分享圖片

註冊成功後會看到企業信息頁面,把企業ID先記錄下來,後面發送報警腳本裏需要配置。

技術分享圖片

創建一個部門,專供發送報警用,並添加需要接收報警的成員

點擊“通訊錄”,再點擊+號,選擇添加部門

技術分享圖片

把部門ID記錄下來,後面配置web端用戶報警媒介的收件人要用到。

技術分享圖片

給剛創建的部門添加成員,可以直接添加成員也可以微信邀請,可以先將管理員微信添加進來。

新增一個第三方應用

點擊應用與小程序-創建應用

技術分享圖片

可見範圍那裏選擇剛才添加的那個部門。

將AgentId和Secret記錄下來,發送腳本裏需要配置

技術分享圖片

郵箱設置

配置mail.rc

cat >>/etc/mail.rc<<EOF
set [email protected] # 設置發件人信息,註:如果使用163郵箱,發件人信息必須設置和實際郵箱號一致,不然無法發送。
set smtp=smtp.163.com # 設置郵件服務器
set smtp-auth-user=‘175xxxxx5‘ # 設置驗證用戶名
set smtp-auth-password=‘12345678‘  # 設置驗證密碼
set smtp-auth=login # 可忽略

報警腳本

我在這裏只是舉個實例,具體的監控報警事件,請以實際為準。

如:在生產環境下批量檢測Web服務是否正常,最多檢查三次,並且發送相關郵件或微信報警信息。

以用戶的形式發送信息,Shell代碼如下:

# cat web_server_user.sh

#!/bin/bash

#定義腳本存放路徑
path=/tmp/scripts
#定義郵件列表,以空格隔開
MAIL_GROUP="[email protected]"
#定義日誌路徑
LOG_FILE="/tmp/scripts/web_check.log"
###send message from weixin for monitoring###
CropID=‘wwxxxxxx061‘  # 企業ID(AgentId)
Secret=‘m-v-x6BxxxxxxxxxxxxXmQMfw‘
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F \" ‘{print $10}‘)
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#創建目錄
[ ! -d "$path" ] && mkdir -p $path
#定義URL列表函數
function UrlList(){
    cat >$path/domain.list<<EOF
    http://blog.51cto.com/wutengfei
    www.baidu.com
    www.datagrand.com
    http://blog.52cto.com/wutf
    http://192.168.246.171
EOF
}
#定義檢查URL函數
function CheckUrl(){
    #初始化失敗次數為0次
    FAILCOUNT=0
    #檢查3次,定義for循環
    for ((i=1;i<=3;i++))
    do
        #定義具體的訪問URL命令,不輸出信息
        wget -T 5 --tries=1 --spider $1 >/dev/null 2>&1
        if [ $? -ne 0 ];then
            let FAILCOUNT+=1
        else
            ##返回值是0,則表示訪問URL成功,跳出for循環,不做3次檢測了
            break
        fi
    done
    ##將失敗次數作為返回值,返回函數外的腳本中
    return $FAILCOUNT
}
#定義郵件函數
function Mail(){
    local SUBJECT_CONTENT=$1
    for MAIL_USER in $(echo $MAIL_GROUP)
    do
        #發送郵件
        mail -s "${SUBJECT_CONTENT}" ${MAIL_USER} < ${LOG_FILE}
    done
}
#定義微信函數
function WeiXin(){
    local int AppID=1000002           # 企業號中的應用id
    #local UserID="${cat $path/weixin_user.txt}"      # 部門成員id,企業微信中定義的微信接收者
    local UserID="@all"               # 企業微信APP中的全部報警用戶
    #local PartyID=$2                 # 部門id,定義了範圍,組內成員都可接收到消息
    local Msg=$(cat ${LOG_FILE})           # 過濾出企業微信中傳遞的第三個參數
    printf ‘{\n‘
   # printf ‘\t"touser": "‘$UserID‘",\n‘
    printf ‘\t"touser": "‘"$UserID"\","\n"
    #printf ‘\t"toparty": "$PartyID",\n‘
    printf ‘\t"msgtype": "text",\n‘
    printf ‘\t"agentid": "‘$AppID‘",\n‘
    printf ‘\t"text": {\n‘
    ##printf ‘\t\t"content": "‘$Msg‘"\n‘
    printf ‘\t\t"content": "‘"$Msg"\""\n"
    printf ‘\t},\n‘
    printf ‘\t"safe":"0"\n‘
    printf ‘}\n‘
}

#定義發送信息函數
function SendMsg(){
    if [ $1 -ge 3 ];then
        RETVAL=1
        NOW_TIME=$(date +"%Y-%m-%d %H:%M:%S")
        SUBJECT_CONTENE="$2 is error,${NOW_TIME}."
        echo -e ${SUBJECT_CONTENE}|tee ${LOG_FILE}
        #發送郵件報警
        Mail ${SUBJECT_CONTENE}
        #發送微信報警
        #for $weixin in $(cat $path/weixin_user.txt)
        #do
        curl --data-ascii "$(WeiXin)" $PURL
        printf ‘\n‘
        echo "over!"
       # done
    else
        echo "http://$2 is ok"
        RETVAL=0
    fi
    return $RETVAL
}

#定義主函數
function main(){
    UrlList
    for url in $(cat $path/domain.list)
    do
        CheckUrl $url
        SendMsg $? $url
    done         
}
main

以用戶組的形式發送信息,Shell代碼如下:

cat web_server_group.sh

#!/bin/bash

#定義腳本存放路徑
path=/tmp/scripts
#定義郵件列表,以空格隔開
MAIL_GROUP="[email protected]"
#定義日誌路徑
LOG_FILE="/tmp/scripts/web_check.log"
###send message from weixin for monitoring###
CropID=‘wwxxxxxxxxx8061‘
Secret=‘m-v-xxxxxxxxxxxxxxxXmQMfw‘
GURL="https://qyapi.weixin.qq.com/cgi-bin/gettoken?corpid=$CropID&corpsecret=$Secret"
Gtoken=$(/usr/bin/curl -s -G $GURL | awk -F \" ‘{print $10}‘)
PURL="https://qyapi.weixin.qq.com/cgi-bin/message/send?access_token=$Gtoken"
#創建目錄
[ ! -d "$path" ] && mkdir -p $path
#定義URL列表函數
function UrlList(){
    cat >$path/domain.list<<EOF
    http://blog.51cto.com/wutengfei
    www.baidu.com
    www.datagrand.com
    http://blog.52cto.com/wutf
    http://192.168.246.171
EOF
}
#定義檢查URL函數
function CheckUrl(){
    #初始化失敗次數為0次
    FAILCOUNT=0
    #檢查3次,定義for循環
    for ((i=1;i<=3;i++))
    do
        #定義具體的訪問URL命令,不輸出信息
        wget -T 5 --tries=1 --spider $1 >/dev/null 2>&1
        if [ $? -ne 0 ];then
            let FAILCOUNT+=1
        else
            ##返回值是0,則表示訪問URL成功,跳出for循環,不做3次檢測了
            break
        fi
    done
    ##將失敗次數作為返回值,返回函數外的腳本中
    return $FAILCOUNT
}
#定義郵件函數
function Mail(){
    local SUBJECT_CONTENT=$1
    for MAIL_USER in $(echo $MAIL_GROUP)
    do
        #發送郵件
        mail -s "${SUBJECT_CONTENT}" ${MAIL_USER} < ${LOG_FILE}
    done
}
#定義微信函數
function WeiXin(){
    local int AppID=1000002           # 企業號中的應用id
    #local UserID="${cat $path/weixin_user.txt}"      # 部門成員id,企業微信中定義的微信接收者
    #local UserID="@all"               # 企業微信APP中的全部報警用戶
    local PartyID=4               # 部門id,定義了範圍,組內成員都可接收到消息
    local Msg=$(cat ${LOG_FILE})           # 過濾出企業微信中傳遞的第三個參數
    printf ‘{\n‘
    printf ‘\t"touser": "‘"$UserID"\","\n"
    printf ‘\t"toparty": "‘"$PartyID"\","\n"
    printf ‘\t"msgtype": "text",\n‘
    printf ‘\t"agentid": "‘$AppID‘",\n‘
    printf ‘\t"text": {\n‘
    ##printf ‘\t\t"content": "‘$Msg‘"\n‘
    printf ‘\t\t"content": "‘"$Msg"\""\n"
    printf ‘\t},\n‘
    printf ‘\t"safe":"0"\n‘
    printf ‘}\n‘
}

#定義發送信息函數
function SendMsg(){
    if [ $1 -ge 3 ];then
        RETVAL=1
        NOW_TIME=$(date +"%Y-%m-%d %H:%M:%S")
        SUBJECT_CONTENE="$2 is error,${NOW_TIME}."
        echo -e ${SUBJECT_CONTENE}|tee ${LOG_FILE}
        #發送郵件報警
        Mail ${SUBJECT_CONTENE}
        #發送微信報警
        #for $weixin in $(cat $path/weixin_user.txt)
        #do
        curl --data-ascii "$(WeiXin)" $PURL
        printf ‘\n‘
        echo "over!"
       # done
    else
        echo "http://$2 is ok"
        RETVAL=0
    fi
    return $RETVAL
}

#定義主函數
function main(){
    UrlList
    for url in $(cat $path/domain.list)
    do
        CheckUrl $url
        SendMsg $? $url
    done         
}
main

報警測試

微信報警截圖

技術分享圖片

郵件報警截圖

技術分享圖片

設置定時任務

# crontab -l
*/3 * * * * /bin/sh /tmp/web_server_group.sh &>/dev/null # 每隔三分鐘檢查一次

Linux中使用Shell把報警信息發送至郵件和微信上