进程及服务基础

进程及服务基础

1.系统启动流程

  • 系统启动过程步骤:

    • BIOS加电自检(POST)、检测硬件、决定启动介质、找到引导扇区
    • 读取并且执行第一个开机设备中的MBR的bootloader(grub2程序) GRUB2 是一个用于计算机寻找操作系统内核并加载其到内存的智能程序
    • 依据bootloader设置去加载内核,内核开始侦测硬件并加载驱动程序
    • 在硬件驱动加载成功后,内核会主动呼叫systemd程序,并以 default.target流程开机 systemd
      • systemd执行sysinit.target初始化系统及basic.target准备操作系统
      • systemd启动multi-user.target下的本机与服务器服务
      • systemd执行multi-user.target下的/etc/rc.d/rc.local文件
      • systemd执行multi-user.target下的getty.target及登录服务
      • systemd执行graphical需要的服务
  • boot loader主要功能如下:

    • 提供选单:用户可以选择不同的开机项目
    • 载入核心文件:直接指向可开机的程序区域来开始操作系统
    • 转交其他loader:将开机管理功能转交给其他Loader负责

2.配置GRUB2

  • 1.进入单用户模式
    2.在/etc/grub.d/00_header 文件末尾,添加以下内容:set superusers=‘admin’
    password adminj pwd123
    EOF
    3.重新编译生成grub.cfg文件

  • root改密码

    • 1.重启centos系统进入启动界面。如图输入e
      2.指定的位置输入设置 rd.break console=tty0 然后根据提示,使用ctrl+x进入单用户模式
      3.重新挂在文件系统:mount -o remount,rw /sysroot/
      4.改变根目录:chroot /sysroot/
      6.修改密码
      7.根目录下创建.autorelabel的隐藏文件

3.解决启动故障

  • 1.重启系统,并挂载光盘
    2.进入界面选择troubleshooting
    3.选择resure a red hat enterprise linux system

    rpm -vih /media/Packages/kernel-3.10.0-123.e17.x86_64.rpm --force # 安装内核
    grub2-install /dev/sda # 安装gurb2

    4.fdisk -l 看看启动分区是哪个,有星号的就是

    5.重装一下 grub2 到启动分区就可以了

  • 解决方式是重新安装图形化界面 、

    • yum grouplist
    • yum groupinstall ‘Server with GUI’

4.systemd管理服务

  • Systemd的简介和特点:Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度。systemd和ubuntu的upstart是竞争对手,从 15.04版本开始,Ubuntu也已经采systemd作为其标准的系统初始化系统。

  • Systemd 的基本概念

    • 单元(unit)的概念

      Service .service 描述一个系统服务
      Socket .socket 描述一个进程间通信的套接字
      Device .device 描述一个内核识别的设备文件
      Mount .mount 描述一个文件系统的挂载点
      Automount .automount 描述一个文件系统的自动挂载点
      Swap .swap 描述一个内存交换设备或交换文件
      Path .path 描述一个文件系统中文件或目录
      Timer .timer 描述一个定时器(用于实现类似cron的调度任务)
      Snapshot .snapshot 用于保存一个systemd的状态
      Scope .scope 使用systemd的总线接口以编程的方式创建外部进程
      Slice .slice 描述居于Cgroup的一组通过层次组织的管理系统进程
      Target .target 描述一组systemd的单元
      
    • 命令

      # 重启系统
      $ sudo systemctl reboot
      # 关闭系统,切断电源
      $ sudo systemctl poweroff
      # CPU停止工作
      $ sudo systemctl halt
      # 暂停系统
      $ sudo systemctl suspend
      # 让系统进入冬眠状态
      $ sudo systemctl hibernate
      # 让系统进入交互式休眠状态
      $ sudo systemctl hybrid-sleep
      # 启动进入救援状态(单用户状态)
      $ sudo systemctl rescue
      systemd-analyze命令用于查看启动耗时。
      # 查看启动耗时
      $ systemd-analyze
      # 查看每个服务的启动耗时
      $ systemd-analyze blame
      # 显示瀑布状的启动过程流
      $ systemd-analyze critical-chain
      # 显示指定服务的启动流
      $ systemd-analyze critical-chain atd.service
      systemctl list-units命令可以查看当前系统的所有 Unit 。
      # 列出正在运行的 Unit
      $ systemctl list-units
      # 列出所有Unit,包括没有找到配置文件的或者启动失败的
      $ systemctl list-units --all
      # 列出所有没有运行的 Unit
      $ systemctl list-units --all --state=inactive
      # 列出所有加载失败的 Unit
      $ systemctl list-units --failed
      # 列出所有正在运行的、类型为 service 的 Unit
      $ systemctl list-units --type=service
      systemctl最常用的命令如下:
      systemctl is-enabled servicename.service #查询服务是否开机启动
      systemctl enable *.service #开机运行服务
      systemctl disable *.service #取消开机运行
      systemctl start *.service #启动服务
      systemctl stop *.service #停止服务
      systemctl restart *.service #重启服务
      systemctl reload *.service #重新加载服务配置文件
      systemctl status *.service #查询服务运行状态
      systemctl mask *.service #禁用指定服务
      systemctl unmask *.service #激活指用服务
      systemctl daemon-reload #重新载入 systemd,扫描新的或有变动的单元
      

