需求,例如需要监控公司网络然后进行告警。
1.通过命令行上报数据至阿里云
1 |
参考文档:https://help.aliyun.com/document_detail/170536.html?spm=a2c4g.11186623.6.630.73993402ZcoItF |
1.安装和配置阿里云命令行(CLI)工具
1 2 3 |
参考文档:https://help.aliyun.com/document_detail/121541.html?spm=a2c4g.11186623.2.11.4bd17767Z68DSf 记得给脚本添加x权限 |
2.配置CLI工具(需要AK和Secret)
1 2 3 4 5 6 7 8 9 10 11 |
官方文档: https://help.aliyun.com/document_detail/121198.html?spm=a2c4g.11186623.6.552.708a5d40WWYcUy 这里有很多种配置方式,我选择非交互式配置,类型选择AK 非交互式配置使用configure命令下的set子命令来配置凭证,其命令格式如下: 常见的通用选项如下,其适用于任一凭证类型。 --profile(必选):指定配置名称。如果指定的配置存在,则修改配置。若不存在,则创建配置。 --region(必选):指定默认区域的RegionId。阿里云支持的RegionId,请参见地域和可用区。 --language:指定阿里云CLI显示的语言,默认为英语。 --mode:指定配置的凭证类型,默认为AK。 |
1 2 3 4 5 6 7 8 9 10 11 12 |
配置AccessKey凭证 除必需选项外,AccessKey凭证类型还需要指定的凭证选项如下: --access-key-id:指定您的AccessKey ID。 --access-key-secret:指定您的AccessKey Secret。 如下示例命令,配置名为akProfile的AccessKey凭证。 aliyun configure set \ --profile akProfile \ --mode AK \ --region cn-hangzhou \ --access-key-id AccessKeyId \ --access-key-secret AccessKeySecret |
3.创建 应用告警分组,获取分组id(你的数据会发送到这个分组当中)
1 2 3 |
阿里云 ,云监控,创建组(选择标准组创建)(联系人和报警模版自行创建即可) 然后获取分组id |
3.编写脚本(脚本中调用CLI发送数据到阿里云)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
#!/bin/bash status_baidu=$(curl -Is -m 3 -o /dev/null -w "%{http_code}" "https://www.baidu.com/") status_google=$(curl -Is -m 3 -o /dev/null -w "%{http_code}" "https://www.google.com/") if [ "$status_baidu" -eq 200 ]; then # ping Baidu success # report monitoring data to aliyun sudo /usr/local/bin/aliyun cms PutCustomMetric \ --region cn-hangzhou \ --MetricList.1.GroupId 14590858 \ --MetricList.1.MetricName Shooter_WiFi_Status \ --MetricList.1.Dimensions '{"Baidu": "Normal"}' \ --MetricList.1.Type 0 \ --MetricList.1.Values '{"value": "1"}' echo "Baidu" fi if [ "$status_google" -eq 200 ]; then # ping Google success # report monitoring data to aliyun sudo /usr/local/bin/aliyun cms PutCustomMetric \ --region cn-hangzhou \ --MetricList.1.GroupId 14590858 \ --MetricList.1.MetricName Shooter_WiFi_Status \ --MetricList.1.Dimensions '{"Google": "Normal"}' \ --MetricList.1.Type 0 \ --MetricList.1.Values '{"value": "1"}' echo "Google" fi timestr=$(date "+%Y-%m-%d %H:%M:%S") echo "----------------------------------------${timestr}-----------------------------------------" |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
sudo /usr/local/bin/aliyun cms PutCustomMetric \ --region cn-hangzhou \ --MetricList.1.GroupId 14590858 \ --MetricList.1.MetricName Shooter_WiFi_Status \ --MetricList.1.Dimensions '{"Google": "Normal"}' \ --MetricList.1.Type 0 \ --MetricList.1.Values '{"value": "1"}' 参数解析: 以下参数N的取值范围:1~21 (必选)MetricList.N.Dimensions : 参数格式:key-value键值对形式的集合,key-value集合为:{"Key":"Value"}。Key和Value的长度为1~64个字符,超过64个字符时截取前64个。 (必选)MetricList.N.GroupId :应用分组ID。对应aliyun云监控应用分组的分组id (必选)MetricList.N.MetricName :监控项名称。 (必选)MetricList.N.Type : 0:原始数据。 1:聚合数据。 (必选)MetricList.N.Values:指标值集合,上报给阿里云的结果 |
注意:注意你的DNS,否则可能会因为网络问题无法上报给阿里云报错
1 2 3 4 5 |
# Generated by NetworkManager nameserver 223.6.6.6 nameserver 8.8.8.8 nameserver 114.114.114.114 nameserver 223.5.5.5 |
4. 部署脚本,定时任务
1 2 3 4 |
crontab -e 注意:vim /etc/crontab是针对整个系统的,所以第6列是用户名,root# crontab -e是root用户的,所以第6列就直接是命令了。 |
1 2 3 4 5 6 |
* * * * * /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 * * * * * sleep 10; /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 * * * * * sleep 20; /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 * * * * * sleep 30; /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 * * * * * sleep 40; /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 * * * * * sleep 50; /opt/script/wifi.sh >> /opt/script/logs/log.txt 2>&1 |
6. 添加图标来展示
1 2 |
Dashboard 创建大盘,添加图表 |
最终展示:
6. 设置aliyun自定义监控
然后就可以报警了
http请求上报模式:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 |
#!/usr/bin/env python #coding=utf-8 #pip install aliyun-python-sdk-core #pip install aliyun-python-sdk-cms from datetime import datetime from aliyunsdkcore.client import AcsClient from aliyunsdkcore.acs_exception.exceptions import ClientException from aliyunsdkcore.acs_exception.exceptions import ServerException from aliyunsdkcms.request.v20190101.PutCustomMetricRequest import PutCustomMetricRequest from io import BytesIO import json import pycurl import logging logger = logging.getLogger("mylog") logger.setLevel(level=logging.DEBUG) handler = logging.FileHandler("log.txt") handler.setLevel(logging.INFO) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') handler.setFormatter(formatter) console = logging.StreamHandler() console.setLevel(logging.WARNING) logger.addHandler(handler) logger.addHandler(console) def get_ping_result(ip_address): curl = pycurl.Curl() buff = BytesIO() curl.setopt(pycurl.URL, ip_address) curl.setopt(pycurl.WRITEFUNCTION, buff.write) curl.perform() http_code=curl.getinfo(pycurl.HTTP_CODE) return http_code def aliyun(dimensions): client = AcsClient('<accessKeyId>', '<accessSecret>', 'cn-hangzhou') request = PutCustomMetricRequest() request.set_accept_format('json') GMT_FORMAT = '%a, %d %b %Y %H:%M:%S GMT' strTime = datetime.now().strftime(GMT_FORMAT) request.set_MetricLists([ { "GroupId": "109450394", "MetricName": "Shooter_WiFi_Status", "Dimensions": dimensions, "Time": strTime, "Type": "0", "Values": "{\"value\":1}" } ]) response = client.do_action_with_exception(request) logger.info('%s :: %s' % (dimensions,str(response, encoding='utf-8'))) #print(str(response, encoding='utf-8')) if __name__ == '__main__': ping_result_baidu = get_ping_result("www.baidu.com") ping_result_google = get_ping_result('www.google.com') dimensions_baidu={"Baidu":"Normal"} dimensions_google = {"Google": "Normal"} if ping_result_baidu == 200: aliyun(dimensions_baidu) if ping_result_google == 200: aliyun(dimensions_google) |
- 本文固定链接: https://www.yoyoask.com/?p=4836
- 转载请注明: shooter 于 SHOOTER 发表