Linux 日志、软件安装与基础设置

日志

日志记录着系统的活动信息,用来监测和排查系统问题很重要。

常见的日志文件,一般在 /var/log/ 目录里:

  • /var/log/boot.log :开机信息日志,仅本次开机的
  • /var/log/cron.log :crontab 调度日志
  • /var/log/lastlog :最近账号登录信息
  • /var/log/mail.log :往来邮件信息

日志所需的服务与程序:

  • systemd-journald.service :最主要的信息接收者,由 systemd 提供的;
  • rsyslog.service :主要记录系统与网络等服务的信息;
  • logrotate :主要在进行日志文件的轮替功能。

日志内容的一般格式,由以下部分组成:

  • 事件发生的日期与时间;
  • 发生此事件的主机名称;
  • 启动此事件的服务名称(如 systemd, CROND 等)或指令与函数名称(如 su,login..);
  • 该讯息的实际数据内容。

记录日志 rsyslog.service

检查 rsyslog 服务是否启动

ps aux | grep rsyslog
systemctl status rsyslog.service

配置开启日志
rsyslogd 针对各种服务与信息记录在某些文件的配置文件就是 /etc/rsyslog.conf 及 /etc/rsyslog.d/。
比如 /etc/rsyslog.d/50-default.conf 文件规定了什么服务、什么等级信息、需要被记录到哪里,语法如下:

# 下面以 mail 服务产品 info等级为例
mail.info   /var/log/maillog_info

以上数据简单的分为三部分说明:

  • 服务名称:通过 Linux 核心提供的 syslog 相关规范来设置数据的分类
    • kern(kernel):相对序号 0,核心 (kernel) 产生的信息
    • user :相对序号 1,在使用者层级所产生的信息
    • mail :相对序号 2,邮件收发有关的信息记录
    • daemon :相对序号 3,系统的服务所产生的信息
    • auth :相对序号 4,主要与认证/授权有关的机制
    • syslog :相对序号 5,由 syslog 相关协定产生的信息,其实就是 rsyslogd 这支程序本身产生的信息
    • lpr :相对序号 6,打印相关的信息
    • news :相对序号 7,与新闻群组服务器有关的东西
    • uucp :相对序号 8,早期用于 unix 系统间的程序数据交换
    • cron :相对序号 9,例行性工作调度 cron/at 等产生的信息
    • authpriv :相对序号 10,与 auth 类似,但记录较多帐号私人的信息,包括 pam 模块的运行等
    • ftp :相对序号 11,与 FTP 通讯协定有关的讯息输出
    • local0 ~ local7 :相对序号 16~23,保留给本机用户使用的一些登录文件讯息,较常与终端机互动
  • 日志等级:日志信息分为7个主要等级
    • debug :等级值 7,用来 debug (除错) 时产生的讯息数据
    • info :等级值 6,一些基本的讯息说明
    • notice :等级值 5,虽然是正常信息,但比 info 还需要被注意到的一些信息内容
    • warn :等级值 4,警告信息,可能有问题,单不影响某个服务运行
    • err :等级值 3,一些重大错误信息,如配置文件错误导致服务无法启动等
    • crit :等级值 2,比 error 还要严重的错误信息,这个 crit 是临界点 (critical)的缩写,这个错误已经很严重了
    • alert :等级值 1,警告警告,比crit更严重
    • emerg(panic):等级值 0,疼痛等级,值系统已经几乎要死机的状态。通常是硬件出问题导致整个核心无法运行。
  • 日志等级连接符:在服务与日志等级的之间有个连接符,有不同含义
    • . :代表比后面还要严重的等级(含该等级)都被记录下来。如 mail.info 当mail信息等于严重于info都会记录
    • .= :代表所需要的等级就是后面接的等级而已, 其他的不要
    • .! :代表不等于, 亦即是除了该等级外的其他等级都记录
  • 日志记录的文件名或设备
    • 文件的绝对路径:通常放在 /var/log 目录里的文件
    • 打印机或其他:例如 /dev/lp0 这个打印机设备
    • 使用者名称:显示给使用者
    • 远端主机:日志传输给远端主机,如 @1.2.3.4,当然远端主机也要支持
    • * :代表“目录在线上的所有人”

