shell脚本实现zabbix监控信息收集

简介: zabbix信息收集一般zabbix信息收集都是写成脚本思路:将监控的信息写成函数,使用位置参数$1来调用函数即可,一般都是zabbix来传参

zabbix信息收集

一般zabbix信息收集都是写成脚本

思路:将监控的信息写成函数,使用位置参数$1来调用函数即可,一般都是zabbix来传参

1.tcp信息收集

tcp三次握手

一般由客户端发起请求

1.首先客户端向服务器发起请求,给服务器发送一个SYN的请求包

2.服务器接收确认后给客户端回复一个ACK的确认包,在向客户端发起一个SYN的包,表示请求和客户端建立连接


3.客户端收到sync的包后会回复一个ACK的确认包,表示与服务器建立连接,三次握手结束


tcp四次挥手


通常由服务器发起,例如把用户请求的数据都给用户后就断开了连接


不同的应用会有不同的关闭,例如ssh就是客户端发起


1.服务器端向客户端发送一个FIN的包,表示要断开连接


2.客户端收到FIN包后,确认无误就会回复一个ACK的包


3.既然服务器端以及断开了连接,那么客户端也要断开连接,客户端向服务器发送FIN的包


4.服务器收到FIN包后回复一个ACK的包,四次握手完成


[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4rkD7001-1592060494794)(C:\Users\Administrator\AppData\Roaming\Typora\typora-user-images\image-20200329154648099.png)]


SYN、FIN、ACk这些我们都是看不到,我们能看到的只有Listen、ESTABLSHED、CLOSE WAIT 、TIME_WAIT、CLOSED,如果看到了SYN、FIN、ACK这些状态,那么就说明问题来了


下面开始编写脚本

这种方式一般是给人看的,所有状态的信息
[root@localhost d18_ph_zabbix_sjxx]# netstat -an | grep 'tcp' | awk '{status[$NF]++} END{for (i in status){print i,status[i]}}'
LISTEN 13
ESTABLISHED 2
[root@localhost d18_ph_zabbix_sjxx]# ss -an | grep 'tcp'  | awk '{status[$2]++} END{for (i in status){print i,status[i]}}'
LISTEN 13
ESTAB 2
我们是要给zabbix看的,所以我们要把每一个状态的统计命令写出来
#!/bin/bash
#zabbix收集tcp连接状态,ss版
LISTEN() {
        #ss 版本
        #ss -an | grep 'tcp' | grep 'LISTEN' | wc -l
        #netstat 版本
        netstat -an | grep 'tcp' | grep 'LISTEN' | wc -l
}
SYN_RECV() {
        #ss 版本
        #ss -an | grep 'tcp' | grep 'SYN[-_]RECV' | wc -l
        #netstat 版本
        netstat -an | grep 'tcp' | grep 'SYN[-_]RECV' | wc -l
}
ESTABLISHED() {
        #ss 版本
        #ss -an | grep 'tcp' | grep 'ESTAB' | wc -l
        #netstat 版本
        netstat -an | grep 'tcp' | grep 'ESTABLISHED' | wc -l
}
TIME_WAIT() {
        #ss 版本
        #ss -an | grep 'tcp' | grep 'TIME[-_]WAIT' | wc -l
        #netstat 版本
        netstat -an | grep 'tcp' | grep 'TIME[-_]WAIT' | wc -l
}
$1                      
这里使用$1其实类似于传参,例如$1输入的是LISTEN那么就会调用对应的LISTEN函数
执行:
  [root@localhost d18_ph_zabbix_sjxx]# ./zabbix_tcp_connect_status.sh LISTEN
  13
  [root@localhost d18_ph_zabbix_sjxx]# ./zabbix_tcp_connect_status.sh ESTABLISHED
  2

2.mysql信息收集

mysqladmin命令除了可以改密码,还有很多扩展的功能