5.Linux模块管理

  • 第一列:模块名 比如iptable_net 模块,来提供iptable防火墙功能

  • 第二列:Size:模块大小

  • 第三列:Used by 表示当前有几个模块依赖于该模块;之后内容为 依赖模 块的信息

  • modinfo : 模块具体信息查看

  • modprobe 挂载新模块以及新模块相依赖的模块

    • modprobe nf_conntrack_ftp 加载模块
    • modprobe -r nf_conntrack_ftp 移除模块
  • 开机加载模块

    • /etc/modules-load.d/.conf 单纯要核心加载模块的位置
    • /etc/modprobe.d/.conf 可以加上模块参数的位置
    • 如果想立即生效
      • systemctl restart systemd-modules-load.service

6. 进程和计划任务

	如何产生一个进程:
		1)执行程序或者是命令
		2)计划任务
	如何终止一个进程:
		1)程序或者是命令执行完毕,自动终止
		2)强制终止进程

6.1 进程管理

6.1.1 程序和进程的关系
  • 程序:

    	通常为二进制文件,存放在硬盘介质中,是可执行的代码和数据
    
  • 进程:

    	程序被触发后,执行者的权限与属性、程序的程序代码与所需数据等都会被加 载到内存中,操作系统并给予这个内存内的单元一个标识符(PID),进程就是正在运行中的 程序。
    
  • 父子进程:

    	进程创建的进程为子进程
    
  • fork and exec 进程呼叫的流程:

    	系统先以fork的方式复制一个与父进程相同的暂存进程,这个进程与父进程唯一的区别就是PID不同,并增加一个PPID(父进程ID)
    	暂存进程以exec的方式加载实际要执行的程序,变成新进程。
    
  • 服务(daemon)。大致分为两类:

    	系统本身所需要的服务:crond、atd、rsyslogd等
    	负责网络的服务:named、postfix等,会启动一个端口,供外部客户端连接
    
