scribe日志收集

2023-11-07

https://www.xiaomastack.com/2014/11/11/scribe-nginx-php/

日志管理(4) 用scribe收集nginx和php日志

By  小马  · 十一月 11, 2014  ·  Scribe日志管理 ·  Leave a comment

介绍怎样用scribe收集各台服务器上nginx和php程序运行时自身产生的日志(error.log、access_log等),实现的方法很简单——用logrotate切日志,将读取的日志通过scribe_cat送给中心的日志服务器。而正常业务产生的日志由开发自己编写代码直接送给scribe不在讨论的范畴,收集nginx和php程序产生日志的方法也可以发散到其它程序日志的收集如mysql。

1、scribe_cat脚本
scribe_cat是scribe源码包提供的一个python脚本,用来将标准输入的信息送给scribe服务器,在源码包的examples目录下。可以简单测试一下:

#-h参数用来指定scribe服务器的ip和端口
#1_test是日志类别表示,跟scribe配置相关,是必要的参数
[root@TestHost ~] echo "hello world" | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 1_test

这条命令执行后,如果scribe配置中有1_test相关的store那么就会在相关目录下生成一个文件且文件的内容有一行信息是”hello workd”
用echo、sed、awk等作为scribe_cat的标准输入最后都会带上一个换行符”\n”,这样就带来一个困扰就是会发现scribe收集的日志会有很多空行。解决空行的方法就是将标准输入信息最后一行的换行符去掉,编辑scribe_cat脚本:

#导入新的模块用于正则匹配
from re import sub
#新增的语句,用来接收标准输入的信息
sendMessage = sys.stdin.read()
#修改的语句,将标准输入信息最后一个换行符删除
log_entry = scribe.LogEntry(category = category, message = sub(r "\n$" , '', sendMessage))

2、编写收集日志脚本pushscribe.sh
脚本功能:
每天23点59分对nginx和php的日志切割一次(切割目的主要是减轻每次读取日志的压力),每分钟累计采集数次nginx、php日志内容并将读取的内容由scribe_cat送给中心的scribe达到收集日志的功能,每条日志文件在server落地的时候加上对应主机的主机名用来标识日志的来源。
脚本的内容如下,其实nginx和php的日志可以写成一个迭代,为了简介清晰还是分开写的好。

#!/bin/bash
npath= '/var/log/nginx/'
ppath= '/var/log/php-fpm/'
countfile= '.count'
host=` hostname `
date =` date + '-%Y%m%d' `
dflag=` date + '%H%M' `
 
#每分钟读取日志的次数,一天的最后一分钟只读取一次
if [[ $dflag == '2359' ]]; then
     count=1
else
     count=2
fi
for ((i=0; i<$count; i++))
{
#nginx
cd $npath
if [[ $dflag == '2359' ]]; then
     /usr/sbin/logrotate /etc/logrotate_hd .conf    #每天23:59切割日志
     for fname in ` ls | grep -E ".com$|.log$" `
     do
         startnum=` grep "^$fname" $countfile | awk '{print $2}' `
         if [ -e $fname$ date ]; then
             sed -i "s/^$fname $startnum/$fname 1/" $countfile
             endnum=` awk 'END{print NR}' $fname$ date `
             awk - v h= " $host" "{if((NR>=$startnum)&&(NR<=$endnum))print \$0 h}" $fname$ date | /usr/local/scribe/examples/scribe_cat -h 127.0.0.1:2463 "10_$fname"
         else
             endnum=` awk 'END{print NR}' $fname`
             if [ $endnum -gt $startnum ]; then
                 sed -i "s/^$fname $startnum/$fname $endnum/" $countfile
                 awk - v h= " $host" "{if((NR>=$startnum)&&(NR<$endnum))print \$0 h}" $fname | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 "10_$fname"
             fi
         fi
     done
else
     for fname in ` ls | grep -E ".com$|.log$" `
     do
         startnum=` grep "^$fname" $countfile | awk '{print $2}' `
         if [[ -z $startnum ]]; then
             echo "$fname 1" >> $countfile
             startnum=1
         fi
         endnum=` awk 'END{print NR}' $fname`
         if [ $endnum -gt $startnum ]; then
             sed -i "s/^$fname $startnum/$fname $endnum/" $countfile
             awk - v h= " $host" "{if((NR>=$startnum)&&(NR<$endnum))print \$0 h}" $fname | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 "10_$fname"
         fi
     done
fi
 
#php-fpm
cd $ppath
if [[ $dflag == '2359' ]]; then
     for fname in ` ls | grep -E ".slow$|.log$" `
     do
         startnum=` grep "^$fname" $countfile | awk '{print $2}' `
         if [ -e $fname$ date ]; then
             sed -i "s/^$fname $startnum/$fname 1/" $countfile
             endnum=` awk 'END{print NR}' $fname$ date `
             awk - v h= " $host" "{if((NR>=$startnum)&&(NR<=$endnum))print \$0 h}" $fname$ date | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 "11_$fname"
         else
             endnum=` awk 'END{print NR}' $fname`
             if [ $endnum -gt $startnum ]; then
                 sed -i "s/^$fname $startnum/$fname $endnum/" $countfile
                 awk - v h= " $host" "{if((NR>=$startnum)&&(NR<$endnum))print \$0 h}" $fname | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 "11_$fname"
             fi
         fi
     done
else
     for fname in ` ls | grep -E ".slow$|.log$" `
     do
         startnum=` grep "^$fname" $countfile | awk '{print $2}' `
         if [[ -z $startnum ]]; then
             echo "$fname 1" >> $countfile
             startnum=1
         fi
         endnum=` awk 'END{print NR}' $fname`
         if [ $endnum -gt $startnum ]; then
             sed -i "s/^$fname $startnum/$fname $endnum/" $countfile
             awk - v h= " $host" "{if((NR>=$startnum)&&(NR<$endnum))print \$0 h}" $fname | /usr/local/scribe/examples/scribe_cat -h 192.168.186.135:2463 "11_$fname"
         fi
     done
fi
sleep 10
}