远程日志服务器设置
如果有多台Linux主机,想让日志都记录指定一台主机上,方便查询日志数据。可以设置一台远程日志服务器,很简单,方法如下:

  • 鉴权:虽然rsyslog有配置项$AllowedSender限制来访主机IP,但更推荐使用Linux防火墙机制限制访问的远程主机IP。
# 1. Server端:在指定作为日志服务器的主机上修改 rsyslogd 配置文件
vim /etc/rsyslog.conf
# 找到下面的几行,将注释取消,此处示例是使用TCP端口 514,可以更换其他端口或使用UDP协议
# Provides TCP syslog reception
$ModLoad imtcp
$InputTCPServerRun 514

# 2. 重启并观察 Server 端的 rsyslogd 服务
systemctl restart rsyslog.service
netstat -ltnp | grep syslog

# 3. Client端:其他需要将日志同步到远程日志服务器的,修改 rsyslogd 配置文件,追加一行
vim /etc/rsyslog.conf
# 远端如果是TCP设置如下
*.*     @@193.122.116.88:514
# 远端如果是UDP设置如下
*.*     @193.122.116.88:514

日志轮替 logrotate

随着日志数据的不断写入,日志文件也会逐渐增大。使用 logrotate 可以定期将日志文件替换及删除。

file

logrotate 配置文件

  • \/etc/logrotate.conf :主配置文件,所有日志都会读取
  • \/etc/logrotate.d/ :针对不同服务的日志轮替单独设置

主配置文件,也是各类服务日志的默认值 vim /etc/logrotate.conf

# 默认每个礼拜对日志文件进行一次 rotate 的工作
weekly
# 保留几个日志文件呢?默认是保留四个
rotate 4
# 由于日志文件被更名,因此创建一个新的来继续储存之意
create
# 让被轮替的文件名称加上日期作为文件名
dateext
# 被更动的登录文件是否需要压缩?如果登录文件太大则可考虑此参数启动
#compress

特定服务日志配置轮替,比如 vim /etc/logrotate.d/php7.4-fpm

/var/log/php7.4-fpm.log {
        rotate 12
        weekly
        missingok
        notifempty
        compress
        delaycompress
        postrotate
                /usr/lib/php/php7.4-fpm-reopenlogs
        endscript
}

logrotate 命令
logrotate [-vf] logfile

  • -v :启动显示模式,会显示 logrotate 运行的过程
  • -f :不论是否符合配置文件的数据,强制每个登录文件都进行 rotate 的动作
logrotate -v /etc/logrotate.conf

由于轮替命令是放到 crontab 里,每天系统会自动执行。

记录日志 systemd-journald.service

systemd-journald 服务是将日志信息记录到内存里,效率性能更好。

journalctl 命令
journalctl [-nrpf] [–since TIME] [–until TIME] _option
选项与参数:
默认会列出全部的 log 内容,从旧的输出到最新的日志

  • -n :列出最近的几行的日志
  • -r :反向输出,从最新的输出到最旧的数据
  • -p :后接日志等级,列出特定日志等级的信息,如 err、info
  • -f :类似 tail -f,持续显示 journal 日志的内容
  • –since –until :设置日志的开始与结束的时间
  • _SYSTEMD_UNIT= unit.service :只输出 unit.service 服务的日志
  • _COMM=bash :只输出与 bash 有关的日志
  • _PID=pid :只输出 PID 进程的日志
  • _UID=uid :只输出 UID 为 uid 的日志
  • SYSLOG_FACILITY=[0-23] :使用 syslog.h 规范的服务相对序号来调出日志
# 列出全部日志
journalctl

# 列出最近20条日志
journalctl -n 20