6.1.2 静态及动态查看进程
  • 静态进程信息查看:

    • ps :

      • a:显示终端下所有进程信息,包括其他用户的进程
      • u:显示进程的拥有者
      • x:显示当前用户所在终端下的进程信息,和a一起用,显示所有进程
      • -e:显示系统内所有进程信息
      • -l:长格式显示
      • -f:完整的格式显示
    • 示例:

      ps -ef | grep httpd
      UID PID PPID C STIME TTY TIME CMD
      root 5088 1 2 14:35 ? 00:00:00 /usr/sbin/httpd
      apache 5091 5088 0 14:35 ? 00:00:00 /usr/sbin/httpd
      apache 5092 5088 0 14:35 ? 00:00:00 /usr/sbin/httpd
      
      #UID:进程的拥有者
      #PID:进程号
      #PPID:父进程号
      #C:cpu使用的资源百分比
      #STIME: 开始时间
      #TTY: 运行进程的终端名字
      #TIME:进程运行的时间
      #CMD:命令
      
      ps aux 显示结果
      USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND
      root 1 0.0 0.1 19348 1332 ? Ss Aug02 0:02 /sbin/init
      root 2 0.0 0.0 0 0 ? S Aug02 0:00 [kthreadd]
      root 3 0.0 0.0 0 0 ? S Aug02 0:02 [migration/0]
      #拥有者 进程号 占用cpu百分比 占用内存百分比 占用的虚拟内存的大小 驻留内存大小 终端 进程状态 开始时间 运行时间 命令
      
      #STAT:进程状态
      #R:该进程正在运行
      #S:休眠进程sleep,可以被唤醒
      #D:不可被唤醒的睡眠状态
      #Z:僵尸进程,实际上该进程已经终止,但是却无法移除到内存之外
      #T:该进程正在跟踪或者已经停止
      
    • pstree:

      • -a:显示完整信息
      • -u:列出名字
      • -p:列出PID号
  • 动态查看进程

    • top:

      	实时查看系统运行状态 h 帮助 M 按照内存使用排序 P 按照CPU排序 N 按照PID来排序
      
      • q 退出

      • 示例:

        top - 15:07:52 up 2 days, 7:10, 9 users, load average: 0.00, 0.01, 0.00
        #系统时间 运行时长 当前9个用户登录系统 系统在1分钟、5分钟、15分钟的平均负载情况
        
        Tasks: 192 total, 1 running, 191 sleeping, 0 stopped, 0 zombie
        #总共192个进程 1个正在运行 191个休眠 0个停止的 0个僵尸进程
        
        Cpu(s): 1.5%us, 0.2%sy, 0.0%ni, 98.1%id, 0.2%wa, 0.0%hi, 0.0%si, 0.0%st
        KiB Mem :  2027876 total,    70984 free,   356972 used,  1599920 buff/cache
        KiB Swap:  2097148 total,  2097148 free,        0 used.  1500724 avail Mem 
        #us 用户空间占用CPU百分比
        #sy 内核空间占用CPU百分比
        #ni 用户进程空间内改变过优先级的进程占用CPU百分比
        #id 空闲CPU百分比
        #wa 等待输入输出的CPU时间百分比 ,要特别注意,代表的是I/O情况
        #hi 硬中断(Hardware IRQ)占用CPU的百分比
        #si 软中断(Software Interrupts)占用CPU的百分比
        #st (Steal time) 是当 hypervisor 服务另一个虚拟处理器的时候,虚拟CPU等待实际 CPU 的时间的百分比多核CPU的话,按数字1,可以展开其他CPU情况
        #Mem: 1016516k total, 914012k used, 102504k free, 100136k buffers
        #total 物理内存总量
        #used 使用的物理内存总量
        #free 空闲内存总量
        #buffers 用作内核缓存的内存量
        
        Swap: 2097144k total, 7220k used, 2089924k free, 374972k cached
        #total 交换区总量
        #used 使用的交换区总量
        #free 空闲交换区总量
        #cached 缓冲的交换区总量。
        
        PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
        23539 root 20 0 149m 25m 7040 S 4.3 2.5 4:40.87 Xorg
        24019 root 20 0 308m 16m 9556 S 2.7 1.7 2:54.35 gnome-terminal
        5521 root 20 0 336m 15m 11m S 0.7 1.6 0:01.83 gnome-panel
        1598 root 20 0 165m 2588 2132 S 0.3 0.3 3:43.59 vmtoolsd
        5636 root 20 0 15032 1284 932 R 0.3 0.1 0:00.11 top
        23679 root 20 0 403m 11m 8376 S 0.3 1.1 0:12.13 metacity
        23706 root 20 0 446m 21m 11m S 0.3 2.2 3:20.17 vmtoolsd
        
        #VIRT 进程使用的虚拟内存总量,单位kb。VIRT=SWAP+RES
        #SWAP 进程使用的虚拟内存中,被换出的大小,单位kb。
        #RES 进程使用的、未被换出的物理内存大小,单位kb。RES=CODE+DATA
        #CODE 可执行代码占用的物理内存大小,单位kb
        #DATA 可执行代码以外的部分(数据段+栈)占用的物理内存大小,单位kb
        #SHR 共享内存大小,单位kb
        
      
      + 按f键可以编辑显示的列
      
    • 仅动态查看某个进程的状态

        	top -p 23539 //其中23539是进程号
      
    • top动态查看进程:

        	-P:顺序查看
      
    • pgrep:查看pid

      • -l:显示进程名
      • -U:指定用户
      • -t:指定终端
