今天给大家分享一个 shell 脚本工具,通过 shell 脚本与 mysql 的结合,将某个具体服务的错误输出日志入库到指定的 mysql 表中,以便于进行错误问题的定位与分析。

日常工作中,经常需要和 linux 系统打交道,例如:服务部署、日志和服务状态查看等,而 shell 脚本是和 linux 交互的一种常见方法。以下代码实例为在 shell 脚本中嵌入 mysql 配置信息将错误日志信息落入到数据库中。

shell脚本如下:

    1. #!/usr/bin/env bash
        1. hostName="l-beta.io"
          1. dbPort=3306
            1. dbUser="beta"
              1. dbPassword="123456"
                1. dbName="test_log"
                  1. tableName="beta_error_log_record"
                    1. env="test1"
                        1. base="/home/q/www"
                            1. #进入死循环
                              1. while [[ 1 ]]; do
                                1.     #循环去遍历base目录下的文件夹,-vE 后面两个是要排除掉的项
                                  1.     for name in `ls $base | grep -vE "default|genesis"`;
                                    1.     do
                                      1.         #echo $base/$name
                                        1.         #判断是否是目录
                                          1.         if [[ -d $base/$name ]]; then
                                            1.            #定义当前时间的前一分钟,用于对日志内容进行过滤匹配使用
                                              1.            before=`date -d "-1 minute" "+%Y-%m-%d %H:%M:"`
                                                1.            # echo "Watching log $name in $before"
                                                  1.            #过滤获取对应目录下的catalina.out文件中的上一分钟的Exception and Error日志
                                                    1.            result=`grep -C5 "$before" $base/$name/logs/catalina.out | grep -vE "DEBUG|skywalking|10.8.0.37:8800" | grep -C5 -E "Exception|ERROR" | sed $'s/\'/\"/g' `
                                                      1.            #如果result为零就跳过本次循环
                                                        1.            if [[ -"$result" ]]; then
                                                          1.                 continue;
                                                            1.            fi
                                                              1.            echo "-------------------------->"
                                                                1.            #拼接insert sql 语句
                                                                  1.            insert_sql="insert into $tableName (environment,project_name,content) values('$env','$name','\n\nException:\n\n$result')"
                                                                    1.            echo $insert_sql > tmp.sql
                                                                      1.            echo "***********start*************"
                                                                        1.            echo $insert_sql
                                                                          1.            #开始执行sql语句
                                                                            1.            mysql -h$hostName  -P$dbPort  -u$dbUser -p$dbPassword $dbName -"source tmp.sql"
                                                                              1.            echo "************end************"
                                                                                1.         fi
                                                                                  1.     done
                                                                                    1.     #输入休眠60s
                                                                                      1.     echo -"sleep 60 seconds\n"
                                                                                        1.     sleep 60s
                                                                                          1. done
                                                                                        1.  

                                                                                        以上 shell 脚本中关键信息都标有对应的注释,如需实操,可将 mysql 对应的配置信息及监控的日志服务路径进行更改和替换为目标信息即可。

                                                                                        欢迎关注【无量测试之道】公众号,回复【领取资源】
                                                                                        Python编程学习资源干货、
                                                                                        Python+Appium框架APP的UI自动化、
                                                                                        Python+Selenium框架Web的UI自动化、
                                                                                        Python+Unittest框架API自动化、
                                                                                        资源和代码 免费送啦~
                                                                                        文章下方有公众号二维码,可直接微信扫一扫关注即可。

                                                                                        备注:我的个人公众号已正式开通,致力于测试技术的分享,包含:大数据测试、功能测试,测试开发,API接口自动化、测试运维、UI自动化测试等,微信搜索公众号:“无量测试之道”,或扫描下方二维码:


                                                                                        添加关注,让我们一起共同成长!  

                                                                                        文章知识点与官方知识档案匹配,可进一步学习相关知识
                                                                                        CS入门技能树Linux入门初识Linux32800 人正在系统学习中

                                                                                        [转帖]Shell 脚本实现应用服务日志入库 Mysql的更多相关文章

                                                                                        1. Linux下添加shell脚本使得nginx日志每天定时切割压缩

                                                                                          Linux下添加shell脚本使得nginx日志每天定时切割压缩一 简介 对于nginx的日志文件,特别是access日志,如果我们不做任何处理的话,最后这个文件将会变得非常庞大 这时,无论是出现异常 ...

                                                                                        2. shell脚本分析nginx日志

                                                                                          shell脚本分析nginx日志: name=`awk -F ',' '{print $13":"$32}' $file | awk -F ':' '{print $4}'`ech ...

                                                                                        3. shell脚本调试打印日志问题

                                                                                          shell脚本调试打印日志问题 1. 需求 我们在编写脚本的时候,有时候需要做调试,便于我们定位问题,有时候等脚本上线之后,我们需要保留脚本执行过程中的记录.便于我们在出问题的时候,定位问题. 2. ...

                                                                                        4. shell脚本删除log日志

                                                                                          删除log文件简单shell脚本 经常会遇到日志把磁盘占满的情况,引起低级故障.我个人在实际工作中,尝试了如下的方法,比较简单,而且快捷有效. #!/bin/bash # /root/log_dele ...

                                                                                        5. shell脚本实现分日志级别输出

                                                                                          shell脚本如何优雅的记录日志信息,下面让我们一步一步,让shell脚本的日志也变得高端起来,实现如下功能 ①设定日志级别,实现可以输出不同级别的日志信息,方便调试 ②日志格式类似为:[日志级别] ...

                                                                                        6. shell脚本分析 nginx日志访问次数最多及最耗时的页面

                                                                                          当服务器压力比较大,跑起来很费力时候.我们经常做站点页面优化,会去查找那些页面访问次数比较多,而且比较费时. 找到那些访问次数高,并且比较耗时的地址,就行相关优化,会取得立竿见影的效果的. 下面是我在 ...

                                                                                        7. shell脚本备份nginx日志

                                                                                          vim /data/runlog.sh                                                  #编辑一个 shell 脚本 #!/bin/bash LOGP ...

                                                                                        8. 利用shell脚本快速定位日志

                                                                                          我们平时查日志,在测试环境,日志文件只有几个的情况下,我们可以通过找时间接近的文件然后根据关键词定位报错位置,大不了都查一遍,这都可以忍受.但是在实际的生产环境下,服务器集群部署,每天的日志非常多非常 ...

                                                                                        9. [linux] shell脚本编程-统计日志文件中的设备号发通知邮件

                                                                                          1.日志文件列表 比如:/data1/logs/2019/08/15/ 10.1.1.1.log.gz 10.1.1.2.log.gz 2.统计日志中的某关键字shell脚本 zcat *.gz|gr ...

                                                                                        10. shell脚本 定期删除日志

                                                                                          定期删除日志: 然后建立清除日志文件的shell脚本,文件名为clean_log只保留最近三天的日志     #! /bin/bashlogdir=/var/log/httpdcd ${logdir} ...

                                                                                        随机推荐

                                                                                        1. CSS3学习笔记-盒模型

                                                                                          CSS盒模型是指包含内容(content).填充(padding).边框(border)和外边距(margin)几个方面的一个矩形框模型. 内容区(content):指元素中显示内容的区域,它的大小由 ...

                                                                                        2. Spring源码学习笔记4——BeanFactoryPostProcessor执行

                                                                                          一丶BeanFactoryPostProcessor是什么 Spring留给我们的一个扩展接口,在BeanDefinition加载注册完之后,并执行一些前置操作(笔记3)之后会反射生产所有的BeanF ...

                                                                                        3. 8、Flutter Paddiing组件

                                                                                          Padding组件处理容器与子元素之间的间距. class MyApp extends StatelessWidget { const MyApp({super.key}); @override Wi ...

                                                                                        4. JAVAEE基础知识

                                                                                          JAVAEE基础知识 2018年3月,开源组织Eclipse基金会宣布,JavaEE(Enterprise Edition)被更名为JakartaEE,也就是9版本后改名Jakarta EE,也就是J ...

                                                                                        5. MySQL思维导图:MySQL的架构介绍

                                                                                          MySQL的架构介绍(思维导图形式) MySQL简介 概述 MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性. ...

                                                                                        6. 全域Serverless化,华为云引领下一代云计算新范式

                                                                                          本文分享自华为云社区<全域Serverless化,华为云引领下一代云计算新范式>,作者: 华为云PaaS服务小智 . 近日,华为开发者大会2023(Cloud)在东莞成功举办,期间&quo ...

                                                                                        7. 华为云河图KooMap:夯实数字孪生底座,点燃燎原星火

                                                                                          摘要:7月8日,华为开发者大会2023(Cloud)华为云河图KooMap技术分论坛在东莞溪村顺利举办. 7月8日,华为开发者大会2023(Cloud)华为云河图KooMap技术分论坛在东莞溪村顺利举 ...

                                                                                        8. Ascend CL两种数据预处理的方式:AIPP和DVPP

                                                                                          摘要:本文介绍了昇腾CANN提供的两种数据预处理的方式:DVPP和AIPP,介绍了两者的功能.差别及联系,并以具体代码示例介绍了如何使用DVPP和AIPP的功能. 本文分享自华为云社区<了解As ...

                                                                                        9. 实践案例丨CenterNet-Hourglass论文复现

                                                                                          摘要:本案例是CenterNet-Hourglass论文复现的体验案例,此模型是对Objects as Points 中提出的CenterNet进行结果复现. 本文分享自华为云社区<Center ...

                                                                                        10. CVE-2022-22965 漏洞分析,安全问题早发现

                                                                                          摘要:Spring在进行参数绑定时调用的 BeanWrapperImpl在进行JavaBean操作时触发了此漏洞. 本文分享自华为云社区<CVE-2022-22965 漏洞分析>,作者:X ...