# 列出固定时间内的日志
journalctl --since "2022-12-14 00:00:00" --until "2022-12-15 18:00:00"
journalctl --since today

# 查询cron服务的日志
journalctl _SYSTEMD_UNIT=cron.service -n 20

# 查询 login 执行的日志
journalctl _COMM=login -n 20

# 查询 error 日志等级
journalctl -p err

# 根据服务相对序号查询日志(auth,authpriv)
journalctl SYSLOG_FACILITY=4 SYSLOG_FACILITY=10

# 持续监测
journalctl -f

journal 持久化存储
journal 一般存放在内存里,关机重启后数据就清空了。可以将这些日志存储到文件里,下次重启后系统会自动读取这些日志,实现了持久化。(有些系统默认已开启了,比如我用的Ubuntu)

如果系统没开启 journal 持久化存储,可以用以下方法设置:

# 1. 先处理所需要的目录与相关权限设置
mkdir /var/log/journal
chown root:systemd-journal /var/log/journal
chmod 2775 /var/log/journal

# 2. 重新启动 systemd-journald 并且观察备份的日志数据
systemctl restart systemd-journald.service
ll /var/log/journal/

由于已经有 rsyslog.service 存储日志到文件里了,journal 建议不做持久化存储,放在内存里。(避免日志增多,占用过多的系统容量)

日志分析

如果日志文件较多,通过普通的Linux命令无法找到所需数据或需要更详细的汇总日志数据,一般会采用专业的日志分析工具。
目前看到使用较多的是:ELK – 由 Elasticsearch、Kibana 和 Logstash 组成。

rsyslog 可以转发到 ELK,这样就能对日志进行详细分析。

系统基础设置

系统常见的一些基础设置,比如时间、语言等

日期与时间设置

使用 date 命令可以查看当前时间。
timedatectl 命令,显示与设置时间、时区等

  • list-timezones :列出系统上所有支持的时区名称
  • set-timezone :设置时区位置
  • set-time :设置时间
  • set-ntp :设置网络校时系统
# 显示当前时区与时间
timedatectl

# 查找特定时区
timedatectl list-timezones | grep -i new

# 设置时区
timedatectl set-timezone "Asia/Shanghai"

# 时间调整
timedatectl set-time "2022-12-15 12:02"

# 手动网络校时,需要安装ntpdate
apt install ntpdate
# NTP服务器地址这里用的阿里云,也可以使用其他的
ntpdate ntp.aliyun.com
# 另外还有可以通过定时任务,定期自动校时的功能

语言设置

使用 locale 查看当前语言。
localectl 命令,显示与设置语言

  • set-locale :设置每项
# 查看当前语言
localectl

# 设置语言
localectl set-locale LANG=en_US.utf8
localectl set-locale LANGUAGE=en_US

备份策略

这部分内容还没梳理清楚,以后再完善。

备份有用的命令:

  • rsync :镜像备份,对两个目录进行镜像,非常快速的备份工具。同时支持上传到远程服务器

rsync 本地备份

# 将 /home/ 镜像到 /backupdata/home/
# 如果数据改动不多,第二次执行时速度很快,应该时差异备份
rsync -av /home /backupdata/

使用 rsync 上传备份数据 vim /backups/rsync.sh

#!/bin/bash
remotedir=/home/ubuntu/backup/company/
basedir=/backups/backup_etc/
host=193.122.116.88
id=ubuntu

# 下面为程序阶段,不需要修改
rsync -av -e ssh $basedir ${id}@${host}:${remotedir}

软件安装