看一些mysql的基本信息
[root@localhost d18_ph_zabbix_sjxx]# mysqladmin status
Uptime: 263313  Threads: 1  Questions: 3  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.000
如果数据库设置了密码则这样使用
[root@localhost ~]# mysqladmin -uroot -p123 status
Uptime: 39713  Threads: 1  Questions: 2  Slow queries: 0  Opens: 0  Flush tables: 2  Open tables: 26  Queries per second avg: 0.000
看mysql扩展信息,例如增删改查的数量,由于输出过多,因此我们只保留几个比较重要的
[root@localhost d18_ph_zabbix_sjxx]# mysqladmin extended-status
+------------------------------------------+-------------+
| Variable_name                            | Value       |
+------------------------------------------+-------------+
| Com_commit                               | 0           |
| Com_insert                               | 0           |
| Com_delete                               | 0           |
| Com_update                               | 0           |
| Com_select                               | 0           |
| Com_rollback                             | 0           |
+------------------------------------------+-------------+

脚本内容

#!/bin/bash
#监控mysql的状态信息
#当前的uptime时间
Uptime() {
        mysqladmin status | awk '{print $2}'
}
#慢查询的数量
Slow_queries() {
        mysqladmin status | awk '{print $9}'
}
#insert的数量
Com_insert() {
        mysqladmin extended-status | awk '/\<Com_insert\>/{print $4}'
}
#delete的数量
Com_delete() {
        mysqladmin extended-status | awk '/\<Com_delete\>/{print $4}'
}
#update的数量
Com_update() {
        mysqladmin extended-status | awk '/\<Com_update\>/{print $4}'
}
#select的数量
Com_select() {
        mysqladmin extended-status | awk '/\<Com_select\>/{print $4}'
}
#commit(提交)的数量
Com_commit() {
        mysqladmin extended-status | awk '/\<Com_commit\>/{print $4}'
}
#rollback(回滚)的数量
Com_rollback() {
        mysqladmin extended-status | awk '/\<Com_rollback\>/{print $4}'
}
$1
执行
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Uptime
264790
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Slow_queries
0
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_insert
0
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_delete
0
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_update
0
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_select
1
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_commit
0
[root@localhost d18_ph_zabbix_sjxx]# ./zabbix_mysql_status.sh Com_rollback
0

3.内存信息收集

每当vim一个文件,都会从硬盘把数据读取到内存页page,如果要写一个文件,可能一个page页不够,要分好几个,这就形成了脏页,如果不保存,就会形成丢失文件,因为只是在内存中修改了,我们需要持久化到硬盘才可以


cp一个文件的时候首先拷到内存页,在拷贝到另一个内存页,最后再将这些内存页保存到硬盘中,同样会产生脏页


命令结束了不代表数据一定到了硬盘,只能说到内存上去了,因为磁盘写入默认使用异步方式,可以使用sync命令,把脏页写入到硬盘,常用于u盘,硬盘的话可以慢慢写

脚本内容

