陆菲 發表於 2020-3-8 11:22:00

Centos 7/8 日志管理

<h3 class="md-end-block md-heading"><span class="md-plain md-expand" style="font-family: &quot;courier new&quot;, courier">LogSystem</span></h3>
<p class="md-end-block md-p md-focus"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">CentOS 7/8 使用<strong><span class="md-plain">systemd-journald</span></strong><span class="md-plain">来做日志中心库,使用<strong><span class="md-plain">rsyslog</span></strong><span class="md-plain">来做日志持久化,使用<strong><span class="md-plain">logrotate</span></strong><span class="md-plain">来做日志文件轮转。</span></span></span></span></p>
<p class="md-end-block md-p md-focus">&nbsp;</p>
<h3 class="md-end-block md-heading md-focus"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">systemd-Journald</span></h3>
<p class="md-end-block md-p"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">systemd-journald 守护进程提供一种改进的日志管理服务,可以收集来自内核,启动过程的早期阶段,标准输出,系统日志,以及守护进程启动和运行期间的错误的消息。</span></p>
<p class="md-end-block md-p"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">它将这些消息写到一个结构化的事件日志中,默认情况下不在重新启动之间保留。</span></p>
<p class="md-end-block md-p">&nbsp;</p>
<h3 class="md-end-block md-p"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">持久化systemd日志</span></h3>
<p class="md-end-block md-p"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">默认情况下,<code>systemd</code><span class="md-plain"> 的日志保存在 <code>/run/log/journal</code><span class="md-plain"> 中,系统重启就会清除,这是RHEL7的新特性。通过新建 <code>/var/log/journal</code><span class="md-plain"> 目录,日志会自动记录到这个目录中,并永久存储。</span></span></span></span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier"># <span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">. 修改journal存储模式
# <span style="color: rgba(0, 0, 255, 1)">sed</span> -i <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">/^#Storage/cStorage=persistent</span><span style="color: rgba(128, 0, 0, 1)">"</span> /etc/systemd/<span style="color: rgba(0, 0, 0, 1)">journald.conf

# </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">. 先处理所需要的目录与相关权限设置 ( 可选,服务重启后会自动创建该目录 )
# <span style="color: rgba(0, 0, 255, 1)">mkdir</span> /var/log/<span style="color: rgba(0, 0, 0, 1)">journal
# <span style="color: rgba(0, 0, 255, 1)">chown</span> root:systemd-journal /var/log/<span style="color: rgba(0, 0, 0, 1)">journal
# <span style="color: rgba(0, 0, 255, 1)">chmod</span> <span style="color: rgba(128, 0, 128, 1)">2775</span> /var/log/<span style="color: rgba(0, 0, 0, 1)">journal


# </span><span style="color: rgba(128, 0, 128, 1)">3</span>. 重新启动 systemd-<span style="color: rgba(0, 0, 0, 1)">journald 并且观察备份的日志数据!
# systemctl restart systemd-<span style="color: rgba(0, 0, 0, 1)">journald.service
# ll /var/log/journal/<span style="color: rgba(0, 0, 0, 1)">
drwxr</span>-sr-x. <span style="color: rgba(128, 0, 128, 1)">2</span> root systemd-journal <span style="color: rgba(128, 0, 128, 1)">27</span> Aug <span style="color: rgba(128, 0, 128, 1)">20</span> <span style="color: rgba(128, 0, 128, 1)">02</span>:<span style="color: rgba(128, 0, 128, 1)">37</span> 309eb890d09f440681f596543d95ec</span></pre>
</div>
<p>&nbsp;</p>
<h3><span style="font-family: &quot;courier new&quot;, courier">journalctl常用命令</span></h3>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier"><span style="color: rgba(0, 0, 0, 1)"># 以flow形式查看日志
$ journalctl </span>-<span style="color: rgba(0, 0, 0, 1)">f

# 查看内核日志
$ journalctl </span>-<span style="color: rgba(0, 0, 0, 1)">k

# 查看指定服务日志
$ journalctl </span>-<span style="color: rgba(0, 0, 0, 1)">u docker.serivce

# 查看指定日期日志
$ journalctl </span>--since=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2018-09-21 10:21:00</span><span style="color: rgba(128, 0, 0, 1)">"</span> -<span style="color: rgba(0, 0, 0, 1)">u docker
$ journalctl </span>--since=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2018-09-21 10:21:00</span><span style="color: rgba(128, 0, 0, 1)">"</span> --<span style="color: rgba(0, 0, 255, 1)">until</span>=<span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">2018-09-21 10:22:00</span><span style="color: rgba(128, 0, 0, 1)">"</span> -<span style="color: rgba(0, 0, 0, 1)">u docker

