检查Linux系统日志error和mysql错误日志的脚本

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介:

    对系统日志的检查和数据库日志的检查很重要,出现问题及时的通知系统管理员更为重要,本脚本用python写的监控脚本,主要是为zabbix监控自定义的key而准备的,当然大家也可以在返回值方面做修改,可以在写个发邮件的模块,做个定时,有问题自动发邮件(在之前写过一个发邮件的类,大家可以做参考:http://wangwei007.blog.51cto.com/68019/978743)。在zabbix中自定义key来检测系统日志和数据库日志:

UnsafeUserParameters=1

 

UserParameter=check.sys_error,/usr/local/zabbix/bin/chk_err_log.py syslog

UserParameter=check.mysql_error,/usr/local/zabbix/bin/chk_err_log.py mysqllog

    本脚本适合一台服务器多实例的mysql错误日志检测,也适用于单个示例的检测,根据自己的需求做修改。

 
  1. #!/usr/bin/env python 
  2. #encoding=utf-8 
  3. import os, sys 
  4.  
  5. def chk_err(log_file,tmp_file,type,print_list,port): 
  6.     cur_num = int(os.popen("sudo grep '' %s | wc -l" % log_file).read().strip()) 
  7.     old_num = 0 
  8.     if os.path.exists(tmp_file): 
  9.         old_num = int(open(tmp_file).read().strip()) 
  10.         if cur_num < old_num: 
  11.             os.popen("echo 0 > %s" % tmp_file) 
  12.             old_num = 0 
  13.     else
  14.         os.popen("echo 0 > %s" % tmp_file) 
  15.     err_log = os.popen("sudo grep -ni 'error' %s" % log_file).readlines() 
  16.     if err_log: 
  17.         err_list = [] 
  18.         for err in err_log: 
  19.             if int(err.split(":")[0]) > old_num: 
  20.                 err_list.append(err[len(err.split(":")[0])+1:]) 
  21.         if err_list: 
  22.             os.popen("echo %s > %s" % (err_log[-1].split(":")[0], tmp_file)) 
  23.             print_list.append(port) 
  24.  
  25. def chk_err_log(type): 
  26.     try
  27.         print_list = [] 
  28.         homedir = "/home/zabbix" 
  29.         if not os.path.exists(homedir): 
  30.             os.mkdir(homedir) 
  31.         if type == "syslog"
  32.             log_file = "/var/log/messages" 
  33.             tmp_file = "%s/.syslog_num"%homedir 
  34.             cur_num = int(os.popen("sudo grep '' %s | wc -l" % log_file).read().strip()) 
  35.             old_num = 0 
  36.             if os.path.exists(tmp_file): 
  37.                 old_num = int(open(tmp_file).read().strip()) 
  38.                 if cur_num < old_num: 
  39.                     os.popen("echo 0 > %s" % tmp_file) 
  40.                     old_num = 0 
  41.             else
  42.                 os.popen("echo 0 > %s" % tmp_file) 
  43.             err_log = os.popen("sudo grep -ni 'error' %s|grep -v snmpd|grep -v sftp" % log_file).readlines() 
  44.             if not err_log: 
  45.                 return "0" 
  46.             err_list = [] 
  47.             for err in err_log: 
  48.                 if int(err.split(":")[0]) > old_num: 
  49.                     err_list.append(err[len(err.split(":")[0])+1:]) 
  50.             if not err_list: 
  51.                 return "0" 
  52.             else
  53.                 os.popen("echo %s > %s" % (err_log[-1].split(":")[0], tmp_file)) 
  54.                 return "1" 
  55.         elif type == "mysqllog"
  56.             psinfo = os.popen("ps auxww|grep mysqld|grep -v root|grep -v grep").readlines() 
  57.             if not psinfo: 
  58.                 return "No mysqld running in this server now" 
  59.             for i in psinfo: 
  60.                 port = "0" 
  61.                 for j in i.split("--"): 
  62.                     if j.find("datadir") != -1
  63.                         datadir = j.split("=")[1].strip() 
  64.                     elif j.find("port") != -1
  65.                         port = j.split("=")[1].strip() 
  66.                 if port == "0"
  67.                     continue 
  68.                 if port == "3306"
  69.                     log_file = "%s/$(hostname).err" % datadir 
  70.                 else
  71.                     log_file = "%s/mysql.err" % datadir 
  72.                 tmp_file = "%s/.mysqllog_%s" % (homedir,port) 
  73.                 chk_err(log_file,tmp_file,type,print_list,port) 
  74.             if len(print_list)==0
  75.                 return "0" 
  76.             else
  77.                 return print_list 
  78.     except Exception, e: 
  79.         return e 
  80.  
  81. if __name__ == "__main__"
  82.     print chk_err_log(sys.argv[1]) 

 



本文转自 lover00751CTO博客,原文链接:http://blog.51cto.com/wangwei007/1106735,如需转载请自行联系原作者


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
24天前
|
存储 缓存 监控
Linux缓存管理:如何安全地清理系统缓存
在Linux系统中,内存管理至关重要。本文详细介绍了如何安全地清理系统缓存,特别是通过使用`/proc/sys/vm/drop_caches`接口。内容包括清理缓存的原因、步骤、注意事项和最佳实践,帮助你在必要时优化系统性能。
168 78
|
7天前
|
SQL 关系型数据库 MySQL
MySQL事务日志-Undo Log工作原理分析
事务的持久性是交由Redo Log来保证,原子性则是交由Undo Log来保证。如果事务中的SQL执行到一半出现错误,需要把前面已经执行过的SQL撤销以达到原子性的目的,这个过程也叫做"回滚",所以Undo Log也叫回滚日志。
MySQL事务日志-Undo Log工作原理分析
|
27天前
|
Linux Shell 网络安全
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
本指南介绍如何利用 HTA 文件和 Metasploit 框架进行渗透测试。通过创建反向 shell、生成 HTA 文件、设置 HTTP 服务器和发送文件,最终实现对目标系统的控制。适用于教育目的,需合法授权。
61 9
Kali Linux系统Metasploit框架利用 HTA 文件进行渗透测试实验
|
14天前
|
存储 运维 监控
Linux--深入理与解linux文件系统与日志文件分析
深入理解 Linux 文件系统和日志文件分析,对于系统管理员和运维工程师来说至关重要。文件系统管理涉及到文件的组织、存储和检索,而日志文件则记录了系统和应用的运行状态,是排查故障和维护系统的重要依据。通过掌握文件系统和日志文件的管理和分析技能,可以有效提升系统的稳定性和安全性。
33 7
|
23天前
|
存储 监控 Linux
嵌入式Linux系统编程 — 5.3 times、clock函数获取进程时间
在嵌入式Linux系统编程中,`times`和 `clock`函数是获取进程时间的两个重要工具。`times`函数提供了更详细的进程和子进程时间信息,而 `clock`函数则提供了更简单的处理器时间获取方法。根据具体需求选择合适的函数,可以更有效地进行性能分析和资源管理。通过本文的介绍,希望能帮助您更好地理解和使用这两个函数,提高嵌入式系统编程的效率和效果。
94 13
|
22天前
|
SQL 存储 关系型数据库
Mysql并发控制和日志
通过深入理解和应用 MySQL 的并发控制和日志管理技术,您可以显著提升数据库系统的效率和稳定性。
97 10
|
18天前
|
安全 关系型数据库 MySQL
MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!
《MySQL崩溃保险箱:探秘Redo/Undo日志确保数据库安全无忧!》介绍了MySQL中的三种关键日志:二进制日志(Binary Log)、重做日志(Redo Log)和撤销日志(Undo Log)。这些日志确保了数据库的ACID特性,即原子性、一致性、隔离性和持久性。Redo Log记录数据页的物理修改,保证事务持久性;Undo Log记录事务的逆操作,支持回滚和多版本并发控制(MVCC)。文章还详细对比了InnoDB和MyISAM存储引擎在事务支持、锁定机制、并发性等方面的差异,强调了InnoDB在高并发和事务处理中的优势。通过这些机制,MySQL能够在事务执行、崩溃和恢复过程中保持
47 3
|
17天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
24天前
|
Ubuntu Linux C++
Win10系统上直接使用linux子系统教程(仅需五步!超简单,快速上手)
本文介绍了如何在Windows 10上安装并使用Linux子系统。首先,通过应用商店安装Windows Terminal和Linux系统(如Ubuntu)。接着,在控制面板中启用“适用于Linux的Windows子系统”并重启电脑。最后,在Windows Terminal中选择安装的Linux系统即可开始使用。文中还提供了注意事项和进一步配置的链接。
40 0
|
2月前
|
XML 安全 Java
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板
本文介绍了Java日志框架的基本概念和使用方法,重点讨论了SLF4J、Log4j、Logback和Log4j2之间的关系及其性能对比。SLF4J作为一个日志抽象层,允许开发者使用统一的日志接口,而Log4j、Logback和Log4j2则是具体的日志实现框架。Log4j2在性能上优于Logback,推荐在新项目中使用。文章还详细说明了如何在Spring Boot项目中配置Log4j2和Logback,以及如何使用Lombok简化日志记录。最后,提供了一些日志配置的最佳实践,包括滚动日志、统一日志格式和提高日志性能的方法。
558 31
【日志框架整合】Slf4j、Log4j、Log4j2、Logback配置模板