#!/bin/bash
#内存信息收集
#内存总量
MemTotal() {
        awk '/^MemTotal/{print $2}' /proc/meminfo
}
#空闲的内存量
MemFree() {
        awk '/^MemFree/{print $2}' /proc/meminfo
}
#缓冲区的大小
Buffers() {
        awk '/^Buffers/{print $2}' /proc/meminfo
}
#缓存区大小
Cached(){
        awk '/^Cached/{print $2}' /proc/meminfo
}
#脏页的大小
Dirty() {
        awk '/^Dirty/{print $2}' /proc/meminfo
}
$1
相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。 &nbsp; &nbsp; 相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
目录
相关文章
|
3月前
|
存储 安全 Unix
七、Linux Shell 与脚本基础
别再一遍遍地敲重复的命令了,把它们写进Shell脚本,就能一键搞定。脚本本质上就是个存着一堆命令的文本文件,但要让它“活”起来,有几个关键点:文件开头最好用#!/usr/bin/env bash来指定解释器,并用chmod +x给它执行权限。执行时也有讲究:./script.sh是在一个新“房间”(子Shell)里跑,不影响你;而source script.sh是在当前“房间”里跑,适合用来加载环境变量和配置文件。
456 9
|
3月前
|
存储 Shell Linux
八、Linux Shell 脚本:变量与字符串
Shell脚本里的变量就像一个个贴着标签的“箱子”。装东西(赋值)时,=两边千万不能有空格。用单引号''装进去的东西会原封不动,用双引号""则会让里面的$变量先“变身”再装箱。默认箱子只能在当前“房间”(Shell进程)用,想让隔壁房间(子进程)也能看到,就得给箱子盖个export的“出口”戳。此外,Shell还自带了$?(上条命令的成绩单)和$1(别人递进来的第一个包裹)等许多特殊箱子,非常有用。
370 2
|
6月前
|
Shell
Shell脚本循环控制:shift、continue、break、exit指令
使用这些命令可以让你的Shell脚本像有生命一样动起来。正确使用它们,你的脚本就能像一场精心编排的舞蹈剧目,既有旋律的起伏,也有节奏的跳跃,最终以一场惊艳的表演结束。每一个动作、每一个转折点,都准确、优雅地完成所需要表达的逻辑。如此,你的脚本不只是冰冷的代码,它透过终端的界面,跳着有节奏的舞蹈,走进观众——使用者的心中。
291 60
|
3月前
|
数据采集 监控 Shell
无需Python:Shell脚本如何成为你的自动化爬虫引擎?
Shell脚本利用curl/wget发起请求,结合文本处理工具构建轻量级爬虫,支持并行加速、定时任务、增量抓取及分布式部署。通过随机UA、异常重试等优化提升稳定性,适用于日志监控、价格追踪等场景。相比Python,具备启动快、资源占用低的优势,适合嵌入式或老旧服务器环境,复杂任务可结合Python实现混合编程。
|
9月前
|
关系型数据库 MySQL Shell
MySQL 备份 Shell 脚本:支持远程同步与阿里云 OSS 备份
一款自动化 MySQL 备份 Shell 脚本,支持本地存储、远程服务器同步(SSH+rsync)、阿里云 OSS 备份,并自动清理过期备份。适用于数据库管理员和开发者,帮助确保数据安全。
|
5月前
|
Web App开发 缓存 安全
Linux一键清理系统垃圾:释放30GB空间的Shell脚本实战​
这篇博客介绍了一个实用的Linux系统盘清理脚本,主要功能包括: 安全权限检查和旧内核清理,保留当前使用内核 7天以上日志文件清理和系统日志压缩 浏览器缓存(Chrome/Firefox)、APT缓存、临时文件清理 智能清理Snap旧版本和Docker无用数据 提供磁盘空间使用前后对比和大文件查找功能 脚本采用交互式设计确保安全性,适合定期维护开发环境、服务器和个人电脑。文章详细解析了脚本的关键功能代码,并给出了使用建议。完整脚本已开源,用户可根据需求自定义调整清理策略。
664 1
|
7月前
|
存储 Unix Shell
确定Shell脚本在操作系统中的具体位置方法。
这对于掌握Linux的文件系统组织结构和路径方面的理解很有帮助,是我们日常工作和学习中都可能使用到的知识。以上讲解详细清晰,应用简便,是每一个想要精通操作系统的计算机爱好者必备的实用技能。
206 17
|
7月前
|
Linux Shell
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
Centos或Linux编写一键式Shell脚本删除用户、组指导手册
228 4
|
7月前
|
Linux Shell 数据安全/隐私保护
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
Centos或Linux编写一键式Shell脚本创建用户、组、目录分配权限指导手册
449 3
|
8月前
|
Linux Shell
在Linux、CentOS7中设置shell脚本开机自启动服务
以上就是在CentOS 7中设置shell脚本开机自启动服务的全部步骤。希望这个指南能帮助你更好地管理你的Linux系统。
698 25

推荐镜像

更多