6.1.3 前台及后台运行
  • 前台运行:

    	直接在终端运行命令
    	
    	fg 任务编号 : 将后台运行的命令变成前台运行
    		或
    	firefox 172.16.254.251
    	会发现该程序一直占用终端,其他命令不能够再在这个终端运行
    
  • 后台运行:

    	命令执行的时候,直接将其放置于后台运行
    	
    	Ctrl+z
    		或
    	bg 任务编号 :指定任务在后台运行
    		或
    	firefox 172.16.254.251 &
    	[1] 6222
    	后台运行不会占用执行命令的终端,用户仍然可以使用这个终端做操作
    
  • 注意:

    	不管你是前台运行,还是后台运行,只要终端一关闭,进程就停止了
    
  • 脱离终端运行:

    • nohup命令

      	nohup firefox 172.16.254.251 &
      	[1] 6537
      	# nohup: ignoring input and appending output to `nohup.out' //按回车
      
6.1.4 进程间通信方式
  • IPC:Interconnect Process Communication 进程间通信

    • 分类:

      1、管道 pipe
      2、信号 signal
      3、消息 message
      4、共享内存 shared memory
      
  • 信号:

    	信号是类unix系统中的一种通信机制,它用来中断运行的进程执行某些操作
    
    • 常用的信号:

      • 查看信号的列表:

        # kill -l
        
      • kill命令:

        • SIGHUP:重置进程的配置,即不停止服务的情况下,重新读取配置文件

          # kill -1 PID 或者kill -HUP PID
          
        • 中断(interrupt),相当于执行了ctrl+c

          # kill -2 PID //发现第一个标签的命令被终止了
          
        • SIGKILL:强制杀死进程、无条件杀死

          # kill -9 PID
          
        • SIGTERM:终止进程,进程不一定会死

          # kill -15 PID
          
        • SIGTSTP:相当于按下ctrl+z的时候发送的信号

          # kill -20 PID
          
      • pkill命令:按照进程的属性结束进程

        • 按照进程名字杀死进程

          # pkill gnome-panel
          
        • 按照用户名杀死进程

          	su - test			# 登录用户
          	$ vim /etc/passwd		# 产生进程
          	pkill -U test			# 杀死用户进程
          
      • killall: killall 命令名字 //杀死全部的同名进程

      • 进程的调度

        • ctrl+Z:转入后台并且停止
        • jobs:查看处于后台的任务
        • fg:将后台的进程恢复前台运行,可指定任务号
        • ctrl+c:中断正在执行的命令
        • kill:终止PID -9 强制终止
        • pkill:根据 特定条件终止进程
          • -t:停止终端进程
          • -U:按用户名终止进程

6.2 计划任务

6.2.1 一次性计划任务:at
  • 使用:at: 一次性计划任务

    • at [HH:MM] [yy-mm-dd]
  • command

    • (ctrl+d)
  • 查看任务

    • atq
  • 删除任务

    • atrm
    • 后边指定要删除的任务号