# 查看指定级别日志
$ journalctl </span>-p <span style="color: rgba(128, 0, 128, 1)">3</span> -<span style="color: rgba(0, 0, 0, 1)">u docker.service
操作系统提供了从0 (emerg) 到 </span><span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)"> (debug) 一共7个级别的日志,7个级别的含义为:
    </span><span style="color: rgba(128, 0, 128, 1)">0</span><span style="color: rgba(0, 0, 0, 1)">: emerg
    </span><span style="color: rgba(128, 0, 128, 1)">1</span><span style="color: rgba(0, 0, 0, 1)">: alert
    </span><span style="color: rgba(128, 0, 128, 1)">2</span><span style="color: rgba(0, 0, 0, 1)">: crit
    </span><span style="color: rgba(128, 0, 128, 1)">3</span><span style="color: rgba(0, 0, 0, 1)">: err
    </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">: warning
    </span><span style="color: rgba(128, 0, 128, 1)">5</span><span style="color: rgba(0, 0, 0, 1)">: notice
    </span><span style="color: rgba(128, 0, 128, 1)">6</span>: <span style="color: rgba(0, 0, 255, 1)">info</span>
    <span style="color: rgba(128, 0, 128, 1)">7</span><span style="color: rgba(0, 0, 0, 1)">: debug
   
# 查看日志占用的磁盘空间
$ journalctl </span>--disk-<span style="color: rgba(0, 0, 0, 1)">usage

# 设置日志占用的空间
$ journalctl </span>--vacuum-size=<span style="color: rgba(0, 0, 0, 1)">500M

# 设置日志保存的时间
$ journalctl </span>--vacuum-<span style="color: rgba(0, 0, 255, 1)">time</span>=<span style="color: rgba(0, 0, 0, 1)">1month

# 检查日志文件一致性
$ journalctl –</span>-verify</span></pre>
</div>
<p>&nbsp;</p>
<h3 class="md-end-block md-heading"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">rsyslog</span></h3>
<p class="md-end-block md-p"><span style="font-family: &quot;courier new&quot;, courier"><code>rsyslog</code><span class="md-plain"> 服务随后根据优先级排列日志信息,将它们写入到 <code>/var/log</code><span class="md-plain">目录中永久保存</span></span></span></p>
<p class="md-end-block md-p md-focus"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">rsyslog 配置文件 /etc/rsyslog.conf</span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier">*.<span style="color: rgba(0, 0, 255, 1)">info</span>;mail.none;authpriv.none;cron.none                /var/log/<span style="color: rgba(0, 0, 0, 1)">messages

# The authpriv </span><span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)"> has restricted access.
authpriv.</span>*                                              /var/log/<span style="color: rgba(0, 0, 0, 1)">secure

# Log all the mail messages </span><span style="color: rgba(0, 0, 255, 1)">in</span><span style="color: rgba(0, 0, 0, 1)"> one place.
mail.</span>*                                                /var/log/<span style="color: rgba(0, 0, 0, 1)">maillog

# Log cron stuff
cron.</span>*                                                /var/log/<span style="color: rgba(0, 0, 0, 1)">cron

# Save news errors of level crit and higher </span><span style="color: rgba(0, 0, 255, 1)">in</span> a special <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">.
uucp,news.crit                                          </span>/var/log/<span style="color: rgba(0, 0, 0, 1)">spooler

# Save boot messages also to boot.log
local7.</span>*                                                /var/log/boot.log</span></pre>
</div>
<p>&nbsp;</p>
<h3 class="md-end-block md-heading"><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">logrotate</span></h3>
<p class="md-end-block md-p md-focus"><span style="font-family: &quot;courier new&quot;, courier"><span class="md-plain">logrotate ‐ rotates, compresses, and mails system logs.</span><span class="md-softbreak"> <span class="md-plain">logrotate是Linux自带的日志切割工具,logrotate是基于cron运行的。</span></span></span></p>
<p><span class="md-plain" style="font-family: &quot;courier new&quot;, courier">logrotate的配置文件是<code>/etc/logrotate.conf</code><span class="md-plain">,其定义了logrotate的玩法:每周,最多4周,文件名加时间后缀,默认不压缩。</span></span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier"># see <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">man logrotate</span><span style="color: rgba(128, 0, 0, 1)">"</span> <span style="color: rgba(0, 0, 255, 1)">for</span><span style="color: rgba(0, 0, 0, 1)"> details
# rotate log files weekly
weekly

# keep </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)"> weeks worth of backlogs
rotate </span><span style="color: rgba(128, 0, 128, 1)">4</span><span style="color: rgba(0, 0, 0, 1)">

# create new (empty) log files after rotating old ones
create

# use </span><span style="color: rgba(0, 0, 255, 1)">date</span> as a suffix of the rotated <span style="color: rgba(0, 0, 255, 1)">file</span><span style="color: rgba(0, 0, 0, 1)">
dateext

