目录
一.背景
二.作用
三.源代码
1.主程序
syslogtool.py
2.小工具
full.py
cpu_data.py
EICAR.COM
3.运行效果
四.使用说明
五.linux上用yum装rsyslog各种问题
一.背景
最近测试的实习工作中,需要在本机搭一个Syslog服务器来接收控制中心(第三方平台)的日志,涉及到这方面知识盲区了,嗨嗨嗨。网上查阅资料,参考性最好的是这个使用python接收和发送syslog | 码农家园,此外还在centos 8的虚拟机上尝试用yum装了个rsyslog,过程中遇到了不少问题哈哈,好在都一一解决了。
- 环境:Python3.6.8,Win7
- 用到的库:datetime,argparse,logging,socketserver,pysyslogclient,psutil
二.作用
- 可同时用于syslogsever和syslogclient的脚本
- 请用于系统日志接收测试和传输测试
- 作为系统日志服务器运行时,收到的系统日志将显示在屏幕上,并同时保存在syslog.log文件中
三.源代码
服务器端的处理原作者参考的参考如下
- https://qiita.com/ranmatsu/items/f76fcc607869aeab35e3
- https://gist.github.com/marcelom/4218010
1.主程序
syslogtool.py
from datetime import datetime, timezone, timedelta
import argparse
import logging
import socketserver
import pysyslogclient
#pip install pysyslogclient
#命令行参数
PARSER = argparse.ArgumentParser()
PARSER.add_argument("-mode", "--mode", default="CLI", help="action mode:CLI(default) or SERVER")
PARSER.add_argument("-i", "--ip", default="127.0.0.1", help="IP or hostname(default localhost)")
PARSER.add_argument("-p", "--port", default="514", help="port number(default 514)")
PARSER.add_argument("-pr", "--protocol", default="UDP", help="TCP or UDP(default)")
PARSER.add_argument("-c", "--count", default="1", help="send count(default 1)")
PARSER.add_argument("-m", "--message", default="syslog message!!", help="syslog message")
class SyslogUDPHandler(socketserver.BaseRequestHandler):
"""
SyslogUDPHandler
"""
LOG_FILE = 'syslog.log'
logging.basicConfig(level=logging.INFO, format='%(message)s',
datefmt='', filename=LOG_FILE, filemode='a')
def handle(self):
data = bytes.decode(self.request[0].strip())
datalist = str(data).split(" ")
datalist[1] = applytimezonejst(datalist[1])
message = " ".join(datalist)
socket = self.request[1]
print(f"{self.client_address[0]}: {message}")
logging.info(message)
#接受一个名为utcdate的参数。
def applytimezonejst(utcdate):
#使用datetime.strptime方法将输入的utcdate按照给定的格式解析为一个datetime对象,并将其赋值给_dt。
_dt = datetime.strptime(utcdate, "%Y-%m-%d")
#对刚刚创建的_dt对象进行处理,首先使用replace方法将时区信息设置为UTC时间
_dt2 = _dt.replace(tzinfo=timezone.utc).astimezone(timezone(timedelta(hours=8))).strftime("%Y/%m/%d %Z %z")
#返回转换后的日期时间字符串_dt2。
return _dt2
def syslogserver(host, port):
"""
syslogserver
"""
try:
server = socketserver.UDPServer((host, int(port)), SyslogUDPHandler)
print(f"start syslog server ({host}:{port})")
server.serve_forever(poll_interval=0.5)
except KeyboardInterrupt:
print("Crtl+C Pressed. Shutting down.")
def syslogclient(host, port, prot, count, message):
"""
syslogclient
"""
client = pysyslogclient.SyslogClientRFC5424(host, port, proto=prot)
for i in range(int(count)):
client.log(message)
print(f"sendcount:{str(i+1)}")
def main():
"""
main
"""
optargs = PARSER.parse_args()
mode = optargs.mode
host = optargs.ip
port = optargs.port
prot = optargs.protocol
count = optargs.count
message = optargs.message
if mode == "CLI":
syslogclient(host, port, prot, count, message)
else:
syslogserver(host, port)
if __name__ == '__main__':
main()
2.小工具
full.py
import threading, multiprocessing
def loop():
x = 0
while True:
x = x ^ 1
for i in range(multiprocessing.cpu_count()):
t = threading.Thread(target=loop)
t.start()
cpu_data.py
import psutil
# 查看CPU信息
cpu_info = psutil.cpu_percent(interval=1, percpu=True)
print("CPU使用率:", cpu_info)
# 查看内存信息
mem_info = psutil.virtual_memory()
print("内存总量:", mem_info.total)
print("内存使用量:", mem_info.used)
print("内存空闲量:", mem_info.available)
EICAR.COM
新建txt文件,然后把下面内容放进去,文件名改成EICAR.COM,文件类型保存为所有文件,ps:用来检测杀毒软件是否有效的一个小方法,不是真的病毒哦~
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
3.运行效果
在命令行进入到文件相应目录然后执行syslogtools.py,生成的.log文件效果如图,由于平台还在测试阶段,所以有内容就行,具体是什么不用太在意
四.使用说明
由于demo过程中遇到了些小问题,在此写了个说明附上~
1.供测试使用full.py是让cpu大致跑到50%
2.日志的程序在log-syslogtool.py
2.1 生成的日志在syslogtool.py程序的同级目录下syslog.log
2.2 记得修改成本地IPv4地址(在命令行cmd用ipconfig查看),端口号自定义,一般用514
2.3 记得下载需要的库 pip install pysyslogclient还有pip install psutil等等
3.disk-cpu_data.exe是查看cpu和内存的使用情况,代码简单,打包试验了一下
4.两种模式
4.1 启动服务器
python syslogtool.py --mode SERVER -i <IP地址> -p <端口号>
4.2 客户端模式
python syslogtool.py -i <IP地址> -pr <UDP or TCP> -p <端口号> -m <syslog 消息> -c <传输计数>
4.3 帮助
python syslogtool.py -h usage: syslogtool.py [-h] [-mode MODE] [-i IP] [-p PORT] [-pr PROTOCOL] [-c COUNT] [-m MESSAGE] optional arguments: -h, --help show this help message and exit -mode MODE, --mode MODE action mode:CLI(default) or SERVER -i IP, --ip IP IP or hostname(default localhost) -p PORT, --port PORT port number(default 514) -pr PROTOCOL, --protocol PROTOCOL TCP or UDP(default) -c COUNT, --count COUNT send count(default 1) -m MESSAGE, --message MESSAGE syslog message
5.手打的朋友注意缩进,为了方便在虚拟机上只装了Python的IDEL和pip,然后空格和tab出现了问题检查不出来,要ctrl+c/v上一行再加tab才ok
五.linux上用yum装rsyslog各种问题
- centos 8 停止维护,用yum或者dnf安装包的时候发现会报错:
Error: Failed to download metadata for repo 'AppStream': Cannot prepare internal mirrorlist: No URLs in mirrorlist
根本原因:CentOS Linux 8 官方宣布于2021.12.31开始停止维护,延期到2022.1.31执行完毕。老的镜像将移到vault.centos.org。所以,以上报错是由于CentOS 8 EOS 将CentOS 8 Mirror 站点转换为Vault 并且找不到Mirror 站点而出现的问题。
-
解决方法:更换镜源
-
推荐阿里云的,这篇文章过程讲的很清楚CentOS 8 安装国内、本地YUM源_centos8国内安装源-CSDN博客
Error: GPG check FAILED
清缓存,再来一遍文章来源:https://www.toymoban.com/news/detail-850114.html
最后日志是在一个message文件里,注意是文件!文件!文件!重要的事情说三遍这不是个文件夹,用cd 是不行滴,tail进去就可以看啦文章来源地址https://www.toymoban.com/news/detail-850114.html
到了这里,关于【Syslog】用Python搭建一个Syslog服务器的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!