6.2.2 周期性计划任务:crontab
*    *    *    *    *	命令
-    -    -    -    -
|    |    |    |    |
|    |    |    |    +----- 星期中星期几 (0 - 7) (星期天 为0)
|    |    |    +---------- 月份 (1 - 12) 
|    |    +--------------- 一个月中的第几天 (1 - 31)
|    +-------------------- 小时 (0 - 23)
+------------------------- 分钟 (0 - 59)
  • crontab命令----crond服务

    • 全局设定的配置文件:/etc/crontab

      • *** **任意 ,多个不连续
      • - 连续
      • / 间隔频率
    • 系统默认的设置:/etc/cron.*

    • 用户自定义的配置文件:/var/spool/cron/user_name

    • 使用:

      • 编辑任务:

        	crontab -e [-u user_name]
        
      • 查看任务:

        	crontab -l [-u user_name]	
        
      • 删除任务:

        	crontab -r [-u user_name]
        

6.3 补充

6.3.1 进程
	PRI :进程优先权,代表这个进程可被执行的优先级,其值越小,优先级就越高,越早被执行
	PRI是比较好理解的,即进程的优先级,或者通俗点说就是程序被CPU执行的先后顺序,此值越小进程的优先级别越高
	
	NI :进程Nice值,代表这个进程的优先值
	那NI呢?就是我们所要说的nice值了,其表示进程可被执行的优先级的修正数值
	如前面所说,PRI值越小越快被执行,那么加入nice值后,将会使得PRI变为:PRI(new)=PRI(old)+nice
	
	%nice :改变过优先级的进程的占用CPU的百分比
6.3.2 进程和线程区别
  • 概述:

    	进程和线程都是一个时间段的描述,是CPU工作时间段的描述。
    
  • 进程

    	进程就是包换上下文切换的程序执行时间总和 = CPU加载上下文+CPU执行+CPU保存上下文
    
  • 线程

    	就好比要实现程序A,实际分成 a,b,c等多个块组合而成。
    	这里的a,b,c就是线程,也就是说线程是共享了进程的上下文环境,的更为细小的CPU时间段。
    
  • 总结

    	进程和线程都是一个时间段的描述,是CPU工作时间段的描述,不过是颗粒大小不同。
    

7. 主要日志文件

7.1 日志的作用

  • 用于记录系统、程序运行中发生的各种事件
  • 通过阅读日志,有助于诊断和解决系统故障

7.2 日志文件的分类

  • 内核及系统日志

    由系统服务syslog统一进行管理,日志格式基本相似,可以根据主配
    文件/etc/rsyslog.conf中的设置决定内核消息及其各种系统消息的记录位置

  • 用户日志

    记录系统用户登录及退出系统的相关信息,包括用户名、登录终端、登录时
    间、来源、使用的进程等等

  • 程序日志

    由各种应用程序独立管理的日志文件,记录格式不统一,记录程序本身运行
    过程中的各种事件信息

    例如:

    • Web服务:/var/log/httpd/access_log、/var/log/httpd/error_log
    • 代理服务:/var/log/squid/access.log、/var/log/squid/cache.log
    • FTP服务:/var/log/xferlog

7.3 主要日志文件

日志位置:默认位于:/var/log 目录下

  • 内核及公共消息日志 /var/log/messages

    记录Linux内核消息及各种应用程序的公共日志信息,包括
    启动、IO错误、网络错误、程序故障等。对于未使用独立日志文件的应用程序或服
    务,一般都可以从该日志文件中获得相关的事件记录信息。

  • 计划任务日志 /var/log/cron

    记录crond计划任务产生的事件信息。

  • 系统引导日志 /var/log/dmesg

    记录Linux系统在引导过程中的各种事件信息。

  • 邮件系统日志 /var/log/maillog

    记录进入或发出系统的电子邮件活动。

  • 用户登录日志:

    • /var/log/lastlog:记录每个用户最近的登录事件。
    • /var/log/secure:记录用户认证相关的安全事件信息。
    • /var/log/wtmp:记录每个用户登录、注销及系统启动和停机事件。
    • /var/log/btmp:记录失败的、错误的登录尝试及验证事件。
    • /var/run/utmp: 该日志文件记录有关当前登录的每个用户的信息。

7.5 日志查看

