拿来就用的脚本案例(三)

2023-05-16

大家好,我是杰哥(鸽)。

之前给大家分享了《7 个非常实用的 Shell 拿来就用脚本实例!》和《超硬核!11 个非常实用的 Python 和 Shell 拿来就用脚本实例!》两篇文章。

得到了多位读者朋友的留言说:简直太实用了。

最近工作中,又碰到了几个实际场景并运用了脚本,大致包括:Zabbix 自动发现监控 URL、阿里云短信接口、每周删除 Elasticsearch X 个月前的索引,具体如下:

一、Zabbix自动发现监控URL

此脚本用于监控 URL,自动发现文件或其他存储的 URL。

1.1 URL自动发现脚本

from os.path import abspath, dirname, join
import json
import sys


reload(sys)
sys.setdefaultencoding('utf-8')

# URL存储文件
# 每一行格式为(可写多行):应用名称 URL地址 注释
URL_FILE_PATH = join(dirname(abspath(__file__)), 'web_url_list')

# 输出结果,zabbix官方定义的格式
data = {'data': []}

with open(URL_FILE_PATH, 'r') as read_f:
    # 读取URL文件,并进行分割,组成官网定义数据
    for line in read_f:
        if line:
           name = line.split()[0]
           url = line.split()[1]
           description = line.split()[2]
           data['data'].append({"{#NAME}": name, "{#URL}": url, "{#DESCRIPTION}": description})

print json.dumps(data)

1.2 URL测试脚本

from sys import argv
import requests

# 获取URL状态
def get_url(url, timeout=5):
    # 多数情况下返回200即为访问成功,提前测试好自己的URL访问返回状态码
    try:
        request_obj = requests.get(url, timeout=timeout)
        status_code = request_obj.status_code
    except Exception as e:
        status_code = 99999

    print(status_code)


url = argv[1]
get_url(url)

1.3 zabbix 配置自定义 key

UserParameter=discovery_web_url, /bin/python /opt/zabbix_scripts/web_url/url_discovery.py 
UserParameter=url_get[*], /bin/python /opt/zabbix_scripts/web_url/url_get_status.py $1

1.4 zabbix WEB 端配置

  • 配置自动发现

在这里插入图片描述

  • 添加监控项、触发器原型

在这里插入图片描述
在这里插入图片描述

二、阿里云短信接口

根据官网样例配置短信发送

2.1 阿里云配置

  • 签名配置:控制台-短信服务-国内消息-签名配置

在这里插入图片描述

  • 模板配置:控制台-短信服务-国内消息-模板配置

在这里插入图片描述

自己定义好变量,如果告警信息过长(默认是35个字符),提交工单解除限制。

  • AccessKey配置:头像-AccessKey管理

在这里插入图片描述

2.2 发送脚本

#coding=utf-8

   from aliyunsdkcore.client import AcsClient
   from aliyunsdkcore.request import CommonRequest
   from sys import argv


   LOG_FILE_PATH = '/tmp/zabbix-sms.log'


   def sendSms(phone_numbers, subject, alert_message):
       # AccessKet
       client = AcsClient('AccessKey ID', 'Secret')
       alert_message = subject + alert_message

       # 官方定义的格式,具体含义没有研究
       request = CommonRequest()
       request.set_accept_format('json')
       request.set_domain('dysmsapi.aliyuncs.com')
       request.set_method('POST')
       request.set_protocol_type('https') # https | http
       request.set_version('2017-05-25')
       request.set_action_name('SendSms')

       request.add_query_param('PhoneNumbers', phone_numbers)
       # 签名名称
       request.add_query_param('SignName', "XXXX")
       # 模板code
       request.add_query_param('TemplateCode', "XXXX")
       # 传递的参数
       request.add_query_param('TemplateParam', "{\"alert_message\":\"%s\"}" % alert_message)

       response = client.do_action(request)
       return response

   def writeLog(message, response, log_file_path):
       with open(log_file_path, 'a') as a_file:
           a_file.write(message + ' | ' + response)

   if __name__ == '__main__':
       phone_numbers = argv[1]
       subject = argv[2]
       alert_message = argv[3]
       # 手机号、主题、告警信息
       # 由zabbix端传递过来的
       res = sendSms('130XXXXXXXX', subject, alert_message)
       writeLog(subject + alert_message, res, LOG_FILE_PATH)