3、添加定时任务

* * * * * root sh /tool/pushscribe .sh > /dev/null 2>&1

关于怎样切割php和nginx的日志在《日志管理(2) 用logrotate切割php和nginx日志》中已经介绍了,不过要注意的是已经在脚本中对日志进行切割后,就不要再将切割日志的动作放到定时任务里,避免重复切割造成不必要的麻烦。
文章出处:http://www.xiaomastack.com/2014/11/11/scribe-nginx-php/

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

scribe日志收集 的相关文章

  • 揭开数学智慧的神秘面纱:MathGPTPro使用指南带你领略数学的魅力!

    请查收一份MathGPTPro的使用指南 欢迎大家进入我们的MathGPTPro群 我们产品的链接在这 https mathgptpro com 欢迎大家踊跃提问 大家可以文字或者图片 也支持手写图片 输入问题 遇到回答中不解的问题 公式
  • MYSQL学习笔记(二)——数据库和数据表操作

    MYSQL数据库学习笔记 二 目录 MYSQL数据库学习笔记 二 一 MYSQL数据库操作 一 创建数据库 二 指定当前数据库 三 修改数据库 四 删除数据库 二 数据表操作 一 创建数据表 二 复制现成的表 三 修改数据表 1 add实例
  • 关于电脑丢失msvcr120.dll的几个修复方法

    MSVCR120 dll它是Windows系统运行某些程序所需的文件之一 如果你在运行某个程序时遇到了MSVCR120 dll丢失的错误 那么你不能简单地忽略它 因为这可能会导致程序无法正常运行 在本篇文章中 我们将为大家介绍一些解决MSV
  • MySQL高效编程学习笔记(五)--表的维护和改造

    修改表的列结构 若表中有数据最好先备份 注意转换前后的字符长度 以及是否可以互相转换等问题 改变列数据类型 ALTER TABLE visitor MODIFY nam VARCHAR 30 Eg alter table goods mod
  • 用Node.js实现一个HTTP服务器程序(文件服务器)

    http Node js开发的目的就是为了用JavaScript编写Web服务器程序 因为JavaScript实际上已经统治了浏览器端的脚本 其优势就是有世界上数量最多的前端开发人员 如果已经掌握了JavaScript前端开发 再学习一下如
  • 基于java的Mock利器-Mockito

    1 认识Mockito Mockito是java单元测试中使用率最高的Mock框架之一 特点 简明的语法和完整的文档 Mockito支持永Maven和Gradle来进行依赖引入和管理 2 Mockito Maven引入
  • 记一次Redis配置database不生效的问题

    1 先贴代码 乍一看 这个配置没问题 redis也在spring下 springboot 的 Configuration 也会默认加载redis的配置 但是一开始怎么调试都不能默认数据库为1的情况 后来我在Redis配置中发现了另一个好东东
  • Linux下重要文件不小心被删除?别着急,看这里!

    针对日常维护操作 难免会出现文件误删除的操作 大家熟知linux文件系统不同win有回收站 删除后的文件可以到垃圾箱寻回 要知道linux文件修复比较费劲 网络上面的文档也是五花八门 所以本次研究一种比较靠谱的文件和目录恢复方法 也给维护人
  • leedcode 1254. 统计封闭岛屿的数目

    题目 二维矩阵 grid 由 0 土地 和 1 水 组成 岛是由最大的4个方向连通的 0 组成的群 封闭岛是一个 完全 由1包围 左 上 右 下 的岛 思路 封闭岛屿是由1完全包围的岛 也就是说 该岛屿不能在二维矩阵的边界处 这种情况排出后
  • C语言编程中遇到Warning提示的解决方法:warning:implicit declaration of function ‘XXX‘,conflicting types for ‘XXX’

    目录 原因 解决办法 总结 在用codeblocks编写C语言代码时遇到了一个错误 implicit declaration of function XXX conflicting types for XXX 这里的 XXX 代表的是我自己
  • 案例实践:Shell定时上传文件至HDFS

    目录 一 项目需求 二 实现思路 三 具体实现流程 1 规划文件目录 2 开发shell脚本 3 给shell脚本授权 4 定时执行Shell脚本 5 查看HDFS历史访问日志 一 项目需求 公司在线服务器每天都会产生网站运行日志 为了避免
  • 机器学习_深度学习毕设题目汇总——目标检测B

    下面是该类的一些题目 题目 典型恶劣天气条件下高铁周界入侵目标检测 图模型融合时空特征的视觉显著性目标检测算法研究 基于SAR图像的舰船目标检测方法研究 基于三维点云分析的智能汽车目标检测方法研究 基于传播模型的显著目标检测方法研究 基于全
  • 如何在Ubuntu服务器上安装 QEMU/KVM 以创建虚拟机

    KVM是 Kernel based Virtual Machine 的缩写 是集成到 Linux 内核中的开源类型 1 虚拟机管理程序 裸机虚拟机管理程序 它允许您创建和管理运行 Windows Linux 或 UNIX 变体 如 Free
  • 微信小程序云开发操作全解

    云开发三大基础能力 云函数 运行在微信服务器上的函数 处理微信相关操作有天然优势 如获得用户信息异常方便 以前服务端解析很麻烦 数据库 一个小程序可以直接操作的JSON数据库 可以直接操作数据库 不在需要服务端了 存储 用来存储文件和图片
  • Vue中获取接口的方法

    在vue小黑框中输入 cnpm install axios 下载安装 可以设置成全局 引入import axios from axios 把axios放进Vue对象的原型中 Vue prototype axios axios 设置默认的地址