很多日志都是文本文件,直接使用文本访问命令即可。

  1. 日志记录的一般格式,例如:/var/log/messages,主要有以下四部分构成:

    • 时间标签:消息发出的日期和时间

    • 主机名:生成消息的计算机的名字

    • 子系统名称:发出消息的应用程序名称

    • 消息:消息的具体内容

      tail /var/log/messages
      
  2. 有些用户日志文件都是二进制的数据文件,无法直接使用tail、less等文本查看工具浏览,
    因此,分析用户登录相关信息通常需要借助专门的命令工具:users 、who、w、last、
    lastb命令。

    # 查看成功登录记录(/var/log/wtmp)
    last
    # 查看错误登录记录(/var/log/btmp)
    lastb
    
  3. 程序日志查看:由相应的应用程序独立进行管理,可以通过一些分析工具进行管理及查看:

    • 文本查看、grep过滤检索、Webmin管理套件中查看
    • awk、sed等文本过滤、格式化编辑工具
    • Webalizer、Awstats(用来分析apache)等专用日志分析工具

7.6 日志管理策略

  1. 及时作好备份和归档
  2. 延长日志保存期限
  3. 控制日志访问权限,日志中可能会包含各类敏感信息,如账户、口令等
  4. 集中管理日志,将服务器的日志文件发到统一的日志文件服务器,便于日志信息的统一
    收集、整理和分析,杜绝日志信息的意外丢失、恶意篡改或删除。

8. rsyslog管理日志

Linux内核及系统日志,由系统服务rsyslogd统一管理,软件包是rsyslog,主要程序:/sbin/rsyslogd,配置文件:/etc/rsyslog.conf和/etc/rsyslog.d/目录内的文件。

8.1配置文件

vim /etc/rsyslog.conf

 #### MODULES #### 定义模块
  
  # The imjournal module bellow is now used as a message source instead of imuxsock.
  $ModLoad imuxsock # provides support for local system logging (e.g. via logger command) # 提供对本地系统日志记录的支持
  $ModLoad imjournal # provides access to the systemd journal # 提供对Systemd日志的访问
  
 # Provides UDP syslog reception # 提供udp系统日志接收
 #$ModLoad imudp
 #$UDPServerRun 514
 
 
 #### GLOBAL DIRECTIVES #### 定义全局的环境

 # Where to place auxiliary files
 $WorkDirectory /var/lib/rsyslog
 
 
 #### RULES #### 定义日志记录规则

 # Log all kernel messages to the console.
 # Logging much else clutters up the screen.
 #kern.*                         /dev/console


8.2日志消息的级别

  • 0 EMERG(紧急):会导致主机系统不可用的情况 emergent [iˈmɜːrdʒənt]
  • 1 ALERT(警告):必须马上采取措施解决的问题 [əˈlɜːrt]
  • 2 CRIT(严重):比较严重的情况 critical [ˈkrɪtɪkl]
  • 3 ERR(错误):运行出现错误 [ˈerər]
  • 4 WARNING(提醒):可能会影响系统功能的事件 [ˈwɔːrnɪŋ]
  • 5 NOTICE(注意):不会影响系统但值得注意 [ˈnoʊtɪs]
  • 6 INFO(信息):一般信息 [ˈɪnfoʊ]
  • 7 DEBUG(调试):程序或系统调试信息等 [ˌdiːˈbʌɡ , ˈdiːbʌɡ]

8.3 服务名称

  • auth:认证相关的
  • authpriv:权限,授权相关的
  • cron:任务计划相关的
  • daemon:守护进程相关的
  • kern:内核相关的
  • lpr:打印相关的
  • mail:邮件相关的
  • mark:标记相关的
  • news # 新闻相关的
  • security:安全相关的,与auth 类似
  • syslog:syslog自己的
  • user:用户相关的
  • uucp:unix to unix cp 相关的
  • local0 到 local7:用户自定义使用
  • * 表示所有的facility[fəˈsɪləti]设施

8.4 action(动作)日志记录的位置

  • 系统文件 # 普通文件 如: /var/log/xxx
  • | # 管道 通过管道送给其他的命令处理
  • 终端 # 终端 如:/dev/console
  • @HOST # 远程主机 如: @10.0.0.1 tcp 使用两个@
  • 用户 # 系统用户 如: root
  • * # 登录到系统上的所有用户,一般emerg级别的日志是这样定义的