# uncomment this </span><span style="color: rgba(0, 0, 255, 1)">if</span><span style="color: rgba(0, 0, 0, 1)"> you want your log files compressed
#compress

# RPM packages drop log rotation information into this directory
include </span>/etc/logrotate.d/<span style="color: rgba(0, 0, 0, 1)">

# system</span>-specific logs may be also be configured here.</span></pre>
</div>
<p><span style="font-family: &quot;courier new&quot;, courier"><strong><span class="md-plain">在<code>/etc/logrotate.d/</code><span class="md-plain">中定义了需要切割Service的文件,syslog也在其中。</span></span></strong></span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier"># <span style="color: rgba(0, 0, 255, 1)">cat</span> /etc/logrotate.d/<span style="color: rgba(0, 0, 0, 1)">syslog
</span>/var/log/<span style="color: rgba(0, 0, 0, 1)">cron
</span>/var/log/<span style="color: rgba(0, 0, 0, 1)">maillog
</span>/var/log/<span style="color: rgba(0, 0, 0, 1)">messages
</span>/var/log/<span style="color: rgba(0, 0, 0, 1)">secure
</span>/var/log/spooler</span></pre>
</div>
<p><span style="font-family: &quot;courier new&quot;, courier"><strong>logrotate是基于cron运行的,其脚本路径为 /etc/cron.daily/logrotate</strong></span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier">$ <span style="color: rgba(0, 0, 255, 1)">cat</span> /etc/cron.daily/<span style="color: rgba(0, 0, 0, 1)">logrotate
#</span>!/bin/<span style="color: rgba(0, 0, 255, 1)">sh</span>

/usr/sbin/logrotate /etc/<span style="color: rgba(0, 0, 0, 1)">logrotate.conf
EXITVALUE</span>=$?
<span style="color: rgba(0, 0, 255, 1)">if</span> [ $EXITVALUE != <span style="color: rgba(128, 0, 128, 1)">0</span> ]; <span style="color: rgba(0, 0, 255, 1)">then</span>
    /usr/bin/logger -t logrotate <span style="color: rgba(128, 0, 0, 1)">"</span><span style="color: rgba(128, 0, 0, 1)">ALERT exited abnormally with [$EXITVALUE]</span><span style="color: rgba(128, 0, 0, 1)">"</span>
<span style="color: rgba(0, 0, 255, 1)">fi</span><span style="color: rgba(0, 0, 0, 1)">
exit $EXITVALUE</span></span></pre>
</div>
<p><span style="font-family: &quot;courier new&quot;, courier"><strong>logrotate基于CRON运行,所以执行时间由CRON控制</strong></span></p>
<ul>
<li><span style="font-family: &quot;courier new&quot;, courier"><strong><span class="md-plain md-expand">ubuntu查看/etc/crontab</span></strong></span></li>
<li><span style="font-family: &quot;courier new&quot;, courier"><strong><span class="md-plain md-expand"><span class="md-softbreak"><span class="md-plain md-expand">centos查看/etc/anacrontab</span></span></span></strong></span></li>
</ul>
<p><span class="md-plain md-expand" style="font-family: &quot;courier new&quot;, courier"><span class="md-softbreak"><span class="md-plain md-expand"><span class="md-expand">没错,run-parts是运行一个目录中的所有脚本或程序</span></span></span></span></p>
<p><span class="md-plain md-expand" style="font-family: &quot;courier new&quot;, courier"><span class="md-softbreak"><span class="md-plain md-expand"><span class="md-expand"><span class="md-softbreak"><span class="md-expand">没错,logrotate脚本是/etc/cron.daily/目录下面的脚本,CRON每天05:01运行/etc/cron.daily/目录下面的所有脚本</span></span></span></span></span></span></p>
<p>&nbsp;</p>
<p><span style="font-family: &quot;courier new&quot;, courier"><strong><span class="md-plain md-expand"><span class="md-softbreak"><span class="md-plain md-expand"><strong>最后看一下Nginx的logrotate</strong></span></span></span></strong></span></p>
<div class="cnblogs_code">
<pre><span style="font-family: &quot;courier new&quot;, courier"># <span style="color: rgba(0, 0, 255, 1)">cat</span> /etc/logrotate.d/<span style="color: rgba(0, 0, 0, 1)">nginx
</span>/var/log/nginx<span style="color: rgba(0, 128, 0, 1)">/*</span><span style="color: rgba(0, 128, 0, 1)">log {
    create 0664 nginx root
    daily
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    postrotate
      /bin/kill -USR1 `cat /run/nginx.pid 2&gt;/dev/null` 2&gt;/dev/null || true
    endscript
}</span></span></pre>
</div>
<p>&nbsp;</p><br><br>
来源:https://www.cnblogs.com/vincenshen/p/12441492.html
頁: [1]
查看完整版本: Centos 7/8 日志管理