rsyslogd、syslog远程传输、日志存储、转存

2023-11-17

一、产生本地日志

1、/etc/resolv.conf 配置文件
local0~local7是用户自定义的日志
这里我们使用local1,添加以下 
 local1.* /www/admin/admin/log/web_log
配置完需要重启 rsyslogd程序 
/etc/init.d/rsyslog restart
2、程序中用以下记入日志
    openlog("audit_as_cgi", LOG_PID, LOG_LOCAL1);
    syslog(LOG_DEBUG,"%s",write_buf);
    closelog();
audit_as_cgi :是日志前缀
LOG_PID:每条日志都包含进程号
LOG_LOCAL1:是我们自定义的日志类型
LOG_DEBUG:日志等级
3、产生的本地日志,如下所示


二、远程发送日志

rsyslog提供三个远程日志传输方式:

  • UDP: 数据包传输可信度不高
  • TCP: 数据包传输可信度比较高
  • RELP: 数据包传输可信度最高,避免数据丢失,比较新的协议,目前应用较少

关于RELP的更进一步了解可以参考 Using TLS with RELP RELP Input Module RELP Output Module (omrelp)

TCP配置和UDP类似,如下

Server端配置
/etc/rsyslog.conf
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514
$AllowedSender TCP, 192.168.80.0/24

# 根据客户端的IP单独存放主机日志在不同目录       
$template Remote,"/var/log/syslog/%fromhost-ip%/%fromhost-ip%_%$YEAR%-%$MONTH%-%$DAY%.log"

# 排除本地主机IP日志记录,只记录远程主机日志
:fromhost-ip, !isequal, "127.0.0.1" ?Remote
& ~
Client端配置
/etc/rsyslog.conf ,这里我们把用户自定义的local1类型日志发送给2.108设备
local1.*	    @@192.168.2.108:514

当然,如果你是用的之前老版本的syslogd程序,则发送端不需要配置文件,直接syslogd -R 服务器地址即可,只不过syslogd好像是UDP协议的514端口,照样可以用rsyslogd接收。

客户端和服务端重启相关服务即可在服务器(192.168.2.108)端看的如下结果:


重启rsyslogd之后如果没有收到日志,查看防火墙是否开启了514端口,没有开启就在服务器端打开514端口

 iptables -I INPUT -p tcp --dport 514 -j ACCEPT
 iptables -I OUTPUT -p tcp --dport 514 -j ACCEPT

三、日志自动转存-logrotate程序

logrotate是个十分有用的工具,它可以自动对日志进行截断(或轮循)、压缩以及删除旧的日志文件。例如,你可以设置logrotate,让/var/log/foo日志文件每30天轮循,并删除超过6个月的日志。配置完后,logrotate的运作完全自动化,不必进行任何进一步的人为干预。另外,旧日志也可以通过电子邮件发送,不过该选项超出了本教程的讨论范围。

1、在/etc/logrotate.d/ 路径下建立自己的日志配置文件,如下所示:

第一行:要管理的日志文件

daily: 按天转存

dateext: 按日志备份文件

rotate: 共备份5份,之后会依次替换掉最旧的文件

size=1M:当日志文件达到1M时,才备份

最后3句:必须重启rsyslogd程序,否则日志转存之后,不会写入最新的文件


另外,如果你的远程服务器没有建立好连接,也会影响本地日志的生产速度


四、logrotate触发过程

centos从6开始,daily   hourly  monthly weekly等这些文件夹里面的任务已经不用crond处理,而是交给了anacron处理

1、/etc/cron.hourly/0anacron 会每小时定时运行,由 /etc/cron.d/0hourly 每小时调用一次

/etc/cron.hourly/0anacron 内容如下

if test -r /var/spool/anacron/cron.daily; then
    day=`cat /var/spool/anacron/cron.daily`
fi
if [ `date +%Y%m%d` = "$day" ]; then
    exit 0;
fi


# Do not run jobs when on battery power
if test -x /usr/bin/on_ac_power; then
    /usr/bin/on_ac_power >/dev/null 2>&1
    if test $? -eq 1; then
    exit 0
    fi
fi
/usr/sbin/anacron -s

它会检测系统当前时间和/var/spool/anacron/cron.daily(谁写入的还没搞清楚)文件里的日期是否一致,一致就退出,否则运行anacron 


2、anacron 程序启动,它的配置文件为/etc/anacrontab ,内容如下:

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.

SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=54   (延时54分、默认延时最小为6分)
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22  这个设置就是你看到日志切割的时间范围,一般是凌晨3点+RANDOM_DELAY+5 大约是凌晨3:59切割文件

下面任务列表:第一列是轮询天数、第2列是延时时间(单位分钟)、第3、4列是任务描述和命令,在此调用daily、weekly、monthly任务
#period in days   delay in minutes   job-identifier   command
15cron.dailynice run-parts /etc/cron.daily
725cron.weeklynice run-parts /etc/cron.weekly
@monthly 45cron.monthlynice run-parts /etc/cron.monthly


3、由上面的anacron 调用cron.daily任务后,logrotate程序得以执行

cat /etc/cron.daily/logrotate ,内容如下:

#!/bin/sh
/usr/sbin/logrotate -s
/var/lib/logrotate.status /etc/logrotate.conf    (这里的路径要注意,有的是 /var/lib/logrotate/logrotate.status
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

logrotate程序调用配置文件/etc/logrotate.conf 及/etc/logrotate.d/路径下的配置,生成按天、周、月为周期的文件。


遗留问题:

logrotate生成的备份日志,日期不太对,没有明确的分隔点。例如16号生成的日志,备份到了17号文件里,而17文件里包含部分18号的内容。

我感觉这类问题,应该通过START_HOURS_RANGE这个参数来设置以尽量缩小时间误差。

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

rsyslogd、syslog远程传输、日志存储、转存 的相关文章

  • 当在 python linux 中执行命令 os.system() 时,在 python 中给出响应 yes/no

    考虑一个像这样的命令 yum install boto 当我在终端中执行时 要继续 会询问我是 否 我可以像这样用 python 回应它吗 os system yum install boto Next Yes 将通过相同的 python
  • 虚拟内存澄清——大连续内存的分配

    我有一个应用程序 我必须在 Windows 上分配 使用运算符 new 相当大的内存空间 数百 MB 该应用程序是 32 位 我们现在不使用 64 位 即使在 64 位系统上也是如此 我启用了 LARGEADDRESSAWARE 链接器选项
  • 如何在 Ubuntu/Linux 发行版中安装 Tesseract-OCR 3.03?

    我和一个朋友有兴趣为 CV 项目训练 tesseract OCR 引擎 我们尝试使用一些包装器 例如 PyTesser 和 pyocr 但结果目前不如我们需要的那么准确 因此 我们希望尝试训练超立方体以更好地实现我们的目的 即识别食品标签上
  • 使用 Python 将阿拉伯语或任何从右到左书写系统的字符串打印到 Linux 终端

    非常简单的例子是 city print city 我期望输出是 但实际上输出是相反的字符串 字母看起来有点不同 因为它们有开始 中间和结束形式 我无法将其粘贴到此处 因为复制粘贴会再次更正字符串的顺序 如何在 Linux 终端上正确打印阿拉
  • 每个虚拟主机的错误日志?

    在一台运行 Apache 和 PHP 5 的 Linux 服务器上 我们有多个带有单独日志文件的虚拟主机 我们似乎无法分离 phperror log虚拟主机之间 覆盖此设置
  • 重新链接匿名(未链接但打开)文件

    在 Unix 中 可以创建匿名文件的句柄 例如 使用 creat 创建并打开它 然后使用 unlink 删除目录链接 留下一个带有 inode 和存储的文件 但没有可能的方法重新打开它 此类文件通常用作临时文件 通常这就是 tmpfile
  • 进程如何知道它已收到信号

    如果我错了 请纠正我 以下是我对信号的理解 据我所知 信号生成 和信号传递有2个不同 事物 为了产生信号 操作系统只是在位数组中设置一个位 在过程控制中维护 工艺块 PCB 每一位 对应于特定信号 当设置一个位时 这意味着 该位对应的信号为
  • 使用 Vala 和 GLib 的正则表达式

    有没有一个函数 比如http php net manual en function preg match all php http php net manual en function preg match all php 使用 GLibh
  • 为什么我的代码在编译用于分析 (-pg) 时在多线程下运行比在单线程下运行慢?

    我正在写一个光线追踪器 最近 我在程序中添加了线程 以利用 i5 四核上的附加内核 奇怪的是 应用程序的调试版本现在运行速度变慢 但优化后的构建运行速度比添加线程之前更快 我将 g pg 标志传递给 gcc 以进行调试构建 并将 O3 标志
  • 设置 Vim 背景颜色

    当我尝试更改背景颜色时 vimrc或者直接在 Vim 中使用以下命令 set background dark 这根本不影响我的背景 也没有light选项 不过 当我运行 gvim 时 看起来还不错 有没有办法在不更改 Konsole 设置的
  • “./somescript.sh”和“. ./somescript.sh”有什么区别

    今天我按照一些说明在 Linux 中安装软件 有一个需要首先运行的脚本 它设置一些环境变量 指令告诉我执行 setup sh 但是我执行时犯了一个错误 setup sh 所以环境没有设置 最后我注意到了这一点并继续进行 我想知道这两种调用脚
  • tar.gz 和 tgz 是同一个东西吗? [关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我创建了 tgz 文件tar czvf filecommand then 我最终得到了一个 tgz 文件 我想知道它和tar gz 之间的
  • PHP 日志文件颜色

    我正在编写一个 PHP 日志文件类 但我想为写入文件的行添加颜色 我遇到的问题是颜色也会改变终端的颜色 我想要实现的是仅更改写入日志文件的行的颜色 class logClass extends Singleton private funct
  • 在bash中用其他文件过滤一个文件

    我有一个带有数字的文件 例如 cat file 31038467 32048169 33058564 34088662 35093964 31018168 31138061 31208369 31538163 31798862 和其他例如
  • 期待、互动,然后再次期待

    有几篇关于相同内容的帖子 但我仍然无法使我的期望脚本正常工作 我的目的是自动化一切 但保留用户输入的密码 所以脚本有 3 个部分 自动登录 给予用户交互以输入密码 将控制权交还给 Expect 脚本以继续工作 所以我有一个将生成的脚本 其中
  • 如果目录不存在,有没有办法让 mv 创建要移动到的目录?

    因此 如果我在主目录中并且想将 foo c 移动到 bar baz foo c 但这些目录不存在 是否有某种方法可以自动创建这些目录 以便你只需要输入 mv foo c bar baz 一切都会顺利吗 似乎您可以将 mv 别名为一个简单的
  • %config(noreplace) 文件上出现意外的 RPM 冲突

    我正在创建我自己的RPM using rpmbuild My RPM 包含配置文件哪个应该永远不会被覆盖 即使 RPM 包含这些配置文件的新版本 为了存档这个 我用以下标签标记了它们 config noreplace opt mypacka
  • 如何从外部模块导出符号?

    我在内核源代码树之外进行编码 有两个模块 第一个printt有一个功能printtty 将字符串打印到当前 tty 以及第二个模块hello这会调用printtty 在初始化期间 我已经添加了EXPORT SYMBOL printtty 在
  • X 服务器使用什么像素格式?

    X 服务器使用什么像素格式 RGBA ARBG BGRA 如果有任何特定格式的话 Update 我专门寻找有关颜色分量顺序和位模式的信息 你的意思是帧缓冲区格式 或者所有支持的像素图格式 无论是哪一种 都取决于您的图形硬件 驱动程序和配置
  • 选择多个模式的 awk 代码

    这是我的输入文件 比如modified txt r4544 n479826 2012 08 28 07 12 33 0400 Tue 28 Aug 2012 1 line Changed paths M branches 8 6 0 con

随机推荐

  • mysql 修改utf8mb4

    右键计算机 找到服务和应用程序 找到服务 找到MYSQL56 img src https img blog csdn net 20160518101645822 watermark 2 text aHR0cDovL2Jsb2cuY3Nkbi
  • C++ 浮点数的大小比较

    C 浮点数的大小比较 一 C 的精度损失 二 浮点数比较 三 总结 一 C 的精度损失 浮点数的存储格式 符号位 指数位 尾数位 sign bit Exponent Mantissa 浮点数分为单精度float和双精度double 32位和
  • WordPress search页面出现 404

    遇到问题 在新版 6 0 2 发现 当使用 wordpress 提供的原生searchform php搜索功能时 会出现 404 报错信息 导致界面样式错乱 问题排查 从请求发现 使用原生搜索组件 发出的请求是在根路由后面直接拼接了 s x
  • TCP滑动窗口控制流量的原理

    TCP的滑动窗口机制 TCP这个协议是网络中使用的比较广泛 他是一个面向连接的可靠的传输协议 既然是一个可靠的传输协议就需要对数据进行确认 TCP协议里窗口机制有2种 一种是固定的窗口大小 一种是滑动的窗口 这个窗口大小就是我们一次传输几个
  • 浏览器识别操作系统

    前端识别操作系统 浏览器识别操作系统 软件设计模式概述 浏览器识别操作系统
  • thread_Timer(线程中定时器)

    package com gzhs zsd thread import java util Date import java util Timer import java util TimerTask Timer定时器运用 author 谢泽
  • java 支付宝红包接入

    1 将公钥验证升级为证书验证 会得到如下三个证书 2 配置文件相关 支付宝支付相关配置 alipayconfig appid pid app private key charset utf 8 alipay public key call
  • Ubuntu 提示 Could not get lock /var/lib/dpkg/lock-frontend.解决方法

    今天在Ubuntu上安装的达梦数据库出现了一点操作错误 进行删除后还原快照就出现了这个问题 当我进行 apt 源安装还有更新时就一直显示 Waiting for cache lock Could not get lock var lib d
  • 解决VScode代码注释异常高亮

    问题描述 VScode出现代码注释后仍然高亮的问题 或者定义的函数名或者关键词没有高亮 如下所示 正常情况 异常情况 原因分析 同时装了python的扩展和vscode for python的扩展导致 两个扩展的主题配色冲突 解决方案 卸载
  • unity之InputField的文本监听

    1 创建InputField creat gt UI gt InputField 2 基本属性界面 可以再content type属性下设置InputField的文本类型 图片中无显示 3 文本监听 创建脚本 代码如下 using Syst
  • 计算机视觉————目标检测,多尺度问题理解以及FCN(全卷积神经网络)存在的弊端,问题。

    在阅读文献中 通常会遇到一个名词 XX用来解决多尺度问题 多尺度问题是什么意思 目标检测中 我们希望对于输入图片 不管图片中某个目标或大或小 我们都需要将其识别 对于小物体 我们可以将其理解为两种方式 一种是绝对小物体 即它本身占的像素就比
  • Android.bp 语法浅析-Android10.0编译系统(八)

    Android取经之路 的源码都基于Android Q 10 0 进行分析 Android取经之路 系列文章 系统启动篇 Android系统架构Android是怎么启动的Android 10 0系统启动之init进程Android10 0系
  • mysql怎么创建出生日期表_MySQL表的创建

    第1步 设计 首先要设计一张用于我想要用途的表 例如如下用于描述个人的信息类型 姓名 性别 出生日期 地址 最喜爱的食物 下面为他来指定列和数据类型 列 类型 允许值 name varchar 40 gender char 1 M F bi
  • MyBatis之枚举类型

    枚举可以让代码变得更为优雅 B格更高 当然MyBatis也是支持枚举类型的啦 首先 MyBatis内置了Enum的TypeHandler TypeHandler Java类型 JDBC类型 EnumTypeHandler Enum VARC
  • 华为机试练习(二)二叉树遍历

    题目描述 给定一棵二叉树的前序遍历和中序遍历 求其后序遍历 输入 两个字符串 其长度n均小于等于26 第一行为前序遍历 第二行为中序遍历 二叉树中的结点名称以大写字母表示 A B C 最多26个结点 输出 输入样例可能有多组 对于每组测试样
  • NodeJs模块化

    目录 一 导入模块 二 模块暴露数据 三 注意事项 一 导入模块 在模块中使用 require 传入文件路径即可引入文件 const test require me js 案例 在func js中定义一个函数 在index js使用该函数
  • kube-flannel.yml

    flannel作为k8s的集群中常用的网络组件 其yml文件的获取 建议去github中获取 具体的获取方式如下 apiVersion policy v1beta1 kind PodSecurityPolicy metadata name
  • C#实现组合优化问题算法-背包问题(附源码)

    C 实现组合优化问题算法 背包问题 附源码 背包问题是一类经典的组合优化问题 也是NP完全问题中的一种 其基本思想是 有一个容量为V的背包和n个物品 每个物品有自己的体积和价值 在保证不超过背包容量的前提下 选择某些物品装入背包 使得背包中
  • 依赖项注入

    ASP NET Core 通过依赖关系注入 DI 生成 服务 如数据库上下文 在 Program cs 中向 DI 注册 这些服务通过构造函数参数提供给需要它们的组件 在 Controllers MoviesController cs 文件
  • rsyslogd、syslog远程传输、日志存储、转存

    一 产生本地日志 1 etc resolv conf 配置文件 local0 local7是用户自定义的日志 这里我们使用local1 添加以下 local1 www admin admin log web log 配置完需要重启 rsys