8.5 服务名称.日志等级的表示

  • . —— mail.warning 表示记录mail服务,warning及其以上级别的日志

  • .= —— mail.=warning 表示记录mail服务warning级别日志

  • .! —— mail.!warning 表示除了warning级别以外的,其他级别的所有日志都记

  • .none —— 表示不记录

  • *—— 表示所有

  • *. —— 表示所有服务

  • .* —— 表示所有日志级别

  • *.* —— 所有服务的所有级别的日志

  • cron.info;mail.info # 多个日志来源可以用";" 隔开

  • cron,mail.info # 与cron.info;mail.info 是一个意思

  • 定义格式例子:

    • mail.info /var/log/mail.log

      表示将mail相关的,级别为info及info以上级别的信息记录到/var/log/mail.log文件中

    • auth.=info @10.0.0.1

      表示将auth相关的,级别为info的信息记录到10.0.0.1主机上去

      前提是10.0.0.1要能接收其他主机发来的日志信息

8.6 远程日志

远程日志可以做日志的备份,也可以做日志的集中管理,集中管理日志的软件:splunk ELK

# 开启本地远程服务器配置接收日志功能
vim /etc/rsyslog.conf
# 取消以下两行内容的注释
# $ModLoad imudp
# $UDPServerRun 514

# 增加日志记录规则
*.debug               /var/log/debug_test.log
# 远端机器写ip地址
# *.debug               @192.168.215.3

# 重启服务
systemctl restart rsyslog
# 查看端口是否开启
netstat -anup

# 模拟debug日志
#  -i, --id 逐行记录每一次logger的进程ID
#  -t, --tag tag指定标记记录
#  -p, --priority priority[praɪˈɔːrəti]_level 指定输入消息日志级别,优先级可以是数字或者指定为 " facility.level" 的格式。比如:" -p local3.info " local3 这个设备的消息级别为 info。默认级别是 "user.notice"
# [messages]
logger -i -t 'debug-test' -p local6.debug 'this id a test debug'

# 如果数据没有如预期到达 考虑以下设置
# 1 服务重启
# 2 本地selinux关闭
# 3 远程主机的防火墙关闭
# 4 尽量不要互相传日志

9. 日志切割

9.1 为什么要切割日志

日志文件越大,管理越难,性能也越低

9.2 日志轮替

当一个日志被 轮替 rotated [ˈroʊteɪtɪd], 会创建一个新的日志文件,同时旧的日志文件会被重命名。这些 文件在一段时间内被保留,一旦产生一定数量的旧的日志,系统就会删除一部分旧的日志。

9.3 实现方案

  • 自己编写脚本,利用crontab定时执行
  • 利用logrotate,利用其预制的大量判断条件和处理方式,可以有效降低手写脚本的负担和出错率。

9.4 logrotate 组成

  1. /usr/bin/logrotate 程序所在位置。
  2. /etc/cron.daily/logrotate 默认让cron每天执行logrotate一次。
  3. /etc/logrotate.conf 全局配置文件。
  4. /etc/logrotate.d 应用自定义配置文件存放目录,覆盖全局配置。

9.5 logrotate 配置文件

# 轮滚的周期,一周一轮滚,默认每一周执行一次rotate轮转工作
weekly

# 保留多少个日志文件(轮转几次).默认保留四个.就是指定日志文件删除之前轮转的次数,0 指没有备份
rotate 4

# 旧日志轮滚后是否创建新的空白日志
create

# 就是切割后的日志文件以当前日期为格式结尾,如xxx.log-20131216这样,如果注释掉,切割出来是按数字递增,即 xxx.log-1这种格式
dateext

# 包含该路径下的所有配置文件
include /etc/logrotate.d

