首先说下需求,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群组的更多相关文章

  1. Linux服务器间文件实时同步的实现

    使用场景 现有服务器A和服务器B,如果服务器A的指定目录(例如 /home/paul/rsync/ )中的内容发生变更(增删改和属性变更),实时将这些变更同步到服务器B的目标目录中(例如 /home/ ...

  2. Memcache 学习笔记(二)---- PHP 脚本操作 Memcache 服务器

     PHP 脚本操作 Memcache 服务器 一.PHP脚本操作Memcache方法 使用 PHP 脚本操作 Memcache,在 PHP 手册中有详细的介绍,我们可以实例化 Memcache 类,根 ...

  3. Java开发之使用websocket实现web客户端与服务器之间的实时通讯

    使用websocket实现web客户端与服务器之间的实时通讯.以下是个简单的demo. 前端页面 <%@ page language="java" contentType=& ...

  4. Linux利用nc命令脚本批量检测服务器指定端口是否开放

    一.nc命令检测端口的用法 # nc -v -w 10 %IP% -z %PORT% -v 显示指令执行过程. -w <超时秒数> 设置等待连线的时间. -u 表示使用UDP协议 -z 使 ...

  5. Azure 媒体服务支持 DASH 实时传送流

    Kilroy Hughes Azure媒体服务数字媒体架构师 本文重点介绍 Azure 媒体服务支持的 DASH 实时传送流功能,同时阐述如何利用这些功能将实时和点播自适应流传送至 Web 浏览器 ...

  6. mssql sqlserver 使用sql脚本获取群组后,按时间排序(asc)第一条数据的方法分享

    摘要: 下文讲述使用sql脚本,获取群组后记录的第一条数据业务场景说明: 学校教务处要求统计: 每次作业,最早提交的学生名单下文通过举例的方式,记录此次脚本编写方法,方便以后备查,如下所示: 实现思路 ...

  7. 安全 流程服务器开新机器 内外网 iptables 安全组 用户安全root用户的使用.

    安全    流程服务器开新机器      内外网      iptables   安全组       用户安全root用户的使用.

  8. linux系统中rsync+inotify实现服务器之间文件实时同步

    最近需要对服务器上的文件实施动态备份,我又不想每次都手动来进行备份,在网上找了挺多资料,发现使用rsync就可以实现,如果想要实现实时同步,还可以使用rsync+inotify组合,本文就是以组合方式 ...

  9. rsync+inotify实现服务器之间文件实时同步--转

    之前做了“ssh信任与scp自动传输脚本”的技术文档,此方案是作为公司里备份的方法,但在实际的运行中,由于主服务器在给备份服务器传输的时候,我们的主服务器需要备份的文件是实时.不停的产生的,造成不知道 ...

随机推荐

  1. 《SpringCloud docker》读书笔记

    yml配置意义 当Ribbon和Eureka配合使用时,会自动将虚拟主机名映射成微服务的网络地址. yml中info可以展示一些信息 server: port: 8000 # 指定端口 spring: ...

  2. Vue小事例

    login <!DOCTYPE html><html lang="ZH-cn"> <head> <meta charset="U ...

  3. 使用 RxJava 进行嵌套串行网络请求的一种方法

    需求 有这样一个列表数据,它包含了商店+订单的信息,获取订单列表时,订单实体中会包含商店的 ID,而列表显示时需要商店的名称和 logo,这时候就需要进行嵌套串行网络请求了. 关键词 flatMap ...

  4. 守望先锋app(1)

    这个app就是从守望先锋的官网下载相关的图片.文字.视频然后展示出来. 第一个功能是英雄介绍,所以先分析一波官网的数据.守望先锋的英雄数据的官方网站是http://ow.blizzard.cn/her ...

  5. HTML发展历程

    HTML是超文本标记语言的缩写,不同于C或JAVA等编程语言,HTML由标签组成.通过标签可以在网页中插入文字.图片.链接.音频.视频等元素,进而描述网页.和Windows一样,随着技术的发展,HTM ...

  6. Arranging Your Team HDU - 3720 【DFS】

    思路 题意:此题大意是指首先给你23个队员的信息,包括他们的名字,能力值,在赛场上的职位.然后给出几个若能满足某两个队员同时在球场上就额外加上一定的值.最后让你从23个队员中选出11个人,使得最终的v ...

  7. 解决 Nginx 代理Apex慢的问题

    前不久用 Nginx 代理 Oracle 的 Apex 速度非常慢,我之前Nginx 配置如下: server{ listen 80; server_name localhost; client_ma ...

  8. ORACLE中添加删除主键

    本文转自:http://blog.chinaunix.net/uid-17079336-id-2832443.html 1.创建表的同时创建主键约束(1)无命名create table student ...

  9. 中间件增强框架之InterceptFramework

    本文讲解MOF中的InterceptFramework框架.该框架可以在应用启动过程中获取画像信息,实现应用画像数据采集和存储. 一.前言 在智能运维中,应用服务所使用的组件及JAR包等相关信息非常重 ...

  10. There’s More Than One Way To Do It!

    There’s More Than One Way To Do It!