1. 程式人生 > >通過腳本實現將服務器的Log實時傳送到Telegram群組

通過腳本實現將服務器的Log實時傳送到Telegram群組

xxxx 技術 -m -- delay tmp 服務器 小飛機 xargs

首先說下需求,IT老大提出的一個需求,實現將php-laravel的應用日誌實時傳送到telegram的監控群組中,不用登陸服務器就可以實時查看應用的日誌。

具體思路是:

先要將日誌切割,並實時更新這個日誌文件,

由於Linux的crond正常配置最小的單位是每分鐘切割一次,

實踐後證明1分鐘的日誌太大,不能作為一句話向telegram傳送。

最初的設想是將log切割的足夠小,按照秒級別的切割日誌。

初步解決方案:crond+shell 來解決

@1.切割日誌的腳步。


#! /bin/bash
##Laravel的日誌存放路徑為/var/wwwroot/zfb/storage/logs/
#d=`date -d "now" +%Y%m%d_%T`

d=`date -d "now" +%Y%m%d`
##2 定義日誌切割前後的路徑
logdir="/var/wwwroot/zfb/storage/logs/"
dest_logdir="/home/felix/logs"
cd $logdir
for log in `tail -45f laravel.log`
do
/bin/tail $log >${dest_logdir}/$log_$d.log
done

#如果使用mv 生成日誌文件的話就需要清理,用tail和cat就不需要
##3 自動刪除兩個月以前的日誌
#/bin/find /home/felix/logs/ -name $log_$d.log -type f -mtime +60 |xargs /bin/rm

@再就是小飛機發送獲取到的日誌內容到tg群組。

利用@BotFather 創建一個機器人。

/newbot

創建一個機器人名字:FelixBot

@xxxxbot

會生成一個token值,通過這個token可以借助tg的api來傳送消息。

將機器人加入到群組,通過tg提供的公開接口獲取到groupID,和群組中其他用戶的ID

技術分享圖片

格式為:https://api.telegram.org/botID:token/getupdate

如上圖,出來了群組ID。 會在下面的腳步中用到。

tg發消息到群組的腳本如下:

#!/bin/bash

SUBJECT=`/bin/cat /tmp/2.txt`

MESSAGE="echo "$SUBJECT""

NL="111111111111111
"

#curl --silent -X POST --retry 5 --retry-delay 0 --retry-max-time 60 --data-urlencode "chat_id=-1001243846459" --data-urlencode "text=Subject: ${MESSAGE}" "https://api.telegram.org/bot6547:AAF_egvRG2BVpHsddfsfswCXWvq3JV48gVsc4/sendMessage?disable_web_page_preview=true" | grep -q ‘"ok":true‘


curl -X POST "https://api.telegram.org/bot8566:AAEuZ0J5N_XCFbJ-7Yuk/sendMessage?disable_web_page_preview=true" -d "chat_id=-3434363" --data-urlencode "text=Subject: $SUBJECT"

bot 就是機器人的id 後面接的是token值, chat_id 是群組ID

@3.然後通過一個腳步死循環執行以上兩個腳本

最好做成秒級的定時任務來讓他自動執行

定時任務為:

#######Telegram_Notify Every 5seconds ###########

#*/1 * * * * /home/felix/tools/5s.sh
#*/1 * * * * sleep 5 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 10 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 15 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 20 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 25 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 30 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 35 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 40 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 45 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 50 && /home/felix/tools/5s.sh
#*/1 * * * * sleep 55 && /home/felix/tools/5s.sh

以上是完整的的配置步驟,

由於腳本中的curl -x post的動作每5s輪詢一次,構成了服務器的處理數據的壓力較大,切線程沒有kill,這樣容易造成服務器卡死。需要進一步優化腳本。

通過腳本實現將服務器的Log實時傳送到Telegram群組