随机推荐

  • 思科模拟器基础实验完整流程-初级

    文章目录 实验拓扑 第一部分 企业总部内网 第一层 接入层 第二层 汇聚层 解决 VLAN 间通信 第三层 网络层 第二部分 企业分部内网 第三部分 外部网络路由 第四部分 NAT 地址转换 第五步 VPN 实验拓扑 由图我们可以看到这张拓
  • 【SpringCloud】用【Idea】构建Maven父子工程图文(1)

    1 概述 之前老是出现idea建springCloud的maven父子工程失败 特此写下经验和教训 springboot版本 2 2 1 2 不多逼逼 图文教程直接来 新建maven空工程 事先准备好一个空文件夹 选择刚才建好的空文件夹 不
  • C# 企业微信:开启消息接受&接收消息&推送消息

    前言 微信吧 接触的人都会100 各种踩坑 就算同样东西去年做过 今年来一样踩坑 因为太多你稍微不记得一点点的细节就能让你研究N久 为此 我要把这个过程详细的记录下来 一 开启消息接受 1 拿到企业corpId 应用的Token Encod
  • proteus中如何加载C语言程序,Proteus运行Keil编写的51单片机C语言步骤

    1 在Keil 编写好程序以后 在左侧项目栏中单击鼠标右键 如下图 2 点击上图中Options for Target Target1 选项 弹出下列窗口 3 在Target标签中将Xtal MHz 中的晶振频率改为12 0 再在Outpu
  • 【周末闲谈】关于“数据库”你又知道多少?

    个人主页 个人主页 系列专栏 周末闲谈 系列目录 第一周 二进制VS三进制 第二周 文心一言 模仿还是超越 第二周 畅想AR 文章目录 系列目录 前言 数据库 数据库的五大特点 数据库介绍 数据库管理系统 DBMS 数据库的结构 数据库的操
  • 给定一个十进制正整数 n(0 < n < 1000000000),每个数位上数字均不为 0。n 的位数为 m。现在从 m位中删除 k位 (0<k < m),求生成的新整数最小为多少?例如: n = 9

    题目描述 给定一个十进制正整数 n 0 lt n lt 1000000000 每个数位上数字均不为 0 n 的位数为 m 现在从 m位中删除 k位 0
  • 如何搭建Tesla Occupancy Network的一个基线?

    作者 我叫斯蒂芬 编辑 汽车人 原文链接 https zhuanlan zhihu com p 575058907 点击下方卡片 关注 自动驾驶之心 公众号 ADAS巨卷干货 即可获取 点击进入 自动驾驶之心 BEV感知 技术交流群 原文链
  • 前端音波绘制

    好久不曾写博客了 忙忙碌碌大半年 毕业就工作果然还是有点意思 本人贼懒 但是只要是研究了点东西的话 还是分享一下供其他感兴趣的小伙伴前车之鉴吧 回归正题 用过手机百度音乐的朋友们 这里算打个广告吧 估计会注意音乐播放后左下角那个音波绘制的看
  • 基于yolov3源码的训练过程

    基于yolov3源码的训练过程 在yolo官网上使用一下指令可以对模型的数据集进行训练 darknet detector train cfg voc data cfg yolov3 voc cfg darknet53 conv 74 但是训
  • fatfs移植和使用(在SPI_FLASH上建立文件系统)

    文件系统对于嵌入式系统的重要性是不言而喻的 有了文件系统管理数据和外设变得方便许多 同时简化了应用的开发 今天我们来以在SPI FLASH上建立文件系统为例 看看FATFS文件系统怎么移植和使用 需要准备的材料有 1 FATFS文件系统源码
  • VC项目中文件类型说明

    APS 存放二进制资源的中间文件 VC把当前资源文件转换成二进制格式 并存放在APS文件中 以加快资源装载速度 资源辅助文件 BMP 位图资源文件 BSC 浏览信息文件 由浏览信息维护工具 BSCMAKE 从原始浏览信息文件 SBR 中生成
  • Elasticsearch与Clickhouse数据存储对比

    1 背景 京喜达技术部在社区团购场景下采用JDQ Flink Elasticsearch架构来打造实时数据报表 随着业务的发展Elasticsearch开始暴露出一些弊端 不适合大批量的数据查询 高频次分页导出导致宕机 存储成本较高 Ela
  • 从键盘输入一个字符,若为小写,则改为大写再输出

    include
  • React学习笔记

    一 基础 1 概念 React是用于构建用户界面的JavaScript库 只关注视 2 特点 声明式编程 React 使创建交互式 UI 当数据变动时 React 能高效更新并渲染合适的组件 组件化 构建管理自身状态的封装组件 然后对其组合
  • 华为技术支持面试

    一面 技术面 不同面试官 面试内容差别较大 班里有些同学随便聊4 5分钟就通过了 我 大概面了15分钟 首先是三分钟的中文自我介绍 然后针对简历提问 被问到毕业课题 而且问得比较详细 叫我画出整个方案的框架图 I2C LCD的时序图 项目工
  • Linux驱动

    HC SR04超声波模块 工作原理参考 超声波模块 star air的博客 CSDN博客 超声波模块 https blog csdn net qq 41262681 article details 95940707 使用超声波测距的操作步骤
  • java获取post数据_java通过HttpServletRequest获取post请求中的body内容的方法

    在java web应用中 我们如何获取post请求body中的内容 以及需要注意的问题 通常利用request获取参数可以直接通过req getParameter name 的方式获取url上面或者ajax data提交上来的参数 但是bo
  • centos7.9 安装使用kafka

    安装kafka之前需要安装java8 以上版本 yum install java 1 8 0 openjdk x86 64 yum install java 1 8 0 openjdk devel x86 64 安装kafka 软件下载地址
  • 64GU盘装机后变成32G,且电脑无法识别问题解决

    问题描述 借助64G的闪迪U盘给电脑装了系统后 直接拔出后 忘记点弹出了 然后这个电脑的此电脑中就找不到这个U盘 别的电脑可以 但是在电脑右下角可以看到 64G变成32G这个问题网上解决办法很多 我是下载了DiskGenius然后格式化就好
  • scribe日志收集

    https www xiaomastack com 2014 11 11 scribe nginx php 日志管理 4 用scribe收集nginx和php日志 By 小马 十一月 11 2014 Scribe 日志管理 Leave a