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

之前给大家分享了《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 sysreload(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_codeexcept Exception as e:status_code = 99999print(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-8from aliyunsdkcore.client import AcsClientfrom aliyunsdkcore.request import CommonRequestfrom sys import argvLOG_FILE_PATH = '/tmp/zabbix-sms.log'def sendSms(phone_numbers, subject, alert_message):# AccessKetclient = 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 | httprequest.set_version('2017-05-25')request.set_action_name('SendSms')request.add_query_param('PhoneNumbers', phone_numbers)# 签名名称request.add_query_param('SignName', "XXXX")# 模板coderequest.add_query_param('TemplateCode', "XXXX")# 传递的参数request.add_query_param('TemplateParam', "{\"alert_message\":\"%s\"}" % alert_message)response = client.do_action(request)return responsedef 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.11check_args(){if [ "$#" -ne 2 ];thenecho "Usage: $0 [ES_URL] [DEL DAYS]"echo "ES_URL示例:http://1.1.1.1:9200,DEL DAYS:表示要删除多少天前的索引。"exit 1fi
}# 删除索引函数
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;thenreturn   fi# 转换为unix好时间,date识别不了2021.11.21日志,所以转换为2021-11-21format_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.* ]];thencurl -XDELETE "$ES_IP/$indices"fi
}main(){check_args $@# ES URLES_IP="$1"# 删除多少天前的索引DELETE_DAYS_AGO="$2"curl $ES_IP/_cat/indices | awk '{print $3}' | while read linedoDeleteIndices $linedone
}main $@

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

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

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

拿来就用的脚本案例(三)相关推荐

  1. Shell 脚本案例实战 [4]

    for循环结构 for 循环结构语句     1.for循环结构: 语法: for 变量名 in 变量取值列表 do 指令- done 提示:在此结构中"in 变量取值列表"可省略 ...

  2. 案例三:执行 JavaScript 语句

    案例三:执行 JavaScript 语句 隐藏百度图片 from selenium import webdriverdriver = webdriver.PhantomJS() driver.get( ...

  3. zabbix生产环境案例(三)

    生产环境案例(三) 链接:https://pan.baidu.com/s/1q5YwJMTcZLcS5OQ0iOu44A 提取码:8gdi 复制这段内容后打开百度网盘手机App,操作更方便哦 1. Z ...

  4. shell脚本案例30个带详细解析

    案例一:输入网卡的名字,来输出网卡的IP 1.问题: 1.)参数后判断要加"" 2.)名字为空时显示ip 2.分析: ) 把本机的所有网卡名列出来,来引导用户输入. ) 使用命令列 ...

  5. Shell编程之循环语句(详细讲解以及脚本案例)

    Shell编程之循环语句(详细讲解以及脚本案例) 文章目录 一.for语句的结构 (一).for语句应用实例 1.示例1--批量添加用户 2.示例2--使用根据IP地址检查主机状态 3.示例3--fo ...

  6. 2021年大数据Flink(三十六):​​​​​​​Table与SQL ​​​​​​案例三

    目录 案例三 需求 编码步骤 代码实现-方式1 代码实现-方式2 案例三 需求 使用Flink SQL来统计5秒内 每个用户的 订单总数.订单的最大金额.订单的最小金额 也就是每隔5秒统计最近5秒的每 ...

  7. 2021年大数据Flink(二十一):​​​​​​​案例三 会话窗口

    目录 案例三 会话窗口 需求 代码实现 案例三 会话窗口 需求 设置会话超时时间为10s,10s内没有数据到来,则触发上个窗口的计算 代码实现 package cn.it.window;import ...

  8. 通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本...

    通过脚本案例学习shell(五) 通过创建DNS脚本一步一步教你将一个普通脚本规范到一个生产环境脚本   版权声明: 本文遵循"署名非商业性使用相同方式共享 2.5 中国大陆"协议 ...

  9. 数据分析与挖掘 - R语言:贝叶斯分类算法(案例三)

    案例三比较简单,不需要自己写公式算法,使用了R自带的naiveBayes函数. 代码如下: > library(e1071)> classifier<-naiveBayes(iris ...

  10. C++多态案例三-电脑组装

    C++多态案例三-电脑组装 多态案例三-电脑组装 多态案例三-电脑组装 案例描述: 电脑主要组成部件为 CPU(用于计算),显卡(用于显示),内存条(用于存储) 将每个零件封装出抽象基类,并且提供不同 ...

最新文章

  1. 动手动脑课后实验性的问题
  2. 【 Verilog HDL 】避免出现锁存器的组合电路描述方式
  3. 用Java模拟multipart形式的Http Post请求
  4. mapper中 <include refid=“XXX“></include>标签 <sql id=“XXX“>标签
  5. Boost:无序的bimap双图的测试程序
  6. ubuntu16.04+anaconda3+python3.6安装OpenCV3
  7. 持续交付一:从开发到上线的环境
  8. python参数_python参数的介绍
  9. java 枚举 面试题_java 枚举(面试题)基本知识总结即简例
  10. 汉字与多字节编码的转换 - 回复 不知道 的问题
  11. 单片机课程设计--电子密码锁(源代码+proteus仿真)
  12. 【电脑一点通】如何新建和切换Windows桌面
  13. 10个优秀的图标搜索引擎
  14. OpenGL学习笔记——处理键盘输入
  15. Week3 Syntactic Parsing(句法分析)
  16. 零基础学Python———求一个字符串的每个字符重新组合排列python排列组合的数学运算(递归法)
  17. ffmpeg音视频处理
  18. 基于微信小程序的驾校报名管理系统
  19. 后缀数组+贪心+隔板法
  20. lg空调代码大全解决_lg空调故障代码是什么意思 lg空调故障代码大全【详解】...

热门文章

  1. 解密:智能化变电站中PTP时钟同步(北斗时钟服务器)
  2. 安装和使用所见即所得WYSIWYG的 Web 创作软件 BlueGriffon
  3. 几款主流好用的富文本编辑器(所见即所得常用编辑器)介绍
  4. RealMax携手乐视举办全球AR开发者大赛
  5. Beyond 预训练语言模型,NLP还需要什么样的知识?
  6. C#调用百度人体分析SDK进行人流量分析,计算图片的人数
  7. SpringCloud[01]Eureka服务注册与发现
  8. JVM之类的加载过程(三):初始化——>Initialization
  9. 德纳:Mecha《机甲变形》NFT元宇宙链游开发技术详情
  10. iOS7下status bar相关问题的解决方法