用Webhook+Python+Shell 编写一套 Unix 类系统监控工具

前言

告警系统是对系统监控必须掌握的技能、不管是用 zabbix、cacti 等监控平台还是其他的监控工具,都需要有一个实时的监控与反馈机制,能让问题、故障实时的通知到工程师的手里,及时得到解决;以最大化的保障业务的正常。本次编写部署监控是为了更好的学习、经验的总结、也希望能给给位带来一点帮助,在大家刚好需要的时候,这篇文章能帮助你解决你所需要的。

一、shell 原理认识

1. shell 介绍

Shell(计算机壳层),在计算机科学中,shell 俗称壳,是提供使用者使用界面的软件(命令解析器)。它类似于 DOS 下的 command.com 和后来的 cmd.exe。它接收用户命令,然后调用相应的应用程序。

同时它又是一种程序设计语言。作为命令语言,它交互式解释和执行用户输入的命令,或者自动地解释和执行预先设定好的一连串的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高级语言中才具有的控制结构,包括循环和分支。

基本上 shell 分两大类:

  • 图形界面 shell(Graphical User Interface shell 即 GUI shell)
  • 命令行式 shell(Command Line Interface shell 即 CLI shell)

2. shell 的类型

在 UNIX 中主要有:

  • Bourne shell ( sh)
  • Korn shell ( ksh)
  • Bourne Again shell ( bash)
  • POSIX shell ( sh)
  • C shell (包括 csh and tcsh)
  • C shell ( csh)
  • TENEX/TOPS C shell ( tcsh)
  • ……

3. shell 原理

在 Unix 类系统之中,一个可执行的程序是一个机器指令及其数据的序列,一个进程是程序运行时的内存空间和设置。

Unix 系统中的内存分为系统空间和用户空间,进程存在于用户空间,用户空间是存放运行的程序和它们数据的一部分内存空间。建立一个进程时,内核要找到存放程序指令和数据的空闲内存页。内核还要建立数据结构来存放相应的内存分配情况和进程属性。shell 是一个管理进程和运行程序的程序,Unix 系统有很多可用的 shell。

enter image description here

shell 对输入的命令的分析:

在 Linux 中,有一些命令,例如 cd 是包含在 shell 内部的命令,还有一些命令,例如 cp、mv 或 rm 是存在于文件系统中某个目录下的单独的程序。对于用户而言,没必要关心一个命令是在 shell 内部还是在 shell 外部。

shell 对于命令的分析过程如下:

首先,检查用户输入的命令是否是内部命令,如果不是再检查是否是一个应用程序;shell 在搜索路径或者环境变量中寻找这些应用程序;如果键入命令不是一个内部命令并且没有在搜索路径中查找到可执行文件,那么将会显示一条错误信息; 如果能够成功找到可执行文件,那么该内部命令或者应用程序将会被分解为系统调用传给 Linux 内核,然后内核在完成相应的工作。

二、深入理解 shell

只要有操作系统的地方就有 shell、学习 shell 也可以说是学习它的系统,掌握 shell 也等同于熟练的掌握了系统的使用规则。

Shell、内核、硬件的关系如图所示:

enter image description here

1. 学习 shell 好处

  • 变化小,一旦学会,受用终身
  • 远程控制方面字符界面比 GUI 更节省网络带宽
  • 编程功能可以大大提高系统管理的效率
  • 对 Linux 内部的运行机制有更深入的了解

2. bash 作为管理内核的 Shell,其优点如下:

  • 支持通配符和一些特殊字符
  • 支持输入输出重定向
  • 支持管道操作
  • 命令的记忆与编辑功能
  • 命令的别名设定功能
  • 自动补全功能
  • 强大的编程功能

3. Shell 命令的通配符和特殊字符

常用的特殊字符表

enter image description here

利用通配符可以同时引用多个文件,常用的通配符有 *?* 号表示可以匹配任意长度的任何字符,? 号代表了任意一个字符。

例如:

ls *.png
ls b? 
ls b??? 

注意:

  • 通配符 * 不能与 . 开头的文件名匹配
  • 利用 [ ]-! 组成的字符组模式还可以扩展要匹配的文件范围
  • [ ] 规定在指定的字符范围任意一个字符都满足匹配
  • - 规定在某一个区间范围内匹配
  • ! 规定在某一范围之外的匹配

例如:

ls [abc]d
ls [abc]*  
ls [a-f]*
ls [!abc]*

4. 输入输出重定向

键盘称为标准输入设备,显示器称为标准输出设备

在 Shell 中,不使用系统的标准输入、输出设备而重新指定其输入输出的方法称为输入输出重定向。

什么时候需要使用重定向?

  • 当屏幕输出的信息很重要,而且需要将它保存的时候,后台执行的程序,不希望它干扰屏幕正常输出结果时;
  • 一些系统的例行性命令的执行结果时;
  • 希望它可以保存下来时;
  • 错误信息和正确信息需要分别输出时;
  • 需要输入的数据通过文件的方式读入时。

重定向符号有:>1>2>>><

语法格式: 命令 重定向符号 设备或文件

根据不同的符号实现的效果可以分为:

  • 与输出相关的重定向
  • 输出重定向
  • 附加输出重定向
  • 错误输出重定向
  • 与输入相关的重定向
  • 输入重定向

enter image description here

标准输出重定向(>

将命令执行的结果不在标准输出设备上显示,而是保存到某一文件或者通过某一设备进行输出的操作

例如:ls -al >list

说明:

  • 如果 list 文件本身不存在,则系统会自动建立它
  • 如果 list 文件已存在,则系统会先将文件内容清空,然后再将数据写入。即将原有数据覆盖掉了。

可以通过 vi test 来浏览执行的结果信息。

附加输出重定向(>>

和标准输出重定向不同之处在于前者将输出的内容保存到文件的同时不覆盖文件原有的内容,而是追加到原有内容的后面;

例如:ls -al >>list

错误输出重定向(2>

例如:find / -name newtxt 2> err.txt

说明:该命令将正确的结果信息显示在屏幕上,将错误的信息输出到 err.txt 文件中

错误输出重定向(2>

将正确的信息和错误的信息分别输出到不同的文件

find / -name newtxt 1>right.txt 2>err.txt

将正确的信息和错误的信息都输出到同一个文件中

find / -name newtxt  1>result.txt  2>&1

将显示的数据中正确的信息输出到某个文件,错误的信息丢弃

find / -name newtxt  1>result.txt  2> /dev/null

说明:/dev/null 可以视为垃圾设备,专么收集垃圾信息,导入到这里的数据将被清理并消除,将多个命令前后连接起来形成一个管道流。

管道命令执行流程图 :

enter image description here

实现管道功能的符号为 |

例如: 要利用管道统计当前目录下所有文件和子目录的数目 ls -l | wc -l

注意:管道操作只能处理前一个命令执行的正确信息,即标准输出的内容,而对错误信息无法处理

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值