2.3 zabbix WEB 端配置

  • 报警媒介

在这里插入图片描述

  • 用户配置报警媒介

在这里插入图片描述

  • 动作中应用即可

三、每周删除Elasticsearch X个月前的索引

索引格式示例:index-2021.11.21

#!/bin/bash
# Filename   :  delete_es_indices.sh
# Date       :  2021/11/21
# Author     :  xxx 
# Email      :  xxx
# Crontab    :  10 00 * * 6 /bin/bash $BASE_PATH/delete_es_indices.sh >/dev/null 2>&1
# Notes      :  将脚本加入crontab中,每周六0点10分执行
# Description:  每周删除Elasticsearch X个月前的索引,索引格式示例:index-2021.04.11


check_args(){
    if [ "$#" -ne 2 ];then
        echo "Usage: $0 [ES_URL] [DEL DAYS]"
        echo "ES_URL示例:http://1.1.1.1:9200,DEL DAYS:表示要删除多少天前的索引。"
        exit 1
    fi
}


# 删除索引函数
DeleteIndices(){
    indices="$1"
    time="$(echo $indices | awk -F'-' '{print $NF}')"
    delete_time="$(date -d "-${DELETE_DAYS_AGO} day" +'%Y-%m-%d')"

    # 过滤时间是不是 2021.04.11 格式的,如果不是就退出函数
    if ! echo "$time" | egrep -o "[0-9]{4}\.[0-9]{2}\.[0-9]{2}" &>/dev/null;then
        return   
    fi

    # 转换为unix好时间,date识别不了2021.11.21日志,所以转换为2021-11-21
    format_time=$(date -d "$(echo $time | tr '.' '-')" +'%s')
    format_delete_time=$(date -d "$delete_time" +'%s')

    # 如果索引时间小于要删除的时间并且索引名字不是monitor开头的,则删除
    if [[ "$format_time" -lt "$format_delete_time" && ! "$indices" =~ ^monitor.* ]];then
        curl -XDELETE "$ES_IP/$indices"
    fi
}

main(){
    check_args $@
    # ES URL
    ES_IP="$1"
    # 删除多少天前的索引
    DELETE_DAYS_AGO="$2"

    curl $ES_IP/_cat/indices | awk '{print $3}' | while read line
    do
        DeleteIndices $line
    done
}

main $@

以上,就是今天分享的全部内容了。

希望大家通过这些案例能够学以致用,结合自身的实际场景进行运用,从而提高自己的工作效率。

如果你有更多脚本实例,也欢迎大家留言分享或通过本文进行留言说说你具体的脚本实例需求,如果实例过多的话,下次杰哥在整一篇合集脚本文章实例来跟大家分享。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

