服务器管理平台(6)- Utils

Utils

  • 本篇为服务器管理平台的结篇,讲述一些必要的Util,如钉钉告警、安全加密、远程登录等功能的实现

1、钉钉告警

1.1、SQL配置告警规则

  1. 逻辑磁盘容量已使用比例超过90%

  2. 超过30天未登录

字段名称字段类型解释
Idint自增ID
Tablestring监测表名
Metricstring监测指标
Templatestring告警模版
Frequencystring告警频率
Thresholdstring指标阈值
CreatedAttimestamp创建时间
UpdatedAttimestamp修改时间

1.2、Shell定时轮询

## 打开定时任务配置文件crontab -e## 指定每个工作日上午11:10定时执行脚本,并把执行脚本的日志写入文件 result.log10 11 * * 1,2,3,4,5 sh [alert.sh](http://alert.sh) > result.log

1.3、核心功能函数

const openUrl = "https://oapi.dingtalk.com/robot/send?access_token=43e4ad2bcbbef692c7652b9eecca6fd51a0db9e544edcb579640e78f71259006"// NotifyHandler NotifyHandler
type NotifyHandler struct {web.BaseHandler
}// POST method
func (NotifyHandler) POST(ctx *web.Context) {//1.根据POST表单拼接SQLvar rules []model.AlertRulerules, err := model.GetRules()if err != nil {ctx.JSON("Describe AlertRule", 101, err)return}//2. 查询记录匹配告警模版for _, rule := range rules {switch rule.Table {case "es_logicaldisk":threshold, err := strconv.Atoi(rule.Threshold)if err != nil {ctx.JSON("Describe AlertRule Threshold ,table es_logicaldisk", 101, err)return}disks, err := model.GetDiskInfo(threshold)if err != nil {ctx.JSON("Describe GetDiskInfo Fail", 101, err)return}if len(disks) != 0 {for _, disk := range disks {alarmStr := fmt.Sprintf("时间: %s\n告警标题:逻辑磁盘容量超出%v\n业务IP:%v\n序列号:%v\n磁盘:%v使用百分比%v",time.Now().Format("2006-01-02 15:04:05"), rule.Threshold, disk.BusinessIp, disk.SN, disk.Filesystem, disk.UsePercent)err := notify.SendDingCh(openUrl, alarmStr)if err != nil {ctx.JSON("Describe LogicalDisk", 101, err)return}}}case "es_logininfo":logins, err := model.GetLoginInfo()if err != nil {ctx.JSON("Describe GetLoginInfo Fail", 101, err)return}if len(logins) != 0 {for _, login := range logins {alarmStr := fmt.Sprintf("时间: %s\n告警标题:超过30天未登录\n业务IP:%v\n序列号:%v\n上次登录时间:%v\n,距今间隔:%v",time.Now().Format("2006-01-02 15:04:05"), login.BusinessIp, login.SN, login.StartTime, login.Interval)err := notify.SendDingCh(openUrl, alarmStr)if err != nil {ctx.JSON("Describe LoginInfo", 101, err)return}}}}}ctx.JSON(fmt.Sprintf("ALL Alert Info Already send"), 0, nil)
}

1.4、结果验证

2、数据安全加密

2.1、Token鉴权

  • 根据web访问来源平台,分配不同Token进行鉴权识别,不同Token标识不同平台,权限不同,如web链接访问无删除权限

2.2、权限分级及加密存储

  • 平台账户分级,不同权限可访问界面不同
  • 账户密码加密存储

3、远程登录

3.1、Ansible实现

  • 安装
## 安装Ansibleyum install -y ansibleyum install -y sshpass### 修改配置,忽略告警vim /etc/ansible/ansible.cfg[defaults]host_key_checking = False # 第一次远程ssh主机需要将机器指纹添加到known_hosts,此设置忽略该步骤command_warnings=False  #忽略ansible执行命令的告警信息deprecation_warnings=False### 增加test用户组vim /etc/ansible/hosts[test]127.0.0.1 ansible_ssh_user=root ansible_ssh_port=22 ansible_ssh_pass=xxx### 执行命令,验证功能ansible test -m shell -a 'lspci'## 批量机器登录 + 执行shell命令
1. ip列表写入ip_list.ini
2. 执行脚本sh auto_ssh.sh $Password
  • auto_ssh.sh
#!/bin/bashif [ -s ./result.ini ] ; then> result.ini
fiPassword=$1
sed -i '/ansible_ssh/d' /etc/ansible/hosts# 添加机器信息
for Ip in $(cat ip_list.ini)doUsername="root"echo -e "$Ip ansible_ssh_user=$Username ansible_ssh_port=22 ansible_ssh_pass=$Password" >> /etc/ansible/hostsdone# [test]用户组 执行命令
ansible test -m shell -a 'lspci' > result.ini
echo "All Hosts Ansible Done , please check result.ini ! ! !"

3.2、Expect实现

  • 安装
