任务一:搭建时间同步服务器,详细总结配置和搭建过程

      首先,我们需要确定chrony服务已经启动,通过使用“systemctl status chronyd.service"。需要注意的是,通常ROCKY系统中已经默认安装了chrony,而UBUNTU中未安装chrony,因此需在UBUNTU中手动安装,使用'apt install ntpdate rdate chrony -y"即可。之后使用“systemctl status chronyd.service"命令查看状态,都显示激活,如下图所示。

         之后我们开始自建时间同步服务器,首先在UBUNTU-13主机中作为NTP服务器使用“vim /etc/chrony/chrony.conf"对NTP服务源进行修改,将原有的服务源前添加#进行注释,并在下行添加”server ntp.aliyun.com iburst"以添加阿里云的NTP服务源,之后再添加“allow 10.0.0.0/24”与“local stratum 10”分别允许10.0.0 网段的主机将本机作为时间同步服务器以及允许本机在不能与外网同步的情况下,还能提供服务。最后使用'systemctl restart chronyd.service"重启服务。

        在NTP服务器配置完成后,我们在NTP客户机上完成配置,NTP客户机可以有多个,这里我们用ROCKY9作为客户机进行演示。首先,使用命令"vim /etc/chrony.conf"进行配置,在原来的NTP服务源前添加#进行注释,然后添加“server 10.0.0.13 iburst”作为NTP服务源,之后使用“systemctl restart chronyd.service”重启服务,最后使用“chronyc -n sources"查看NTP服务器,其中”^"表示该源为参考源,"*"表示该源是可用的,即 chrony 已经成功地从该源接收到了时间信息。

      至此,NTP服务器已配置完成。我们开始检测,首先在NTP客户机上使用“date -s "-100 day""将当前时间往前推至100天,之后可用”date“查看修改后的时间,并用”chronyc sources“查看与NTP服务器(10.0.0.13)的间隔时间,显示为-2400h(-24h*100),之后使用"systemctl restart chronyd.service"即可与NTP服务器实现时间同步,使用”date"查看时间,已显示当前时间(UTC).具体结果如下图所示。

任务二:总结常见的日志服务管理的常见日志服务

        在 CentOS5 以及之前的发行版中,其采用的 sysklogd 服务来记录和管理系统日志的。RSYSLOG 就是 Rocket-fast SYStem for LOG processing,即极速日志处理系统。rsyslog 是 CentOS6 以后的版本中使用的日志管理程序,是一个默认安装的服务,并且默认开机启动。ELK 是三个开源软件的缩写,分别表示:Elasticsearch , Logstash, Kibana , 它们都是开源软件。在后续发展的过程中增加了一个  FileBeat,这几款软件通常在一起配合使用,各司其职。ELK 主要用于部署在企业架构中,收集多台设备上多个服务的日志信息,并将其统一整合后提供给用户。

        rsyslog 主要用于单机日志管理,ELK 主要用于分布式集群环境中的日志管理。

