忘记密码   免费注册 查看新帖 |

ChinaUnix.net

  平台 论坛 博客 文库 频道自动化运维 虚拟化 储存备份 C/C++ PHP MySQL 嵌入式 Linux系统
最近访问板块 发新帖
查看: 1406 | 回复: 3

[系统管理] shell调用python脚本出现的问题 [复制链接]

论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2017-12-22 11:09 |显示全部楼层
本帖最后由 274920831 于 2017-12-22 11:11 编辑

环境:
将亚马迅云上的cloudwatch的监控信息传给zabbix Server,使用网络上的这个插件:
https://github.com/omni-lchen/zabbix-cloudwatch

当我按照上面的步骤把配置文件弄好后,使用插件中的这个脚本zabbixCloudWatch.py,即可将cloudwatch的数据发送到zabbix server.
下面是这个执行这个脚本所需要带的options:

[root@redhat cloudwatch]# /usr/bin/python zabbixCloudWatch.py --help
Usage: zabbixCloudWatch.py [options]

Options:
  --version             show program's version number and exit
  -h, --help            show this help message and exit
  -z ZABBIX, --zabbix=ZABBIX
                        zabbix server name
  -x HOST, --host=HOST  zabbix host name
  -a ACCOUNT, --account=ACCOUNT
                        account name
  -r REGION, --region=REGION
                        aws region
  -s SERVICE, --service=SERVICE
                        aws service (ELB, SQS, DynamoDB, etc...)
  -d DIMENSIONS, --dimensions=DIMENSIONS
                        Dimensions split with comma (LoadBalancerName=,
                        etc...)
  -p PERIOD, --period=PERIOD
                        Period
  -f STARTTIME, --starttime=STARTTIME
                        Start Time
  -t ENDTIME, --endtime=ENDTIME
                        End Time

我先来解释一下:
-z 是zabbix server
-x  是被监控的服务器
-a 是在AWS云上建的一个帐户,赋予它一定的权限
-r 是指的云服务器所在的地理区域,像中国北京,就是cn-north-1
-s  是指的AWS上的服务,像EC2,RDS,ELB之类的
-d  是指的维度,AWS上的每个服务都有自己特定的维度
-p  是指的时间区域
-f   从什么时间
-t   到什么时间

当我直接执行下面的py脚本时,数据会把AWS云上的EC2主机的cloudwatch信息发送到zabbix server :

[root@redhat cloudwatch]# /usr/bin/python zabbixCloudWatch.py -x "54.212.211.137" -z "superman-zabbix.man-webplatform.com" -a "CloudWatch-test" -r "cn-north-1" -s "EC2" -d "InstanceId=i-0d3138e5be40eft01" -p "300" -f "2017-12-22 01:40:00" -t "2017-12-22 01:45:00"

如图1所示,是有数据的图

而当我使用shell脚本 AWSINSTANCE.sh 来调用这个python脚本时,shell脚本的内容如下所示:
#!/bin/bash

# Date:   08/08/2015
# Author: Long Chen
# Description: A script to bulk send RDS cloudwatch data to zabbix server

PATH=$PATH:/opt/zabbix/cloudwatch
export PATH

# EC2 instance indentifier
ID=$1
echo "$ID"
# Zabbix Host
ZABBIX_HOST=$2
echo "$ZABBIX_HOST"
# Zabbix Server
ZABBIX_SERVER=$3
echo "$ZABBIX_SERVER"
# AWS Account
ACCOUNT=$4
echo "$ACCOUNT"
# AWS Region
REGION=$5
echo "$REGION"
# Collecting 5-minute data from cloudwatch
PERIOD="300"
# Set start time and end time for collecting cloudwatch data
ENDTIME=$(date -u "+%F %H:%M:00")
STARTTIME=$(date -u "+%F %H:%M:00" -d "5 minutes ago")

# Send cloudwatch data of a table to Zabbix Server

/usr/bin/python /opt/zabbix/cloudwatch/zabbixCloudWatch.py -z "$ZABBIX_SERVER" -x "$ZABBIX_HOST" -a "$ACCOUNT" -r "$REGION" -s "EC2" -d "InstanceId=$ID" -p "$PERIOD" -f "$STARTTIME" -t "$ENDTIME


当我执行AWSINSTANCE.sh脚本带上这些参数时:
[root@redhat cron.d]# ./AWSINSTANCE.sh "i-0d3138e5be40eft01" "54.212.211.137" "superman-zabbix.man-webplatform.com" "CloudWatch-test" "cn-north-1"  &>/dev/null

