通过脚本实现将服务器的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自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...
随机推荐
- react-navigation报错
用react-navigation配置路由时,出现如下报错或白屏. 我的代码原来是 import {AppRegistry} from 'react-native'; import App from ...
- Docker笔记(八):数据管理
前面(哪个前面我也忘了)有说过,如果我们需要对数据进行持久化保存,不应使其存储在容器中,因为容器中的数据会随着容器的删除而丢失,而因通过将数据存储于宿主机文件系统的形式来持久化.在Docker容器中管 ...
- C#串口类封装 SuperSerialPort
C#串口类封装 SuperSerialPort 基于SerialPort类做了简单的封装方便调用 代码 /// <summary> /// SuperSerialPort /// < ...
- centos7 yum搭建lnmp环境及配置wordpress超详细教程
yum安装lnmp环境是最方便,最快捷的一种方法.源码编译安装需要花费大量的人类时间,当然源码编译可以个性化配置一些其它功能.目前来说,yum安装基本满足我们搭建web服务器的需求. 本文是我根据近期 ...
- 【记忆化搜索】掷骰子 hpuoj
B. 掷骰子 单点时限: 2.0 sec 内存限制: 512 MB 骰子,中国传统民间娱乐用来投掷的博具,早在战国时期就已经被发明. 现在给你 n 个骰子,求 n 个骰子掷出点数之和为 a 的概率是多 ...
- react中babel的使用
在开发中经常会使用到es6语法,那么如何能够很好兼容es6写法呢
- 解决MobaXterm-SSH中文乱码问题
一般情况不用修改服务器字符集(linux或unix服务器字符集一般不会设置错误). 1.首先用命令查看当前系统的LANG是什么: >locale LANG=en_US LC_COLLATE=&q ...
- Example With JdbcDaoSupport
By extended the JdbcDaoSupport, set the datasource and JdbcTemplate in your class is no longer requi ...
- Mac忘记MySQL root密码解决方法(亲测有效)
重置MySQL root密码 重置MySQL root用户的密码: 1)新建一个文本文件sql.txt,写入修改用户密码的SQL语句. MySQL 5.7.6及更高版本写这句: ALTER USER ...
- 智能家居系列之——WIFI小车
2017年准备搬新家了,一直关注着树莓派的论坛,看有没有新玩意,想着今年过年在杭州过年,头一次在城里过年,感觉特别无聊,没有麻将可以打,没有鞭炮可以放,只能在家做做小玩意.从小就对四驱车有兴趣,一直想 ...