拿来就用的脚本案例(三) 的相关文章

  • Entity Framework 学习总结之一:ADO.NET 实体框架概述

    ADO NET 实体框架概述 新版本中的 ADO NET 以新实体框架为特色 它使开发人员可以通过对象模型 xff08 而不是逻辑 关系数据模型 xff09 专注于数据 实体框架有助于将逻辑数据架构抽象为概念模型 xff0c 并且允许以多种
  • Entity Framework 学习总结之四:对象服务介绍使用

    System Data Objects System Data Entity dll 该命名空间包含一些类 xff0c 用于提供对 对象服务 的核心功能的访问 这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询 插入 更新和删除
  • Entity Framework 学习总结之四:对象服务介绍使用

    System Data Objects System Data Entity dll 该命名空间包含一些类 xff0c 用于提供对对象服务的核心功能的访问 这些类使您可以藉由作为实体类型实例的强类型 CLR 对象来查询 插入 更新和删除数据
  • 未执行的URL(MVC异常)

    昨天开始就碰到在IIS里面通过URL无法直接访问到图片 xff0c 提示错误 xff0c 所以经过研究发现 xff0c 合理的配置节应该如下 先改成集成模式 xff0c 然后再改成经典模式 lt system webServer gt lt
  • PIX学习路径-1-选择PIXHAWK作为飞控学习的起点

    xff08 先声明出处 xff1a http blog csdn net qq 21842557 article details 52214425 xff09 创业领域现在最火爆的是什么 xff1f 无疑是机器人和无人机 越来越多的巨头和V
  • PIX学习路径-3-PIXHAWK二次开发之前需要知道的事

    现在作为一个consumer xff0c 能够实现将飞机装配 xff0c 使用MP进行固件烧录 xff0c 初始化校准 xff0c 然后还能够调节PID xff0c 这样算是一个合格的consumer了 xff0c 现在希望对PIXHAWK
  • Java面试题全集(上)

    2013年年底的时候 xff0c 我看到了网上流传的一个叫做 Java面试题大全 的东西 xff0c 认真的阅读了以后发现里面的很多题目是重复且没有价值的题目 xff0c 还有不少的参考答案也是错误的 xff0c 于是我花了半个月时间对这个
  • Netty学习:Channel及其内部接口Unsafe

    连接到网络套接字或组件的一种连接 xff0c 它能够进行I O操作 xff0c 如读 写 连接和绑定 通道为用户提供 通道的当前状态 例如是否打开 它是连接吗 通道的 64 linkplain ChannelConfig配置参数 如接收缓冲
  • 拥抱开源

    使用linux ubuntu 已经一个月多了 xff0c 偶尔用windows是因为要改vb delphi net的程序 在linux下 xff0c 似乎多数软件都是开源的 xff0c 免费的 如今我算是终于义无反顾的走上了这条路了 jav
  • STM32 | C语言对寄存器的封装

    说明 xff1a 这里以GPIO外设为例 xff0c 介绍C语言对寄存器的封装 以此类推其他外设同样可以用这种方法来封装 本文有两部分构成 xff1a 1 介绍宏定义 2 使用结构体封装寄存器列表 1 宏定义 以封装STM32 GPIOH为
  • Intel CPU(i3、i5、i7、i9)型号、性能详细解读

    一 Intel CPU的性能比较 xff1a 它们分为高中低端 xff0c 最低端的G系列 xff0c 然后是低端i3系列 xff0c 中端i5系列 xff0c 高端i7系列和至尊i9系列 Intel CPU 末尾字母含义 xff08 M
  • 字符串搜索函数

    一 字符串中找字符 char strchr const char s int c 表示从左边 开始找这个字符第一次出现的位置 char strrchar const char s int c 表示 从右边 开始找这个字符第一次出现的位置 注
  • 4. Service

    4 Service k8s 中的Pod是朝生夕死的 xff0c 并且是不会重生的 xff0c 尤其是在ReplicaSets中动态创建或销毁Pod 然而每个Pod可以获取自己的IP地址 xff0c 即使这些IP地址是不稳定的 xff08 重
  • STM32 Free RTOS实战

    FreeRTOS是一个开源的实时操作系统 使用的平台 xff1a 秉火STM32 Cortex M3内核开发板 xff0c Free RTOS v8 2 3 多任务流水灯 span class token builtin class nam
  • 参考 | 升级 Win11 移动热点开不了或者开了连不上

    讲道理 就很离谱 一开始我升级了 Win11 后 突然发现 移动热点 开不了了 就是那种 开了之后 手机 ipad 能检测到电脑移动热点的信号 但是会出现这两种情况 死活连不上连上了 在移动端显示 无互联网连接 解决办法 打开 移动热点 打
  • 在 Linux 上安装和使用恶意软件检测工具 LMD

    在 Linux 上安装和使用恶意软件检测工具 LMD xff0c 是个相当简单的过程 xff0c 1 下载资源 wget http www rfxn com downloads maldetect current tar gz 2 解压缩资
  • Docker 使用Dockerfile创建镜像

    基本结构 Dockerfle 由 一行行命令语句组成 xff0c 并且支持以 xff03 开头的注释行 一般而言 xff0c Dockerfle 主体内容分为四部分 xff1a 基础镜像信息 维护者信息 镜像操作指令和容器启动时执行指令 e
  • 为啥我的APP功能引导设计这么low?如何做好功能引导设计?

    功能引导设计历史版本 Level1 APP第一次打开的浏览页 展示主要功能及简单使用方式 xff1b Level2 引导流程页 使用 xff1f 方式在界面右上角 xff0c 点击后展示使用流程详情 xff1b Level3 蒙层 可以有上
  • 【Xshell无法连接虚拟机问题】xshell无法连接虚拟机Ubuntu系统问题

    问题描述 xff1a 电脑新安装虚拟机 xff0c 并且安装Ubuntu系统 xff0c 通过Xshell工具无法连问题 原因是新linux系统未安装 ssh 服务导致 xff0c Xshell连接是依赖 ssh 服务实现的 下面让我们解决

