简介:
使用C语言和bash脚本实现的服务器健康监控系统。服务器端通过执行bash脚本获取健康信息,利用socket即时发送到监控端主机。监测数据类型:
采用bash脚本获取相关信息
- cpu
- 内存
- 硬盘
- 恶意进程
- 系统信息
- 登录用户信息
技术说明:
- C语言socket编程。
- C语言多线程与多进程编程。
- 数据结构实现(链表)。
- linux的bash脚本编程。
- linux systemd 的使用。
架构:
监控端(Master)
线程一:
循环监听:使用socket监听,将收到的连接的套接字存储到长度最短的链表里。
线程二:
数据接收:通过读取配置文件创建若干数据发送的线程,每个线程分配一个链表。
从链表读取一个套接字,接收六组数据,然后断开连接,将该套接字从链表中删除。
保证数据的可靠性:六组数据,每组数据接收前,发送约定好的数据类型标志码,通知服务器本组应该发送的数据的类型。然后接收数据,存储到本地。
线程三:
紧急连接:单独开启通道,接受服务器连接,发送紧急报警信息。
该数据单独存放在发送者目录下。
服务器端(Server):
线程一:
数据监测:运行监测脚本,将监测数据存储到文件。
线程二:
数据发送:根据监控端发来的数据类型读取相应监测数据的日志文件,发送给监控端。
通过分析监测数据判断是否有警报信息,发送警报信息。
数据获取与警报信息的即时性:无法做到数据发送的实时性,但是可以保证监测数据的实时性。每次只发送每种类型数据日志文件中的最上面一行,一共六组数据发送完成关闭连接。该方式牺牲一定的资源与数据传输的实时性,来保证线程一的一定程度的实时性。若非如此,只能采用文件锁来避免文件指针的冲突,这将会导致线程一阻塞,从而导致既服务法达到信息传输的实时性又无法达到监测数据与警报信息的实时性。
相关文件:
- 配置文件:
- 监控端:
/etc/SHMS-Master/master.conf
- 服务端;
/etc/SHMS-Server/server.conf
- 监控端:
- 运行日志文件:
- 监控端:
/var/log/SHMS-Master/SHMS-Master.log
- 服务端:
/var/log/SHMS-Server/SHMS-Server.log
- 监控端:
- 配置文件:
编译安装:
- 进入目录:
cd ./Server/build/
(服务器端)或cd ./Master/build/
(监控端) - 清空编译文件:
make clean
- 编译链接生成可执行程序:
make
- 添加到系统服务(使用systemd):
sudo make install
- 进入目录:
deb包安装:
- 下载deb包:release页面
- 安装:
sudo dpkg -i xxx.deb
服务操作:
- 服务器端:
- 查看服务状态:
sudo systemctl status SHMS-Server.service
- 启动服务:
sudo systemctl start SHMS-Server.service
- 停止服务:
sudo systemctl stop SHMS-Server.service
- 重启服务:
sudo systemctl restart SHMS-Server.service
- 查看服务状态:
- 监控端:
- 查看服务状态:
sudo systemctl status SHMS-Master.service
- 启动服务:
sudo systemctl start SHMS-Master.service
- 停止服务:
sudo systemctl stop SHMS-Master.service
- 重启服务:
sudo systemctl restart SHMS-Master.service
- 查看服务状态:
- 服务器端:
-
CPU信息获取
九月 2日, 2019
准备知识 /proc文件系统是一个伪文件系统,该文件系统中存储着内核控制相关信息,通俗点说就是这个目录是虚拟的,它受内核直接控制,存储与内核控制相关的数据,与其他目录不同的是/proc目录不是真实存储在硬盘中的,它的数据存储在内存...
-
BASH脚本实现素数线性筛
九月 2日, 2019
知识准备 for循环12345678910111213141516171819202122232425for i in `seq 1 10`;do echo ${i}done#执行结果---------12345...
-
磁盘信息获取
九月 2日, 2019
知识准备: df:该工具用来获取文件系统挂载信息。 awk:该工具用来处理 df的数据。 代码: 123456789101112131415161718#!/bin/bashdf -m | grep "^/...
-
进程信息获取
九月 2日, 2019
知识准备: ps 该工具用来获取进程信息 awk该工具用来处理数据 代码 123456789101112131415161718192021#!/bin/bashps -aux | awk -v last_all=$(ps -...
-
内存信息获取
九月 2日, 2019
free:该工具用来获取内存信息 grep:该工具用来筛选数据 awk':该工具用来处理数据 代码: 1234567#!/bin/bashfree -m | grep "^Mem" | awk -v...
-
系统信息获取
九月 2日, 2019
欢迎大家转载,转载请注明出处,谢谢! 知识准备 date:获取当前时间 /etc/issue:系统版本信息 /proc/loadavg:负载信息 df:获取磁盘信息 free:内存信息 /sys/class/thermal/t...
-
用户信息获取
九月 2日, 2019
欢迎大家转载,转载请注明出处,谢谢! 知识准备 w:获取当前登录信息 grep:对数据进行筛选 cut:对字符串进行剪切 sort:排序 uniq:统计每个字符串个数 head:显示开头几行 awk:文本处理工具 代码 1...
-
八大排序算法总结
九月 27日, 2019
直接插入排序算法 概述直接插入排序算法在逻辑上将整体数据分为两部分,一部分是已排序部分,另一部分是待排序部分 。排序的过程是:在待排序部分逐步的拿出一个元素,将其插入到已排序部分中合理的位置 。 适用场景插入排序在对几乎已经排好序的数...
-
hexo低成本搭建静态网页博客
九月 16日, 2019
引言好多同学有写博客的习惯,也有各大例如csd、简等博客平台。但是这些平台毕竟是盈利平台,无法做到对自己的博客完全掌控,有一丝丝的不爽快。想要DIY一下几乎不可能。在这里推荐同学们自己动手丰衣足食。 准备知识 github最基本的使用...