通过脚本实现将服务器的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自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...
随机推荐
- 先定一个小目标:10天自学C语言编程,教你如何改变一生
C语言是面向过程的,而C++是面向对象的 C和C++的区别: C是一个结构化语言,它的重点在于算法和数据结构.C程序的设计首要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到输出(或实现 ...
- Usaco Training [2.1] The Castle 搜索
传送门 题目的输出的4个信息 前两个很容易,dfs,bfs都可以,图怎么建都可以 后两个在搜索的时候记录belong[i][j]和已有的size即可 代码应该比不少题解清晰吧 #include < ...
- Java虚拟机(一)-Java内存区域
通过看深入理解java虚拟机这本书,大致总结一些笔记,或者提出一些问题,希望大家深入交流学习,第一次写博客,大家多多支持 Java虚拟机对于很多Java开发人员每天都在用,但是大部分人初学者对这些并不 ...
- Android OTG之USB转串口模块通讯
微信公众号:CodingAndroid CSDN:http://blog.csdn.net/xinpengfei521 1.背景简介 我们公司开发了一款室内机平板APP应用,要求平板能去控制智能门锁. ...
- git:将代码提交到远程仓库(码云)
初始化 进入一个任意的文件夹(如D:\aqin_test1\) git init # 初始化,让git将这个文件夹管理起来 git add . # 收集此文件夹下的所有文件 git config -- ...
- Java源码之阻塞队列
⑴背景 阻塞队列常用于生产者消费者场景,生产者是向队列里添加元素的线程,消费者是向队列里取出元素的线程.阻塞队列的角色是供生产者存放元素,消费者取出元素的容器. ⑵阻塞队列 阻塞队列是一个支持两个附加 ...
- 7.18 collection time random os sys 序列化 subprocess 等模块
collection模块 namedtuple 具名元组(重要) 应用场景1 # 具名元组 # 想表示坐标点x为1 y为2 z为5的坐标 from collections import namedtu ...
- 迁移学习(Transformer),面试看这些就够了!(附代码)
1. 什么是迁移学习 迁移学习(Transformer Learning)是一种机器学习方法,就是把为任务 A 开发的模型作为初始点,重新使用在为任务 B 开发模型的过程中.迁移学习是通过从已学习的相 ...
- Ubuntu 17 安装Chrome浏览器
1.进入下载文件存放目录 cd Downloads 2.下载chrome文件 2.1 32位使用如下命令 wget https://dl.google.com/linux/direct/google- ...
- ubuntu 开机进入grub rescue> 解决办法(nvme固态硬盘)
起因: 我是在windows下格式化了ubuntu的盘,然后重新安装ubuntu就出现了这种问题.卸载ubuntu的正确姿势,要去查一下,千万不要直接格式化. 解决方法: 1. 先使用ls命令,找到 ...