天天看点

使用chatgpt进行linux脚本开发大全(4) 解析Syslog日志

#!/bin/bash

# 配置syslog服务器地址和端口

syslog_server="192.168.1.100"

syslog_port=514

# 打开UDP端口514接收syslog消息

nc -ul $syslog_port | while read message; do

# 将syslog消息发送到syslog服务器

echo "$message" | nc -w1 $syslog_server $syslog_port

done

该脚本使用nc命令打开UDP端口514接收syslog消息,并将其发送到指定的syslog服务器。你可以根据自己的需求修改syslog_server和syslog_port变量的值。注意,该脚本需要在root权限下运行,因为它需要打开网络端口。

在运行该脚本之前,你需要确保nc命令已经安装在你的系统上。在大多数Linux发行版中,nc命令默认已经安装了。如果你使用的是MacOS或Windows系统,则需要手动安装nc命令

Linux的系统日志文件一般存储在 /var/log 目录下,其中 /var/log/syslog 文件包含了系统各种事件的日志信息。我们可以使用Shell脚本来解析这个文件。

下面是一个简单的例子,可以解析syslog文件并输出其中的日志信息。解析规则通过配置参数来指定,可以根据需要自定义解析规则。

#!/bin/bash

# 配置解析规则

RULE_TIMESTAMP="%b %d %H:%M:%S"

RULE_PREFIX=""

RULE_SUFFIX=""

RULE_SEVERITY=""

RULE_FACILITY=""

RULE_MESSAGE=""

# 读取命令行参数

while getopts ":t:p:s:f:m:" opt; do

case $opt in

t) RULE_TIMESTAMP="$OPTARG"

;;

p) RULE_PREFIX="$OPTARG"

;;

s) RULE_SUFFIX="$OPTARG"

;;

f) RULE_FACILITY="$OPTARG"

;;

m) RULE_MESSAGE="$OPTARG"

;;

\?) echo "Invalid option -$OPTARG" >&2

;;

esac

done

# 解析syslog文件

while read line; do

# 匹配行首和行尾

line=`echo "$line" | sed "s/^$RULE_PREFIX//" | sed "s/$RULE_SUFFIX$//"`

# 获取时间戳

timestamp=`echo "$line" | grep -oE "$RULE_TIMESTAMP" | head -n1`

# 获取设施和严重性等级

facility=`echo "$line" | sed "s/$timestamp//" | grep -oE "<[^>]+>" | head -n1 | sed "s/[<>]//g"`

severity=`echo "$facility" | cut -d"." -f2`

facility=`echo "$facility" | cut -d"." -f1`

# 获取消息

message=`echo "$line" | sed "s/$timestamp//" | sed "s/<[^>]\+>//g" | sed "s/^ //"`

# 根据规则过滤消息

if [[ -n "$RULE_FACILITY" && "$RULE_FACILITY" != "$facility" ]]; then

continue

fi

if [[ -n "$RULE_SEVERITY" && "$RULE_SEVERITY" != "$severity" ]]; then

continue

fi

if [[ -n "$RULE_MESSAGE" && ! "$message" =~ $RULE_MESSAGE ]]; then

continue

fi

# 输出日志信息

echo "Time: $timestamp, Facility: $facility, Severity: $severity, Message: $message"

done < /var/log/syslog

通过命令行参数可以指定解析规则,例如:

./parse_syslog.sh -t "%b %d %H:%M:%S" -p "Feb 10" -s "myhost" -f "auth" -m "Failed password for root"

上述命令将输出包含“Failed password for root”消息的认证(auth)设施,且主机名(prefix)以“Feb 10”开头的所有日志信息。

继续阅读