Linux 软件安装有两种方式:

  • 源代码编译安装:下载软件的源代码,通过编译器的编译生成 Linux 系统能够认识的二进制可执行文件 binary file。优点是可定制功能,缺点是费时费力,对非专业人员不友好
  • 使用发行版提供的软件包:通过命令直接从发行版处下载安装已经编译好的软件可执行文件,不用再重复编译。优点是方便、效率高、自动解决依赖,缺点是无法定制功能、各个发行版之间软件可执行文件可能不通用(特别注意哦!)。目前Linux软件包有两种:
    • dpkg :最早是由 Debian 社区开发的,通过 dpkg 机制提供软件下载安装。衍生于 Debian的其他发行版也支持此机制,如Ubuntu,B2D等。软件包后缀是 .deb
    • RPM :由Red Hat公司开发的,与dpkg一样提供软件下载安装。其他有些发行版采用这个,如 Fedora、CentOS、SuSE等。软件包后缀是 .rpm

由于我用的Ubuntu 和 Debian 较多,下面介绍下 dpkg。

dpkg

dpkg 是Debian的一个底层包管理工具,主要用于对已下载到本地和已安装的软件包进行管理。

deb 软件包名规则
格式为:Package_Version-Build_Architecture.deb,如 nano_1.3.10-2_i386.deb

  • 软件包名称(Package Name):nano
  • 版本(Version Number):1.3.10
  • 修订号(Build Number):2
  • 平台( Architecture ):i386

dpkg 命令
选项与参数

  • -i package-name.deb :安装软件包,后接deb包完整名称
  • –unpack package-name.deb :解包
  • –configure package-name.deb :配置软件包
  • -c package-name.deb :列出deb包内容
  • -r package-name :移除软件包,单保留配置文件
  • -P package-name :清除软件包所有文件
  • -l package-name-pattern :列出已安装的软件,参数可以留空列出全部
  • -L package-name :查看package-name对应的软件包安装的文件及目录
  • -p package-name :显示包的具体信息
  • -s package-name :查看package-name(已安装)对应的软件包信息
  • -S filename-search-pattern :从已经安装的软件包中查找包含filename的软件包名称
# 列出已安装软件包
dpkg -l

# 列出系统上安装的与dpkg相关的软件包
dpkg -l *dpkg*

apt

虽然使用 dpkg 解决了软件安装编译的问题,但是当依赖关系不满足时仍需要手动解决,而 apt 工具就是解决这个问题的。
发行版已分析解决了软件的依赖关系,并记录下来,当用户安装某个软件时,通过记录清单就能与本地 dpkg 存在的软件对比,从而下载所需的依赖软件。

Ubuntu采用集中式的软件仓库机制,将各式各样的软件包分门别类地存放在软件仓库中,进行有效地组织和管理。然后,将软件仓库置于许许多多的镜像服务器中,并保持基本一致。这样,所有的Ubuntu用户随时都能获得最新版本的安装软件包。因此,对于用户,这些镜像服务器就是他们的软件源(Reposity)。

软件源
由于每位用户所处的网络环境不同,不可能随意地访问各镜像站点。Ubuntu中可以自定义软件源:

  • \/etc/apt/sources.list : 默认软件源
  • \/etc/apt/sources.d/ : 各类软件可以单独配置软件源

apt-get 命令
选项与参数,apt 与此命令基本一致

  • update :更新源
  • dist-upgrade :升级系统到相应的发行版
  • upgrade :更新所有已经安装的软件包
  • install package_name :安装软件包(加上 –reinstall重新安装),package_name=version 安装指定版本的软件包
  • remove package_name :卸载一个已安装的软件包(保留配置文件)
  • purge package_name :移除软件包(删除配置信息)
  • check :检查是否有损坏的依赖
  • autoclean :删除你已经卸载的软件
  • clean :把安装的软件的备份也删除,不过这样不会影响软件的使用

apt-cache 命令
选项与参数

  • depends packagename :了解使用依赖
  • rdepends packagename :查看该包被哪些包依赖
  • search packagename :搜索包
  • show packagename :获取包的相关信息,如说明、大小、版本等
  • showpkg packagename :显示软件包的大致信息
# 更新源
apt-get update

# 安装软件
apt-get install nginx

# 搜索软件
apt-cache search php

参考资料

未经作者允许,禁止转载。
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