任务三:总结日志分类, 优先级别。图文并茂解释应用如何将日志发到rsyslog,并写到目标

        在一台主机上会同时运行多个服务和软件,每个服务或软件都有可能会产生大量的日志,如果每个服务或 软件产生的日志都独立存放管理,那文件数量就太多了,如果都放到一个文件中,似乎也不是很合适,所以 rsyslog 将日志进行了分类,相同类型的日志放一个文件,这样便于管理。

        syslog 内置分类 :LOG_AUTH(#auth 安全和认证相关的日志)、LOG_AUTHPRIV(#authpriv 安全和认证相关的日志,私有)、 LOG_CRON(#cron 系统定时任务 crontab 与 at 产生的相关日志))、 LOG_DAEMON(#daemon 各守护进程产生的日志)、 LOG_FTP(#ftp ftp守护进程产生的日志)、 LOG_KERN(#kern 内核产生的日志)、 LOG_LOCAL0 -- LOG_LOCAL7(#local0-local7 自定义分类)、 LOG_LPR(#lpr 打印服务日志)、 LOG_MAIL(#mail 邮件服务日志)、 LOG_NEWS(#news 网络新闻服务产生的日志)、 LOG_SYSLOG(#syslog syslogd 服务自己的日志) 、LOG_USER(#user 用户等级)、 LOG_UUCP(#uucp uucp子系统的日志信息)、 * (#通配符,代表所有分类)

       rsyslog 在记录日志的时候,将各种产生日志的事件和行为进行了优先级的排序,使用者可以根据不同 环境(测试/生产)和需求,设置不同的级别来记录日志,这样可以保证,记录下来的内容都是是我们想要的。 rsyslog 内置优先级分类,从高到低,如果在记录日志时,设置了优先级,则只会记录设定的优先级和高于设定优先级的日志.

      优先级别(先后顺序,前面的优先级高于后面):LOG_EMERG (#emerg/panic 紧急,致命错误)、 LOG_ALERT(#alert 告警,当前状态必须立即进行纠正)、 LOG_CRIT( #crit 关键状态的警告,例如 硬件故障)、 LOG_ERR(#err/error 其它错误)、 LOG_WARNING(#warning/warn 警告级别的信息)、 LOG_NOTICE(#notice 通知级别的信息)、 LOG_INFO(#info 通告级别的信息)、 LOG_DEBUG(#debug 调试程序时的信息 )、 *(#所有级别的日志)、 none (#不需要任何日志)。

       对于日志的转发,通常分为两种环境:1.日志收集服务器: 在此模式下,rsyslog进程可以从网络中收集其他主机上的日志数据,这些主机通过 TCP 或 UDP 协议 会将日志配置为发送到另外的远程服务器,进行集中存储,方便统一管理。2.客户端: 在此模式下,rsyslog可以过滤和发送内部日志消息到本地文件夹(如/var/log)或一台可以路由到的 远程rsyslog服务器上。

       这里,我们将ubuntu-13作为server log主机并开启TCP、UDP相关功能,使用命令“vim /etc/rsyslog.conf"并去掉”module(load="imudp") input(type="imudp" port="514")“和”module(load="imtcp") input(type="imtcp" port="514")“前的#号,使之能提供TCP和UDP的rsyslog的接收。之后使用"systemctl restart rsyslog"重启服务。此外,我们将rocky9作为客户机来实现日志远程转发,在”/etc/rsyslog.d/net.conf"下添加“*.info @10.0.0.13:514",之后使用"systemctl restart rsyslog"重启服务。

        最后,我们现在客户机rocky9上使用命令发送日志”logger "this message from rokcy",之后使用“tail -1 /var/log/messages"在rokcy客户机上查看,最后使用”tail /var/log/syslog"在ubuntu服务器上查看,结果如下图所示。

  

任务四:完成功能,将3个主机(要求主机名为ip)的ssh日志,通过rsyslog服务将ssh日志写入到集中的主机上的rsyslog服务,写入到/var/log/all-ssh.log文件

        注意,由于Rocky9上面的 rsyslog的authpriv设施会强制接管ssh的日志信息,不接受任何常规手段的更改。这里我们仅使用Ubuntu场景下的ssh日志转发。

        首先,我们将Ubuntu10-0-0-13作为log服务机并依次修改客户机Ubuntu10-0-0-17和Ubuntu10-0-0-15的ssh配置,在“/etc/ssh/sshd_config"下修改配置。将”#SyslogFacility AUTH“改为”SyslogFacility LOCAL6“,并在”/etc/rsyslog.d/sshd.conf"下增加“local6.* @10.0.0.13:514”然后使用'systemctl restart ssh"和'systemctl restart rysylog"重启服务,之后在服务机Ubuntu10-0-0-13下修改“/etc/rsyslog.d/50-default.conf"中”*.*;auth,authpriv.none “改为”*.*;auth,authpriv,local6.none “     并在下行添加”local6.* /var/log/all-ssh.log",随后使用“systemctl restart rysylog"重启服务,注意需要确保TCP的syslog接收已开启,可在”/etc/rsyslog.conf“下修改。

         之后,我们分别在客户机Ubuntu10-0-0-17和Ubuntu10-0-0-15下使用”ssh 127.1"进行ssh连接登录,并尝试多次,包括输错密码和输对密码,最后我们可在服务机Ubuntu10-0-0-13下的/var/log/all-ssh.log目录中查看日志内容,具体结果如下图所示。

任务五:总结/var/log/目录下常用日志文件作用

      ROKCY中常用日志说明:*.info;mail.none;authpriv.none;cron.none   /var/log/messages (#除了mail,authpriv,cron 之外的info信息都记录)、authpriv.*      /var/log/secure (#安全认证相关日志)、mail.* /var/log/maillog(#邮件服务相关日志)、cron.* /var/log/cron(#定时任务相关日志)、*.emerg  :omusrmsg:* (#所有致命错误信息,调用omusrmsg发给所有登录用户)、uucp,news.crit /var/log/spooler(#uucp,新闻相关日志)、local7.* /var/log/boot.log9(#操作系统启动流程日志)

      ubuntu 中常见日志说明:  :msg,contains,"[UFW " /var/log/ufw.log(#ufw 服务日志)、:syslogtag, isequal, "[CLOUDINIT]" /var/log/cloud-init.log(#cloud-init服务日志)、& stop(#其它不处理)、auth,authpriv.*  /var/log/auth.log(#auth,authpriv 的日志)、*.*;auth,authpriv.none  /var/log/syslog (#除了auth,authpriv之外的日志)、kern.* /var/log/kern.log(#内核产生的日志)、mail.* /var/log/mail.log(#邮件服务日志)、mail.err /var/log/mail.err(#邮件服务err(含)以上日志)、*.emerg :omusrmsg:*(#所有致命错误信息,调用omusrmsg发给所有登录用户)

任务六:总结journalctl命令的选项及示例

    在 systemd 为 1号进程的系统版本中,systemd 提供了一个集中的方式来处理所有来自进程,应用 程序等的操作系统日志,所有这些日志事件都由 systemd 的 journald 守护进程来处理。journald 守 护进程收集所有来自 Linux 操作系统的各种日志,并将其作为二进制数据存储在文件中。也就是说,默认情况下,系统的日志一般会存两份: 一份是文本的,由rsyslog去存 一份是二进制的,由journald去存,由journctl去管理。

     直接使用journalctl查看所有日志,具体结果如下图所示。

    

      以下是一些常用命令总结:

      journalctl -f:日志跟随,显示最新日志

      journalctl -u nginx.service:查看nginx服务日志

      journalctl -r: 倒序显示日志

      journalctl -S yesterday: 查看昨天到当前的日志

      journalctl -S "2023-10-18 12:0:0" -U "2024-10-18 15:30:0": 查看 2023-10-18 12:0:0 到 2024-10-18 15:30:0 之间产生的日志

      journalctl --since "100 hour ago" --until "1 hour ago": 查看前100小时到1小时之前的日志

      journalctl -k: 查看内核日志

      journalctl --disk-usage: 查询日志占用了多少磁盘空间

      journalctl -b 0: 查看本次启动日志

      journalctl _PID=1: 根据PID查看

      journalctl _UID=0:  根据UID查看

任务七:完成将多个主机(要求主机名为ip)的logger命令日志集中写入到mysql表中

         首先,我们将Ubuntu10-0-0-13(即ip10.0.0.13,后面同理)作为mysql-server服务器主机,Ubuntu10-0-0-15作为log服务器,rocky10-0-0-12作为客户机。我们先在Ubuntu10-0-0-13中使用命令”apt install mysql-server"进行下载。之后在“/etc/mysql/mysql.conf.d/mysqld.cnf”目录下修改,在“bind-address = 127.0.0.1”,“ mysqlx-bind-address = 127.0.0.1”前添加#号,然后使用“systemctl restart mysql”重启mysql服务。之后,在Ubuntu10-0-0-15中使用命令“apt install rsyslog-mysql”下载rsyslog 的 mysql 包,下载后使用命令“scp /usr/share/dbconfig-common/data/rsyslog-mysql/install/mysql root@10.0.0.13:rsyslog.sql”传输数据库表文件到远程主机Ubuntu10-0-0-13。之后使用命令“mysql -e "create database rsyslog;"”、“mysql -e "use rsyslog; source /root/rsyslog.sql;"”、“mysql -e "show tables from rsyslog"”分别创建数据库、导入SQL文件建表、确认效果。之后使用命令“mysql -e "create user 'rsysloger'@'10.0.0.%' identified by '123456';" mysql -e "grant all on rsyslog.* to 'rsysloger'@'10.0.0.%';" mysql -e "create user 'rsysloger'@'localhost' identified by '123456';" mysql -e "grant all on rsyslog.* to 'rsysloger'@'localhost';" mysql -e "flush privileges;"”来创建用户并授权,可使用“mysql -ursysloger -p123456 -e "show tables from rsyslog"”查看效果,如下图所示。

         接下来我们在 log-server 服务器Ubuntu10-0-0-15上配置 mysql 转发,使用命令“cp /usr/share/rsyslog-mysql/rsyslog-mysql.conf.template /etc/rsyslog.d/mysql.conf”准备转发规则文件,并在“/etc/rsyslog.d/mysql.conf”中修改配置,将server项改为10.0.0.13,db项改为rsyslog,uid项改为rsysloger,之后使用命令“systemctl restart rsyslog.service”重启服务。

         最后,我们在Ubuntu10-0-0-15上使用命令“logger "this message from ubuntu10-0-0-15"“,并在Ubuntu10-0-0-13上使用命令”mysql -e "use rsyslog; select FromHost,Message from SystemEvents order by id desc limit 3;"“查看mysql数据库中的日志。在rokcy10-0-0-12中也使用命令”logger "this message from rokcy10-0-0-12"",并在Ubuntu10-0-0-13上使用命令”mysql -e "use rsyslog; select FromHost,Message from SystemEvents order by id desc limit 3;"“查看mysql数据库中的日志。具体结果如下图所示。注意,需要在rokcy10-0-0-12中的“/etc/rsyslog.d/net.conf”中添加*.info  @10.0.0.13:514,然后使用命令“systemctl restart rsyslog”重启服务。并在ubuntu10-0-0-15中“/etc/rsyslog.conf”中将“#module(load="imudp") #input(type="imudp" port="514")  #module(load="imtcp") #input(type="imtcp" port="514")”“前的#号去掉,然后使用命令“systemctl restart rsyslog”重启服务。

           

任务八:尝试使用logrotate服务切割message日志,每天切割一次,要求大于不超过3M, 保存90天的日志, 旧日志以时间为后缀,要求压缩

         首先我们先创建测试文件”dd if=/dev/zero of=/var/log/message bs=6M count=1“,之后我们在”/etc/logrotate.d/message“中写下内容,如下图所示。

       "daily"表示每天转储,”size 3M"表示当大小达到3M或以上时进行切割,"rotate"表示保存90天,“dateext"表示使用日期后缀,”dateformat -%Y%m%d"表示日期格式为年月日,“compress"表示压缩。保存后,使用命令执行”logrotate /etc/logrotate.conf",之后使用命令“ls -lh /var/log/me*"查看结果,如下图所示。

       注意,如果需要当天进行多次测试转储,则在”dateformat -%Y%m%d"上修改为””dateformat -%Y%m%d_%s",以避免多个转储文件因当天日期相同而产生错误,如下图所示。

  任务九:使用inotify + rsync和sersync实现文件的同步,并且总结两种方式的优缺点

     优缺点总结:inotify + rsync 实时同步利用内核中的 inotify 监控指定目录,当目录中的文件或数据发生变化时,立即调用 rsync 服务将 数据推送到远程主机上。Sersync 类似 于inotify,同样用于监控,但它克服了 inotify 的缺点,inotify 最大的不足是会产生重复 事件。Sersync使用多线程进行同步,还自带 crontab 功能。

      rsync:  首先使用“apt install rsync"和"yum install rsync-daemon"安装rsyncd服务和rsync命令,注意在rocky中使用"yum install rsync"只会安装rsync二进制命令,而在Ubuntu中默认都安装了。之后在ubuntu10-0-0-13(ip为10.0.0.13,后面同理)的“/etc/rsyncd.conf”中修改内容为“uid=root gid=root max connections=0 log file=/var/log/rsyncd.log pid file=/var/run/rsyncd.pid lock file=/var/run/rsyncd.lock [dir1] path=/data/dir1/ comment=rsync dir1 read only=no auth users=rsyncer secrets file=/etc/rsyncd.pwd”,之后指定密码文件“echo 'rsyncer:123456' > /etc/rsyncd.pwd”,注意还需使用'chmod 600 /etc/rsyncd.pwd"修改密码文件权限,接下里使用命令“systemctl restart rsync.service”重启服务。然后在rocky10-0-0-12中使用命令“rsync rsyncer@10.0.0.13::dir1”即可对应的目录文件信息。可在"/var/log/rsyncd.log"中查看日志报错的信息。 

      之后在rocky中准备相关文件“mkdir /data/www/dira -p cp /etc/os-release /data/www/dira/ touch /data/www/{f1,f2} cp /etc/fstab /data/www/ cp /etc/issur /data/www/”,并使用命令“echo "123456" > /etc/rsyncd.pwd”和“chmod 600 /etc/rsyncd.pwd”设定密码和权限。最后使用命令”rsync -avz --delete --password-file=/etc/rsyncd.pwd /data/www/ rsyncer@10.0.0.13::dir1“即可实现文件的同步,具体结果如下图所示。

        

 

         

         

Logo

openEuler 是由开放原子开源基金会孵化的全场景开源操作系统项目,面向数字基础设施四大核心场景(服务器、云计算、边缘计算、嵌入式),全面支持 ARM、x86、RISC-V、loongArch、PowerPC、SW-64 等多样性计算架构

更多推荐