• 通过脚本实现将服务器的Log实时传送到Telegram群组


    首先说下需求,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,这样容易造成服务器卡死。需要进一步优化脚本。

  • 相关阅读:
    8.请描述基本数据类型和引用数据类型的区别?
    7.在第4题中Hello.class所在路径下, 输入命令:java Hello.class,会出现什么结果,为什么?
    6.如果第4题中在DOS命令下输入:java Hello 出现以下结果:Exception in thread “main” java.lang.NoClassDefFoundError: Hello
    5.如果第4题中在DOS命令下输入:java Hello 出现以下结果:Bad command or the file name 可能是什么原因?请说明理由。
    C# 反射技术应用
    C# 中的委托和事件
    类和结构的区别
    c#接口和抽象类的区别
    Repeater 控件使用总结
    SpringMvc+jquery easyui模块开发7步骤
  • 原文地址:https://www.cnblogs.com/Enzoo/p/10635640.html
Copyright © 2020-2023  润新知