随机推荐

  • [linux下]理解Semaphore及其用法详解

    2009 05 12 13 13 Mutex 是一把钥匙 xff0c 一个人拿了就可进入一个房间 xff0c 出来的时候把钥匙交给队列的第一个 一般的用法是用于串行化对critical section代码的访问 xff0c 保证这段代码不会
  • JavaScript 数据结构——栈

    概念 栈是一种线性结构 xff0c 最大的特点就是先进后出 xff0c 后进先出 入栈push xff1a 出栈pop xff1a 实现 JavaScript中可以用数组表示栈 xff1a span class token keyword
  • Python matplotlib 以pdf形式保存图片

    import matplotlib pyplot as plt from matplotlib backends backend pdf import PdfPages short version plt plot range 10 plt
  • 基于数据报(UDP)编程的接口总结

    文章目录 Udp编程接口socket 创建套接字bind 将套接字绑定到指定的网络地址本机字节序和网络字节序 recvfrom 接收一个数据报并保存源地址 从数据报套接字接收数据调用格式函数功能 sendto 按照指定目的地向数据报套接字发
  • Android-自定义View集合

    学习安卓几个月了 xff0c 也有点自己的体会 xff0c 然而我发现自己真正喜欢的是数据方面的东西 xff0c 当然android自定义view也很好玩 xff0c 很体验一些技巧性的东西 也不想自己以前学习过程总结的东西就此淹没 xff
  • Nginx同一端口部署多个vue项目

    场景 大家在部署项目的时候会遇到 xff0c 只申请了一个公网端口 xff0c 但是需要将多个前端vue项目部署到同一域名同一端口下 xff0c 下面记录一下vue打包时如何配置以及nginx如何配置 我们这个项目有多个vue工程 xff0
  • 树莓派3B安装Ubuntu Mate18.04版

    树莓派3B为什么要装Ubuntu Mate版本 xff0c 因为轻量化 xff0c 就这么简单 1 相关器材 树莓派 xff1a Raspberry PI 3 Model B 树莓派3 microSD卡 闪迪16GB存储卡 HDMI线 读卡
  • 谷歌浏览器提示您的连接不是私密连接的解决方法

    谷歌浏览器是一款非常好用的网络浏览器 xff0c 但是最近有用户反应 xff0c 使用谷歌浏览器时出现提示 xff1a 您的连接不是私密连接 xff0c 这是怎么回事呢 xff1f 接下来就为大家分享使用谷歌浏览器过程中提示您的连接不是私密
  • ElasticSearch7索引管理--别名(基于kibana)

    ElasticSearch可以对一个或者多个索引指定别名 xff0c 通过别名可以查询到一个或者多个索引的内容 在内部ElasticSearch会自动把别名映射到相应的索引上 可以对别名编写过滤器或者路由 xff0c 在系统中别名不能重复
  • matlab粒子群优化算法路径规划代码解读

    前言 粒子群算法是一种群智能优化算法 xff0c 该算法具有原理简单 易实现 控制参数较少等优点 xff0c 下面根据Yarpiz公司的matlab代码就其在路径规划中的应用进行简单的介绍 xff0c 以供读者更好的理解粒子群优化算法的实际
  • (转载)OpenWrt下把SD卡挂载到 /overlay ,扩大软件空间

    在wall内外搜索无数文章 xff0c 唯有这篇文章能够看得懂并奏效 xff0c 感谢作者 原文地址 xff1a https blog samnya cn mount sd card to overlay on openwrt 作者 xff
  • XTW100高速编程器WIN10驱动安装

    按照以下方法可以实现XTW100在WIN10系统下的驱动安装 xff0c 且不需禁用驱动强制签名 先去这个网站 xff1a https zadig akeo ie 下载这个软件件 xff1a zadig 2 5 exe 由于你懂的原因 xf
  • ffmpeg-python库的使用翻译(一)

    原文地址 xff1a https github com kkroening ffmpeg python xff0c 本文为google翻译 43 部分人工翻译 希望能对大家有用 ffmpeg python xff1a FFmpeg的Pyth
  • ffmpeg-python库的使用翻译(二)

    接上篇 ffmpeg python库的使用翻译 xff08 一 xff09 原文 xff1a https github com kkroening ffmpeg python tree master examples assemble vi
  • ffmpeg-python库的使用翻译(三)

    接上篇 ffmpeg python库的使用翻译 xff08 二 xff09 原文地址 xff1a https github com kkroening ffmpeg python blob master ffmpeg filters py
  • C语言中,利用宏定义一个字符串和字符数组定义的字符串其末尾都会自动添加\0字符

    C语言中 xff0c 利用宏定义一个字符串 define MYPHONE 34 AT 43 CMGS 34 字符数组的方式来定义一个字符串unsigned char SMS 61 34 HELLO WELCOME TO RCCTS 34 问
  • 串口卡住问题分析与解决

    对于消息类系统而言任何阻塞都会导致整个系统的消息被卡住造成系统假死的问题 今天来说说串口导致系统卡死的问题 1 问题说明 xff1a 路由器在挂机过程中 xff0c 偶现串口卡住 xff0c web页面进不去 xff0c 有限终端拿不到地址
  • HTTPS 协议到底比 HTTP 协议多些什么?

    来源 xff1a 公众号 杰哥的IT之旅 作者 xff1a 阿拉斯加 ID xff1a Jake Internet 原文地址 xff1a HTTPS 协议到底比 HTTP 协议多些什么 xff1f 大家好 xff0c 我是杰哥 最近卷了一篇
  • Python爬虫实战 | 利用多线程爬取 LOL 高清壁纸

    来源 xff1a 公众号 杰哥的IT之旅 作者 xff1a 阿拉斯加 ID xff1a Jake Internet 如需获取本文完整代码及 LOL 壁纸 xff0c 请为本文右下角点赞并添加杰哥微信 xff1a Hc220088 获取 一
  • 拿来就用的脚本案例(三)

    大家好 xff0c 我是杰哥 xff08 鸽 xff09 之前给大家分享了 7 个非常实用的 Shell 拿来就用脚本实例 xff01 和 超硬核 xff01 11 个非常实用的 Python 和 Shell 拿来就用脚本实例 xff01