Home | 简体中文 | 繁体中文 | 杂文 | Github | 知乎专栏 | 51CTO学院 | CSDN程序员研修院 | OSChina 博客 | 腾讯云社区 | 阿里云栖社区 | Facebook | Linkedin | Youtube | 打赏(Donations) | About
知乎专栏多维度架构

第 23 章 自动化运维

目录

23.1. 日志中心
23.1.1. 什么是日志中心
23.1.2. 工作原理
23.1.3. 安装
23.1.4. 命令
23.1.5. 操作演示
23.2. Python 开发防火墙
23.2.1. 我为什么要开发一个防火墙软件?
23.2.2. 安装 Python 防火墙
23.2.3. 切换防火墙规则
23.2.4. 规则库
23.3. 监视文件系统
23.3.1. watchdog
23.3.2. pyinotify
23.4. 容器
23.4.1. 在 Docker 容器中运行 Python 项目
23.4.2. 在 kubernetes 中部署项目

23.1. 日志中心

23.1.1. 什么是日志中心

日志中心是针对日志类数据一站式管理,日志中心分成两部分,分别是采集端和收集端。

采集器从各服务器采集数据,然后发送给接收端,接收端接到数据后,将日志保存到磁盘上。用户能在日志中心服务器上查询和分析日志,帮助运维、运营提升效率。

当年我开发此程序的时候还没有出现如今流行的ELK方案,接下来就让我为大家介绍如何使用 Python 开发一个日志采集和接受程序。

23.1.2. 工作原理

日志采集端:有两种工作方式:一种是文件采集,另一种是标准输出采集。文件采集又分为,静态日志文件采集,将整个文件给接收端。动态文件采集,仅采集添加到日志文件尾部的更新内容,即每次只读取日志追加的内容。

日志接收端: 启动后进入后台,开启UDP端口,等候采集端发送内容。

23.1.3. 安装

pip 安装

		
[root@localhost ~]# pip3 install netkiller-logging
		
		

源码安装

		
[root@localhost ~]# git clone https://github.com/netkiller/logging.git
[root@localhost ~]# cd logging
[root@localhost ~]# python3 setup.py sdist
[root@localhost ~]# python3 setup.py install		
		
		

23.1.4. 命令

23.1.4.1. 日志采集端

日志采集端名师是 rlog

		
[root@localhost ~]# whereis rlog 
rlog: /usr/local/bin/rlog

[root@localhost ~]# rlog 
Usage: rlog [options] filename

Options:
-h, --help            show this help message and exit
-H localhost, --host=localhost
						push log to remote host
-p 1214, --port=1214  port
--sleep=0.05          with -s, sleep  for  approximately S  seconds between
						iterations
-d, --daemon          run as daemon
-f, --full            Full text
--stdin               cat file | prog ...
-e /tmp/rlog.log, --errlog=/tmp/rlog.log
						error log
--postion             save postion of log file

Homepage: http://netkiller.github.io	Author: Neo <netkiller@msn.com>				
		
			

23.1.4.2. 日志接收端

日志接收端命令式 collection

		
[root@localhost ~]# collection 
Usage: collection [options] module

Options:
  -h, --help            show this help message and exit
  -p 1214, --port=1214  port
  -l /tmp/test.log, --logfile=/tmp/test.log
						log file
  --list                show module message
  -d, --daemon          run as daemon

  Homepage: http://netkiller.github.io	Author: Neo <netkiller@msn.com>		
		
			

23.1.5. 操作演示

23.1.5.1. 从标准输出采集日志

日志接收端命令:

			
collection -p 1214			
			
			

启动日志接收程序,使用UDP 1214 端口接收日志。

日志采集端命令:

			
echo Helloworld | rlog -H 127.0.0.1 —stdin			
			
			

运行日志采集程序,将标准输出内容发送到日志接收端。

23.1.5.2. 发送日志文件

将日志文件发送给日志接收端

日志接收端命令:

			
collection -p 1214
			
			

这里仅仅演示,所以我们在终端输出日志。

日志采集端命令:

			
rlog -H 127.0.0.1 -f /var/log/your.log
			
			

参数 -f 是指发送整个文件,否则只会发送采集程序启动后,追加的日志。

23.1.5.3. 接收日志并保存到文件

日志接收端命令:

			
collection -p 1214 -l /tmp/test.log		
			
			

参数 -l 表示将接收到的日志写入文件,使用 -l 参数后,终端屏幕不再输出内容

日志采集端命令:

			
rlog -H 127.0.0.1 -f /var/log/your.log
			
			

参数 -f 是指发送整个文件,否则只会发送采集程序启动后,追加的日志。

23.1.5.4. 发送动态日志文件

所谓动态日志文件是指,正在运行的程序随时向日志追加内容,例如WEB服务器nginx

日志接收端命令:

			
collection -d -p 1214 -l /tmp/test.log
			
			

参数 -d 表示后台运行,-l 将接收到的日志写入文件

日志采集端命令:

			
rlog -d -H 127.0.0.1 /var/log/your.log
			
			

参数 -d 表示rlog启动后在后台运行,注意不要使用 -f 参数