通过脚本实现将服务器的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,这样容易造成服务器卡死。需要进一步优化脚本。
通过脚本实现将服务器的Log实时传送到Telegram群组的更多相关文章
- Linux服务器间文件实时同步的实现
使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...
- Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器
PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...
- Java开发之使用websocket实现web客户端与服务器之间的实时通讯
使用websocket实现web客户端与服务器之间的实时通讯.以下是个简单的demo. 前端页面 <%@ page language="java" contentType=& ...
- Linux利用nc命令脚本批量检测服务器指定端口是否开放
一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...
- Azure 媒体服务支持 DASH 实时传送流
Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...
- mssql sqlserver 使用sql脚本获取群组后,按时间排序(asc)第一条数据的方法分享
摘要: 下文讲述使用sql脚本,获取群组后记录的第一条数据业务场景说明: 学校教务处要求统计: 每次作业,最早提交的学生名单下文通过举例的方式,记录此次脚本编写方法,方便以后备查,如下所示: 实现思路 ...
- 安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.
安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.
- linux系统中rsync+inotify实现服务器之间文件实时同步
最近需要对服务器上的文件实施动态备份,我又不想每次都手动来进行备份,在网上找了挺多资料,发现使用rsync就可以实现,如果想要实现实时同步,还可以使用rsync+inotify组合,本文就是以组合方式 ...
- rsync+inotify实现服务器之间文件实时同步--转
之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...
随机推荐
- Java VisualVM监控远程JVM
我们经常需要对我们的开发的软件做各种测试, 软件对系统资源的使用情况更是不可少, 目前有多个监控工具, 相比JProfiler对系统资源尤其是内存的消耗是非常庞大,JDK1.6开始自带的VisualV ...
- sublime text 3 15个常用插件介绍
1.ColorPicker 功能:调色板(需要输入颜色时,可直接选取颜色) 使用:快捷键Windows: ctrl+shift+c 2.Emmet 功能:编码快捷键,前端必备 使用:在输入代码段后,按 ...
- 2月11日 阿里巴巴Java开发手册 读后感
该手册分为几个部分: 印象深刻的几点: (五)集合处理 2.[强制]ArrayList的subList结果不可强转成ArrayList,否则会抛出ClassCastException 异常:java. ...
- springmvc原理详解(手写springmvc)
最近在复习框架 在快看小说网搜了写资料 和原理 今天总结一下 希望能加深点映像 不足之处请大家指出 我就不画流程图了 直接通过代码来了解springmvc的运行机制和原理 回想用springmvc用 ...
- Java连载16-++传参&关系运算符
一.++再举例 int a = 10; System.out.print(a++);//这里会打印出10,因为他们内部这个print函数有参数相当于参数x=a++ System.out.println ...
- c# http Post Get 方法
/// <summary> /// get方式访问webapi /// </summary> /// <param name="url">< ...
- Spring 2017 Assignments3
一.作业要求 原版:http://cs231n.github.io/assignments2017/assignment3/ 翻译:http://www.mooc.ai/course/268/lear ...
- 安利一个免费下载VIP文档神器
今天安利给大伙一个非非非常好用的可以免费下载VIP文档的下载神器------冰点文库下载器,用过的人都说好.操作简单,小巧轻便,完全免费.支持百度.豆丁.畅享.mbalib.hp009.max.boo ...
- grep文本搜索工具详解
############grep命令############这个命令属于文本处理三大命令之一,强大的文本搜索工具(贪婪模式)全面搜索正则表达式并把行打印出来)是一种强大的文本搜索工具,它能使用正则表达 ...
- 【乘风破浪】Android系统启动流程整理
前言 对于一个Android应用层开发者来说,了解Android系统的启动流程对理解Android系统有很大的帮助.这其中包含了大量的细节,而且前面很多步骤包含了C/C++实现的native层逻辑,作 ...