我对上面这个命令执行了20次,有16次是cloudwatch的信息无法传到zabbix-server,有4次是cloudwatch的信息传到zabbix-server。

我想问一下,是上面shell脚本有误吗?

上面的脚本实际上起到的作用就是把这个脚本后面跟的这些参数传到python脚本里面去,如果有误的话,应该如何来修改?

有数据的图

有数据的图

论坛徽章:
0
发表于 2017-12-22 13:49 |显示全部楼层
本帖最后由 本友会机友会摄友会 于 2017-12-22 13:58 编辑

亚麻孙云  

aws有官方的,powershell模块,应该比第三方的好些吧?手册在:
http://docs.aws.amazon.com/powershell/latest/reference/Index.html

左面有三个大类:
##Amazon CloudWatch
##Amazon CloudWatch Events
##Amazon CloudWatch Logs
里面有若干个命令。

另外,请问,你用的那些,python模块,不支持管道吧?如果通过shell支持管道,就把py面向对象的好处废弃了。

ps就不同了,管道两边可以传对象,本地远程可以传对象。

师太,投入老衲powershell的怀抱把。

--------------------------------------------------------------------------------------------------
安装方法:个人觉得目前【win+aws模块】 更稳定,更完善。
win(尽量用win10):
install-module  AWSPowerShell

linux:
1在linux下安装powershell:
问:目前哪些版本linux能安装上powershell?
答:
◦Windows 10 IoT Core(arm32的cpu,本质上是win,树莓派硬件上的win10)
◦Raspbian Stretch(arm32的cpu,树莓派官方操作系统Raspbian,基于大便,所以叫树莓便。)
◦MAC OS X 10.11
◦Ubuntu 14.04/16.04/17.04
◦Debian8.x/9.x
◦CentOS 7.x/RHEL 7.x/Fedora 25/Fedora 26
◦open SUSE 42及以上/SUSE Linux Enterprise Server 12 SP2
◦Docker。LINUX发行版中,安装容器dockerd,docker中运行powershell。
◦Arch Linux (archl inux 没有版本号)
◦Linux AppImage 容器(portable application single binary)  https://github.com/probonopd/AppImageKit

安装方法:
https://github.com/PowerShell/PowerShell/blob/master/docs/installation/linux.md

2install-module AWSPowerShell.NetCore


用法:
import-module    awspowershell.netcore
set-awscredentials -profilename xxxx
Set-defaultawsregion us-est-1


论坛徽章:
33
荣誉会员
日期:2011-11-23 16:44:17天秤座
日期:2014-08-26 16:18:20天秤座
日期:2014-08-29 10:12:18丑牛
日期:2014-08-29 16:06:45丑牛
日期:2014-09-03 10:28:58射手座
日期:2014-09-03 16:01:17寅虎
日期:2014-09-11 14:24:21天蝎座
日期:2014-09-17 08:33:55IT运维版块每日发帖之星
日期:2016-04-17 06:23:27操作系统版块每日发帖之星
日期:2016-04-18 06:20:00IT运维版块每日发帖之星
日期:2016-04-24 06:20:0015-16赛季CBA联赛之天津
日期:2016-05-06 12:46:59
发表于 2017-12-30 12:32 |显示全部楼层
回复 1# 274920831

只要有一次成功了,就说明脚本本身问题不大。

主要要查看一下脚本运行的环境和运行的情况。
比如是不是运行的过于频繁,或者运行时网络是不是通畅等等。

如果你不放心,可以把脚本每次执行的情况打一个日志,这样便于后面分析问题。


论坛徽章:
5
程序设计版块每日发帖之星
日期:2016-04-15 06:20:00每日论坛发贴之星
日期:2016-04-15 06:20:0015-16赛季CBA联赛之八一
日期:2016-07-08 09:20:28操作系统版块每日发帖之星
日期:2016-08-03 06:20:002016科比退役纪念章
日期:2016-10-30 13:59:12
发表于 2017-12-31 20:24 |显示全部楼层
回复 3# q1208c

谢谢啊,已经正常了
您需要登录后才可以回帖 登录 | 注册

本版积分规则

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号 北京市公安局海淀分局网监中心备案编号:11010802020122
广播电视节目制作经营许可证(京) 字第1234号 中国互联网协会会员  联系我们:wangnan@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP