linux的自动检测的脚本:用于检测应用程序状态的linux脚本

news2024/10/2 1:33:05

目录

一、要求

1、需求内容

2、分析

二、脚本介绍

1、脚本代码

2、脚本解释

(1)脚本结构

(2)应用程序和服务列表

(3)日志文件路径

(4)测试 URL 列表

(5)检查服务状态

(6)检查日志文件

(7)检查性能

(8)主函数

3、补充说明

(1)补充解释

(2)注意事项

三、脚本应用和运行

1、脚本文件

2、赋予权限

3、执行结果

四、扩展功能


一、要求

1、需求内容

        需要编写一个linux的脚本,用于检查linux的应用程序状态,包括关键应用程序的服务状态、 应用程序日志包括错误和警告、以及 应用程序性能包括响应时间和吞吐量等。

2、分析

        为了实现一个全面的检测脚本来检查 Linux 上的关键应用程序状态,我们可以将任务分为几个部分:

        (1)检查服务状态 - 使用 systemctl 或其他服务管理工具。

        (2)检查日志文件 - 使用 grep 和 tail 来搜索错误和警告。

        (3)检查应用程序性能 - 使用工具如 curl 或 ab(ApacheBench)来测试响应时间和吞吐量。

二、脚本介绍

        经过在centos系统中测试,完成了脚本,这个脚本可能需要根据具体系统配置(如使用的发行版)进行调整。

        闲话不说,直接介绍脚本吧。

1、脚本代码

        下面是一个 Bash 脚本示例,请参考:

#!/bin/bash

# 应用程序列表
declare -A apps=(
  ["nginx"]="nginx"
  ["mysql"]="mysql"
  ["apache"]="apache2"
)

# 日志文件路径
declare -A log_files=(
  ["nginx"]="/var/log/nginx/error.log"
  ["mysql"]="/var/log/mysql/error.log"
  ["apache"]="/var/log/apache2/error.log"
)

# 测试URLs
declare -A test_urls=(
  ["nginx"]="http://localhost"
  ["apache"]="http://localhost"
)

# 检查服务状态
function check_service_status() {
  local service_name=$1
  local status=$(systemctl is-active "$service_name")
  
  if [ "$status" == "active" ]; then
    echo "Service $service_name is running."
  else
    echo "Service $service_name is not running."
  fi
}

# 检查日志文件
function check_log_files() {
  local log_file=$1
  local error_count=$(grep -c 'error' "$log_file")
  local warning_count=$(grep -c 'warning' "$log_file")
  
  if [ $error_count -gt 0 ]; then
    echo "Found $error_count errors in $log_file."
  else
    echo "No errors found in $log_file."
  fi
  
  if [ $warning_count -gt 0 ]; then
    echo "Found $warning_count warnings in $log_file."
  else
    echo "No warnings found in $log_file."
  fi
}

# 检查性能
function check_performance() {
  local url=$1
  local response_time=$(curl -w "%{time_total}\n" -s -o /dev/null "$url")
  local throughput=$(ab -n 100 -c 10 "$url" | grep "Requests per second" | awk '{print $4}')
  
  echo "Response time: $response_time seconds"
  echo "Throughput: $throughput req/s"
}

# 主函数
function main() {
  for app in "${!apps[@]}"; do
    service_name=${apps[$app]}
    log_file=${log_files[$app]}
    test_url=${test_urls[$app]}
    
    echo "Checking $app..."
    check_service_status "$service_name"
    check_log_files "$log_file"
    check_performance "$test_url"
    echo "-------------------------------------"
  done
}

# 运行主函数
main

2、脚本解释

上述脚本的解释如下:

(1)脚本结构

  • 定义变量:

   - 定义了两个关联数组 (declare -A) 分别存储服务名称和服务对应的系统名称,以及日志文件路径。

   - 定义了一个关联数组存储测试 URL。

  • 定义函数:

   - check_service_status: 用于检查服务的状态。

   - check_log_files: 用于检查日志文件中的错误和警告数量。

   - check_performance: 用于测试应用程序的性能(响应时间和吞吐量)。

  • 主函数 main: 遍历每个应用程序,调用上述函数进行检查。
  • 执行主函数: 调用 main 函数启动整个检查过程。

(2)应用程序和服务列表

declare -A apps=(
  ["nginx"]="nginx"
  ["mysql"]="mysql"
  ["apache"]="apache2"
)

        - 定义了一个关联数组 apps,键是应用程序的名字,值是服务的名称。

(3)日志文件路径

declare -A log_files=(
  ["nginx"]="/var/log/nginx/error.log"
  ["mysql"]="/var/log/mysql/error.log"
  ["apache"]="/var/log/apache2/error.log"
)

        - 定义了一个关联数组 log_files,键是应用程序的名字,值是对应应用程序的日志文件路径。

(4)测试 URL 列表

declare -A test_urls=(
  ["nginx"]="http://localhost"

  ["apache"]="http://localhost"

)

        - 定义了一个关联数组 test_urls,键是应用程序的名字,值是用于测试性能的 URL。

(5)检查服务状态

function check_service_status() {
  local service_name=$1
  local status=$(systemctl is-active "$service_name")

  if [ "$status" == "active" ]; then
    echo "Service $service_name is running."
  else
    echo "Service $service_name is not running."
  fi
}

        - 这个函数接收一个参数 $1,即服务名称。

        - 使用 systemctl is-active 命令获取服务的状态。

        - 根据状态输出服务是否正在运行的信息。

(6)检查日志文件

 

function check_log_files() {
  local log_file=$1
  local error_count=$(grep -c 'error' "$log_file")
  local warning_count=$(grep -c 'warning' "$log_file")

  if [ $error_count -gt 0 ]; then
    echo "Found $error_count errors in $log_file."
  else
    echo "No errors found in $log_file."
  fi

  if [ $warning_count -gt 0 ]; then
    echo "Found $warning_count warnings in $log_file."
  else
    echo "No warnings found in $log_file."
  fi
}

        - 这个函数接收一个参数 $1,即日志文件的路径。

        - 使用 grep -c 计算日志文件中包含“error”和“warning”的行数。

        - 根据计数输出日志文件中错误和警告的数量。

(7)检查性能

 

function check_performance() {
  local url=$1
  local response_time=$(curl -w "%{time_total}\n" -s -o /dev/null "$url")
  local throughput=$(ab -n 100 -c 10 "$url" | grep "Requests per second" | awk '{print $4}')

  echo "Response time: $response_time seconds"
  echo "Throughput: $throughput req/s"
}

        - 这个函数接收一个参数 $1,即用于性能测试的 URL。

        - 使用 curl 获取响应时间。

        - 使用 ab (ApacheBench) 进行压力测试,计算吞吐量。

        - 输出响应时间和吞吐量。

(8)主函数

function main() {
  for app in "${!apps[@]}"; do
    service_name=${apps[$app]}
    log_file=${log_files[$app]}
    test_url=${test_urls[$app]}

    echo "Checking $app..."
    check_service_status "$service_name"
    check_log_files "$log_file"
    check_performance "$test_url"
    echo "-------------------------------------"
  done
}

     - 使用 for 循环遍历 apps 数组中的每一个应用程序。

     - 对于每个应用程序,分别调用 check_service_status、check_log_files 和 check_performance 函数。

3、补充说明

(1)补充解释

  • 服务状态 - 使用 systemctl is-active 检查服务是否处于活动状态。
  • 日志文件 - 使用 grep 计算日志文件中的错误和警告数量。
  • 性能测试 - 使用 curl 获取响应时间,使用 ab 获取吞吐量。
  • 这个脚本通过一系列函数来检查 Linux 系统上的关键应用程序的状态,包括服务是否运行、日志文件中的错误和警告以及应用程序的性能指标。通过这种方式,可以获得关于应用程序运行状况的全面报告。

(2)注意事项

  • 确保 ab(ApacheBench)已安装,如果没有安装可以使用 apt-get install apache2-utils 或者相应包管理器命令进行安装。
  • 请确保脚本具有执行权限。  

三、脚本应用和运行

1、脚本文件

        将上述脚本保存为一个文件,例如  check_apps_status_21.sh。

2、赋予权限

        赋予脚本执行权限,使用如下命令:

                chmod +x  check_apps_status_21.sh

3、执行结果

        运行脚本使用如下命令:

               sh check_apps_status_21.sh

        结果如下所示:

 

四、扩展功能

        如果需要进一步的功能,例如发送警报邮件、写入日志文件或者更复杂的性能分析,可以在这个基础上继续扩展脚本。例如,可以添加一个发送邮件的函数来通知管理员关于服务状态的变化或异常情况。


文章正下方可以看到我的联系方式:鼠标“点击” 下面的 “威迪斯特-就是video system 微信名片”字样,就会出现我的二维码,欢迎沟通探讨。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1979413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

智能小程序 Ray 开发面板 SDK —— 无线开关一键执行模板教程(一)

1. 准备工作 前提条件 已阅读 Ray 新手村任务,了解 Ray 框架的基础知识已阅读 使用 Ray 开发万能面板,了解 Ray 面板开发的基础知识 构建内容 在此 Codelab 中,您将利用面板小程序开发构建出一个支持一键执行及自动化的无线开关面板&…

HCIP----BGP综合实验

一、实验拓扑 二、实验要求 三、实验思路 1.基于172.16.0.0/16根据实验拓扑图进行IP地址规划,规划过程如下: 2.根据上述的IP地址的规划进行配置,配置完后在AS2中配置OSPF使其内部实现全网通(互相建邻的条件)。 3.在A…

keil编程中#pragma NOAREGS的作用和优点

参考 功能 不直接操作内存地址 #pragma NOAREGS在Keil中的使用含义是禁用自动分配寄存器,开发人员指定控制的寄存器。‌例如中断的执行使用的寄存器需要人为的指定,避免分配同样的寄存器导致数据错误。对寄存器R0到R7不直接操作寄存器地址&#xff0c…

C# 设计模式六大原则之依赖倒置原则

总目录 前言 1 基本介绍 1. 定义 依赖倒置原则 Dependence Inversion Principle,简称:DIP。 依赖倒置原则:高层模块不应该依赖低层模块,二者都应该依赖其抽象;抽象不应该依赖细节,细节应该依赖抽象。 2…

GO之基本语法

一、Golang变量 一)变量的声明:使用var关键字 Go语言是静态类型语言 Go语言的基本类型有: boolstringint、int8、int16、int32、int64uint、uint8、uint16、uint32、uint64、uintptrbyte // uint8 的别名rune // int32 的别名 代表一个 Unic…

CTF-web 基础 网络协议

网络协议 OSI七层参考模型:一个标准的参考模型 物理层 网线,网线接口等。 数据链路层 可以处理物理层传入的信息。 网络层 比如IP地址 传输层 控制传输的内容的传输,在传输的过程中将要传输的信息分块传输完成之后再进行合并。 应用…

sql语句精讲

目录 一、MySql的细节知识 SQL语句的结束 SQL语句的大小写 SQL语句中的空格 SQL查询结果并排序 WHERE和ORDER BY的位置 常用数据类型 MYSQL比较运算符 MYSQL算术运算符​编辑 MYSQL逻辑运算符 运算符的优先级 二、MySql数据库的基本操作 1.创建数据库 2.选择数据…

kubenetes证书续签

转载:k8s证书续签 1 检查证书年限 kubeadm certs check-expiration 2 对现有证书进行备份 # 备份kubeadm cp -ra /usr/bin/kubeadm /usr/bin/kubeadm.bak # 备份证书 cp -ra /etc/kubernetes /etc/kubernetes.bak 3 重新编译kubeadm 拉取k8s仓库代码 git clone…

【数据分析--Pandas实战指南在真实世界数据中的应用】

前言: 💞💞大家好,我是书生♡,本阶段和大家一起分享和探索数据分析—基础介绍,本篇文章主要讲述了:数据分析的介绍,Python开源库,配置Jupyter,Pandas读取数据…

echarts 漏斗图 渐变金字塔

使用echarts实现金字塔效果,颜色渐变,左右显示其对应的值 效果: 如果要实现一个正三角的形状,需要在data数组中,将value赋值成有序递增,bl代表他的分值,显示在左侧。 var data [{name: "…

NSS [SWPUCTF 2022 新生赛]file_master

NSS [SWPUCTF 2022 新生赛]file_master 开题,一眼文件上传。 network看看返回包。后端语言是PHP。 除了文件上传还有个查看文件功能。 起手式查询/etc/passwd,发现查询方法是GET提交参数,后端使用file_get_contents()函数包含文件。同时有op…

MySQL基础练习题21-按日期分组销售产品

目录 题目 准备数据 分析数据 总结 题目 找出每个日期、销售的不同产品的数量及其名称。每个日期的销售产品名称应按词典序排列。 返回按 sell_date 排序的结果表。 准备数据 ## 创建库 create database db; use db;## 创建表 Create table If Not Exists Activities (s…

初阶数据结构4 二叉树

1. 树 1.1 树的概念与结构 树是⼀种⾮线性的数据结构,它是由 n(n>0) 个有限结点组成⼀个具有层次关系的集合。把它叫做树是因为它看起来像⼀棵倒挂的树,也就是说它是根朝上,⽽叶朝下的。 有⼀个特殊的结点&#…

Flink实时数仓(六)【DWD 层搭建(四)交易域、互动域、用户域实现】

前言 今天的任务是完成 DWD 层剩余的事实表;今年的秋招开得比往年早,所以要抓紧时间了,据了解,今年的 hc 还是不多,要是晚点投铁定寄中寄了; 今天还是个周末,不过记忆里我好像整个大学都没有好好…

如何实现ElementUI表单项label的文字提示?

在Vue和ElementUI的丰富组件库中,定制化表单是常见的需求之一。那么如何在表单项label后添加文字提示,以提升用户体验呢? 首先我们来看一下效果图: 这里我们鼠标移动到❓图标上就会出现提示 在 ElementUI 中,el-form-item 组件允许使用 slot 自定义 label。通过在 el-fo…

Boost:asio网络编程从同步到异步

文章目录 同步服务器客户端服务端 异步服务器(有问题)异步服务器优化 在学TCP的时候&#xff0c;写的第一个服务器就是一个echo服务器&#xff0c;那在Boost网络编程中&#xff0c;自然也先写一个echo服务器练练手 同步服务器 客户端 #include <iostream> #include &l…

<数据集>BDD100K人车识别数据集<目标检测>

数据集格式&#xff1a;VOCYOLO格式 图片数量&#xff1a;15807张 标注数量(xml文件个数)&#xff1a;15807 标注数量(txt文件个数)&#xff1a;15807 标注类别数&#xff1a;7 标注类别名称&#xff1a; [pedestrian, car, bus, rider, motorcycle, truck, bicycle] 序号…

Java-变量,运算符,输入与输出

目录 一&#xff0c;语法基础 1.基本Java程序 2.语法基础 2.1 变量 2.2 常量限制(fiinal)类比C中的const 2.3 类型转化 2.4 运算符 2.5 表达式 2.5 输入与输出 2.5.1 输入 2.5.2 输出 一&#xff0c;语法基础 1.基本Java程序 public class Main{public static void…

差分放大电路

目录 引出 复合管 直接耦合放大电路 问题: 怎么抑制 初代电路(已引入负反馈之后) 分析 怎么解决 镜像电路 两个概念 分析直流通路: 分析交流电路: 差分放大电路的分析 交流通路 简化 H参数等效 可以得到 其他接法 引出 复合管 目的:获得更大的放大倍数 多只…

3个二创文案生成器,让文案创作变简单

在当今数字时代&#xff0c;内容创作已经成为了一项非常重要的工作。无论是为了推广产品、营销服务&#xff0c;还是仅仅为了吸引读者&#xff0c;优质的文案都是至关重要的。然而&#xff0c;对于许多人来说&#xff0c;写出令人印象深刻的文案并不容易。这就是为什么二创文案…