# 仅针对 /var/log/wtmp 所设定的参数
/var/log/wtmp {

	# 轮滚周期,一个月
    monthly
    # 创建新的日志文件 权限664 所有者root 所属组utmp
    create 0664 root utmp
    # 文件大小超过 1M 后才会切割
    minsize 1M
    # 保留1个日志文件
    rotate 1
}

# 失败的telnet登录
/var/log/btmp {
    # 如果日志丢失,不报错继续滚动下一个日志
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# 通过gzip 压缩转储以后的日志
compress
# 不做gzip压缩处理
nocompress
# 用于还在打开中的日志文件,把当前日志备份并截断;是先拷贝再清空的方式,拷贝和清空之间有一个时间差,可能会丢失部分日志数据。
copytruncate
# 备份日志文件不截断
nocopytruncate
# 轮转时指定创建新文件的属性,如create 0777 nobody nobody
create mode owner group
# 不建立新的日志文件
nocreate
# 和compress 一起使用时,转储的日志文件到下一次转储时才压缩
delaycompress
# 覆盖 delaycompress 选项,转储同时压缩。
nodelaycompress
# 如果日志丢失,不报错继续滚动下一个日志
missingok
# 转储时的错误信息发送到指定的Email 地址
errors address
# 即使日志文件为空文件也做轮转,这个是logrotate的缺省选项
ifempty
# 当日志文件为空时,不进行轮转
notifempty
# 把转储的日志文件发送到指定的E-mail 地址
mail address
# 转储时不发送日志文件
nomail
# 转储后的日志文件放入指定的目录,必须和当前日志文件在同一个文件系统
olddir directory
# 转储后的日志文件和当前日志文件放在同一个目录下
noolddir
# 运行postrotate脚本,作用是在所有日志都轮转后统一执行一次脚本。如果没有配置这个,那么每个日志轮转后都会执行一次脚本
sharedscripts
# 在logrotate转储之前需要执行的指令,例如修改文件的属性等动作;必须独立成行
prerotate 
# 在logrotate转储之后需要执行的指令,例如重新启动 (kill-HUP) 某个服务,必须独立成行
postrotate
# 指定转储周期为每天
daily
# 指定转储周期为每周
weekly
# 指定转储周期为每月
monthly
# 日志文件删除之前转储的次数,0 指没有备份,5指保留5个备份
rotate count
# 当期日期作为命名格式
dateext
# 配合dateext使用,紧跟在下一行出现,定义文件切割后的文件名,必须配合dateext使用,只支持 %Y %m %d %s 这四个参数
dateformat .%s
# 当日志文件到达指定的大小时才转储,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem)。志文件 >= log-size 的时候就转储
# 以下为合法格式:
# size = 5 或 size 5 (>= 5 个字节就转储)
# size = 100k 或 size 100k
# size = 100M 或 size 100M
size(或minsize) log-size

9.6 demo

# 创建文件
vim /etc/logrotate.d/test
# 写入以下内容
/var/log/debug_test.log {
		missingok
		notifempty
		daily
		create
		rotate 4
		compress
}

# 强制轮替
# -v 显示过程
# -f 强制执行
logrotate -vf /etc/logrotate.d/test

# 写入一些日志
logger -i -t 'debug-test' -p local6.debug 'this id a test debug'

# 没有日志被写入 重启服务即可
systemctl restart rsyslog

# 给日志文件增加a属性
chattr +a /var/log/debug_test.log
lsattr /var/log/debug_test.log

# 编辑文件
vim /etc/logrotate.d/test
# /dev/null:空文件,不管你向它输出什么,都是空
# 2> :标准错误输出重定向
# 改成以下内容
  /var/log/debug_test.log {
          sharedscripts
                  prerotate
                  /usr/bin/chattr -a /var/log/debug_test.log
          endscript
          missingok
          notifempty
          daily   
          create  
          rotate 4
          compress
          sharedscripts
                  postrotate
                  /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null
    || true
                  /usr/bin/chattr +a /var/log/debug_test.log
          endscript
  
  }

# 强制轮替
logrotate -vf /etc/logrotate.d/test
# 写入一些日志
logger -i -t 'debug-test' -p local6.debug 'this id a test debug'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值