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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: 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
相关实践学习
通过Ingress进行灰度发布
本场景您将运行一个简单的应用,部署一个新的应用用于新的发布,并通过Ingress能力实现灰度发布。
容器应用与集群管理
欢迎来到《容器应用与集群管理》课程,本课程是“云原生容器Clouder认证“系列中的第二阶段。课程将向您介绍与容器集群相关的概念和技术,这些概念和技术可以帮助您了解阿里云容器服务ACK/ACK Serverless的使用。同时,本课程也会向您介绍可以采取的工具、方法和可操作步骤,以帮助您了解如何基于容器服务ACK Serverless构建和管理企业级应用。 学习完本课程后,您将能够: 掌握容器集群、容器编排的基本概念 掌握Kubernetes的基础概念及核心思想 掌握阿里云容器服务ACK/ACK Serverless概念及使用方法 基于容器服务ACK Serverless搭建和管理企业级网站应用
目录
相关文章
|
1月前
|
监控 Java Shell
监控堆外第三方监控工具Zabbix
监控堆外第三方监控工具Zabbix
39 5
|
2月前
|
Shell
一个用于添加/删除定时任务的shell脚本
一个用于添加/删除定时任务的shell脚本
116 1
|
27天前
|
监控 安全 前端开发
使用 Zabbix 监控堆外应用
使用 Zabbix 监控堆外应用
44 9
|
26天前
|
监控 数据可视化 Java
zabbix全面的监控能力
zabbix全面的监控能力
51 7
|
1月前
|
Shell Linux 测试技术
6种方法打造出色的Shell脚本
6种方法打造出色的Shell脚本
71 2
6种方法打造出色的Shell脚本
|
1月前
|
XML JSON 监控
Shell脚本要点和难点以及具体应用和优缺点介绍
Shell脚本在系统管理和自动化任务中扮演着重要角色。尽管存在调试困难、可读性差等问题,但其简洁高效、易于学习和强大的功能使其在许多场景中不可或缺。通过掌握Shell脚本的基本语法、常用命令和函数,并了解其优缺点,开发者可以编写出高效的脚本来完成各种任务,提高工作效率。希望本文能为您在Shell脚本编写和应用中提供有价值的参考和指导。
66 1
|
1月前
|
Ubuntu Shell 开发工具
ubuntu/debian shell 脚本自动配置 gitea git 仓库
这是一个自动配置 Gitea Git 仓库的 Shell 脚本,支持 Ubuntu 20+ 和 Debian 12+ 系统。脚本会创建必要的目录、下载并安装 Gitea,创建 Gitea 用户和服务,确保 Gitea 在系统启动时自动运行。用户可以选择从官方或小绿叶技术博客下载安装包。
63 2
|
1月前
|
SQL 监控 数据库
OceanBase社区版可以通过Zabbix监控
OceanBase社区版可以通过Zabbix监控
111 7
|
2月前
|
监控 网络协议 Shell
ip和ip网段攻击拦截系统-绿叶结界防火墙系统shell脚本
这是一个名为“小绿叶技术博客扫段攻击拦截系统”的Bash脚本,用于监控和拦截TCP攻击。通过抓取网络数据包监控可疑IP,并利用iptables和firewalld防火墙规则对这些IP进行拦截。同时,该系统能够查询数据库中的白名单,确保合法IP不受影响。此外,它还具备日志记录功能,以便于后续分析和审计。
63 6
|
1月前
|
运维 监控 Shell
深入理解Linux系统下的Shell脚本编程
【10月更文挑战第24天】本文将深入浅出地介绍Linux系统中Shell脚本的基础知识和实用技巧,帮助读者从零开始学习编写Shell脚本。通过本文的学习,你将能够掌握Shell脚本的基本语法、变量使用、流程控制以及函数定义等核心概念,并学会如何将这些知识应用于实际问题解决中。文章还将展示几个实用的Shell脚本例子,以加深对知识点的理解和应用。无论你是运维人员还是软件开发者,这篇文章都将为你提供强大的Linux自动化工具。

推荐镜像

更多