## 安装expectyum install -y expect## 单台机器登录sh login.sh $Ip $Pwd## 单台机器登录 + 执行shell命令
1. 执行命令写入execute_cmd.ini
2. 执行脚本sh cmd_login.sh $Ip $Pwd## 批量机器登录 + 执行shell命令
1. ip列表加入ip_list.ini
2. 执行命令写入execute_cmd.ini
3. 执行脚本
sh list_cmd_login.sh $Pwd
  • auto_ssh.sh
#!/usr/bin/expectset user "root"
set host [lindex $argv 0]
set port "22"
set password [lindex $argv 1]spawn ssh -p$port $user@$host
expect {"*yes/no" { send "yes\r"; exp_continue }"*assword:" { send "${password}\r" }}
interact

End

  • 欢迎关注,感谢支持!

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

幻兽帕鲁PalWorld服务器搭建详细教程

幻兽帕鲁PalWorld是一款由Pocketpair开发的游戏,融合了多种玩法,其独特的题材和画风吸引了很多玩家。为了更好地进行游戏体验,很多玩家选择自行搭建服务器。本文将详细介绍如何搭建幻兽帕鲁PalWorld服务器。 第一步:购买服务器 根…

瓦片地图编辑器——实现卡马克卷轴的编辑,键盘控制游戏移动和鼠标点击游戏编辑通过同一个视口实现。

左边是游戏地图编辑区,右边是地图缓冲区,解决了地图缓冲区拖动bug,成功使得缓冲区可以更新。 AWSD进行移动 鼠标左右键分别是绘制/拖动 按F1健导出为mapv3.txt F2清空数组 打印的是游戏数组 easyx开发devcpp 5.11 easyx20220922版本 #…

【日志框架】

日志打印 建议用{}占位而不是字符串拼接打日志前先判断日志级别是否可用: 先根据等级过滤规则再决定写不写;先往一个管道写了内容,但再经等级过滤丢弃,徒增开销。 日志框架 Slf4J Slf4J 不是底层日志框架,只是门面…

搭建《幻兽帕鲁》服务器需要怎样配置的云服务器?

随着《幻兽帕鲁》这款游戏的日益流行,越来越多的玩家希望能够在自己的服务器上体验这款游戏。然而,搭建一个稳定、高效的游戏服务器需要仔细的规划和配置。本文将分享搭建《幻兽帕鲁》服务器所需的配置及搭建步骤,助力大家获得更加畅快的游戏…

深入理解MySQL InnoDB线程模型

当我们谈论数据库性能时,存储引擎的线程模型是一个不可忽视的方面。MySQL的InnoDB存储引擎,作为目前最受欢迎的存储引擎之一,其线程模型的设计对于实现高并发、高性能的数据操作至关重要。在本文中,我们将深入探讨MySQL InnoDB线程…

CPMS靶场练习

关键:找到文件上传点,分析对方验证的手段 首先查看前端发现没有任何上传的位置,找到网站的后台,通过弱口令admin 123456可以进入 通过查看网站内容发现只有文章列表可以进行文件上传;有两个图片上传点 图片验证很严格…

Dubbo 3.x源码(16)—Dubbo服务发布导出源码(5)

基于Dubbo 3.1,详细介绍了Dubbo服务的发布与引用的源码。 此前我们学习了Dubbo 3.x源码(15)—Dubbo服务发布导出源码(4),也就是Dubbo远程服务导出export方法的上半部分,也就是doLocalExport源码,将会得到一个Exporter。 现在我们…

C#使用IsLeapYear方法判断指定年份是否为闰年

目录 一、判断指定年是否为闰年的2个方法 1.使用IsLeapYear方法判断指定年份是否为闰年 2.使用自定义的算法计算指定年份是否为闰年 二、示例 1.方法1的实例 2.方法2的实例 一、判断指定年是否为闰年的2个方法 1.使用IsLeapYear方法判断指定年份是否为闰年 使用IsLeapY…

《Linux高性能服务器编程》笔记06

Linux高性能服务器编程 本文是读书笔记,如有侵权,请联系删除。 参考 Linux高性能服务器编程源码: https://github.com/raichen/LinuxServerCodes 豆瓣: Linux高性能服务器编程 文章目录 Linux高性能服务器编程第13章 多进程编程13.1 fork 系统调用13…

Spring Boot 整合 Camunda 实现工作流

工作流是我们开发企业应用几乎必备的一项功能,工作流引擎发展至今已经有非常多的产品。最近正好在接触Camunda,所以来做个简单的入门整合介绍。如果您也刚好在调研或者刚开始计划接入,希望本文对您有所帮助。如果您是一名Java开发或Spring框架…

使用强化学习进行神经网络结构搜索的代码以及修改

目录 代码一(Using TensorFlow): 代码二(Using TensorFlow): 代码三(Using PyTorch): 参考: 本人在网上找了三个相关的代码,但是都有问题&…

Web--HTML基础

文章目录 安装环境HTMLhtml框架html基础标签语义标签html特殊符号 安装环境 安装vscode后 安装插件 可以先不写后台直接将前度界面展示出来 自动补全tag,同时修改tag时自动改另一半 在设置里将保存自动格式化的选项勾上 创建一个index.htm文件,这个…