Skip to content
项目
群组
代码片段
帮助
正在加载...
帮助
为 GitLab 提交贡献
登录
切换导航
U
ubains-module-test
项目
项目
详情
活动
周期分析
仓库
仓库
文件
提交
分支
标签
贡献者
分枝图
比较
统计图
议题
0
议题
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
CI / CD
CI / CD
流水线
作业
计划
统计图
Wiki
Wiki
代码片段
代码片段
成员
成员
折叠边栏
关闭边栏
活动
分枝图
统计图
创建新议题
作业
提交
议题看板
打开侧边栏
郑晓兵
ubains-module-test
Commits
25f9b139
提交
25f9b139
authored
6月 05, 2025
作者:
陈泽健
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
调整日志监测模块的文件规范路径,补充相关日志打印。
上级
57f9a879
隐藏空白字符变更
内嵌
并排
正在显示
4 个修改的文件
包含
45 行增加
和
29 行删除
+45
-29
base.cpython-310.pyc
日志监测/Base/__pycache__/base.cpython-310.pyc
+0
-0
base.py
日志监测/Base/base.py
+1
-1
README.md
日志监测/README.md
+3
-2
预定日志检测.py
日志监测/预定系统日志监测/预定日志检测.py
+41
-26
没有找到文件。
日志
检测
/__pycache__/base.cpython-310.pyc
→
日志
监测/Base
/__pycache__/base.cpython-310.pyc
浏览文件 @
25f9b139
No preview for this file type
日志
检测
/base.py
→
日志
监测/Base
/base.py
浏览文件 @
25f9b139
...
...
@@ -7,7 +7,7 @@ import hmac
import
hashlib
import
base64
import
requests
import
hytest
def
dingding_send_message
(
error_message
,
ding_type
):
"""
...
...
日志
检
测/README.md
→
日志
监
测/README.md
浏览文件 @
25f9b139
1.
2025-06-05:
-
补充预定系统对内服务日志的日志监测脚本,获取到错误日志信息会进行收集前后文,并调用钉钉消息发送至钉钉群中。
\ No newline at end of file
-
补充预定系统对内服务日志的日志监测脚本,获取到错误日志信息会进行收集前后文,并调用钉钉消息发送至钉钉群中。
-
调整日志监测模块的文件规范路径,补充相关日志打印。
\ No newline at end of file
日志
检
测/预定日志检测.py
→
日志
监测/预定系统日志监
测/预定日志检测.py
浏览文件 @
25f9b139
...
...
@@ -5,19 +5,34 @@ import logging
import
sys
import
os
# 配置日志输出
logging
.
basicConfig
(
level
=
logging
.
INFO
,
format
=
'
%(asctime)
s -
%(levelname)
s -
%(message)
s'
)
INFO
=
logging
.
info
# 添加 base.py 路径到系统路径中(根据你的实际项目结构调整)
sys
.
path
.
append
(
os
.
path
.
abspath
(
".."
))
# 从 base.py 导入钉钉发送函数
from
base
import
dingding_send_message
# 要监控的关键字
ERROR_KEYWORDS
=
[
"ERROR"
,
"Exception"
]
# 配置日志输出到控制台
console_handler
=
logging
.
StreamHandler
()
console_handler
.
setLevel
(
logging
.
INFO
)
formatter
=
logging
.
Formatter
(
'
%(asctime)
s -
%(levelname)
s -
%(message)
s'
)
console_handler
.
setFormatter
(
formatter
)
logging
.
getLogger
()
.
addHandler
(
console_handler
)
logging
.
getLogger
()
.
setLevel
(
logging
.
INFO
)
# 设置全局日志级别
# 获取当前脚本所在目录
current_dir
=
os
.
path
.
dirname
(
os
.
path
.
abspath
(
__file__
))
print
(
"当前脚本目录:"
,
current_dir
)
# 构建正确的 Base 目录路径
base_dir
=
os
.
path
.
normpath
(
os
.
path
.
join
(
current_dir
,
".."
,
"Base"
))
print
(
"✅ 正确的 Base 目录路径:"
,
base_dir
)
# 添加进系统路径
sys
.
path
.
append
(
base_dir
)
# 尝试导入
try
:
from
base
import
dingding_send_message
print
(
"✅ 成功导入 base 模块!"
)
except
ImportError
as
e
:
print
(
"❌ 导入失败:"
,
e
)
print
(
"🔍 sys.path 中包含的路径如下:"
)
for
p
in
sys
.
path
:
print
(
" -"
,
p
)
class
LogMonitor
:
def
__init__
(
self
,
host
,
username
,
private_key_path
,
passphrase
,
log_path
,
check_interval
=
1
):
...
...
@@ -43,15 +58,15 @@ class LogMonitor:
self
.
client
.
connect
(
self
.
host
,
username
=
self
.
username
,
pkey
=
private_key
)
self
.
channel
=
self
.
client
.
invoke_shell
()
self
.
channel
.
send
(
f
"tail -f {self.log_path}
\n
"
)
INFO
(
f
"Connected to {self.host}, monitoring {self.log_path}"
)
logging
.
info
(
f
"Connected to {self.host}, monitoring {self.log_path}"
)
return
True
except
Exception
as
e
:
INFO
(
f
"连接失败: {e}"
)
logging
.
info
(
f
"连接失败: {e}"
)
return
False
def
start_monitoring
(
self
):
if
self
.
collecting
:
INFO
(
"Already monitoring logs."
)
logging
.
info
(
"Already monitoring logs."
)
return
if
not
self
.
connect
():
...
...
@@ -60,7 +75,7 @@ class LogMonitor:
self
.
collecting
=
True
self
.
monitor_thread
=
threading
.
Thread
(
target
=
self
.
_monitor_loop
)
self
.
monitor_thread
.
start
()
INFO
(
"开始日志监控..."
)
logging
.
info
(
"开始日志监控..."
)
def
stop_monitoring
(
self
):
self
.
collecting
=
False
...
...
@@ -68,7 +83,7 @@ class LogMonitor:
self
.
channel
.
close
()
if
self
.
client
:
self
.
client
.
close
()
INFO
(
"停止日志监控."
)
logging
.
info
(
"停止日志监控."
)
def
_monitor_loop
(
self
):
try
:
...
...
@@ -83,11 +98,11 @@ class LogMonitor:
time
.
sleep
(
self
.
check_interval
)
except
(
paramiko
.
SSHException
,
paramiko
.
socket
.
error
,
OSError
)
as
e
:
INFO
(
f
"SSH 连接中断: {e}"
)
logging
.
info
(
f
"SSH 连接中断: {e}"
)
self
.
restart_monitoring
()
except
Exception
as
e
:
INFO
(
f
"监控过程中发生异常: {e}"
)
logging
.
info
(
f
"监控过程中发生异常: {e}"
)
self
.
restart_monitoring
()
def
_process_line
(
self
,
line
):
...
...
@@ -102,7 +117,7 @@ class LogMonitor:
level
=
level_part
.
split
()[
-
1
]
# 取最后一个词作为日志级别
if
level
in
[
"ERROR"
,
"Exception"
]:
INFO
(
f
"发现 {level} 日志!正在通过 SSH 获取上下文日志..."
)
logging
.
info
(
f
"发现 {level} 日志!正在通过 SSH 获取上下文日志..."
)
full_log
=
self
.
get_remote_log_with_paramiko
(
host
=
self
.
host
,
...
...
@@ -145,20 +160,20 @@ class LogMonitor:
try
:
dingding_send_message
(
message_text
,
ding_type
=
"标准版服务监测"
)
except
Exception
as
e
:
INFO
(
f
"发送钉钉消息失败: {e}"
)
logging
.
info
(
f
"发送钉钉消息失败: {e}"
)
INFO
(
"上下文日志如下:
\n
"
+
"
\n
"
.
join
(
context
))
logging
.
info
(
"上下文日志如下:
\n
"
+
"
\n
"
.
join
(
context
))
break
else
:
INFO
(
"获取日志失败,无法获取上下文"
)
logging
.
error
(
"获取日志失败,无法获取上下文"
)
except
IndexError
:
pass
except
Exception
as
e
:
INFO
(
f
"获取上下文日志失败: {e}"
)
logging
.
exception
(
f
"获取上下文日志失败: {e}"
)
def
restart_monitoring
(
self
):
"""自动重启日志监控"""
INFO
(
"尝试重新启动日志监控..."
)
logging
.
info
(
"尝试重新启动日志监控..."
)
self
.
stop_monitoring
()
time
.
sleep
(
5
)
self
.
start_monitoring
()
...
...
编写
预览
Markdown
格式
0%
重试
或
添加新文件
添加附件
取消
您添加了
0
人
到此讨论。请谨慎行事。
请先完成此评论的编辑!
取消
请
注册
或者
登录
后发表评论